From: "byroot (Jean Boussier) via ruby-core" Date: 2024-01-06T13:51:35+00:00 Subject: [ruby-core:116055] [Ruby master Feature#20152] mkmf / extconf: Add a proper way to not compile the extension Issue #20152 has been updated by byroot (Jean Boussier). > This is not something mkmf can do on its own, it would need changes in RubyGems Thanks for the info, as I said, I'm quite unfamiliar with how these pieces fit together. > Maybe RubyGems could recognize dummy Makefiles Or look for a specially named file? This way `mkmf` could just create that file and move on? > OTOH, IMO it's not a big ask for devs/users to install make when they are installing gems. On UNIX systems it's not, but on Windows it start to be a bit more complicated. > So trying to avoid needing make on JRuby seems very niche to me. I honestly don't mind it that much, but it's true that if the end the Makefile does nothing, we might as well not require make, would be nicer. ---------------------------------------- Feature #20152: mkmf / extconf: Add a proper way to not compile the extension https://bugs.ruby-lang.org/issues/20152#change-106052 * Author: byroot (Jean Boussier) * Status: Open * Priority: Normal ---------------------------------------- ### Context There are various gems that ship with a native extension as a way to speedup part of the gem, but also ship with a pure Ruby version of these methods as a fallback. So they only want to compile the extension if the platform supports it, and if not, just fallback to the slightly slower Ruby version. Right now users rely on one of two hacks to do this. Either they create an empty Makefile, but then still depend on `make` being available, or publish platform specific packages without any extension in them. Examples: - [`bootsnap` skip compilation if not on MRI or TruffleRuby](https://github.com/Shopify/bootsnap/blob/070151f1305f23102365d6b4476a91c02dead35a/ext/bootsnap/extconf.rb) - [`erb` has an extension for MRI but then need to publish a `java` version of the gem that doesn't actually contain Java code, just to skip compilation on JRuby](https://github.com/ruby/erb/issues/52) - [`hiredis-client` skips the compilation for Windows and non-MRI rubies](https://github.com/redis-rb/redis-client/blob/1ab081c1d0e47df5d55e011c9390c70b2eef6731/hiredis-client/ext/redis_client/hiredis/extconf.rb#L10-L17) ### Feature It would be very useful to have some proper first class API to skip compiling the extension. Something like: ```ruby require "mkmf" if RUBY_ENGINE != "ruby" || RUBY_PLATFORM.match?(/mswin/) skip_compilation else # ... end ``` cc @k0kubun @headius -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/