Skip to content

Support default & bundled extension gems #2644

@eregon

Description

@eregon
Member

This an issue to track all default gems with an extension, which might need specific support for TruffleRuby.
For some, we might just reuse the C extension and add TruffleRuby in the CI of those gems.

These default extension gems are problematic when they included in a Gemfile.lock, https://bugs.ruby-lang.org/issues/18567#note-30 has more details.
Related JRuby issue: jruby/jruby#6682

For some extensions gems, we have a different implementation, typically pure-Ruby.
For some extensions gems we use them as-is (just need to add truffleruby in CI).

Pure-Ruby gems (good to add truffleruby in CI):

Activity

self-assigned this
on Apr 22, 2022
chrisseaton

chrisseaton commented on Apr 22, 2022

@chrisseaton
Collaborator

Do JRuby have an approach to this problem? Do they all include Java code?

eregon

eregon commented on Apr 23, 2022

@eregon
MemberAuthor

Yes basically JRuby's approach so far is to mostly upstream their JRuby-specific extension Java code into those default gems' repositories (and publish a java platform gem).
You can check the linked PRs in the linked JRuby issue for more details.

eregon

eregon commented on Jan 27, 2023

@eregon
MemberAuthor

Here is a list of default gems with extensions in 3.1:

$ grep -a -R extensions lib/gems/specifications/default  | sort
lib/gems/specifications/default/bigdecimal-3.1.1.gemspec:  s.extensions = ["ext/bigdecimal/extconf.rb".freeze]
lib/gems/specifications/default/cgi-0.3.5.gemspec:  s.extensions = ["ext/cgi/escape/extconf.rb".freeze]
lib/gems/specifications/default/date-3.2.2.gemspec:  s.extensions = ["ext/date/extconf.rb".freeze]
lib/gems/specifications/default/digest-3.1.0.gemspec:  s.extensions = ["ext/digest/bubblebabble/extconf.rb".freeze, "ext/digest/extconf.rb".freeze, "ext/digest/md5/extconf.rb".freeze, "ext/digest/rmd160/extconf.rb".freeze, "ext/digest/sha1/extconf.rb".freeze, "ext/digest/sha2/extconf.rb".freeze]
lib/gems/specifications/default/etc-1.3.0.gemspec:  s.extensions = ["ext/etc/extconf.rb".freeze]
lib/gems/specifications/default/fcntl-1.0.1.gemspec:  s.extensions = ["ext/fcntl/extconf.rb".freeze]
lib/gems/specifications/default/fiddle-1.1.0.gemspec:  s.extensions = ["ext/fiddle/extconf.rb".freeze]
lib/gems/specifications/default/io-console-0.5.11.gemspec:  s.extensions = ["ext/io/console/extconf.rb".freeze]
lib/gems/specifications/default/io-nonblock-0.1.0.gemspec:  s.extensions = ["ext/io/nonblock/extconf.rb".freeze]
lib/gems/specifications/default/io-wait-0.2.1.gemspec:  s.extensions = ["ext/io/wait/extconf.rb".freeze]
lib/gems/specifications/default/json-2.6.1.gemspec:  s.extensions = ["ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/extconf.rb".freeze]
lib/gems/specifications/default/openssl-3.0.1.gemspec:  s.extensions = ["ext/openssl/extconf.rb".freeze]
lib/gems/specifications/default/pathname-0.2.0.gemspec:  s.extensions = ["ext/pathname/extconf.rb".freeze]
lib/gems/specifications/default/psych-4.0.4.gemspec:  s.extensions = ["ext/psych/extconf.rb".freeze]
lib/gems/specifications/default/racc-1.6.0.gemspec:  s.extensions = ["ext/racc/cparse/extconf.rb".freeze]
lib/gems/specifications/default/readline-ext-0.1.4.gemspec:  s.extensions = ["ext/readline/extconf.rb".freeze]
lib/gems/specifications/default/stringio-3.0.1.gemspec:  s.extensions = ["ext/stringio/extconf.rb".freeze]
lib/gems/specifications/default/strscan-3.0.1.gemspec:  s.extensions = ["ext/strscan/extconf.rb".freeze]
lib/gems/specifications/default/syslog-0.1.0.gemspec:  s.extensions = ["ext/syslog/extconf.rb".freeze]
lib/gems/specifications/default/zlib-2.1.1.gemspec:  s.extensions = ["ext/zlib/extconf.rb".freeze]

And for the raw list:

grep -a -R extensions lib/gems/specifications/default  | sort | ruby -e 'puts STDIN.readlines.map { |line| line[/\/([a-z-]+?)-\d/,1] }'

We should prioritize adding truffleruby in the CI of those to make sure they work and keep working on truffleruby.

changed the title [-]Support default extension gems[/-] [+]Support default & bundled extension gems[/+] on Sep 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @eregon@chrisseaton@andrykonchin

      Issue actions

        Support default & bundled extension gems · Issue #2644 · oracle/truffleruby