summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2026-09-21 08:07:31 +0000
committerCoprDistGit <infra@openeuler.org>2026-09-21 08:07:31 +0000
commitb7c16b8aef2e74ef582a3687c1a5a1bc7f0ce723 (patch)
treeb8247db36dbc0269ecfbe181ec2d496a155b1a61
parent29081660b747e292d3ad6e2eb2a8a00d7ec7540e (diff)
automatic import of ros-humble-mrpt-libbaseopeneuler24.03_LTS_SP3
-rw-r--r--.gitignore2
-rw-r--r--mrpt-libbase.spec50
-rw-r--r--sources2
3 files changed, 52 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index 2bff02a..afb443c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
/mrpt-libbase-2.15.20.tar.gz
/mrpt-2.15.21.tar.gz
+/nanoflann-1.5.5.tar.gz
+/simpleini-4.22.tar.gz
diff --git a/mrpt-libbase.spec b/mrpt-libbase.spec
index b5d8c86..e3bf581 100644
--- a/mrpt-libbase.spec
+++ b/mrpt-libbase.spec
@@ -2,16 +2,26 @@
%define RosPkgName mrpt-libbase
%define src_version 2.15.20
%define mrpt_version 2.15.21
+# mrpt 的 git submodule 内容(GitHub archive tarball 不含),按需手工补:
+%define nanoflann_version 1.5.5
+%define simpleini_version 4.22
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 2.15.20
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Mobile Robot Programming Toolkit (MRPT) libraries (core C++ libraries)
License: BSD
URL: https://github.com/MRPT/mrpt_ros.git
Source0: %{RosPkgName}-%{src_version}.tar.gz
# mrpt upstream source, pre-fetched to avoid ExternalProject git clone at build time
Source1: https://github.com/MRPT/mrpt/archive/refs/tags/%{mrpt_version}.tar.gz#/mrpt-%{mrpt_version}.tar.gz
+# mrpt 的两个 submodule(COPR chroot 无外网,构建期无法下载/克隆,须随 SRPM 携带):
+# nanoflann —— mrpt 强制依赖(script_nanoflann.cmake: FATAL_ERROR if not found),
+# openEuler 无系统包,只能喂 3rdparty/nanoflann 让内层自建(头文件库)
+# simpleini —— mrpt-config 编译 CConfigFile.cpp 需要 SimpleIni.h(script_simpleini.cmake
+# 回退到 3rdparty/simpleini 作为 include 目录)
+Source2: https://github.com/jlblancoc/nanoflann/archive/refs/tags/v%{nanoflann_version}.tar.gz#/nanoflann-%{nanoflann_version}.tar.gz
+Source3: https://github.com/brofield/simpleini/archive/refs/tags/v%{simpleini_version}.tar.gz#/simpleini-%{simpleini_version}.tar.gz
%global debug_package %{nil}
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
@@ -21,8 +31,9 @@ Source1: https://github.com/MRPT/mrpt/archive/refs/tags/%{mrpt_version}.t
BuildRequires: assimp-devel
BuildRequires: eigen3-devel
BuildRequires: ffmpeg-devel
-BuildRequires: freeglut
+BuildRequires: freeglut-devel
BuildRequires: git
+BuildRequires: gtest-devel
BuildRequires: libXrandr-devel
BuildRequires: libXxf86vm-devel
BuildRequires: libpcap-devel
@@ -71,6 +82,21 @@ sed -i 's|\${CMAKE_BINARY_DIR}/\.\./mrpt_libbase/mrpt-build|${CMAKE_CURRENT_LIST
# HOME 非 /home/buildfarm,去掉后复用分支在任何构建环境都成立。
sed -i 's/AND (NOT "\$ENV{HOME}" STREQUAL "\/home\/buildfarm")//' \
mrpt_libbase/CMakeLists.txt
+# 给内层 mrpt 追加开关(外层 cmake 命令行传的 MRPT_WITH_xxx 落在 ROS 包装工程上,
+# 而包装工程只把它们原样忽略——真正生效的是写死在 ExternalProject_Add 的
+# CMAKE_ARGS,必须在此注入):
+# MRPT_HAS_LIBFYAML=OFF openEuler 无 libfyaml,内置分支要 3rdparty/libfyaml
+# (submodule 空目录)且会 file(READ .tarball-version) 报错;
+# 该特性只影响 mrpt::containers::yaml,关掉即可(ROS 包
+# package.xml 里 libfyaml-dev 也被上游注释掉了)
+# MRPT_WITH_KINECT=OFF libusb 存在时默认开启 Kinect,会去编译空的
+# 3rdparty/libfreenect(openEuler 无 libfreenect-devel)
+# MRPT_HAS_OPENNI2=OFF 无 libopenni2
+# MRPT_BUILD_OCTOMAP=OFF 无系统 octomap 时 ExternalProject 会从 GitHub 下载
+# octomap(构建期无外网必失败);octomap 只被 maps/obs/
+# opengl 使用,本包(libbase 粒度)全部为 OFF
+sed -i 's|^\(\s*-DDISABLE_JSONCPP=ON\)$|\1\n -DMRPT_HAS_LIBFYAML=OFF\n -DMRPT_WITH_KINECT=OFF\n -DMRPT_HAS_OPENNI2=OFF\n -DMRPT_BUILD_OCTOMAP=OFF|' \
+ mrpt_libbase/CMakeLists.txt
# 预置 ExternalProject 的 SOURCE_DIR:<top>/mrpt-build/src/mrpt
mkdir -p mrpt-build/src
tar -xzf %{SOURCE1} -C mrpt-build/src
@@ -85,6 +111,12 @@ echo -n "%{mrpt_version}" > mrpt-build/MRPT_VERSION_TO_DOWNLOAD.txt
# -DMRPT_BUILD_rplidar_sdk=OFF 关闭,不会被真正编译。
mkdir -p mrpt-build/src/mrpt/3rdparty/nanogui/include \
mrpt-build/src/mrpt/3rdparty/rplidar_sdk/sdk/src
+# 填充 mrpt 的两个必需 submodule(见 Source2/Source3 说明):nanoflann 供内层
+# CMake 自建(头文件库),simpleini 仅作为 mrpt-config 的 include 目录。
+rm -rf mrpt-build/src/mrpt/3rdparty/nanoflann mrpt-build/src/mrpt/3rdparty/simpleini
+mkdir -p mrpt-build/src/mrpt/3rdparty/nanoflann mrpt-build/src/mrpt/3rdparty/simpleini
+tar -xzf %{SOURCE2} -C mrpt-build/src/mrpt/3rdparty/nanoflann --strip-components=1
+tar -xzf %{SOURCE3} -C mrpt-build/src/mrpt/3rdparty/simpleini --strip-components=1
# Override the version cmake reads from package.xml to match the pre-fetched source
echo 'set(MRPT_VERSION_TO_DOWNLOAD "%{mrpt_version}")' > override_mrpt_version.cmake
@@ -127,6 +159,20 @@ make install DESTDIR=%{buildroot}
/opt/ros/%{ros_distro}
%changelog
+* Mon Sep 21 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-3
+- 内层 mrpt 配置期剩余的 "无 submodule" 阻断逐个消除:
+ * 注入 -DMRPT_HAS_LIBFYAML=OFF / -DMRPT_WITH_KINECT=OFF / -DMRPT_HAS_OPENNI2=OFF
+ / -DMRPT_BUILD_OCTOMAP=OFF(外层 cmake 传的 MRPT_WITH_* 是空转,必须写进
+ 包装工程的 ExternalProject CMAKE_ARGS)。
+ * 新增 Source2(nanoflann 1.5.5)、Source3(simpleini 4.22) 并在 %prep 填入
+ 3rdparty/nanoflann、3rdparty/simpleini(mrpt 强制依赖 nanoflann;mrpt-config
+ 需要 SimpleIni.h)。
+- BuildRequires: freeglut → freeglut-devel(openEuler 的 freeglut 只有运行库,
+ 头文件/so 链接在 -devel;找不到系统 GLUT 时 mrpt 编内置 freeglut,会因
+ -Werror=implicit-function-declaration 失败);新增 gtest-devel(避免编译内置
+ googletest)。
+- 本地按同一组 CMAKE_ARGS 完整验证:内层 mrpt 配置 + mrpt-config/containers/core/
+ io/random/rtti/serialization/system/expr/typemeta 全部编译通过。
* Mon Sep 21 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-2
- 修复 %build 期 ExternalProject 退回 git clone 导致构建失败(COPR 无外网):
%prep 将 CMakeLists.txt 的本地复用路径 ${CMAKE_BINARY_DIR}/../mrpt_libbase/
diff --git a/sources b/sources
index f9366ee..9bfd6f2 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,4 @@
9f9a7c42d30f686dc66bc7df3c984d65 mrpt-2.15.21.tar.gz
a281ecc4691e3992241aa296c1f93b94 mrpt-libbase-2.15.20.tar.gz
+b7bc9c01f1408a3646a5b57feb1b7225 nanoflann-1.5.5.tar.gz
+440bd308bbc5e1c39ab0ac3db14971f1 simpleini-4.22.tar.gz