diff --git a/ignition-msgs7.spec b/ignition-msgs7.spec index feafa93ab54ddb5ed33b77446c09afb3b242402f..e591f2b9b95341669a5c8a9b0a4d3cdd37a5e533 100644 --- a/ignition-msgs7.spec +++ b/ignition-msgs7.spec @@ -11,14 +11,16 @@ Source0: ignition-msgs-7.2.0.tar.gz BuildRequires: cmake BuildRequires: gcc-c++ -BuildRequires: protobuf2-devel -BuildRequires: protobuf2-compiler +BuildRequires: protobuf-devel >= 3 +BuildRequires: protobuf-compiler >= 3 BuildRequires: ignition-cmake-devel >= 2 BuildRequires: ignition-math-devel >= 6 BuildRequires: ignition-tools-devel >= 1.5.0 BuildRequires: abseil-cpp-devel BuildRequires: pkgconfig BuildRequires: tinyxml2-devel +BuildRequires: ruby +BuildRequires: ruby-devel %description Ignition msgs is a component in the Ignition framework, a set of libraries @@ -58,35 +60,52 @@ make %{?_smp_mflags} cd build make install DESTDIR=%{buildroot} -# 更安全的路径修复方式(处理已存在目录的情况) +# --- 关键修正逻辑开始 --- + +# 1. 处理 /usr/usr 双重前缀问题 (先合并这个) if [ -d "%{buildroot}/usr/usr" ]; then - # 移动 lib64 内容(如果目标目录已存在则合并) - if [ -d "%{buildroot}/usr/usr/lib64" ]; then - mkdir -p %{buildroot}/usr/lib64 - cp -a %{buildroot}/usr/usr/lib64/* %{buildroot}/usr/lib64/ - rm -rf %{buildroot}/usr/usr/lib64 - fi - - # 移动其他目录 - for dir in %{buildroot}/usr/usr/*; do - if [ -e "$dir" ]; then - mkdir -p %{buildroot}/usr/$(basename "$dir") - mv -n "$dir"/* %{buildroot}/usr/$(basename "$dir")/ - fi - done - - # 清理空目录 + cp -a %{buildroot}/usr/usr/* %{buildroot}/usr/ rm -rf %{buildroot}/usr/usr fi -# 确保 Ruby 文件目录存在 -mkdir -p %{buildroot}%{_libdir}/ruby/ignition/msgs7 +# 2. 自动修正 Ruby 文件位置 +# 这一步会查找 cmdmsgs7.rb 到底在哪,如果不在 lib64 下,就把它移过去 +# 这样能同时解决 "安装在 /usr/lib" 和 "安装在 /usr/lib64" 的问题 +TARGET_RUBY_DIR="%{buildroot}%{_libdir}/ruby/ignition" +mkdir -p "$TARGET_RUBY_DIR" + +# 查找已安装的 cmdmsgs7.rb 文件位置 +FOUND_RB=$(find %{buildroot} -name "cmdmsgs7.rb" -type f | head -n 1) + +if [ -n "$FOUND_RB" ]; then + echo "Found ruby file at: $FOUND_RB" + # 获取它所在的目录 + FOUND_DIR=$(dirname "$FOUND_RB") + + # 如果找到的目录不是我们预期的目录,则移动文件 + if [ "$FOUND_DIR" != "$TARGET_RUBY_DIR" ]; then + echo "Moving ruby files from $FOUND_DIR to $TARGET_RUBY_DIR" + mv "$FOUND_DIR"/* "$TARGET_RUBY_DIR"/ + # 尝试删除旧的空目录 (例如 /usr/lib/ruby/ignition) + rmdir -p "$FOUND_DIR" 2>/dev/null || true + fi +else + echo "WARNING: cmdmsgs7.rb was NOT generated by cmake!" + echo "Check build logs for Ruby detection errors." + # 为了让构建不报错(如果该文件不是必须的),可以生成一个空的占位符 + # 或者如果不生成就让它失败,下面的 exit 1 会确保我们知道文件没生成 + # exit 1 +fi + +# --- 关键修正逻辑结束 --- %files %{_libdir}/libignition-msgs*.so.* +# 这里使用明确的路径,因为我们在 install 阶段已经强制移动了文件 %{_libdir}/ruby/ignition/msgs7/ -/usr/lib/ruby/ignition/cmdmsgs7.rb +%{_libdir}/ruby/ignition/cmdmsgs7.rb %{_datadir}/ignition/msgs7.yaml +%{_datadir}/ignition/ignition-msgs7/ %files devel %{_includedir}/ignition/msgs* @@ -96,4 +115,4 @@ mkdir -p %{buildroot}%{_libdir}/ruby/ignition/msgs7 %changelog * Tue Aug 01 2023 Your Name - 7.2.0-1 -- Initial package for Ignition msgs 7.2.0 \ No newline at end of file +- Fix ruby file paths \ No newline at end of file