summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortduehr <td@matasano.com>2014-06-05 20:45:24 -0500
committertduehr <td@matasano.com>2014-06-05 20:45:24 -0500
commit3223054a9400ba356bf38ffe606ac58210319888 (patch)
tree36a98f7f288af5acea94f1f5ba559ee99c03dd91
parent2ae64ccf11a4201ff08d1eb6cfaf9aabdb06580a (diff)
parent7dfa5738accf4cd82b9c7bafd48bf7f91eb8c58b (diff)
downloadffi-3223054a9400ba356bf38ffe606ac58210319888.tar.gz
Merge pull request #329 from tduehr/rtld_mlock
Correct and update Gemfile. Additional testing on travis.
-rw-r--r--.gitignore4
-rw-r--r--.travis.yml7
-rw-r--r--Gemfile11
-rw-r--r--Gemfile.lock232
-rw-r--r--Rakefile3
-rw-r--r--ext/ffi_c/DynamicLibrary.c14
-rw-r--r--ext/ffi_c/DynamicLibrary.h49
-rw-r--r--ffi.gemspec8
8 files changed, 296 insertions, 32 deletions
diff --git a/.gitignore b/.gitignore
index 95edb58..5a40428 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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"
diff --git a/Gemfile b/Gemfile
index 11a8240..25b9da7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -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)
diff --git a/Rakefile b/Rakefile
index 83bf3a6..8e766dc 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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