summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2026-10-21 03:40:33 +0000
committerCoprDistGit <infra@openeuler.org>2026-10-21 03:40:33 +0000
commitc9230f1eb74705046a603d67513d10c41e56da21 (patch)
tree43a56a293e4d80c4ee1da2b619839823051558f0
parentb6c015876f51628f1fdac6913a0ee16c686ec23f (diff)
automatic import of ros-humble-nebula-continentalopeneuler24.03_LTS_SP3
-rw-r--r--nebula-continental.spec32
1 files changed, 26 insertions, 6 deletions
diff --git a/nebula-continental.spec b/nebula-continental.spec
index 97a10de..5e8ebbd 100644
--- a/nebula-continental.spec
+++ b/nebula-continental.spec
@@ -134,6 +134,13 @@ nebula_continental colcon 子包;monorepo 其余 colcon 包由各自独立 RPM
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}
+# hw_interfaces 暂存目录:build 113817 直接 make install(无 DESTDIR)写 /opt/ros
+# 系统路径 Permission denied。改用 DESTDIR 暂存——ament_cmake 的 Targets.cmake 用
+# get_filename_component 基于自身位置解析导入路径(非硬编码 CMAKE_INSTALL_PREFIX),
+# DESTDIR 暂存后路径仍自洽,find_package 能正确指向暂存区文件
+export HW_STAGING=%{_builddir}/hw_staging
+mkdir -p "$HW_STAGING"
+
# 1. 先构建 nebula_continental_hw_interfaces(从源码同包构建,避开 reuse 兄弟包
# ros-humble-nebula_msgs 下划线命名冲突——该兄弟包 Requires 用了
# ros-humble-nebula_msgs 下划线名,拉入 eulermaker 旧版 1.1.1-4,与 COPR
@@ -152,20 +159,24 @@ cd .obj
-DCMAKE_SUPPRESS_REGENERATION=ON \
..
make %{?_smp_mflags}
-# 安装到 /opt/ros(非 DESTDIR),让后续 nebula_continental 的 find_package 能发现
-make install
+# 安装到暂存区(DESTDIR),不直接写 /opt/ros 系统路径(build 113817 Permission denied)
+make install DESTDIR="$HW_STAGING"
-# 2. 重新 source ROS 环境,纳入新装的 hw_interfaces
+# 2. 重新 source ROS 环境,将暂存区前缀纳入搜索路径
source /opt/ros/%{ros_distro}/setup.sh || true
+# find_package 走 CMAKE_PREFIX_PATH,ament 资源索引走 AMENT_PREFIX_PATH;
+# cmake -D 中分号是列表分隔符,env 中冒号是 Unix 路径分隔符
+export AMENT_PREFIX_PATH="$HW_STAGING/opt/ros/%{ros_distro}${AMENT_PREFIX_PATH:+:$AMENT_PREFIX_PATH}"
+export CMAKE_PREFIX_PATH="$HW_STAGING/opt/ros/%{ros_distro}${CMAKE_PREFIX_PATH:+:$CMAKE_PREFIX_PATH}"
-# 3. 构建 nebula_continental(依赖上一步本地安装的 hw_interfaces)
+# 3. 构建 nebula_continental(依赖上一步暂存安装的 hw_interfaces)
cd ../../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}" \
+ -DAMENT_PREFIX_PATH="$HW_STAGING/opt/ros/%{ros_distro};/opt/ros/%{ros_distro}" \
+ -DCMAKE_PREFIX_PATH="$HW_STAGING/opt/ros/%{ros_distro};/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 \
@@ -188,6 +199,15 @@ make install DESTDIR=%{buildroot}
%changelog
* Wed Oct 21 2026 AI Importer <ai-importer@openeuler.org> - 1.3.1-1
+- 修复 build 113817 build 阶段 make install Permission denied:build 113816
+ 为让后续 nebula_continental 的 find_package 能发现 hw_interfaces,在 build
+ 阶段直接 make install(无 DESTDIR)写 /opt/ros/humble/lib 系统路径,mock
+ 构建用户无写权限致 Permission denied。改用 DESTDIR 暂存:hw_interfaces 先装到
+ build 目录下暂存区,再将暂存区前缀加入 CMAKE_PREFIX_PATH / AMENT_PREFIX_PATH
+ 让主构建 find_package 能发现;ament_cmake 的 Targets.cmake 用
+ get_filename_component 基于自身位置解析导入路径(非硬编码安装前缀),DESTDIR
+ 暂存后路径仍自洽。install 阶段两个子包各自 make install DESTDIR=buildroot
+ 装入最终路径,不受暂存区影响
- 修复 build 113816 prep 阶段 cd 失败(双根因):
(1) 上一轮在 prep 段注释里写了 autosetup 等命令宏字面量,RPM 4.18 即便在注释内
也会展开 autosetup 宏,生成 cd 纯commit+中文括号的 setup 块先于真正命令执行而失败;