blob: 54f3cfa4a6fb6854f58562323f1439c29eca7b2a (
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
134
|
%define ros_distro humble
%define RosPkgName easynav-navmap-localizer
%define src_version 0.5.0-1
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 0.5.0
Release: 1%{?dist}
Summary: Easy Navigation: nAVmAP Localizer package
# package.xml <license> Apache-2.0
License: Apache-2.0
URL: https://github.com/EasyNavigation/easynav_plugins/tree/humble
# 本地 tarball:build 流程用 --transform 把 sources/<pkg>/ 统一重命名为
# <pkg>-<src_version> 顶层目录,autosetup 的 -n 必须与此一致(不可用远程
# GitHub commit 归档 URL——其内部目录名与本地 transform 产物不一致会导致 prep 阶段 cd 失败)
Source0: %{RosPkgName}-%{src_version}.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> 不写 BuildRequires(构建关闭测试)
BuildRequires: ros-%{ros_distro}-easynav-bonxai-maps-manager
BuildRequires: ros-%{ros_distro}-easynav-common
BuildRequires: ros-%{ros_distro}-easynav-core
BuildRequires: ros-%{ros_distro}-easynav-localizer
BuildRequires: ros-%{ros_distro}-easynav-sensors
BuildRequires: ros-%{ros_distro}-geometry-msgs
BuildRequires: ros-%{ros_distro}-nav-msgs
BuildRequires: ros-%{ros_distro}-navmap-core
BuildRequires: ros-%{ros_distro}-navmap-ros
BuildRequires: ros-%{ros_distro}-navmap-ros-interfaces
BuildRequires: ros-%{ros_distro}-pluginlib
BuildRequires: ros-%{ros_distro}-rclcpp
BuildRequires: ros-%{ros_distro}-tf2
BuildRequires: ros-%{ros_distro}-tf2-geometry-msgs
BuildRequires: ros-%{ros_distro}-tf2-ros
# 系统依赖(package.xml <depend> 经 pkg.remap 映射 + dnf 实证)
BuildRequires: eigen3-devel
BuildRequires: pcl-devel
# PCL cmake config(经 navmap_ros 传递)导出 libGraphicsMagick++.so 为链接依赖,
# pcl-devel 未自动 Requires 它,需显式声明(否则 make 链接阶段报 No rule to make target)
BuildRequires: GraphicsMagick-c++-devel
# 运行时 Requires(/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到,必须手写)
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
Requires: ros-%{ros_distro}-easynav-bonxai-maps-manager
Requires: ros-%{ros_distro}-easynav-common
Requires: ros-%{ros_distro}-easynav-core
Requires: ros-%{ros_distro}-easynav-localizer
Requires: ros-%{ros_distro}-easynav-sensors
Requires: ros-%{ros_distro}-geometry-msgs
Requires: ros-%{ros_distro}-nav-msgs
Requires: ros-%{ros_distro}-navmap-core
Requires: ros-%{ros_distro}-navmap-ros
Requires: ros-%{ros_distro}-navmap-ros-interfaces
Requires: ros-%{ros_distro}-pluginlib
Requires: ros-%{ros_distro}-rclcpp
Requires: ros-%{ros_distro}-tf2
Requires: ros-%{ros_distro}-tf2-geometry-msgs
Requires: ros-%{ros_distro}-tf2-ros
# pcl 运行时库(plugin 链接 libpcl,autodeps 被豁免无法自动捕获)
Requires: pcl
# PCL 传递依赖的 GraphicsMagick++ 运行时库(autodeps 被豁免无法自动捕获)
Requires: GraphicsMagick-c++
%description
Easy Navigation: nAVmAP Localizer package. An AMCL-like localizer operating on
NavMap meshes, provided as a plugin for the EasyNav framework, built for
ROS 2 %{ros_distro}.
%prep
# 顶层目录由 build 流程 --transform 统一为 <RosPkgName>-<src_version>
%autosetup -n %{RosPkgName}-%{src_version}
%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 localizers/easynav_navmap_localizer
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 localizers/easynav_navmap_localizer/.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
- fix: 补 GraphicsMagick-c++-devel BuildRequires + GraphicsMagick-c++ Requires;
PCL cmake config(经 navmap_ros 传递)导出 libGraphicsMagick++.so 为链接依赖,
pcl-devel 未自动 Requires 它,导致 make 链接阶段报
"No rule to make target '/usr/lib64/libGraphicsMagick++.so', needed by
libeasynav_navmap_localizer.so"
- fix: 移除 build 段注释里的 cmake 宏 token;RPM 会在注释中展开已定义的宏,
openEuler builder 上该 cmake 宏展开产物带前导换行逃出注释行,把后续中文文本
当作 cmake 源码目录位置参数执行,导致 build 阶段报
"source directory .../位置参数坑 does not exist" 失败
- fix: 改用本地 tarball(RosPkgName-src_version 命名)替代远程 GitHub commit 归档 URL;
原远程归档被 build 流程 --transform 重打后顶层目录无 easynav_plugins- 前缀,与
autosetup -n easynav_plugins-commit 不匹配导致 prep 阶段 cd 失败
- 初始引入 easynav_navmap_localizer 0.5.0(EasyNavigation/easynav_plugins humble 分支)
|