summaryrefslogtreecommitdiff
path: root/ext/fiddle/extconf.rb
diff options
context:
space:
mode:
authorYusuke Endoh <[email protected]>2020-03-04 17:28:21 +0900
committerYusuke Endoh <[email protected]>2020-03-04 17:28:21 +0900
commitd732bc51bdbfe7d66038731d42e01a511d13b5f8 (patch)
tree7c48fe81275de3106bd9512b187ecf49a1eb9d54 /ext/fiddle/extconf.rb
parent87f6154bb4c67ca77ee353bb1fe25a922036c0e5 (diff)
Revert "Revert "Revert "[ruby/fiddle] Use ffi_closure_free by default. (#20)"""
This reverts commit 87f6154bb4c67ca77ee353bb1fe25a922036c0e5. It turned out that the change fails to build on macOS https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20200304T074503Z.fail.html.gz ``` + make 'TESTS=--hide-skip -v fiddle' RUBYOPT=-w test-all dyld: lazy symbol binding failed: Symbol not found: _ffi_closure_alloc Referenced from: /Users/hsbt/Documents/cb/tmp/build/20200304T074503Z/ruby/.ext/x86_64-darwin18/fiddle.bundle Expected in: flat namespace dyld: Symbol not found: _ffi_closure_alloc Referenced from: /Users/hsbt/Documents/cb/tmp/build/20200304T074503Z/ruby/.ext/x86_64-darwin18/fiddle.bundle Expected in: flat namespace make: *** [yes-test-all] Abort trap: 6 ```
Diffstat (limited to 'ext/fiddle/extconf.rb')
-rw-r--r--ext/fiddle/extconf.rb20
1 files changed, 14 insertions, 6 deletions
diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb
index 5525b2c808..fce0cb4079 100644
--- a/ext/fiddle/extconf.rb
+++ b/ext/fiddle/extconf.rb
@@ -7,7 +7,8 @@ bundle = enable_config('bundled-libffi')
if ! bundle
dir_config 'libffi'
- pkg_config("libffi")
+ pkg_config("libffi") and
+ ver = pkg_config("libffi", "modversion")
if have_header(ffi_header = 'ffi.h')
true
@@ -27,20 +28,20 @@ begin
Dir.glob("#{$srcdir}/libffi-*/").each{|dir| FileUtils.rm_rf(dir)}
extlibs.run(["--cache=#{cache_dir}", ext_dir])
end
- libffi_dir = bundle != false &&
+ ver = bundle != false &&
Dir.glob("#{$srcdir}/libffi-*/")
.map {|n| File.basename(n)}
.max_by {|n| n.scan(/\d+/).map(&:to_i)}
- unless libffi_dir
+ unless ver
raise "missing libffi. Please install libffi."
end
- srcdir = "#{$srcdir}/#{libffi_dir}"
+ srcdir = "#{$srcdir}/#{ver}"
ffi_header = 'ffi.h'
libffi = Struct.new(*%I[dir srcdir builddir include lib a cflags ldflags opt arch]).new
- libffi.dir = libffi_dir
+ libffi.dir = ver
if $srcdir == "."
- libffi.builddir = "#{libffi_dir}/#{RUBY_PLATFORM}"
+ libffi.builddir = "#{ver}/#{RUBY_PLATFORM}"
libffi.srcdir = "."
else
libffi.builddir = libffi.dir
@@ -51,6 +52,7 @@ begin
libffi.a = "#{libffi.lib}/libffi_convenience.#{$LIBEXT}"
nowarn = CONFIG.merge("warnflags"=>"")
libffi.cflags = RbConfig.expand("$(CFLAGS)".dup, nowarn)
+ ver = ver[/libffi-(.*)/, 1]
FileUtils.mkdir_p(libffi.dir)
libffi.opt = CONFIG['configure_args'][/'(-C)'/, 1]
@@ -110,6 +112,12 @@ begin
$INCFLAGS << " -I" << libffi.include
end
+if ver
+ ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored.
+ ver = (ver.split('.') + [0,0])[0,3]
+ $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver }})
+end
+
have_header 'sys/mman.h'
if have_header "dlfcn.h"