File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -11,20 +11,23 @@ class << self
1111
1212 def search_hdf5lib
1313 name = "libhdf5.#{ FFI ::Platform ::LIBSUFFIX } "
14- return File . expand_path ( name , ENV [ 'HDF5_LIB_PATH' ] ) if ENV [ 'HDF5_LIB_PATH' ]
14+ env_path = ENV [ 'HDF5_LIB_PATH' ]
15+ return env_path if env_path && File . file? ( env_path )
16+ return File . expand_path ( name , env_path ) if env_path && File . directory? ( env_path )
1517
1618 begin
1719 require 'pkg-config'
1820 libs = PKGConfig . libs ( 'hdf5' )
1921 pattern = %r{(?<=-L)/[^ ]+}
20- lib_dir = libs . scan ( pattern ) . first
21- lib_path = File . expand_path ( name , lib_dir )
22+ libs . scan ( pattern ) . each do |lib_dir |
23+ lib_path = File . expand_path ( name , lib_dir )
24+ return lib_path if File . exist? ( lib_path )
25+ end
2226 rescue PackageConfig ::NotFoundError
2327 warn 'hdf5.pc not found.'
2428 end
25- return lib_path if File . exist? ( lib_path )
2629
27- warn "hdf5 shared library ' #{ name } ' not found."
30+ name
2831 end
2932 end
3033
Original file line number Diff line number Diff line change @@ -30,18 +30,22 @@ def self.attach_variable(*)
3030 pointer
3131 ] , :int
3232
33- major_ptr = ::FFI ::MemoryPointer . new ( :int )
34- minor_ptr = ::FFI ::MemoryPointer . new ( :int )
35- release_ptr = ::FFI ::MemoryPointer . new ( :int )
33+ major_ptr = ::FFI ::MemoryPointer . new ( :uint )
34+ minor_ptr = ::FFI ::MemoryPointer . new ( :uint )
35+ release_ptr = ::FFI ::MemoryPointer . new ( :uint )
3636 HDF5 ::FFI . H5get_libversion ( major_ptr , minor_ptr , release_ptr )
3737
38- raise 'HDF5 major version mismatch' if major_ptr . read_int != 1
38+ major = major_ptr . read_uint
39+ minor = minor_ptr . read_uint
40+ release = release_ptr . read_uint
3941
40- case minor_ptr . read_int
41- when 10
42+ case [ major , minor ]
43+ in [ 1 , 10 ]
4244 require_relative 'ffi_10'
43- when 14 ..Float :: INFINITY
45+ in [ 1 , 14 ..] | [ 2 .. , _ ]
4446 require_relative 'ffi_14'
47+ else
48+ raise "Unsupported HDF5 version #{ major } .#{ minor } .#{ release } "
4549 end
4650 end
4751end
Original file line number Diff line number Diff line change @@ -10,13 +10,13 @@ class HDF5Test < Test::Unit::TestCase
1010 end
1111
1212 test 'libversion' do
13- major = FFI ::MemoryPointer . new ( :int )
14- minor = FFI ::MemoryPointer . new ( :int )
15- release = FFI ::MemoryPointer . new ( :int )
13+ major = FFI ::MemoryPointer . new ( :uint )
14+ minor = FFI ::MemoryPointer . new ( :uint )
15+ release = FFI ::MemoryPointer . new ( :uint )
1616 HDF5 ::FFI . H5get_libversion ( major , minor , release )
17- assert_equal ( 1 , major . read_int )
18- assert_kind_of ( Integer , minor . read_int )
19- assert_kind_of ( Integer , release . read_int )
17+ assert_include ( [ 1 , 2 ] , major . read_uint )
18+ assert_kind_of ( Integer , minor . read_uint )
19+ assert_kind_of ( Integer , release . read_uint )
2020 end
2121
2222 test 'example' do
You can’t perform that action at this time.
0 commit comments