Force build-time gem installs to use current JRuby config#9197
Closed
headius wants to merge 1 commit intojruby:masterfrom
Closed
Force build-time gem installs to use current JRuby config#9197headius wants to merge 1 commit intojruby:masterfrom
headius wants to merge 1 commit intojruby:masterfrom
Conversation
The RubyGems we run at build time runs with JRuby 9.4, which causes it to use properties from that version for things like gem paths and extension directories. This is related to the extension disabling change in jruby#8415 and causes the build-time extension faking to use the wrong path. For example: .../gems/shared/extensions/universal-java-25/3.1.0 when it should be .../gems/shared/extensions/universal-java/3.4.0 The change here uses RubyGems' cross-compiling capability by forcing a specific rbconfig.rb to be use, and additionally fakes out the Ruby API version by setting @ruby_api_version on the Gem module. This was discovered while attempting to switch fully to the syslog gem in jruby#9109, since as a bundled gem it will not be activated unless we successfully fake-out the extension build. See also this bug related to the resolv gem installing extensions: * jruby#8649
headius
added a commit
to headius/jruby
that referenced
this pull request
Jan 29, 2026
Because of the issue described in an fixed by jruby#9197, the fake-out of the syslog extension build fails. Because it was being installed as a bundled gem rather than a default gem, and RubyGems will not activate a gem whose extension has not been built, this prevented syslog from being loadable. The change here moves it to a default gem for now, so that it can still be loaded from stdlib as well as being upgraded by users. These changes should be reverted once the gem platform fix has been merged.
This was referenced Jan 29, 2026
headius
added a commit
to headius/jruby
that referenced
this pull request
Jan 29, 2026
Because of the issue described in an fixed by jruby#9197, the fake-out of the syslog extension build fails. Because it was being installed as a bundled gem rather than a default gem, and RubyGems will not activate a gem whose extension has not been built, this prevented syslog from being loadable. The change here moves it to a default gem for now, so that it can still be loaded from stdlib as well as being upgraded by users. These changes should be reverted once the gem platform fix has been merged.
Merged
Member
Author
|
I merged #9198 before this so that pulled in the changes here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The RubyGems we run at build time runs with JRuby 9.4, which causes it to use properties from that version for things like gem paths and extension directories. This is related to the extension disabling change in #8415 and causes the build-time extension faking to use the wrong path. For example:
.../gems/shared/extensions/universal-java-25/3.1.0
when it should be
.../gems/shared/extensions/universal-java/3.4.0
The change here uses RubyGems' cross-compiling capability by forcing a specific rbconfig.rb to be use, and additionally fakes out the Ruby API version by setting @ruby_api_version on the Gem module.
This was discovered while attempting to switch fully to the syslog gem in #9109, since as a bundled gem it will not be activated unless we successfully fake-out the extension build.
See also this bug related to the resolv gem installing extensions: