summaryrefslogtreecommitdiff
path: root/nebula-robosense.spec
blob: a76eba6944e57a0ab75cc58ac8af3a6e4dea2572 (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
# spec for ros-humble-nebula-robosense
# 源自 tier4/nebula monorepo(commit 8be1ed77),仅构建其中的 nebula_robosense colcon 子包
# 严格遵循 /app/.claude/skills/build-rpm/spec-rules-ros.md

%define ros_distro humble
%define RosPkgName nebula-robosense
# monorepo main 分支快照(无 tag),记录实际 commit 保证产物可追溯
%global commit 8be1ed775b02985eadafe39b00e0e4fc944114e2

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        1.3.1
Release:        1%{?dist}
Summary:        Nebula Robosense ROS Wrapper
# package.xml 声明 "Apache 2",规范为 SPDX 标识
License:        Apache-2.0
URL:            https://github.com/tier4/nebula
# GitHub commit 归档,解压根目录为纯完整 SHA(spec-rules-ros §2 实测纪律)
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:build_type=ament_cmake,构建工具依赖 ros-humble-ament-cmake)
BuildRequires:  ros-%{ros_distro}-ament-cmake
# 提供 autoware_package() 宏(ros-upstream.list,SIG 未移植但 rosdistro 真实存在)
BuildRequires:  ros-%{ros_distro}-autoware-cmake
# buildtool_depend ros_environment / ros_testing(ros-projects.list,SIG 已移植)
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> —— nebula monorepo 兄弟子包(batch reused,COPR project / additional_repos 同源解析)
BuildRequires:  ros-%{ros_distro}-nebula-msgs
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-robosense-common
BuildRequires:  ros-%{ros_distro}-nebula-robosense-decoders
BuildRequires:  ros-%{ros_distro}-nebula-robosense-hw-interfaces
BuildRequires:  ros-%{ros_distro}-robosense-msgs

# 系统库(package.xml <depend>boost</depend> / <depend>yaml-cpp</depend>,pkg.remap 映射 -devel 形态)
BuildRequires:  boost-devel
BuildRequires:  yaml-cpp-devel

# 运行时 Requires(ROS 特有三件套,§6:/opt/ros 被 __requires_exclude_from 豁免,autodeps 扫不到)
Requires:       ros-%{ros_distro}-ros-workspace
Requires:       ros-%{ros_distro}-ament-cmake

# package.xml <depend> 的运行时部分(ROS 包提供 /opt/ros 下 .so,运行时须显式声明)
Requires:       ros-%{ros_distro}-diagnostic-msgs
Requires:       ros-%{ros_distro}-diagnostic-updater
Requires:       ros-%{ros_distro}-rclcpp
Requires:       ros-%{ros_distro}-rclcpp-components
Requires:       ros-%{ros_distro}-sensor-msgs
Requires:       ros-%{ros_distro}-nebula-msgs
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-robosense-common
Requires:       ros-%{ros_distro}-nebula-robosense-decoders
Requires:       ros-%{ros_distro}-nebula-robosense-hw-interfaces
Requires:       ros-%{ros_distro}-robosense-msgs
Requires:       boost
Requires:       yaml-cpp

# 单包策略(§7):ROS 包严禁拆实体子包,用虚拟别名兼容依赖方
Provides:       %{name}-devel = %{version}-%{release}
Provides:       %{name}-doc = %{version}-%{release}
Provides:       %{name}-runtime = %{version}-%{release}

%description
Nebula Robosense ROS Wrapper —— Nebula 多 LiDAR 驱动框架中面向 Robosense
激光雷达(Bpearl、Helios 等)的 ROS 2 封装节点,提供点云数据解码、硬件接口
与 ROS 组件化封装(rclcpp_components)。基于 ament_cmake 构建(autoware_cmake
封装),产物安装至 /opt/ros/%{ros_distro} 前缀。

本包源自 tier4/nebula monorepo(commit 8be1ed77),仅构建其中的
nebula_robosense colcon 子包;monorepo 其余 colcon 包由各自独立 RPM 提供。

%prep
# GitHub commit 归档解压根目录为纯完整 SHA,与 autosetup 的 -n 指定值匹配(§2 纪律)
%autosetup -n %{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)
cd src/nebula_robosense/nebula_robosense
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 %{?_smp_mflags}

%install
cd src/nebula_robosense/nebula_robosense/.obj
make install DESTDIR=%{buildroot}

# 文件清单整树拥有(§7:单包策略,ros_distro 前缀一行收尾,对「装了没打包」类错误免疫)
%files
/opt/ros/%{ros_distro}

%changelog
* Wed Oct 21 2026 ai-importer <ai-importer@openeuler.org> - 1.3.1-1
- 初始引入 ros-humble-nebula-robosense(nebula_robosense colcon 子包)
- 源自 tier4/nebula monorepo,commit 8be1ed775b02985eadafe39b00e0e4fc944114e2
- ament_cmake 形态,构建至 /opt/ros/humble 前缀