diff options
author | Alan Wu <[email protected]> | 2022-07-29 13:54:27 -0400 |
---|---|---|
committer | Yuta Saito <[email protected]> | 2022-08-04 16:29:22 +0900 |
commit | e5a3f232563139fdf15660d54aeaec112ffc2349 (patch) | |
tree | 8a4c23500804f5d370d85216e6d73e6d7d14beb7 | |
parent | c69582a5401ac7b6e59b87a8bcc8636c27eb923e (diff) |
Use $(bindir) for path to executable in mkmf
For the macOS -bundle_loader linker option, we need a path to the
Ruby exectuable. $(RUBY) is not necessarily a path since it could
be a command line invocation. That happens during build with
runruby.rb and can happen post installation if the user passes
the --ruby option to a extconf.rb. Use $(bindir) to locate
the executable instead.
Before installation, $(bindir) doesn't exist, so we need to be
able to override $(BUILTRUBY) in such situations so test-spec
and bundled extensions could build. Use a new mkmf global,
$builtruby, to do this; set it in fake.rb and in extmk.rb.
Our build system is quite complex...
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6193
-rwxr-xr-x | ext/extmk.rb | 2 | ||||
-rw-r--r-- | lib/mkmf.rb | 6 | ||||
-rw-r--r-- | tool/fake.rb | 1 |
3 files changed, 7 insertions, 2 deletions
diff --git a/ext/extmk.rb b/ext/extmk.rb index 70067d28b8..b0d84ef00f 100755 --- a/ext/extmk.rb +++ b/ext/extmk.rb @@ -417,7 +417,6 @@ elsif CONFIG['EXTSTATIC'] else $ruby = '$(topdir)/ruby' + EXEEXT end -$mflags << "BUILTRUBY=#$ruby" $ruby = [$ruby] $ruby << "-I'$(topdir)'" unless CROSS_COMPILING @@ -428,6 +427,7 @@ end topruby = $ruby $ruby = topruby.join(' ') $mflags << "ruby=#$ruby" +$builtruby = '$(topdir)/ruby' + EXEEXT # Must be an executable path MTIMES = [__FILE__, 'rbconfig.rb', srcdir+'/lib/mkmf.rb'].collect {|f| File.mtime(f)} diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 79bb96ba75..efe3419fd7 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -2076,7 +2076,11 @@ sitearch = #{CONFIG['sitearch']} ruby_version = #{RbConfig::CONFIG['ruby_version']} ruby = #{$ruby.sub(%r[\A#{Regexp.quote(RbConfig::CONFIG['bindir'])}(?=/|\z)]) {'$(bindir)'}} RUBY = $(ruby#{sep}) -BUILTRUBY = $(RUBY) +BUILTRUBY = #{if defined?($builtruby) && $builtruby + $builtruby + else + File.join('$(bindir)', CONFIG["RUBY_INSTALL_NAME"] + CONFIG['EXEEXT']) + end} ruby_headers = #{headers.join(' ')} RM = #{config_string('RM', &possible_command) || '$(RUBY) -run -e rm -- -f'} diff --git a/tool/fake.rb b/tool/fake.rb index 88709b2f23..91dfb041c4 100644 --- a/tool/fake.rb +++ b/tool/fake.rb @@ -45,6 +45,7 @@ prehook = proc do |extmk| $extout_prefix = '$(extout)$(target_prefix)/' config = RbConfig::CONFIG mkconfig = RbConfig::MAKEFILE_CONFIG + $builtruby ||= File.join(builddir, config['RUBY_INSTALL_NAME'] + config['EXEEXT']) RbConfig.fire_update!("builddir", builddir) RbConfig.fire_update!("buildlibdir", builddir) RbConfig.fire_update!("libdir", builddir) |