diff mbox series

[v2] ruby: scrub build host paths from rbconfig.rb for nativesdk too

Message ID 20260806115809.3765164-1-twoerner@gmail.com
State New
Headers show
Series [v2] ruby: scrub build host paths from rbconfig.rb for nativesdk too | expand

Commit Message

Trevor Woerner Aug. 6, 2026, 11:58 a.m. UTC
rbconfig.rb records the flags ruby was configured with, which include the
recipe sysroot, the hosttools directory and the debug prefix map, all of
them paths on the machine that did the build. The recipe removes them,
but only for class-target, so a nativesdk build ships them.

Nothing noticed because nativesdk-ruby has not been installed into an
SDK before. Doing so fails do_package_qa outright:

  QA Issue: File .../rbconfig.rb in package nativesdk-ruby contains
  reference to TMPDIR [buildpaths]

Move the scrubbing into a function and call it for class-nativesdk as
well as class-target.

Deliberately not for class-native. A native rbconfig.rb names paths
inside the native sysroot, and those are correct: stripping them leaves
the file pointing at the build host's /usr, which breaks every recipe
that builds anything with ruby-native. With the scrub applied to native,
DLDFLAGS becomes

  -L/usr/lib -L/lib -Wl,-rpath,/usr/lib ...

and CFLAGS becomes -isystem/usr/include. Nothing packages a native
rbconfig.rb, so there is no reason to touch it.

AI-Generated: codex/claude-opus 5 (xhigh)
Signed-off-by: Trevor Woerner <twoerner@gmail.com>
---
 meta/recipes-devtools/ruby/ruby_4.0.6.bb | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/meta/recipes-devtools/ruby/ruby_4.0.6.bb b/meta/recipes-devtools/ruby/ruby_4.0.6.bb
index 13b6746bbeb3..2bbe434f196a 100644
--- a/meta/recipes-devtools/ruby/ruby_4.0.6.bb
+++ b/meta/recipes-devtools/ruby/ruby_4.0.6.bb
@@ -78,7 +78,7 @@  EXTRA_OECONF:append:libc-musl = "\
 
 PARALLEL_MAKEINST = ""
 
-do_install:append:class-target () {
+ruby_scrub_rbconfig () {
     rbconfig_rb=`find ${D} -name rbconfig.rb`
     # Remove build host directories
     sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' \
@@ -97,6 +97,16 @@  do_install:append:class-target () {
     find ${D} -name gem_make.out -delete
 }
 
+# Not for class-native: those paths point into the native sysroot and are
+# correct there, and scrubbing them leaves ruby-native naming the host's /usr.
+do_install:append:class-target () {
+    ruby_scrub_rbconfig
+}
+
+do_install:append:class-nativesdk () {
+    ruby_scrub_rbconfig
+}
+
 do_install_ptest () {
     cp -rf ${S}/test ${D}${PTEST_PATH}/
     install -D ${S}/tool/test/init.rb ${D}${PTEST_PATH}/tool/test/init.rb