diff options
Diffstat (limited to 'cffi')
-rw-r--r-- | cffi/vengine_cpy.py | 9 | ||||
-rw-r--r-- | cffi/vengine_gen.py | 4 | ||||
-rw-r--r-- | cffi/verifier.py | 8 |
3 files changed, 16 insertions, 5 deletions
diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py index 8a2aa18..c9af57f 100644 --- a/cffi/vengine_cpy.py +++ b/cffi/vengine_cpy.py @@ -138,15 +138,22 @@ class VCPythonEngine(object): prnt() prnt('#endif') - def load_library(self): + def load_library(self, flags=None): # XXX review all usages of 'self' here! # import it as a new extension module + if hasattr(sys, "getdlopenflags"): + previous_flags = sys.getdlopenflags() try: + if hasattr(sys, "setdlopenflags") and flags is not None: + sys.setdlopenflags(flags) module = imp.load_dynamic(self.verifier.get_module_name(), self.verifier.modulefilename) except ImportError as e: error = "importing %r: %s" % (self.verifier.modulefilename, e) raise ffiplatform.VerificationError(error) + finally: + if hasattr(sys, "setdlopenflags"): + sys.setdlopenflags(previous_flags) # # call loading_cpy_struct() to get the struct layout inferred by # the C compiler diff --git a/cffi/vengine_gen.py b/cffi/vengine_gen.py index 133ec7f..4710680 100644 --- a/cffi/vengine_gen.py +++ b/cffi/vengine_gen.py @@ -58,12 +58,12 @@ class VGenericEngine(object): 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 index e449c78..5d99e12 100644 --- a/cffi/verifier.py +++ b/cffi/verifier.py @@ -17,7 +17,7 @@ class Verifier(object): def __init__(self, ffi, preamble, tmpdir=None, modulename=None, ext_package=None, tag='', force_generic_engine=False, - source_extension='.c', **kwds): + source_extension='.c', flags=None, **kwds): self.ffi = ffi self.preamble = preamble if not modulename: @@ -25,6 +25,7 @@ class Verifier(object): 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: @@ -159,7 +160,10 @@ class Verifier(object): def _load_library(self): assert self._has_module - return self._vengine.load_library() + if self.flags is not None: + return self._vengine.load_library(self.flags) + else: + return self._vengine.load_library() # ____________________________________________________________ |