From 9f00e350796166bb6875f57cb2b80077d6322e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 28 Aug 2025 13:50:11 +0200 Subject: [PATCH 1/2] Don't assume shared library is installed relative to files in lib This currently works, but it's planned to eventually stop doing it. Furthermore, there's a `.gemrc` configuration (install_extension_in_lib) that some OS packagers set to false to enable the future behavior, and gems making this assumption don't work with that. Honestly, it feels like a very hard change for RubyGems to make smoothly and that makes me doubt it's worth doing, but this would be the "blessed way" that should not break regardless of what we end up doing. --- isolated/README.md | 7 ++++++- isolated/lib/rcee/isolated.rb | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/isolated/README.md b/isolated/README.md index 9ebde15..4de03a1 100644 --- a/isolated/README.md +++ b/isolated/README.md @@ -58,9 +58,14 @@ gcc -shared -L/path/to/ruby/lib -lruby -lc -lm isolated.o -o isolated.so That final shared library, `isolated.so`, is loaded like any other Ruby file, via `require` in `lib/rcee/isolated.rb`: ``` ruby -require_relative "isolated/isolated" +require "rcee/isolated/isolated" ``` +Even though RubyGems currently installs shared libraries relatively to Ruby +files in lib/, it may stop doing so in the future, so it's safer to not load +shared libraries from Ruby code using `require_relative`, but rather rely on the +`$LOAD_PATH` and use `require`. + ## Testing See [.github/workflows/isolated.yml](../.github/workflows/isolated.yml) diff --git a/isolated/lib/rcee/isolated.rb b/isolated/lib/rcee/isolated.rb index cdfe31b..63942ea 100644 --- a/isolated/lib/rcee/isolated.rb +++ b/isolated/lib/rcee/isolated.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "isolated/version" -require_relative "isolated/isolated" +require "rcee/isolated/isolated" module RCEE module Isolated From 068016de9cd785a82fec28de0df35798adb3b29a Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Sun, 14 Sep 2025 13:23:21 -0400 Subject: [PATCH 2/2] Make the previous change for the other four gems --- packaged_source/lib/rcee/packaged_source.rb | 2 +- packaged_tarball/lib/rcee/packaged_tarball.rb | 2 +- precompiled/lib/rcee/precompiled.rb | 2 +- system/lib/rcee/system.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packaged_source/lib/rcee/packaged_source.rb b/packaged_source/lib/rcee/packaged_source.rb index c45426f..23a45c9 100644 --- a/packaged_source/lib/rcee/packaged_source.rb +++ b/packaged_source/lib/rcee/packaged_source.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "packaged_source/version" -require_relative "packaged_source/packaged_source" +require "rcee/packaged_source/packaged_source" module RCEE module PackagedSource diff --git a/packaged_tarball/lib/rcee/packaged_tarball.rb b/packaged_tarball/lib/rcee/packaged_tarball.rb index 3e994eb..de5b3bf 100644 --- a/packaged_tarball/lib/rcee/packaged_tarball.rb +++ b/packaged_tarball/lib/rcee/packaged_tarball.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "packaged_tarball/version" -require_relative "packaged_tarball/packaged_tarball" +require "rcee/packaged_tarball/packaged_tarball" module RCEE module PackagedTarball diff --git a/precompiled/lib/rcee/precompiled.rb b/precompiled/lib/rcee/precompiled.rb index e14b9f1..6e74c6b 100644 --- a/precompiled/lib/rcee/precompiled.rb +++ b/precompiled/lib/rcee/precompiled.rb @@ -5,7 +5,7 @@ begin # load the precompiled extension file ruby_version = /(\d+\.\d+)/.match(::RUBY_VERSION) - require_relative "precompiled/#{ruby_version}/precompiled" + require "rcee/precompiled/#{ruby_version}/precompiled" rescue LoadError # fall back to the extension compiled upon installation. # use "require" instead of "require_relative" because non-native gems will place C extension files diff --git a/system/lib/rcee/system.rb b/system/lib/rcee/system.rb index a882f84..37886e8 100644 --- a/system/lib/rcee/system.rb +++ b/system/lib/rcee/system.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "system/version" -require_relative "system/system" +require "rcee/system/system" module RCEE module System