summaryrefslogtreecommitdiff
path: root/easynav-navmap-maps-manager.spec
blob: 29e09750b6ed2ac922de7829f8c61675d304390e (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_navmap_maps_manager/ 子目录,构建产物进 /opt/ros/humble。

%define ros_distro humble
%define RosPkgName easynav-navmap-maps-manager

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        0.5.0
Release:        1%{?dist}
Summary:        Easy Navigation: NavMap Maps Manager (维护 NavMap 三角化 3D 曲面,发布全图与图层更新)

# 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 保证产物可追溯)
%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 / geometry_msgs)
# 不写 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}-easynav-sensors
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}-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 映射 + dnf repoquery 实证)
# graphicsmagick -> GraphicsMagick-c++-devel;eigen -> eigen3-devel
BuildRequires:  GraphicsMagick-c++-devel
BuildRequires:  eigen3-devel

# 运行时 Requires(/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到,必须手写)
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}-easynav-sensors
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}-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: NavMap Maps Manager. Maintains a NavMap (triangulated 3D
surface) and publishes full maps and layer updates; supports importing from
YAML OccupancyGrid or point clouds. Also provides NavMap map filters
(ObstacleFilter, InflationFilter) as pluginlib plugins for cost-aware path
planning. Built for ROS 2 %{ros_distro}.

%prep
# 实测 GitHub commit 归档根目录名为纯完整 SHA(spec-rules-ros §2 强制实测,
# 已用 tarfile 确认 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_navmap_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_navmap_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_navmap_maps_manager 0.5.0(EasyNavigation/easynav_plugins humble 分支)