[pypy-commit] cffi default: Add dlopen flags to verify on pypy

rguillebert noreply at buildbot.pypy.org
Wed Dec 17 18:12:48 CET 2014


Author: Romain Guillebert <romain.py at gmail.com>
Branch: 
Changeset: r1587:0853a872dedf
Date: 2014-10-21 12:55 +0200
http://bitbucket.org/cffi/cffi/changeset/0853a872dedf/

Log:	Add dlopen flags to verify on pypy

diff --git a/cffi/vengine_gen.py b/cffi/vengine_gen.py
--- a/cffi/vengine_gen.py
+++ b/cffi/vengine_gen.py
@@ -58,12 +58,12 @@
             modname = self.verifier.get_module_name()
             prnt("void %s%s(void) { }\n" % (prefix, modname))
 
-    def load_library(self):
+    def load_library(self, flags=0):
         # import it with the CFFI backend
         backend = self.ffi._backend
         # needs to make a path that contains '/', on Posix
         filename = os.path.join(os.curdir, self.verifier.modulefilename)
-        module = backend.load_library(filename)
+        module = backend.load_library(filename, flags)
         #
         # call loading_gen_struct() to get the struct layout inferred by
         # the C compiler
diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -16,7 +16,7 @@
 class Verifier(object):
 
     def __init__(self, ffi, preamble, tmpdir=None, modulename=None,
-                 ext_package=None, tag='', force_generic_engine=False, **kwds):
+                 ext_package=None, tag='', force_generic_engine=False, flags=0, **kwds):
         self.ffi = ffi
         self.preamble = preamble
         if not modulename:
@@ -24,6 +24,7 @@
         vengine_class = _locate_engine_class(ffi, force_generic_engine)
         self._vengine = vengine_class(self)
         self._vengine.patch_extension_kwds(kwds)
+        self.flags = flags
         self.kwds = kwds
         #
         if modulename:
@@ -158,7 +159,7 @@
 
     def _load_library(self):
         assert self._has_module
-        return self._vengine.load_library()
+        return self._vengine.load_library(self.flags)
 
 # ____________________________________________________________
 
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -1962,3 +1962,17 @@
             n = (1 << 29) + i
             lib.SetLastError(n)
             assert ffi.getwinerror()[0] == n
+
+def test_verify_dlopen_flags():
+    ffi1 = FFI()
+    ffi2 = FFI()
+
+    ffi1.cdef("int foo;")
+    ffi2.cdef("int foo;")
+
+    lib1 = ffi1.verify("int foo;", modulename="foo1", flags=ffi1.RTLD_GLOBAL)
+    lib2 = ffi2.verify("int foo;", modulename="foo2", flags=ffi2.RTLD_GLOBAL)
+
+    lib1.foo = 42
+
+    assert lib2.foo == 42


More information about the pypy-commit mailing list