diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | Rakefile | 2 | ||||
-rw-r--r-- | lib/ffi/library.rb | 15 | ||||
-rw-r--r-- | lib/ffi/struct.rb | 2 | ||||
-rw-r--r-- | spec/ffi/struct_spec.rb | 8 |
5 files changed, 22 insertions, 7 deletions
diff --git a/.travis.yml b/.travis.yml index 9b38679..ac176d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,11 +12,13 @@ rvm: - "2.2" - "ruby-head" - "rbx" + - "system" env: - CC=gcc - CC=clang matrix: allow_failures: + - rvm: system - os: osx rvm: "2.2" - os: osx @@ -175,7 +175,7 @@ if USE_RAKE_COMPILER ext.cross_platform = %w[i386-mingw32 x64-mingw32] # forces the Windows platform instead of the default one end - ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3:2.0.0:2.1.5:2.2.1' + ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3:2.0.0:2.1.6:2.2.2' # To reduce the gem file size strip mingw32 dlls before packaging ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version| diff --git a/lib/ffi/library.rb b/lib/ffi/library.rb index 9849a3a..93d617e 100644 --- a/lib/ffi/library.rb +++ b/lib/ffi/library.rb @@ -109,6 +109,7 @@ module FFI libnames.each do |libname| begin + orig = libname lib = FFI::DynamicLibrary.open(libname, lib_flags) break if lib @@ -121,10 +122,22 @@ module FFI end end + # TODO better library lookup logic + unless libname.start_with?("/") + path = ['/usr/lib/','/usr/local/lib/'].find do |pth| + File.exist?(pth + libname) + end + if path + libname = path + libname + retry + end + end + if ldscript retry else - errors[libname] = ex + libr = (orig == libname ? orig : "#{orig} #{libname}") + errors[libr] = ex end end end diff --git a/lib/ffi/struct.rb b/lib/ffi/struct.rb index 89231ba..0896d35 100644 --- a/lib/ffi/struct.rb +++ b/lib/ffi/struct.rb @@ -341,7 +341,7 @@ module FFI # @raise if Ruby 1.8 # Add hash +spec+ to +builder+. def hash_layout(builder, spec) - raise "Ruby version not supported" if RUBY_VERSION =~ /1\.8\.*/ + raise "Ruby version not supported" if RUBY_VERSION =~ /^1\.8\..*/ spec[0].each do |name, type| builder.add name, find_field_type(type), nil end diff --git a/spec/ffi/struct_spec.rb b/spec/ffi/struct_spec.rb index 1728758..9110d92 100644 --- a/spec/ffi/struct_spec.rb +++ b/spec/ffi/struct_spec.rb @@ -7,7 +7,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) describe "Struct aligns fields correctly" do it "char, followed by an int" do - pending("not supported in 1.8") if RUBY_VERSION =~ /1.8.*/ + pending("not supported in 1.8") if RUBY_VERSION =~ /^1\.8\..*/ class CIStruct < FFI::Struct layout :c => :char, :i => :int end @@ -15,7 +15,7 @@ describe "Struct aligns fields correctly" do end it "short, followed by an int" do - pending("not supported in 1.8") if RUBY_VERSION =~ /1.8.*/ + pending("not supported in 1.8") if RUBY_VERSION =~ /^1\.8\..*/ class SIStruct < FFI::Struct layout :s => :short, :i => :int end @@ -23,7 +23,7 @@ describe "Struct aligns fields correctly" do end it "int, followed by an int" do - pending("not supported in 1.8") if RUBY_VERSION =~ /1.8.*/ + pending("not supported in 1.8") if RUBY_VERSION =~ /^1\.8\..*/ class IIStruct < FFI::Struct layout :i1 => :int, :i => :int end @@ -31,7 +31,7 @@ describe "Struct aligns fields correctly" do end it "long long, followed by an int" do - pending("not supported in 1.8") if RUBY_VERSION =~ /1.8.*/ + pending("not supported in 1.8") if RUBY_VERSION =~ /^1\.8\..*/ class LLIStruct < FFI::Struct layout :l => :long_long, :i => :int end |