diff options
Diffstat (limited to 'ruby_1_9_3/ext/fiddle/extconf.rb')
-rw-r--r-- | ruby_1_9_3/ext/fiddle/extconf.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/ruby_1_9_3/ext/fiddle/extconf.rb b/ruby_1_9_3/ext/fiddle/extconf.rb new file mode 100644 index 0000000000..2cb9ae0ace --- /dev/null +++ b/ruby_1_9_3/ext/fiddle/extconf.rb @@ -0,0 +1,54 @@ +require 'mkmf' + +# :stopdoc: + +dir_config 'libffi' + +pkg_config("libffi") +unless have_header('ffi.h') + if have_header('ffi/ffi.h') + $defs.push(format('-DUSE_HEADER_HACKS')) + else + raise "ffi.h is missing. Please install libffi." + end +end + +unless have_library('ffi') || have_library('libffi') + raise "libffi is missing. Please install libffi." +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: |