From 854c614dc8ff09a0a24b06dfa5c027fa0c768fb7 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Tue, 22 Sep 2026 04:51:38 +0000 Subject: automatic import of ros-humble-mrpt-libslam --- mrpt-libslam.spec | 52 ++++++++++++++++++++++++++++++++++++---------------- 1 file 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 - 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 - 2.15.20-1 - 依赖可用性预检无 provider 修复(对齐同链已构建成功的 ros-humble-mrpt-libopengl / -libposes / -libtclap / -libobs / -libgui / -libmaps 处置方式;这些名字在 -- cgit v1.2.3