summaryrefslogtreecommitdiff
path: root/cffi
diff options
context:
space:
mode:
Diffstat (limited to 'cffi')
-rw-r--r--cffi/vengine_cpy.py9
-rw-r--r--cffi/vengine_gen.py4
-rw-r--r--cffi/verifier.py8
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()
# ____________________________________________________________