зеркало из https://github.com/github/ruby.git
[ruby/fiddle] Use ffi_closure_free if available
This commit is contained in:
Родитель
d732bc51bd
Коммит
633a1f15d8
|
@ -14,10 +14,7 @@ typedef struct {
|
|||
} fiddle_closure;
|
||||
|
||||
#if defined(USE_FFI_CLOSURE_ALLOC)
|
||||
#elif defined(__OpenBSD__) || defined(__APPLE__) || defined(__linux__)
|
||||
# define USE_FFI_CLOSURE_ALLOC 0
|
||||
#elif defined(RUBY_LIBFFI_MODVERSION) && RUBY_LIBFFI_MODVERSION < 3000005 && \
|
||||
(defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_AMD64))
|
||||
#elif !defined(HAVE_FFI_CLOSURE_ALLOC)
|
||||
# define USE_FFI_CLOSURE_ALLOC 0
|
||||
#else
|
||||
# define USE_FFI_CLOSURE_ALLOC 1
|
||||
|
|
|
@ -13,7 +13,7 @@ if ! bundle
|
|||
if have_header(ffi_header = 'ffi.h')
|
||||
true
|
||||
elsif have_header(ffi_header = 'ffi/ffi.h')
|
||||
$defs.push(format('-DUSE_HEADER_HACKS'))
|
||||
$defs.push('-DUSE_HEADER_HACKS')
|
||||
true
|
||||
end and (have_library('ffi') || have_library('libffi'))
|
||||
end or
|
||||
|
@ -135,6 +135,7 @@ elsif have_header "windows.h"
|
|||
end
|
||||
|
||||
have_const('FFI_STDCALL', ffi_header)
|
||||
have_func('ffi_closure_alloc', ffi_header)
|
||||
|
||||
config = File.read(RbConfig.expand(File.join($arch_hdrdir, "ruby/config.h")))
|
||||
types = {"SIZE_T"=>"SSIZE_T", "PTRDIFF_T"=>nil, "INTPTR_T"=>nil}
|
||||
|
@ -142,7 +143,7 @@ types.each do |type, signed|
|
|||
if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config
|
||||
if size = $2 and size != 'VOIDP'
|
||||
size = types.fetch(size) {size}
|
||||
$defs << format("-DTYPE_%s=TYPE_%s", signed||type, size)
|
||||
$defs << "-DTYPE_#{signed||type}=TYPE_#{size}"
|
||||
end
|
||||
if signed
|
||||
check_signedness(type.downcase, "stddef.h")
|
||||
|
|
Загрузка…
Ссылка в новой задаче