blob: 54764f317f73b41424a8a5f2c0cdb67e6195621a (
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# spec for ros-humble-nebula-hesai
# 源自 tier4/nebula monorepo(commit 8be1ed77),仅构建其中的 nebula_hesai colcon 子包
# 严格遵循 /app/.claude/skills/build-rpm/spec-rules-ros.md
%define ros_distro humble
%define RosPkgName nebula-hesai
# monorepo main 分支快照(无 tag),记录实际 commit 保证产物可追溯
%global commit 8be1ed775b02985eadafe39b00e0e4fc944114e2
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 1.3.1
Release: 1%{?dist}
Summary: Nebula Hesai ROS Wrapper
# package.xml 声明 "Apache 2",规范为 SPDX 标识
License: Apache-2.0
URL: https://github.com/tier4/nebula
# GitHub commit 归档;实测(spec-rules-ros §2 强制消除猜测)解压根目录为
# nebula-<full-sha>(非纯 SHA),与下方 autosetup 指令 -n nebula-<commit宏> 匹配
Source0: https://github.com/tier4/nebula/archive/%{commit}.tar.gz
# debug 子包无意义(/opt 前缀,strip/debugedit 路径非常规),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}/.*$
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: make
# 构建工具(package.xml <buildtool_depend>)
# ament_cmake 形态构建工具(§6)
BuildRequires: ros-%{ros_distro}-ament-cmake
# 提供 autoware_package() 宏(ros-upstream.list,SIG 未移植但 rosdistro 真实存在)
BuildRequires: ros-%{ros_distro}-autoware-cmake
BuildRequires: ros-%{ros_distro}-ros-environment
BuildRequires: ros-%{ros_distro}-ros-testing
# package.xml <depend> —— ROS humble 标准包(ros-projects.list,SIG 已移植)
BuildRequires: ros-%{ros_distro}-diagnostic-msgs
BuildRequires: ros-%{ros_distro}-diagnostic-updater
BuildRequires: ros-%{ros_distro}-rclcpp
BuildRequires: ros-%{ros_distro}-rclcpp-components
BuildRequires: ros-%{ros_distro}-sensor-msgs
# package.xml <depend> —— autoware / tier4 外部包(ros-upstream.list,rosdistro 真实存在)
BuildRequires: ros-%{ros_distro}-autoware-internal-debug-msgs
BuildRequires: ros-%{ros_distro}-autoware-utils-debug
BuildRequires: ros-%{ros_distro}-sync-tooling-msgs
# package.xml <depend> —— nebula monorepo 兄弟子包(batch reused,COPR project /
# additional_repos 同源解析;ros-upstream.list 命中,rosdistro 真实存在)
BuildRequires: ros-%{ros_distro}-nebula-core-common
BuildRequires: ros-%{ros_distro}-nebula-core-decoders
BuildRequires: ros-%{ros_distro}-nebula-core-hw-interfaces
BuildRequires: ros-%{ros_distro}-nebula-core-ros
BuildRequires: ros-%{ros_distro}-nebula-hesai-common
BuildRequires: ros-%{ros_distro}-nebula-hesai-decoders
BuildRequires: ros-%{ros_distro}-nebula-hesai-hw-interfaces
BuildRequires: ros-%{ros_distro}-nebula-msgs
BuildRequires: ros-%{ros_distro}-pandar-msgs
# 系统库(package.xml <depend>boost</depend>,pkg.remap 映射 boost→boost-devel)
BuildRequires: boost-devel
# 注:agnocast_* 为条件依赖(package.xml condition="$ENABLE_AGNOCAST == 1",
# CMakeLists 同样以 if("$ENV{ENABLE_AGNOCAST}") 守卫),默认未启用故不写 BuildRequires。
# test_depend(ament_cmake_gtest / ament_lint_auto / rosbag2_cpp)由 -DBUILD_TESTING=OFF 关闭,不写。
# 运行时 Requires(ROS 特有三件套,§6:/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到)
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
# package.xml <depend> 的运行时部分
Requires: ros-%{ros_distro}-autoware-internal-debug-msgs
Requires: ros-%{ros_distro}-autoware-utils-debug
Requires: ros-%{ros_distro}-diagnostic-msgs
Requires: ros-%{ros_distro}-diagnostic-updater
Requires: ros-%{ros_distro}-nebula-core-common
Requires: ros-%{ros_distro}-nebula-core-decoders
Requires: ros-%{ros_distro}-nebula-core-hw-interfaces
Requires: ros-%{ros_distro}-nebula-core-ros
Requires: ros-%{ros_distro}-nebula-hesai-common
Requires: ros-%{ros_distro}-nebula-hesai-decoders
Requires: ros-%{ros_distro}-nebula-hesai-hw-interfaces
Requires: ros-%{ros_distro}-nebula-msgs
Requires: ros-%{ros_distro}-pandar-msgs
Requires: ros-%{ros_distro}-rclcpp
Requires: ros-%{ros_distro}-rclcpp-components
Requires: ros-%{ros_distro}-sensor-msgs
Requires: ros-%{ros_distro}-sync-tooling-msgs
# 单包策略(§7):ROS 包严禁拆实体子包,用虚拟别名兼容依赖方
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}
%description
Nebula Hesai ROS Wrapper —— Nebula 多 LiDAR 驱动框架中面向 Hesai Pandar
系列 LiDAR 的 ROS 2 封装节点,提供激光数据解码、硬件接口与 ROS 组件化封装
(rclcpp_components)。基于 ament_cmake(autoware_package 宏)构建,产物安装至
/opt/ros/%{ros_distro} 前缀。
本包源自 tier4/nebula monorepo(commit 8be1ed77),仅构建其中的
nebula_hesai colcon 子包;monorepo 其余 colcon 包由各自独立 RPM 提供。
%prep
# 实测 GitHub /archive/<commit>.tar.gz 解压根目录为 nebula-<full-sha>(非纯 SHA,
# 831 个条目全部 nebula-<sha> 前缀,spec-rules-ros §2 强制实测消除猜测);
# 解压目录名与 Name 解耦,不随包名联动改写
%autosetup -n nebula-%{commit}
%build
# ROS 基座环境(§4:setup.sh 可能不存在,用 [ -f ] 守卫)
[ -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 子包构建:进入目标 colcon 包目录(§5 ament_cmake 显式 out-of-source,
# 规避 openEuler cmake 宏带位置参数坑)
cd src/nebula_hesai/nebula_hesai
mkdir -p .obj
cd .obj
%cmake3 \
-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_build
%install
[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true
cd src/nebula_hesai/nebula_hesai/.obj
%make_install DESTDIR=%{buildroot}
# 文件清单整树拥有(§7:单包策略,ros_distro 前缀一行收尾,对「装了没打包」类错误免疫)
%files
/opt/ros/%{ros_distro}
%changelog
* Wed Oct 21 2026 AI Importer <ai-importer@opencode> - 1.3.1-1
- 初始引入 ros-humble-nebula-hesai(nebula_hesai colcon 子包)
- 源自 tier4/nebula monorepo,commit 8be1ed775b02985eadafe39b00e0e4fc944114e2
- ament_cmake 形态(autoware_package 宏),构建至 /opt/ros/humble 前缀
|