diff options
| author | CoprDistGit <infra@openeuler.org> | 2026-10-21 03:40:33 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2026-10-21 03:40:33 +0000 |
| commit | c9230f1eb74705046a603d67513d10c41e56da21 (patch) | |
| tree | 43a56a293e4d80c4ee1da2b619839823051558f0 | |
| parent | b6c015876f51628f1fdac6913a0ee16c686ec23f (diff) | |
automatic import of ros-humble-nebula-continentalopeneuler24.03_LTS_SP3
| -rw-r--r-- | nebula-continental.spec | 32 |
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 块先于真正命令执行而失败; |
