summaryrefslogtreecommitdiff
path: root/easynav-navmap-maps-manager.spec
blob: acef25c460a3ecfff3b0763ca4e08aad5d73751c (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
%define ros_distro humble
%define RosPkgName easynav-navmap-maps-manager
# 分支 humble 的实际 checkout commit,保证 Source0 可追溯
%global commit 2580d29baefe77305c6e9336dca743aa5ce51c2c

Name:       ros-%{ros_distro}-%{RosPkgName}
Version:    0.5.0
Release:    1%{?dist}
Summary:    Easy Navigation: NavMap MapsManager package
License:    Apache-2.0
URL:        https://github.com/EasyNavigation/easynav_plugins
# GitHub commit 归档:解压根目录 = 完整 SHA(spec-rules §2 实踩事实)
Source0:    https://github.com/EasyNavigation/easynav_plugins/archive/%{commit}.tar.gz

# ROS 包统一关闭 debug 子包(/opt 前缀,strip/debugedit 路径非常规)
%global debug_package %{nil}
# 摘掉 brp-python-bytecompile(/opt 下 python 字节码编译会写标准 sitelib 路径)
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# /opt/ros 下 .so 不做自动依赖扫描(由 ament 间接依赖模型替代)
%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$
%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$

# ── BuildRequires ──
# 构建工具
BuildRequires: cmake
BuildRequires: make
# ROS 构建工具(buildtool_depend)
BuildRequires: ros-%{ros_distro}-ament-cmake
# ROS 依赖(package.xml <depend>,经 ros-projects.list 验证)
BuildRequires: ros-%{ros_distro}-ament-index-cpp
BuildRequires: ros-%{ros_distro}-nav-msgs
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}-yaml-cpp-vendor
# 批次兄弟包(dep_registry 中注册,同一 COPR project 构建)
BuildRequires: ros-%{ros_distro}-easynav-common
BuildRequires: ros-%{ros_distro}-easynav-core
BuildRequires: ros-%{ros_distro}-easynav-sensors
BuildRequires: ros-%{ros_distro}-yaets
# 外部 ROS 依赖(ros-projects/ros-upstream 均未收录,不在本批次 project.list;
# 按 spec-rules §6 "实证无 provider 禁止静默丢弃" 照写,由 verify_spec_requires.py
# --register-missing 注册进 dep_registry 递归引入)
BuildRequires: ros-%{ros_distro}-navmap-core
BuildRequires: ros-%{ros_distro}-navmap-ros
BuildRequires: ros-%{ros_distro}-navmap-ros-interfaces
# 系统依赖(package.xml <depend>,经 pkg.remap 映射,openEuler 24.03-LTS-SP3 实证)
BuildRequires: eigen3-devel
BuildRequires: GraphicsMagick-c++-devel

# ── Requires(运行时,/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到,必须手写)──
# 强制三件套:ros-workspace 提供 setup.sh 环境就绪,ament-cmake 提供 ament 运行期钩子
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
# package.xml <depend> 的运行时映射
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

# 单包策略:严禁拆实体子包(主包 %files 整树拥有时路径必然重叠)
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}

%description
Easy Navigation: NavMap MapsManager package. Provides the NavMap MapsManager
plugin and associated obstacle/inflation map filters for the Easy Navigation
framework, based on the NavMap grid map representation.

%prep
%autosetup -n %{commit}

%build
# 源码在 monorepo 子目录中
cd maps_managers/easynav_navmap_maps_manager

# ROS 基座环境(chroot 已配置 ROS SIG repo;无 ROS 依赖的包 buildroot 里
# 可能没有 setup.sh,必须用 [ -f ] 守卫——直接 source 不存在的文件在
# 严格 sh 下会中止整个 %build 脚本,|| true 挡不住)
[ -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}

# 显式 out-of-source 构建(避免 openEuler %cmake 宏位置参数坑,spec-rules §5)
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 \
  ..
make %{?_smp_mflags}

%install
cd maps_managers/easynav_navmap_maps_manager/.obj

# ROS 基座环境
[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true

make install DESTDIR=%{buildroot}

%files
# 整树拥有:对「装了没打包」类错误免疫(spec-rules §7)
/opt/ros/%{ros_distro}

%changelog
* Sat Oct 10 2026 AI Importer <ai-importer@opencode.local> - 0.5.0-1
- 初始 ROS humble spec,引入 easynav-navmap-maps-manager