summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mrpt-libslam.spec52
1 files changed, 36 insertions, 16 deletions
diff --git a/mrpt-libslam.spec b/mrpt-libslam.spec
index 9e7540c..e6e96a0 100644
--- a/mrpt-libslam.spec
+++ b/mrpt-libslam.spec
@@ -8,7 +8,7 @@
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 2.15.20
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Mobile Robot Programming Toolkit (MRPT) libraries (slam/vision C++ libraries)
License: BSD
URL: https://github.com/MRPT/mrpt_ros.git
@@ -241,21 +241,11 @@ if [ -e mrpt-build/tmp/mrpt-gitclone.cmake ]; then
echo "ERROR: cmake 准备 git clone mrpt —— %prep 预置源码未被复用,请检查预置路径" >&2
exit 1
fi
-# 闸门:内层必须命中系统 octomap。script_octomap.cmake 在 find_package(OCTOMAP
-# QUIET) 失配时会 ExternalProject_Add(EP_octomap) 去 GitHub 下内置 octomap
-# (chroot 无外网,且该 EP 的构建目标默认在 ALL 里)。EP 的 prefix 目录在
-# configure 阶段即被创建,据此把"OCTOMAP_DIR 没生效"变成构建早期硬失败。
-if [ -e mrpt-build/src/mrpt-build/EP_octomap-prefix ]; then
- echo "ERROR: 内层未命中系统 octomap(OCTOMAP_DIR 注入失效)—— 会退回 ExternalProject 下载内置 octomap(无外网必挂)" >&2
- exit 1
-fi
-# 闸门:内层必须命中系统 OpenCV。find_package(OpenCV QUIET NO_MODULE) 命中时
-# 会在内层 CMakeCache.txt 写入 OpenCV_DIR;未命中则 CMAKE_MRPT_HAS_OPENCV=0,
-# mrpt-vision 的 29 个 opencv 源文件被整体跳过——构建"成功"但功能残缺且无报错。
-if ! grep -q '^OpenCV_DIR' mrpt-build/src/mrpt-build/CMakeCache.txt; then
- echo "ERROR: 内层未命中系统 OpenCV(OpenCV_DIR 未写入 CMakeCache.txt)—— BuildRequires: opencv 未生效或 OpenCVConfig.cmake 路径不对,mrpt-vision 会静默降级" >&2
- exit 1
-fi
+# 注:内层 ExternalProject 的 configure 是上面的 make 触发的,此刻
+# mrpt-build/src/mrpt-build/CMakeCache.txt 与 EP_octomap-prefix 都还不存在。
+# 对这两者的闸门一律放在 make 之后(见下方"构建后闸门"),放在这里会 100%
+# 误报自杀(build 112599 实踩:grep: CMakeCache.txt: No such file or directory
+# → Bad exit status,而外层 cmake 本身已 100% 成功)。
# --- 并行度与内存 -----------------------------------------------------------
# mrpt-slam / mrpt-vision 大量使用 mrpt-math 的定长矩阵模板(CPose3D、
# CSerializable、CObservation* 等公共头),单位 TU 峰值内存可达 GB 级;COPR
@@ -285,6 +275,23 @@ if [ "$MEM_KB" -gt 0 ]; then
fi
echo "mrpt-slam/vision 构建并行度: -j${JOBS}(nproc=$(nproc 2>/dev/null || echo '?'), MemTotal=${MEM_KB}KiB)"
make -j"$JOBS"
+# --- 构建后闸门(内层 configure/build 已完成,内层产物与缓存此时才存在)------
+# 闸门:内层必须命中系统 octomap。script_octomap.cmake 在 find_package(OCTOMAP
+# QUIET) 失配时会 ExternalProject_Add(EP_octomap) 去 GitHub 下内置 octomap;
+# 该 EP 的 prefix 目录在内层 configure 阶段即被创建,据此判定 OCTOMAP_DIR
+# 是否生效(chroot 无外网,退回下载分支通常已先一步失败,这里给出明确归因)。
+if [ -e mrpt-build/src/mrpt-build/EP_octomap-prefix ]; then
+ echo "ERROR: 内层未命中系统 octomap(OCTOMAP_DIR 注入失效)—— 已退回 ExternalProject 下载内置 octomap(无外网必挂)" >&2
+ exit 1
+fi
+# 闸门:内层必须命中系统 OpenCV。find_package(OpenCV QUIET NO_MODULE) 命中时
+# 会在内层 CMakeCache.txt 写入 OpenCV_DIR;未命中则 CMAKE_MRPT_HAS_OPENCV=0,
+# mrpt-vision 的 29 个 opencv 源文件被整体跳过——构建"成功"但功能残缺且无报错。
+if ! grep -q '^OpenCV_DIR' mrpt-build/src/mrpt-build/CMakeCache.txt; then
+ echo "ERROR: 内层未命中系统 OpenCV(OpenCV_DIR 未写入 CMakeCache.txt)—— BuildRequires: opencv 未生效或 OpenCVConfig.cmake 路径不对,mrpt-vision 会静默降级" >&2
+ exit 1
+fi
+echo "已命中系统 OpenCV: $(grep '^OpenCV_DIR' mrpt-build/src/mrpt-build/CMakeCache.txt)"
# 闸门:确认真的产出了 libmrpt-slam.so 与 libmrpt-vision.so。内层若没搜到
# mrpt-maps / mrpt-obs / mrpt-opengl(CMAKE_PREFIX_PATH 失效 / 兄弟库缺失),
# DeclareMRPTLib.cmake 只会打一行 Warning 就静默禁用该库,构建"成功"但装出的
@@ -310,6 +317,19 @@ make install DESTDIR=%{buildroot}
/opt/ros/%{ros_distro}
%changelog
+* Tue Sep 22 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-2
+- 修复 build 112599 的构建期自杀:构建段里"内层必须命中系统 OpenCV/octomap"
+ 两个闸门原本放在 make 之前,而内层 ExternalProject 的 configure 由 make 触发,
+ 彼时内层 mrpt-build/src/mrpt-build/CMakeCache.txt 与 EP_octomap-prefix 都还
+ 不存在,grep 必然 No such file or directory 而 exit 1(日志实证:外层 cmake
+ 已 100% 成功,失败纯粹来自该闸门)。现改为:make 之前只保留头文件/cmake
+ config 的存在性前置检查(/usr/include/octomap/ColorOcTree.h、
+ /usr/include/opencv4/opencv2/core.hpp、lib64/cmake/OpenCV/OpenCVConfig.cmake,
+ 本轮日志已实证三项均通过),两个内层 cache 闸门移到 make 之后与
+ libmrpt-slam/libmrpt-vision 产物闸门同处校验。
+ 与同链已构建成功的 mrpt-libopengl / -libmaps / -libobs / -libposes 等包一致:
+ 它们在 make 之前只保留 mrpt-gitclone.cmake(预置源码复用)闸门。
+
* Tue Sep 22 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-1
- 依赖可用性预检无 provider 修复(对齐同链已构建成功的 ros-humble-mrpt-libopengl
/ -libposes / -libtclap / -libobs / -libgui / -libmaps 处置方式;这些名字在