# topdir: ros-humble-mavros-extras-2.16.0 (via --transform) %define ros_distro humble %define RosPkgName mavros-extras Name: ros-%{ros_distro}-%{RosPkgName} Version: 2.16.0 Release: 4%{?dist} Summary: Extra nodes and plugins for MAVROS License: GPLv3 and LGPLv3 and BSD URL: https://github.com/mavlink/mavros Source0: https://github.com/mavlink/mavros/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz # Patch: mavros_msgs 2.14.0 (ROS SIG repo) lacks HilGPS.id/yaw fields added in 2.16.0 Patch0: hil-gps-id-yaw-compat.patch # debug subpackage not meaningful (/opt prefix, nonstandard strip paths) %global debug_package %{nil} # /opt python bytecode compilation writes standard sitelib paths — strip brp-python-bytecompile %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') # ROS packages: .so under /opt/ros — autodeps disabled, ament indirect-dependency model instead %global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$ %global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$ BuildRequires: make BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: python3-devel BuildRequires: python3-setuptools # --- ROS buildtool dependencies (ament_cmake) --- BuildRequires: ros-%{ros_distro}-ament-cmake BuildRequires: ros-%{ros_distro}-ament-cmake-python BuildRequires: ros-%{ros_distro}-eigen3-cmake-module # --- ROS package dependencies --- BuildRequires: ros-%{ros_distro}-angles BuildRequires: ros-%{ros_distro}-diagnostic-msgs BuildRequires: ros-%{ros_distro}-diagnostic-updater BuildRequires: ros-%{ros_distro}-eigen-stl-containers BuildRequires: ros-%{ros_distro}-geographic-msgs BuildRequires: ros-%{ros_distro}-geometry-msgs BuildRequires: ros-%{ros_distro}-libmavconn BuildRequires: ros-%{ros_distro}-mavlink BuildRequires: ros-%{ros_distro}-mavros BuildRequires: ros-%{ros_distro}-mavros-msgs BuildRequires: ros-%{ros_distro}-message-filters BuildRequires: ros-%{ros_distro}-nav-msgs BuildRequires: ros-%{ros_distro}-pluginlib BuildRequires: ros-%{ros_distro}-rclcpp BuildRequires: ros-%{ros_distro}-rclcpp-components BuildRequires: ros-%{ros_distro}-rcpputils BuildRequires: ros-%{ros_distro}-rosidl-default-runtime BuildRequires: ros-%{ros_distro}-sensor-msgs BuildRequires: ros-%{ros_distro}-std-msgs BuildRequires: ros-%{ros_distro}-std-srvs BuildRequires: ros-%{ros_distro}-tf2-eigen BuildRequires: ros-%{ros_distro}-tf2-ros BuildRequires: ros-%{ros_distro}-trajectory-msgs BuildRequires: ros-%{ros_distro}-urdf BuildRequires: ros-%{ros_distro}-visualization-msgs BuildRequires: ros-%{ros_distro}-yaml-cpp-vendor # --- System (non-ROS) build dependencies --- BuildRequires: eigen3-devel BuildRequires: yaml-cpp-devel # geographiclib-devel pulls in official geographiclib (provides /usr/bin/GeoConvert # etc. + FindGeographicLib.cmake + headers); do NOT add separate geographiclib-tools — # the in-session built geographiclib-tools-2.7.0 ships the same /usr/bin/* and causes # a file-conflict transaction-test failure. BuildRequires: geographiclib-devel BuildRequires: python3-click # --- Runtime requires (ROS-specific, autodeps disabled) --- Requires: ros-%{ros_distro}-ros-workspace Requires: ros-%{ros_distro}-ament-cmake Requires: ros-%{ros_distro}-rclcpp Requires: ros-%{ros_distro}-rclcpp-components Requires: ros-%{ros_distro}-mavros Requires: ros-%{ros_distro}-libmavconn Requires: ros-%{ros_distro}-mavros-msgs Requires: ros-%{ros_distro}-mavlink Requires: ros-%{ros_distro}-pluginlib Requires: ros-%{ros_distro}-tf2-ros Requires: ros-%{ros_distro}-tf2-eigen Requires: ros-%{ros_distro}-diagnostic-updater Requires: ros-%{ros_distro}-message-filters Requires: ros-%{ros_distro}-rcpputils Requires: ros-%{ros_distro}-urdf Requires: ros-%{ros_distro}-yaml-cpp-vendor Requires: ros-%{ros_distro}-rclpy Requires: ros-%{ros_distro}-rosidl-default-runtime Requires: ros-%{ros_distro}-diagnostic-msgs Requires: ros-%{ros_distro}-geographic-msgs Requires: ros-%{ros_distro}-geometry-msgs Requires: ros-%{ros_distro}-nav-msgs Requires: ros-%{ros_distro}-sensor-msgs Requires: ros-%{ros_distro}-std-msgs Requires: ros-%{ros_distro}-std-srvs Requires: ros-%{ros_distro}-trajectory-msgs Requires: ros-%{ros_distro}-visualization-msgs Requires: ros-%{ros_distro}-angles Requires: ros-%{ros_distro}-eigen-stl-containers Requires: ros-%{ros_distro}-eigen3-cmake-module Requires: python3-click # Virtual provides for compatibility Provides: %{name}-devel = %{version}-%{release} Provides: %{name}-doc = %{version}-%{release} Provides: %{name}-runtime = %{version}-%{release} %description Extra nodes and plugins for MAVROS (MAVLink to ROS bridge). This package provides additional MAVLink plugins (ADS-B, GPS RTK, camera, distance sensor, obstacle distance, terrain, vision pose, etc.) and the terrain tile server. %prep %autosetup -n %{name}-%{version} %build # The source tarball contains the whole mavros repo (multi-package layout). # We build only the mavros_extras sub-package. cd mavros_extras # ROS bootstrap environment (chroot has ROS SIG repo; guard against missing setup.sh) [ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH} export PKG_CONFIG_PATH=/opt/ros/%{ros_distro}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} # Explicit out-of-source build (openEuler %%cmake macro positional-arg pitfall) mkdir -p .obj && cd .obj cmake .. \ -DCMAKE_INSTALL_PREFIX=/opt/ros/%{ros_distro} \ -DAMENT_PREFIX_PATH=/opt/ros/%{ros_distro} \ -DCMAKE_PREFIX_PATH=/opt/ros/%{ros_distro} \ -UINCLUDE_INSTALL_DIR -ULIB_INSTALL_DIR -USYSCONF_INSTALL_DIR -USHARE_INSTALL_PREFIX -ULIB_SUFFIX \ -DSETUPTOOLS_DEB_LAYOUT=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_CXX_STANDARD=20 %make_build %install cd mavros_extras/.obj %make_install DESTDIR=%{buildroot} %files /opt/ros/%{ros_distro} %changelog * Mon Oct 12 2026 AI Importer - 2.16.0-4 - Add Patch0 (hil-gps-id-yaw-compat.patch): comment out gps.id/gps.yaw assignments in hil.cpp that reference HilGPS fields added in mavros 2.16.0. The ROS SIG repo ships mavros_msgs 2.14.0 which lacks these fields, causing "has no member named 'id'/'yaw'" compile errors at hil.cpp:243-244. The MAVLink HIL_GPS message still has id/yaw (defaults to 0). * Mon Oct 12 2026 AI Importer - 2.16.0-3 - Escape %%cmake token in a %%build comment: rpm expands %%macros even inside comments, so the openEuler %%cmake macro's multi-line body (which includes %%set_build_flags + a (...) subshell) leaked out of the comment and was executed as build commands, causing "syntax error near unexpected token )'" at line 61 of the build script. Replaced with %%cmake (literal %%cmake) so the comment stays a comment. * Mon Oct 12 2026 AI Importer - 2.16.0-2 - Drop BuildRequires: geographiclib-tools: it duplicates /usr/bin/* tools already provided by official geographiclib (pulled by geographiclib-devel), causing a dnf transaction-test file conflict. * Mon Oct 12 2026 AI Importer - 2.16.0-1 - Initial package for openEuler (ROS 2 humble) - Built from upstream mavros repo, mavros_extras sub-package