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

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

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        1.3.1
Release:        1%{?dist}
Summary:        Nebula Velodyne ROS Wrapper
# package.xml 声明 "Apache 2",规范为 SPDX 标识
License:        Apache-2.0
URL:            https://github.com/tier4/nebula
# GitHub commit 归档;实测解压根目录为 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:build_type=ament_cmake,构建工具依赖 ros-humble-ament-cmake)
BuildRequires:  ros-%{ros_distro}-ament-cmake
# 提供 autoware_package() 宏(ros-upstream.list,SIG 未移植但 rosdistro 真实存在;verify_spec_requires --register-missing 将其注册递归引入)
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}-velodyne-msgs

# package.xml <depend> —— nebula monorepo 兄弟子包(manifest siblings[],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-velodyne-common
BuildRequires:  ros-%{ros_distro}-nebula-velodyne-decoders
BuildRequires:  ros-%{ros_distro}-nebula-velodyne-hw-interfaces

# 系统库(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}-velodyne-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-velodyne-common
Requires:       ros-%{ros_distro}-nebula-velodyne-decoders
Requires:       ros-%{ros_distro}-nebula-velodyne-hw-interfaces
Requires:       boost
Requires:       yaml-cpp

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

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

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

%prep
# 实测 GitHub /archive/<commit>.tar.gz 解压根目录为 nebula-<full-sha>(非纯 SHA),
# 故 autosetup -n 取 nebula-commit 值;解压目录名与 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_velodyne/nebula_velodyne
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_velodyne/nebula_velodyne/.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-velodyne(nebula_velodyne colcon 子包)
- 源自 tier4/nebula monorepo,commit 8be1ed775b02985eadafe39b00e0e4fc944114e2
- ament_cmake 形态,构建至 /opt/ros/humble 前缀