Skip to content

Commit

Permalink
Add --with-libffi-source-dir feature and removed --enable-bundled-lib…
Browse files Browse the repository at this point in the history
…ffi option. (#113)

https://bugs.ruby-lang.org/issues/18571

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Sutou Kouhei <kou@clear-code.com>
  • Loading branch information
3 people committed Oct 7, 2022
1 parent 92f0c53 commit 4f78560
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 25 deletions.
28 changes: 6 additions & 22 deletions ext/fiddle/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def enable_debug_build_flag(flags)

libffi_version = nil
have_libffi = false
bundle = enable_config('bundled-libffi')
bundle = with_config("libffi-source-dir")
unless bundle
dir_config 'libffi'

Expand All @@ -67,27 +67,11 @@ def enable_debug_build_flag(flags)
end

unless have_libffi
# for https://github.com/ruby/fiddle
extlibs_rb = File.expand_path("../../bin/extlibs.rb", $srcdir)
if bundle && File.exist?(extlibs_rb)
require "fileutils"
require_relative "../../bin/extlibs"
extlibs = ExtLibs.new
cache_dir = File.expand_path("../../tmp/.download_cache", $srcdir)
ext_dir = File.expand_path("../../ext", $srcdir)
Dir.glob("#{$srcdir}/libffi-*/").each{|dir| FileUtils.rm_rf(dir)}
extlibs.run(["--cache=#{cache_dir}", ext_dir])
end
if bundle != false
libffi_package_name = Dir.glob("#{$srcdir}/libffi-*/")
.map {|n| File.basename(n)}
.max_by {|n| n.scan(/\d+/).map(&:to_i)}
end
unless libffi_package_name
raise "missing libffi. Please install libffi."
if bundle
libffi_srcdir = libffi_package_name = bundle
else
raise "missing libffi. Please install libffi or use --with-libffi-source-dir with libffi source location."
end

libffi_srcdir = "#{$srcdir}/#{libffi_package_name}"
ffi_header = 'ffi.h'
libffi = Struct.new(*%I[dir srcdir builddir include lib a cflags ldflags opt arch]).new
libffi.dir = libffi_package_name
Expand Down Expand Up @@ -226,7 +210,7 @@ def enable_debug_build_flag(flags)
end

if libffi
$LOCAL_LIBS.prepend("./#{libffi.a} ").strip! # to exts.mk
$LOCAL_LIBS.prepend("#{libffi.a} ").strip! # to exts.mk
$INCFLAGS.gsub!(/-I#{libffi.dir}/, '-I$(LIBFFI_DIR)')
end
create_makefile 'fiddle' do |conf|
Expand Down
3 changes: 0 additions & 3 deletions ext/fiddle/fiddle.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,12 @@ Gem::Specification.new do |spec|
"LICENSE.txt",
"README.md",
"Rakefile",
"bin/downloader.rb",
"bin/extlibs.rb",
"ext/fiddle/closure.c",
"ext/fiddle/closure.h",
"ext/fiddle/conversions.c",
"ext/fiddle/conversions.h",
"ext/fiddle/depend",
"ext/fiddle/extconf.rb",
"ext/fiddle/extlibs",
"ext/fiddle/fiddle.c",
"ext/fiddle/fiddle.h",
"ext/fiddle/function.c",
Expand Down
3 changes: 3 additions & 0 deletions test/fiddle/test_handle.rb
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ def test_dlerror
end if /freebsd/=~ RUBY_PLATFORM

def test_no_memory_leak
# https://github.com/ruby/fiddle/actions/runs/3202406059/jobs/5231356410
omit if RUBY_VERSION >= '3.2'

if respond_to?(:assert_nothing_leaked_memory)
n_tries = 100_000
assert_nothing_leaked_memory(SIZEOF_VOIDP * (n_tries / 100)) do
Expand Down
3 changes: 3 additions & 0 deletions test/fiddle/test_pointer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@ def test_null_pointer
end

def test_no_memory_leak
# https://github.com/ruby/fiddle/actions/runs/3202406059/jobs/5231356410
omit if RUBY_VERSION >= '3.2'

if respond_to?(:assert_nothing_leaked_memory)
n_tries = 100_000
assert_nothing_leaked_memory(SIZEOF_VOIDP * (n_tries / 100)) do
Expand Down

0 comments on commit 4f78560

Please sign in to comment.