diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-20 09:45:19 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-20 09:45:19 +0000 |
commit | 3912b7f29d4b0b81c1081eefd81a5b9fd9dbb53e (patch) | |
tree | 6d38546682ea53b3eb111e772e61a325354d26fc /ext | |
parent | 449bf5f93d25690ca282e35d2898be3789058f7e (diff) |
merge revision(s) 38073,38251,38252: [Backport #7552]
* ext/fiddle/extconf.rb, ext/fiddle/function.c
(Fiddle::Function::STDCALL): FFI_STDCALL is not a macro, but an
enumeration. [ruby-core:50398] [Bug #7483]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@38505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/fiddle/closure.c | 2 | ||||
-rw-r--r-- | ext/fiddle/extconf.rb | 30 | ||||
-rw-r--r-- | ext/fiddle/function.c | 4 |
3 files changed, 33 insertions, 3 deletions
diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index a3c0792fc2..21796660c4 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -284,7 +284,7 @@ Init_fiddle_closure() /* * Document-method: new * - * call-seq: new(ret, *args, abi = Fiddle::DEFAULT) + * call-seq: new(ret, args, abi = Fiddle::DEFAULT) * * Construct a new Closure object. * diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb index 78622b6a6f..2cb9ae0ace 100644 --- a/ext/fiddle/extconf.rb +++ b/ext/fiddle/extconf.rb @@ -19,6 +19,36 @@ end have_header 'sys/mman.h' +if have_header "dlfcn.h" + have_library "dl" + + %w{ dlopen dlclose dlsym }.each do |func| + abort "missing function #{func}" unless have_func(func) + end + + have_func "dlerror" +elsif have_header "windows.h" + %w{ LoadLibrary FreeLibrary GetProcAddress }.each do |func| + abort "missing function #{func}" unless have_func(func) + end +end + +have_const('FFI_STDCALL', 'ffi.h') || have_const('FFI_STDCALL', 'ffi/ffi.h') + +config = File.read(RbConfig.expand(File.join($arch_hdrdir, "ruby/config.h"))) +types = {"SIZE_T"=>"SSIZE_T", "PTRDIFF_T"=>nil, "INTPTR_T"=>nil} +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) + end + if signed + check_signedness(type.downcase, "stddef.h") + end + end +end + create_makefile 'fiddle' # :startdoc: diff --git a/ext/fiddle/function.c b/ext/fiddle/function.c index 6e8909991a..ada37a4942 100644 --- a/ext/fiddle/function.c +++ b/ext/fiddle/function.c @@ -179,7 +179,7 @@ Init_fiddle_function(void) */ rb_define_const(cFiddleFunction, "DEFAULT", INT2NUM(FFI_DEFAULT_ABI)); -#ifdef FFI_STDCALL +#ifdef HAVE_CONST_FFI_STDCALL /* * Document-const: STDCALL * @@ -203,7 +203,7 @@ Init_fiddle_function(void) /* * Document-method: new - * call-seq: new(ptr, *args, ret_type, abi = DEFAULT) + * call-seq: new(ptr, args, ret_type, abi = DEFAULT) * * Constructs a Function object. * * +ptr+ is a referenced function, of a DL::Handle |