%define ros_distro humble %define RosPkgName vrpn-mocap %define src_version 1.1.0-1 Name: ros-%{ros_distro}-%{RosPkgName} Version: 1.1.0 Release: 1%{?dist} Summary: ROS2 License: MIT URL: https://github.com/alvinsunyixiao/vrpn_mocap/tree/main Source0: %{RosPkgName}-%{src_version}.tar.gz %global debug_package %{nil} %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}/.*$ BuildRequires: cmake BuildRequires: ros-%{ros_distro}-ament-cmake BuildRequires: ros-%{ros_distro}-eigen3-cmake-module BuildRequires: ros-%{ros_distro}-geometry-msgs BuildRequires: ros-%{ros_distro}-rclcpp BuildRequires: ros-%{ros_distro}-std-msgs BuildRequires: ros-%{ros_distro}-tf2 BuildRequires: ros-%{ros_distro}-vrpn BuildRequires: eigen3-devel Requires: ros-%{ros_distro}-ros-workspace Requires: ros-%{ros_distro}-ament-cmake Requires: ros-%{ros_distro}-geometry-msgs Requires: ros-%{ros_distro}-rclcpp Requires: ros-%{ros_distro}-std-msgs Requires: ros-%{ros_distro}-tf2 Requires: ros-%{ros_distro}-vrpn Provides: %{name}-devel = %{version}-%{release} Provides: %{name}-doc = %{version}-%{release} Provides: %{name}-runtime = %{version}-%{release} %description ROS2 %prep %autosetup -n %{RosPkgName}-%{src_version} # 适配 openEuler/eulermaker 的 ros-humble-vrpn: # 该包只提供 libvrpn.so 与 /opt/ros/%{ros_distro}/include 下的头文件, # 没有安装 VRPNConfig.cmake / vrpn-config.cmake,导致上游 CMakeLists.txt # 第 20 行的 find_package(VRPN REQUIRED) 配置期直接失败。 # 这里补一个 FindVRPN.cmake 模块,经 CMAKE_MODULE_PATH 注入, # 导出 ament_target_dependencies 需要的 VRPN::VRPN imported target # 以及 VRPN_INCLUDE_DIRS / VRPN_LIBRARIES 变量。 mkdir -p %{_builddir}/%{RosPkgName}-%{src_version}/cmake-modules cat > %{_builddir}/%{RosPkgName}-%{src_version}/cmake-modules/FindVRPN.cmake << 'VRPNEOF' # 由 ros-humble-vrpn-mocap 打包流程注入:桥接未导出 CMake 配置的 vrpn 安装。 find_path(VRPN_INCLUDE_DIR NAMES vrpn_Connection.h PATHS /opt/ros/%{ros_distro}/include NO_DEFAULT_PATH) find_library(VRPN_LIBRARY NAMES vrpn PATHS /opt/ros/%{ros_distro}/lib NO_DEFAULT_PATH) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(VRPN REQUIRED_VARS VRPN_INCLUDE_DIR VRPN_LIBRARY) if(VRPN_FOUND) set(VRPN_INCLUDE_DIRS "${VRPN_INCLUDE_DIR}") set(VRPN_LIBRARIES "${VRPN_LIBRARY}") if(NOT TARGET VRPN::VRPN) add_library(VRPN::VRPN UNKNOWN IMPORTED) set_target_properties(VRPN::VRPN PROPERTIES IMPORTED_LOCATION "${VRPN_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${VRPN_INCLUDE_DIR}") endif() set(VRPN_TARGETS VRPN::VRPN) endif() VRPNEOF %build [ -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} mkdir -p .obj && cd .obj %cmake3 \ -DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \ -DAMENT_PREFIX_PATH="/opt/ros/%{ros_distro}" \ -DCMAKE_PREFIX_PATH="/opt/ros/%{ros_distro}" \ -DCMAKE_MODULE_PATH="%{_builddir}/%{RosPkgName}-%{src_version}/cmake-modules" \ -UINCLUDE_INSTALL_DIR -ULIB_INSTALL_DIR -USYSCONF_INSTALL_DIR -USHARE_INSTALL_PREFIX -ULIB_SUFFIX \ -DSETUPTOOLS_DEB_LAYOUT=OFF \ -DBUILD_TESTING=OFF -DTESTING=OFF -DCMAKE_SUPPRESS_REGENERATION=ON \ .. make %{?_smp_mflags} %install [ -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} cd .obj make install DESTDIR=%{buildroot} %files /opt/ros/%{ros_distro} %changelog * Tue Sep 22 2026 ai-importer - 1.1.0-1 - Initial import (ROS batch)