blob: ebff8d54d4d941052dfedd677d71ed56e63672ba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# spec-rules-ros 规范生成:ROS 2 ament_cmake 包
# 本包为 monorepo EasyNavigation/easynav_plugins 的子包,源码位于
# maps_managers/easynav_octomap_maps_manager/ 子目录,构建产物进 /opt/ros/humble。
%define ros_distro humble
%define RosPkgName easynav-octomap-maps-manager
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 0.5.0
Release: 1%{?dist}
Summary: Easy Navigation: OctoMap Maps Manager (维护 OctoMap 概率 3D 占据树,提供膨胀/障碍过滤器插件,经 ROS 2 topics 发布)
# package.xml <license> Apache-2.0
License: Apache-2.0
URL: https://github.com/EasyNavigation/easynav_plugins
# humble 分支 fetch 时的 HEAD commit(manifest target_version 0.5.0-1,无对应 tag,
# 固定 commit 保证产物可追溯;与同 monorepo 兄弟包共用同一 fetch 归档)
%global commit 703b73ae55bf6a419bf309b26084ca523b063ddf
Source0: https://github.com/EasyNavigation/easynav_plugins/archive/%{commit}.tar.gz
# debug 子包无意义(/opt 前缀),SIG 模板统一关闭
%global debug_package %{nil}
# /opt 下 python 字节码会写标准 sitelib 路径,摘掉 brp-python-bytecompile
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# ROS 包不做自动依赖扫描(.so 全在 /opt/ros 下,由 ament 间接依赖模型替代)
%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$
%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$
# 单包策略:虚拟别名兼容依赖方,严禁拆实体 devel 子包(避免路径重叠冲突)
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}
BuildRequires: ros-%{ros_distro}-ament-cmake
# package.xml <buildtool_depend>ament_cmake</buildtool_depend> 形态为 ament_cmake;
# <test_depend>(ament_cmake_gtest / ament_lint_auto / ament_lint_common)
# 不写 BuildRequires(-DBUILD_TESTING=OFF 关闭测试)
# 以下 ROS <depend> 均已在 ros-projects.list 验证有 provider(SIG 源 / 同 COPR project)
BuildRequires: ros-%{ros_distro}-ament-index-cpp
BuildRequires: ros-%{ros_distro}-easynav-common
BuildRequires: ros-%{ros_distro}-easynav-core
BuildRequires: ros-%{ros_distro}-nav-msgs
# liboctomap-dev 为 Debian 名,映射到 rosdistro 包 octomap(ros-projects.list 有 provider)
BuildRequires: ros-%{ros_distro}-octomap
BuildRequires: ros-%{ros_distro}-octomap-msgs
BuildRequires: ros-%{ros_distro}-pcl-conversions
BuildRequires: ros-%{ros_distro}-pluginlib
BuildRequires: ros-%{ros_distro}-rclcpp
BuildRequires: ros-%{ros_distro}-rclcpp-lifecycle
BuildRequires: ros-%{ros_distro}-sensor-msgs
BuildRequires: ros-%{ros_distro}-std-srvs
BuildRequires: ros-%{ros_distro}-tf2
BuildRequires: ros-%{ros_distro}-tf2-geometry-msgs
BuildRequires: ros-%{ros_distro}-tf2-ros
BuildRequires: ros-%{ros_distro}-yaets
BuildRequires: ros-%{ros_distro}-yaml-cpp-vendor
# 系统依赖(package.xml <depend> 经 pkg.remap 映射 + ros-projects.list 实证)
# eigen -> eigen3-devel;graphicsmagick -> GraphicsMagick-c++-devel;libpcl-all-dev -> pcl-devel
BuildRequires: GraphicsMagick-c++-devel
BuildRequires: eigen3-devel
BuildRequires: pcl-devel
# 运行时 Requires(/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到 ROS 包间依赖,必须手写)
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
Requires: ros-%{ros_distro}-ament-index-cpp
Requires: ros-%{ros_distro}-easynav-common
Requires: ros-%{ros_distro}-easynav-core
Requires: ros-%{ros_distro}-nav-msgs
Requires: ros-%{ros_distro}-octomap
Requires: ros-%{ros_distro}-octomap-msgs
Requires: ros-%{ros_distro}-pcl-conversions
Requires: ros-%{ros_distro}-pluginlib
Requires: ros-%{ros_distro}-rclcpp
Requires: ros-%{ros_distro}-rclcpp-lifecycle
Requires: ros-%{ros_distro}-sensor-msgs
Requires: ros-%{ros_distro}-std-srvs
Requires: ros-%{ros_distro}-tf2
Requires: ros-%{ros_distro}-tf2-geometry-msgs
Requires: ros-%{ros_distro}-tf2-ros
Requires: ros-%{ros_distro}-yaets
Requires: ros-%{ros_distro}-yaml-cpp-vendor
# GraphicsMagick 运行时库(plugin .so 链接 libGraphicsMagick++,autodeps 被 /opt 豁免无法自动捕获)
Requires: GraphicsMagick-c++
%description
Easy Navigation: OctoMap Maps Manager. Maintains an OctoMap (probabilistic 3D
occupancy tree), supports filter plugins (InflationFilter, ObstacleFilter), and
exposes the map through ROS 2 topics. Registered as a pluginlib plugin
(easynav::octomap::OctomapMapsManager, base class easynav::MapsManagerBase) for
the EasyNavigation stack. Built for ROS 2 %{ros_distro}.
%prep
# 实测 GitHub commit 归档根目录名为纯完整 SHA(spec-rules-ros §2 强制实测,
# 与同 monorepo 兄弟包一致,已确认 getnames()[0] == %{commit})
%autosetup -n %{commit}
%build
# ROS 基座环境(带守卫,buildroot 无 setup.sh 时不可直接 source)
[ -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}
# 本包源码位于 monorepo 子目录;显式 out-of-source 构建(规避 openEuler %cmake 位置参数坑)
cd maps_managers/easynav_octomap_maps_manager
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 -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 maps_managers/easynav_octomap_maps_manager/.obj
%{__make} install DESTDIR=%{buildroot}
%files
# 整树拥有 /opt/ros/humble(SIG 模板标准做法,对"装了没打包"类错误免疫)
/opt/ros/%{ros_distro}
%changelog
* Tue Oct 20 2026 ROS SIG <ros@openeuler.org> - 0.5.0-1
- 初始引入 easynav_octomap_maps_manager 0.5.0(EasyNavigation/easynav_plugins humble 分支)
|