diff options
author | tduehr <td@matasano.com> | 2014-06-05 20:45:24 -0500 |
---|---|---|
committer | tduehr <td@matasano.com> | 2014-06-05 20:45:24 -0500 |
commit | 3223054a9400ba356bf38ffe606ac58210319888 (patch) | |
tree | 36a98f7f288af5acea94f1f5ba559ee99c03dd91 | |
parent | 2ae64ccf11a4201ff08d1eb6cfaf9aabdb06580a (diff) | |
parent | 7dfa5738accf4cd82b9c7bafd48bf7f91eb8c58b (diff) | |
download | ffi-3223054a9400ba356bf38ffe606ac58210319888.tar.gz |
Merge pull request #329 from tduehr/rtld_mlock
Correct and update Gemfile. Additional testing on travis.
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | .travis.yml | 7 | ||||
-rw-r--r-- | Gemfile | 11 | ||||
-rw-r--r-- | Gemfile.lock | 232 | ||||
-rw-r--r-- | Rakefile | 3 | ||||
-rw-r--r-- | ext/ffi_c/DynamicLibrary.c | 14 | ||||
-rw-r--r-- | ext/ffi_c/DynamicLibrary.h | 49 | ||||
-rw-r--r-- | ffi.gemspec | 8 |
8 files changed, 296 insertions, 32 deletions
@@ -13,4 +13,6 @@ build core lib/ffi/types.conf lib/ffi_c.bundle -lib/ffi_c.so
\ No newline at end of file +lib/ffi_c.so +vendor +.bundle diff --git a/.travis.yml b/.travis.yml index 9bb89ec..b310b7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,16 @@ language: ruby -script: rake test +script: bundle exec rake test rvm: - "1.9.3" - "1.8.7" - "2.0.0" + - "2.1" - "ruby-head" - "rbx-2.1.1" + - "rbx" matrix: allow_failures: - rvm: "rbx-2.1.1" + - rvm: "rbx" + - rvm: "1.8.7" + - rvm: "1.9.3" @@ -1,6 +1,9 @@ source 'https://rubygems.org' -gem 'rake', '>= 0.9.2.2' -gem 'rake-compiler', '>= 0.6.0' -gem 'rspec', '>= 2.11.0' -gem 'rubygems-tasks' +group :development do + gem 'rake', '~> 10.1' + gem 'rake-compiler', '~> 0.9.2', :platforms => ['ruby', 'mingw', 'mswin'] + gem 'rspec', '~> 2.14.1' + gem 'rubygems-tasks', '~> 0.2.4', :require => 'rubygems/tasks' + gem "rubysl", "~> 2.0", :platforms => 'rbx' +end diff --git a/Gemfile.lock b/Gemfile.lock index dc18608..48ef658 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,25 +1,229 @@ GEM remote: https://rubygems.org/ specs: - diff-lcs (1.2.2) - rake (10.0.4) - rake-compiler (0.8.3) + diff-lcs (1.2.5) + ffi2-generators (0.1.1) + rake (10.3.2) + rake-compiler (0.9.2) rake - rspec (2.13.0) - rspec-core (~> 2.13.0) - rspec-expectations (~> 2.13.0) - rspec-mocks (~> 2.13.0) - rspec-core (2.13.1) - rspec-expectations (2.13.0) + rspec (2.14.1) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) + rspec-core (2.14.8) + rspec-expectations (2.14.5) diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.13.1) + rspec-mocks (2.14.6) rubygems-tasks (0.2.4) + rubysl (2.0.15) + rubysl-abbrev (~> 2.0) + rubysl-base64 (~> 2.0) + rubysl-benchmark (~> 2.0) + rubysl-bigdecimal (~> 2.0) + rubysl-cgi (~> 2.0) + rubysl-cgi-session (~> 2.0) + rubysl-cmath (~> 2.0) + rubysl-complex (~> 2.0) + rubysl-continuation (~> 2.0) + rubysl-coverage (~> 2.0) + rubysl-csv (~> 2.0) + rubysl-curses (~> 2.0) + rubysl-date (~> 2.0) + rubysl-delegate (~> 2.0) + rubysl-digest (~> 2.0) + rubysl-drb (~> 2.0) + rubysl-e2mmap (~> 2.0) + rubysl-english (~> 2.0) + rubysl-enumerator (~> 2.0) + rubysl-erb (~> 2.0) + rubysl-etc (~> 2.0) + rubysl-expect (~> 2.0) + rubysl-fcntl (~> 2.0) + rubysl-fiber (~> 2.0) + rubysl-fileutils (~> 2.0) + rubysl-find (~> 2.0) + rubysl-forwardable (~> 2.0) + rubysl-getoptlong (~> 2.0) + rubysl-gserver (~> 2.0) + rubysl-io-console (~> 2.0) + rubysl-io-nonblock (~> 2.0) + rubysl-io-wait (~> 2.0) + rubysl-ipaddr (~> 2.0) + rubysl-irb (~> 2.0) + rubysl-logger (~> 2.0) + rubysl-mathn (~> 2.0) + rubysl-matrix (~> 2.0) + rubysl-mkmf (~> 2.0) + rubysl-monitor (~> 2.0) + rubysl-mutex_m (~> 2.0) + rubysl-net-ftp (~> 2.0) + rubysl-net-http (~> 2.0) + rubysl-net-imap (~> 2.0) + rubysl-net-pop (~> 2.0) + rubysl-net-protocol (~> 2.0) + rubysl-net-smtp (~> 2.0) + rubysl-net-telnet (~> 2.0) + rubysl-nkf (~> 2.0) + rubysl-observer (~> 2.0) + rubysl-open-uri (~> 2.0) + rubysl-open3 (~> 2.0) + rubysl-openssl (~> 2.0) + rubysl-optparse (~> 2.0) + rubysl-ostruct (~> 2.0) + rubysl-pathname (~> 2.0) + rubysl-prettyprint (~> 2.0) + rubysl-prime (~> 2.0) + rubysl-profile (~> 2.0) + rubysl-profiler (~> 2.0) + rubysl-pstore (~> 2.0) + rubysl-pty (~> 2.0) + rubysl-rational (~> 2.0) + rubysl-readline (~> 2.0) + rubysl-resolv (~> 2.0) + rubysl-rexml (~> 2.0) + rubysl-rinda (~> 2.0) + rubysl-rss (~> 2.0) + rubysl-scanf (~> 2.0) + rubysl-securerandom (~> 2.0) + rubysl-set (~> 2.0) + rubysl-shellwords (~> 2.0) + rubysl-singleton (~> 2.0) + rubysl-socket (~> 2.0) + rubysl-stringio (~> 2.0) + rubysl-strscan (~> 2.0) + rubysl-sync (~> 2.0) + rubysl-syslog (~> 2.0) + rubysl-tempfile (~> 2.0) + rubysl-thread (~> 2.0) + rubysl-thwait (~> 2.0) + rubysl-time (~> 2.0) + rubysl-timeout (~> 2.0) + rubysl-tmpdir (~> 2.0) + rubysl-tsort (~> 2.0) + rubysl-un (~> 2.0) + rubysl-uri (~> 2.0) + rubysl-weakref (~> 2.0) + rubysl-webrick (~> 2.0) + rubysl-xmlrpc (~> 2.0) + rubysl-yaml (~> 2.0) + rubysl-zlib (~> 2.0) + rubysl-abbrev (2.0.4) + rubysl-base64 (2.0.0) + rubysl-benchmark (2.0.1) + rubysl-bigdecimal (2.0.2) + rubysl-cgi (2.0.1) + rubysl-cgi-session (2.0.1) + rubysl-cmath (2.0.0) + rubysl-complex (2.0.0) + rubysl-continuation (2.0.0) + rubysl-coverage (2.0.3) + rubysl-csv (2.0.2) + rubysl-english (~> 2.0) + rubysl-curses (2.0.1) + rubysl-date (2.0.6) + rubysl-delegate (2.0.1) + rubysl-digest (2.0.3) + rubysl-drb (2.0.1) + rubysl-e2mmap (2.0.0) + rubysl-english (2.0.0) + rubysl-enumerator (2.0.0) + rubysl-erb (2.0.1) + rubysl-etc (2.0.3) + ffi2-generators (~> 0.1) + rubysl-expect (2.0.0) + rubysl-fcntl (2.0.4) + ffi2-generators (~> 0.1) + rubysl-fiber (2.0.0) + rubysl-fileutils (2.0.3) + rubysl-find (2.0.1) + rubysl-forwardable (2.0.1) + rubysl-getoptlong (2.0.0) + rubysl-gserver (2.0.0) + rubysl-socket (~> 2.0) + rubysl-thread (~> 2.0) + rubysl-io-console (2.0.0) + rubysl-io-nonblock (2.0.0) + rubysl-io-wait (2.0.0) + rubysl-ipaddr (2.0.0) + rubysl-irb (2.0.4) + rubysl-e2mmap (~> 2.0) + rubysl-mathn (~> 2.0) + rubysl-readline (~> 2.0) + rubysl-thread (~> 2.0) + rubysl-logger (2.0.0) + rubysl-mathn (2.0.0) + rubysl-matrix (2.1.0) + rubysl-e2mmap (~> 2.0) + rubysl-mkmf (2.0.1) + rubysl-fileutils (~> 2.0) + rubysl-shellwords (~> 2.0) + rubysl-monitor (2.0.0) + rubysl-mutex_m (2.0.0) + rubysl-net-ftp (2.0.1) + rubysl-net-http (2.0.4) + rubysl-cgi (~> 2.0) + rubysl-erb (~> 2.0) + rubysl-singleton (~> 2.0) + rubysl-net-imap (2.0.1) + rubysl-net-pop (2.0.1) + rubysl-net-protocol (2.0.1) + rubysl-net-smtp (2.0.1) + rubysl-net-telnet (2.0.0) + rubysl-nkf (2.0.1) + rubysl-observer (2.0.0) + rubysl-open-uri (2.0.0) + rubysl-open3 (2.0.0) + rubysl-openssl (2.1.0) + rubysl-optparse (2.0.1) + rubysl-shellwords (~> 2.0) + rubysl-ostruct (2.0.4) + rubysl-pathname (2.0.0) + rubysl-prettyprint (2.0.3) + rubysl-prime (2.0.1) + rubysl-profile (2.0.0) + rubysl-profiler (2.0.1) + rubysl-pstore (2.0.0) + rubysl-pty (2.0.2) + rubysl-rational (2.0.1) + rubysl-readline (2.0.2) + rubysl-resolv (2.1.0) + rubysl-rexml (2.0.2) + rubysl-rinda (2.0.1) + rubysl-rss (2.0.0) + rubysl-scanf (2.0.0) + rubysl-securerandom (2.0.0) + rubysl-set (2.0.1) + rubysl-shellwords (2.0.0) + rubysl-singleton (2.0.0) + rubysl-socket (2.0.1) + rubysl-stringio (2.0.0) + rubysl-strscan (2.0.0) + rubysl-sync (2.0.0) + rubysl-syslog (2.0.1) + ffi2-generators (~> 0.1) + rubysl-tempfile (2.0.1) + rubysl-thread (2.0.2) + rubysl-thwait (2.0.0) + rubysl-time (2.0.3) + rubysl-timeout (2.0.0) + rubysl-tmpdir (2.0.1) + rubysl-tsort (2.0.1) + rubysl-un (2.0.0) + rubysl-fileutils (~> 2.0) + rubysl-optparse (~> 2.0) + rubysl-uri (2.0.0) + rubysl-weakref (2.0.0) + rubysl-webrick (2.0.0) + rubysl-xmlrpc (2.0.0) + rubysl-yaml (2.0.4) + rubysl-zlib (2.0.1) PLATFORMS ruby DEPENDENCIES - rake (>= 0.9.2.2) - rake-compiler (>= 0.6.0) - rspec (>= 2.11.0) - rubygems-tasks + rake (~> 10.1) + rake-compiler (~> 0.9.2) + rspec (~> 2.14.1) + rubygems-tasks (~> 0.2.4) + rubysl (~> 2.0) @@ -1,12 +1,9 @@ -require 'rubygems' -require 'rubygems/package_task' require 'rubygems/tasks' require 'rbconfig' require 'rake/clean' USE_RAKE_COMPILER = (RUBY_PLATFORM =~ /java/) ? false : true if USE_RAKE_COMPILER - gem 'rake-compiler', '>=0.6.0' require 'rake/extensiontask' end diff --git a/ext/ffi_c/DynamicLibrary.c b/ext/ffi_c/DynamicLibrary.c index 70333b3..905d020 100644 --- a/ext/ffi_c/DynamicLibrary.c +++ b/ext/ffi_c/DynamicLibrary.c @@ -73,15 +73,11 @@ static void* dl_open(const char* name, int flags); static void dl_error(char* buf, int size); #define dl_sym(handle, name) GetProcAddress(handle, name) #define dl_close(handle) FreeLibrary(handle) -enum { RTLD_LAZY=1, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL }; #else # define dl_open(name, flags) dlopen(name, flags != 0 ? flags : RTLD_LAZY) # define dl_error(buf, size) do { snprintf(buf, size, "%s", dlerror()); } while(0) # define dl_sym(handle, name) dlsym(handle, name) # define dl_close(handle) dlclose(handle) -#ifndef RTLD_LOCAL -# define RTLD_LOCAL 8 -#endif #endif static VALUE @@ -321,13 +317,21 @@ rbffi_DynamicLibrary_Init(VALUE moduleFFI) rb_undef_method(SymbolClass, "new"); rb_define_method(SymbolClass, "inspect", symbol_inspect, 0); rb_define_method(SymbolClass, "initialize_copy", symbol_initialize_copy, 1); - #define DEF(x) rb_define_const(LibraryClass, "RTLD_" #x, UINT2NUM(RTLD_##x)) DEF(LAZY); DEF(NOW); DEF(GLOBAL); DEF(LOCAL); + DEF(NOLOAD); + DEF(NODELETE); + DEF(FIRST); + DEF(DEEPBIND); + DEF(MEMBER); + DEF(BINDING_MASK); + DEF(LOCATION_MASK); + DEF(ALL_MASK); +#undef DEF } diff --git a/ext/ffi_c/DynamicLibrary.h b/ext/ffi_c/DynamicLibrary.h index 020cf61..6be80f7 100644 --- a/ext/ffi_c/DynamicLibrary.h +++ b/ext/ffi_c/DynamicLibrary.h @@ -33,7 +33,56 @@ extern "C" { #endif +/* if these aren't defined (eg. windows), we need sensible defaults */ +#ifndef RTLD_LAZY +#define RTLD_LAZY 1 +#endif + +#ifndef RTLD_LAZY +#define RTLD_NOW 2 +#endif + +#ifndef RTLD_LOCAL +#define RTLD_LOCAL 4 +#endif + +#ifndef RTLD_GLOBAL +#define RTLD_GLOBAL 8 +#endif + +/* If these aren't defined, they're not supported so define as 0 */ +#ifndef RTLD_NOLOAD +#define RTLD_NOLOAD 0 +#endif + +#ifndef RTLD_NODELETE +#define RTLD_NODELETE 0 +#endif +#ifndef RTLD_FIRST +#define RTLD_FIRST 0 +#endif + +#ifndef RTLD_DEEPBIND +#define RTLD_DEEPBIND 0 +#endif + +#ifndef RTLD_MEMBER +#define RTLD_MEMBER 0 +#endif + +/* convenience */ +#ifndef RTLD_BINDING_MASK +#define RTLD_BINDING_MASK (RTLD_LAZY | RTLD_NOW) +#endif + +#ifndef RTLD_LOCATION_MASK +#define RTLD_LOCATION_MASK (RTLD_LOCAL | RTLD_GLOBAL) +#endif + +#ifndef RTLD_ALL_MASK +#define RTLD_ALL_MASK (RTLD_BINDING_MASK | RTLD_LOCATION_MASK | RTLD_NOLOAD | RTLD_NODELETE | RTLD_FIRST | RTLD_DEEPBIND | RTLD_MEMBER) +#endif typedef struct Library { void* handle; diff --git a/ffi.gemspec b/ffi.gemspec index 6ec0e47..5e1c4d9 100644 --- a/ffi.gemspec +++ b/ffi.gemspec @@ -15,8 +15,8 @@ Gem::Specification.new do |s| s.license = 'BSD' s.require_paths << 'ext/ffi_c' s.required_ruby_version = '>= 1.8.7' - s.add_development_dependency 'rake' - s.add_development_dependency 'rake-compiler', '>=0.6.0' - s.add_development_dependency 'rspec' - s.add_development_dependency 'rubygems-tasks' + s.add_development_dependency 'rake' '~> 10.1' + s.add_development_dependency 'rake-compiler', '~> 0.9' + s.add_development_dependency 'rspec', '~> 2.14.1' + s.add_development_dependency 'rubygems-tasks', "~> 0.2.4" end |