diff options
Diffstat (limited to 'lib/ffi_yajl')
-rw-r--r-- | lib/ffi_yajl/ext.rb | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/ffi_yajl/ext.rb b/lib/ffi_yajl/ext.rb index 1c7486d..504cbe1 100644 --- a/lib/ffi_yajl/ext.rb +++ b/lib/ffi_yajl/ext.rb @@ -1,8 +1,13 @@ require 'rubygems' + require 'ffi_yajl/encoder' require 'ffi_yajl/parser' require 'ffi' require 'libyajl2' +begin + require 'fiddle' +rescue LoadError +end module FFI_Yajl # FIXME: DRY with ffi_yajl/ffi.rb @@ -10,20 +15,16 @@ module FFI_Yajl libpath = File.expand_path(File.join(Libyajl2.opt_path, libname)) libpath.gsub!(/dylib/, 'bundle') libpath = ::FFI.map_library_name("yajl") unless File.exist?(libpath) - - begin - # deliberately delayed require - require 'fiddle' + if defined?(Fiddle) && Fiddle.respond_to?(:dlopen) ::Fiddle.dlopen(libpath) - rescue LoadError - begin - # deliberately delayed require - require 'dl' + else + # deliberately convoluted delayed require here to avoid deprecation + # warning from requiring dl + require 'dl' + if defined?(DL) && DL.respond_to?(:dlopen) ::DL.dlopen(libpath) - rescue LoadError - # deliberately delayed require - require 'ffi_yajl/dlopen' - FFI_Yajl::Dlopen.dlopen(libpath) + else + raise "cannot find dlopen in either DL or Fiddle, cannot proceed" end end |