From af2ba566e28a1ec9cbd67cfe52b9e99d650e8377 Mon Sep 17 00:00:00 2001 From: I-am-a-robot Date: Fri, 6 Jun 2025 02:05:01 +0000 Subject: [PATCH] apply new package odom_to_tf_ros2 --- files_in_srpm.txt | 2 + odom_to_tf_ros2.spec | 106 +++++++++++++++++++ odom_to_tf_ros2.src.rpm | Bin 0 -> 12476 bytes ros-humble-odom-to-tf-ros2_1.0.2.orig.tar.gz | Bin 0 -> 3767 bytes 4 files changed, 108 insertions(+) create mode 100644 files_in_srpm.txt create mode 100644 odom_to_tf_ros2.spec create mode 100644 odom_to_tf_ros2.src.rpm create mode 100644 ros-humble-odom-to-tf-ros2_1.0.2.orig.tar.gz diff --git a/files_in_srpm.txt b/files_in_srpm.txt new file mode 100644 index 0000000..621eeac --- /dev/null +++ b/files_in_srpm.txt @@ -0,0 +1,2 @@ +odom-to-tf-ros2.spec +ros-humble-odom-to-tf-ros2_1.0.2.orig.tar.gz diff --git a/odom_to_tf_ros2.spec b/odom_to_tf_ros2.spec new file mode 100644 index 0000000..07f25a1 --- /dev/null +++ b/odom_to_tf_ros2.spec @@ -0,0 +1,106 @@ +%bcond_without tests +%bcond_without weak_deps + +%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') +%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$ +%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$ + +%define RosPkgName odom-to-tf-ros2 +%define ros_distro humble +%define with_tests 0 + +Name: ros-%{ros_distro}-%{RosPkgName} +Version: 1.0.2 +Release: 1%{?dist}%{?release_suffix} +Summary: A simple ros2 package (node) that reads an odom topic and generates the equivalent tf connection (transformation). It also provides options to override frame names, or just use the ones in the original odom topic. + +License: BSD +Source0: %{name}_%{version}.orig.tar.gz + +Requires: ros-%{ros_distro}-rclcpp +Requires: ros-%{ros_distro}-tf2-ros +Requires: ros-%{ros_distro}-nav-msgs + +BuildRequires: ros-%{ros_distro}-rclcpp +BuildRequires: ros-%{ros_distro}-tf2-ros +BuildRequires: ros-%{ros_distro}-nav-msgs +BuildRequires: ros-%{ros_distro}-ament-cmake + +%if 0%{?with_tests} +BuildRequires: ros-%{ros_distro}-ament-lint-auto +BuildRequires: ros-%{ros_distro}-ament-common +%endif + +Provides: %{name}-devel = %{version}-%{release} +Provides: %{name}-doc = %{version}-%{release} +Provides: %{name}-runtime = %{version}-%{release} + +%description +A simple ros2 package (node) that reads an odom topic and generates the equivalent tf connection (transformation). It also provides options to override frame names, or just use the ones in the original odom topic. + +%prep +%autosetup -p1 + +%build +# Needed to bootstrap since the ros_workspace package does not yet exist. +export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages + +export ROS_DISTRO=%{ros_distro} +export ROS_PYTHON_VERSION=%{python3_version} + +# In case we're installing to a non-standard location, look for a setup.sh +# in the install tree and source it. It will set things like +# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH. +if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi +mkdir -p .obj-%{_target_platform} && cd .obj-%{_target_platform} +%cmake3 \ + -UINCLUDE_INSTALL_DIR \ + -ULIB_INSTALL_DIR \ + -USYSCONF_INSTALL_DIR \ + -USHARE_INSTALL_PREFIX \ + -ULIB_SUFFIX \ + -DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \ + -DAMENT_PREFIX_PATH="/opt/ros/%{ros_distro}" \ + -DCMAKE_PREFIX_PATH="/opt/ros/%{ros_distro}" \ + -DCMAKE_INSTALL_LIBDIR="/opt/ros/%{ros_distro}/lib" \ + -DSETUPTOOLS_DEB_LAYOUT=OFF \ +%if !0%{?with_tests} + -DBUILD_TESTING=OFF \ +%endif + .. + +%make_build + +%install +# Needed to bootstrap since the ros_workspace package does not yet exist. +export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages + +# In case we're installing to a non-standard location, look for a setup.sh +# in the install tree and source it. It will set things like +# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH. +if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi +%make_install -C .obj-%{_target_platform} + +%if 0%{?with_tests} +%check +# Needed to bootstrap since the ros_workspace package does not yet exist. +export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages + +# Look for a Makefile target with a name indicating that it runs tests +TEST_TARGET=$(%__make -qp -C .obj-%{_target_platform} | sed "s/^\(test\|check\):.*/\\1/;t f;d;:f;q0") +if [ -n "$TEST_TARGET" ]; then +# In case we're installing to a non-standard location, look for a setup.sh +# in the install tree and source it. It will set things like +# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH. +if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi +CTEST_OUTPUT_ON_FAILURE=1 \ + %make_build -C .obj-%{_target_platform} $TEST_TARGET || echo "RPM TESTS FAILED" +else echo "RPM TESTS SKIPPED"; fi +%endif + +%files +/opt/ros/%{ros_distro} + +%changelog +* Fri May 23 2025 George Stavrinos gstavrinos@protonmail.com - 1.0.2-1 +- Autogenerated by ros-porting-tools diff --git a/odom_to_tf_ros2.src.rpm b/odom_to_tf_ros2.src.rpm new file mode 100644 index 0000000000000000000000000000000000000000..835c8d48ac63e64545e1dc4d4834535b624d1ae3 GIT binary patch literal 12476 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 D!{69^ literal 0 HcmV?d00001 diff --git a/ros-humble-odom-to-tf-ros2_1.0.2.orig.tar.gz b/ros-humble-odom-to-tf-ros2_1.0.2.orig.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3c5adedcc93e16445683ffcbc93c01c38d2025fc GIT binary patch literal 3767 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