blob: 36d8db42135319bc7785f53199a00cc012b6e489 (
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
|
%define ros_distro humble
%define RosPkgName easynav-fusion-localizer
%define src_version 0.5.0-1
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 0.5.0
Release: 1%{?dist}
Summary: Easy Navigation: Fusion Localizer package.
License: Apache-2.0
URL: https://github.com/EasyNavigation/easynav_plugins/tree/humble
Source0: %{RosPkgName}-%{src_version}.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 / ros-upstream.list 验证 SIG 源已有)
BuildRequires: ros-%{ros_distro}-angles
BuildRequires: ros-%{ros_distro}-diagnostic-msgs
BuildRequires: ros-%{ros_distro}-diagnostic-updater
BuildRequires: ros-%{ros_distro}-geometry-msgs
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}-robot-localization
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
# 批次兄弟包(dep_registry 中注册,同一 COPR project 构建,安装时同源解析)
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}-yaets
# 系统依赖(package.xml <depend>,经 pkg.remap 映射 eigen → eigen3-devel)
BuildRequires: eigen3-devel
# GeographicLib:CMakeLists.txt 从 /usr/share/cmake/geographiclib/ 加载 FindGeographicLib.cmake
BuildRequires: geographiclib-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}-angles
Requires: ros-%{ros_distro}-diagnostic-msgs
Requires: ros-%{ros_distro}-diagnostic-updater
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}-pluginlib
Requires: ros-%{ros_distro}-rclcpp
Requires: ros-%{ros_distro}-rclcpp-lifecycle
Requires: ros-%{ros_distro}-robot-localization
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: eigen3-devel
Requires: geographiclib-devel
# 单包策略:严禁拆实体子包(主包 %files 整树拥有时路径必然重叠)
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}
%description
Easy Navigation: Fusion Localizer package. Odometry fusion localizer based on
Robot Localization that fuses any n odometry sources for the Easy Navigation
framework.
%prep
%autosetup -n %{RosPkgName}-%{src_version}
%build
# 源码在 monorepo 子目录中
cd localizers/easynav_fusion_localizer
# 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 -DTESTING=OFF -DCMAKE_SUPPRESS_REGENERATION=ON \
..
make %{?_smp_mflags}
%install
cd localizers/easynav_fusion_localizer/.obj
# ROS 基座环境
[ -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}
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-fusion-localizer
|