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

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

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        1.3.1
Release:        1%{?dist}
Summary:        Nebula Continental 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 形态构建工具
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}-geometry-msgs
BuildRequires:  ros-%{ros_distro}-message-filters
BuildRequires:  ros-%{ros_distro}-radar-msgs
BuildRequires:  ros-%{ros_distro}-rclcpp
BuildRequires:  ros-%{ros_distro}-rclcpp-components
BuildRequires:  ros-%{ros_distro}-sensor-msgs
BuildRequires:  ros-%{ros_distro}-tf2-ros
BuildRequires:  ros-%{ros_distro}-visualization-msgs

# package.xml <depend> —— autoware / tier4 外部包(ros-upstream.list,rosdistro 真实存在)
BuildRequires:  ros-%{ros_distro}-autoware-sensing-msgs
BuildRequires:  ros-%{ros_distro}-sync-tooling-msgs

# package.xml <depend> —— nebula monorepo 兄弟子包(batch reused,COPR project / additional_repos 同源解析)
# nebula_core_ros 提供 nebula_agnocast_wrapper_register_node cmake 宏
BuildRequires:  ros-%{ros_distro}-continental-msgs
BuildRequires:  ros-%{ros_distro}-continental-srvs
BuildRequires:  ros-%{ros_distro}-nebula-continental-common
BuildRequires:  ros-%{ros_distro}-nebula-continental-decoders
BuildRequires:  ros-%{ros_distro}-nebula-continental-hw-interfaces
BuildRequires:  ros-%{ros_distro}-nebula-core-common
BuildRequires:  ros-%{ros_distro}-nebula-core-ros
BuildRequires:  ros-%{ros_distro}-nebula-msgs

# 系统库(package.xml <depend>yaml-cpp</depend>,openEuler 名 yaml-cpp-devel,dnf 实证存在)
BuildRequires:  yaml-cpp-devel

# 注:agnocast_components 为条件依赖(package.xml condition="$ENABLE_AGNOCAST == 1",
# CMakeLists 同样以 if("$ENV{ENABLE_AGNOCAST}") 守卫),默认未启用故不写 BuildRequires。

# 运行时 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-sensing-msgs
Requires:       ros-%{ros_distro}-continental-msgs
Requires:       ros-%{ros_distro}-continental-srvs
Requires:       ros-%{ros_distro}-diagnostic-msgs
Requires:       ros-%{ros_distro}-diagnostic-updater
Requires:       ros-%{ros_distro}-geometry-msgs
Requires:       ros-%{ros_distro}-message-filters
Requires:       ros-%{ros_distro}-nebula-continental-common
Requires:       ros-%{ros_distro}-nebula-continental-decoders
Requires:       ros-%{ros_distro}-nebula-continental-hw-interfaces
Requires:       ros-%{ros_distro}-nebula-core-common
Requires:       ros-%{ros_distro}-nebula-core-ros
Requires:       ros-%{ros_distro}-nebula-msgs
Requires:       ros-%{ros_distro}-radar-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
Requires:       ros-%{ros_distro}-tf2-ros
Requires:       ros-%{ros_distro}-visualization-msgs

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

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

本包源自 tier4/nebula monorepo(commit 8be1ed77),仅构建其中的
nebula_continental 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_continental/nebula_continental
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_continental/nebula_continental/.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-continental(nebula_continental colcon 子包)
- 源自 tier4/nebula monorepo,commit 8be1ed775b02985eadafe39b00e0e4fc944114e2
- ament_cmake 形态,构建至 /opt/ros/humble 前缀