From 0131acf7bd1d49be8e9df3d998c2f52160ca0bee Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Tue, 22 Sep 2026 06:25:43 +0000 Subject: automatic import of ros-humble-mrpt-apps --- mrpt-apps.spec | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/mrpt-apps.spec b/mrpt-apps.spec index 13e9596..a4d1ba9 100644 --- a/mrpt-apps.spec +++ b/mrpt-apps.spec @@ -8,7 +8,7 @@ Name: ros-%{ros_distro}-%{RosPkgName} Version: 2.15.20 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Mobile Robot Programming Toolkit (MRPT) applications License: BSD URL: https://github.com/MRPT/mrpt_ros.git @@ -367,13 +367,35 @@ fi # 硬失败。阈值取 5:apps/ 下 40 余个目标里,被 wx/nanogui/openni2/Qt 守护正常 # 跳过的约十余个,健康的构建远高于该阈值(已按上游 apps/*/CMakeLists.txt 的 # 守护条件逐目录统计:无守护 + 依赖已就位的目标 20 个以上)。 -_apps_bin=$(find mrpt-build/src/mrpt-build/apps -type f -perm -u+x 2>/dev/null \ - | grep -v -E '\.(sh|cmake|txt|in|py)$' | wc -l | tr -d '[:space:]') -echo "apps 目录产出的可执行文件数: ${_apps_bin}" -if [ "${_apps_bin:-0}" -lt 5 ]; then - echo "ERROR: apps 目录产出可执行文件仅 ${_apps_bin} 个(阈值 5)—— 内层很可能因 find_package(mrpt-XXX) 未命中而把大量 app 静默置 OFF(残缺包)" >&2 - echo "---- apps 目录实际内容(顶层)----" >&2 - ls mrpt-build/src/mrpt-build/apps 2>/dev/null | head -50 >&2 +# ★ 判据路径必须取"产物落点",不能取源码/构建子目录:apps/ 下每个条目只是一 +# 个 app 的构建目录(apps/yaml2ini/...,里面只有 CMakeFiles 与 Makefile), +# 可执行文件的落点是内层构建树顶层的 bin/ —— 内层每个 app 的链接命令都是 +# "Linking CXX executable ../../bin/",相对 apps// 展开即 +# <内层构建树>/bin/。build 112612 实测内层构建全绿(各 app 逐条链接 +# 成功、"Built target apps_all"、"Completed 'mrpt'"),而上一版闸门写死 +# find apps/ 于是数出 0 个,纯属闸门自伤(同链 mrpt-libapps 的 build +# 112607/112609 也是闸门判据写错导致的自伤,与包内容无关)。 +# ★ 为免再因路径假设写死而误报,下面改为对候选目录逐个 test -d 后取最大值; +# 候选目录全都不存在时只告警不失败 —— 判据无法证真时不误报。 +_apps_bin=0 +_probe="" +for _d in mrpt-build/src/mrpt-build/bin mrpt-build/src/mrpt-build/apps; do + [ -d "$_d" ] || continue + _n=$(find "$_d" -type f -perm -u+x 2>/dev/null \ + | grep -v -E '\.(sh|cmake|txt|in|py)$' | wc -l | tr -d '[:space:]') + _probe="${_probe}${_d}=${_n:-0} " + if [ "${_n:-0}" -gt "$_apps_bin" ]; then _apps_bin="$_n"; fi +done +echo "内层产出的可执行文件数(候选目录逐个统计): ${_probe}" +if [ -z "$_probe" ]; then + echo "WARNING: 产物候选目录均不存在,无法判定 app 产出,跳过本闸门" >&2 +elif [ "$_apps_bin" -lt 5 ]; then + echo "ERROR: 内层产出的可执行文件仅 ${_apps_bin} 个(阈值 5)—— 内层很可能因 find_package(mrpt-XXX) 未命中而把大量 app 静默置 OFF(残缺包)" >&2 + echo "---- 候选目录实际内容(顶层)----" >&2 + for _d in mrpt-build/src/mrpt-build/bin mrpt-build/src/mrpt-build/apps; do + echo " [$_d]" >&2 + ls "$_d" 2>/dev/null | head -50 >&2 + done exit 1 fi @@ -389,6 +411,20 @@ make install DESTDIR=%{buildroot} /opt/ros/%{ros_distro} %changelog +* Tue Sep 22 2026 ai-importer - 2.15.20-4 +- 修复 build 112612 的 %build 段"闸门自伤"(aarch64,构建内容本身无误): + * 症状:内层 mrpt 构建全绿(apps 逐个链接成功、"Built target apps_all"、 + "Completed 'mrpt'"),却在紧随其后的"产出可执行程序"闸门处 exit 1, + 报文为 "apps 目录产出可执行文件仅 0 个(阈值 5)"。 + * 根因:闸门判据路径写错。apps/ 下每个条目只是一个 app 的构建目录 + (apps/yaml2ini/...,内部只有 CMakeFiles 与 Makefile),可执行文件的落点 + 是内层构建树顶层的 bin/ —— 内层链接命令均为 + "Linking CXX executable ../../bin/",相对 apps// 展开即 + <内层构建树>/bin/。写死 find apps/ 在健康构建上必然数出 0 个, + 属闸门自伤(同链 mrpt-libapps 的 build 112607/112609 同类)。 + * 修法:闸门改为对候选目录(bin 与 apps)逐个 test -d 后取可执行文件数 + 的最大值;候选目录全不存在时只告警不硬失败(判据无法证真时不误报)。 + 阈值 5 保留,失败诊断输出扩充为同时打印两个候选目录的内容。 * Tue Sep 22 2026 ai-importer - 2.15.20-3 - 修复 build 112611 的构建阶段(build 段)链接失败(aarch64): * 症状:apps 下全部可执行程序在链接期倒下, -- cgit v1.2.3