Author: Wim Lavrijsen <wlavrij...@lbl.gov>
Branch: cppyy-packaging
Changeset: r92595:582dbcdc2741
Date: 2017-10-03 15:44 -0700
http://bitbucket.org/pypy/pypy/changeset/582dbcdc2741/

Log:    allow envar CPPYY_BACKEND_LIBRARY to direct the location of the
        backend library

diff --git a/pypy/module/_cppyy/capi/loadable_capi.py 
b/pypy/module/_cppyy/capi/loadable_capi.py
--- a/pypy/module/_cppyy/capi/loadable_capi.py
+++ b/pypy/module/_cppyy/capi/loadable_capi.py
@@ -1,3 +1,4 @@
+import os
 from rpython.rtyper.lltypesystem import rffi, lltype
 from rpython.rlib.rarithmetic import intmask
 from rpython.rlib import jit, jit_libffi, libffi, rdynload, objectmodel
@@ -15,7 +16,7 @@
    C_METHOD, C_INDEX, C_INDEX_ARRAY, WLAVC_INDEX, C_FUNC_PTR
 
 
-reflection_library = 'libcppyy_backend.so'
+backend_library = 'libcppyy_backend.so'
 
 # this is not technically correct, but will do for now
 std_string_name = 'std::basic_string<char>'
@@ -112,7 +113,7 @@
 
 class State(object):
     def __init__(self, space):
-        self.library = None
+        self.backend = None
         self.capi_calls = {}
 
         nt = newtype     # module from _cffi_backend
@@ -261,24 +262,32 @@
         self.c_offset_farg = 0
 
 
-def load_reflection_library(space):
+def load_backend(space):
     state = space.fromcache(State)
-    if state.library is None:
+    if state.backend is None:
         from pypy.module._cffi_backend.libraryobj import W_Library
-        state.library = W_Library(space, reflection_library, 
rdynload.RTLD_LOCAL | rdynload.RTLD_LAZY)
-        if state.library:
+        dldflags = rdynload.RTLD_LOCAL | rdynload.RTLD_LAZY
+        if os.environ.get('CPPYY_BACKEND_LIBRARY'):
+            libname = os.environ['CPPYY_BACKEND_LIBRARY']
+            state.backend = W_Library(space, libname, dldflags)
+        else:
+            # try usual lookups
+            state.backend = W_Library(space, backend_library, dldflags)
+
+        if state.backend:
             # fix constants
-            state.c_sizeof_farg = _cdata_to_size_t(space, call_capi(space, 
'function_arg_sizeof', []))
-            state.c_offset_farg = _cdata_to_size_t(space, call_capi(space, 
'function_arg_typeoffset', []))
-    return state.library
+            state.c_sizeof_farg = _cdata_to_size_t(
+                space, call_capi(space, 'function_arg_sizeof', []))
+            state.c_offset_farg = _cdata_to_size_t(
+                space, call_capi(space, 'function_arg_typeoffset', []))
 
 def verify_backend(space):
     try:
-        load_reflection_library(space)
+        load_backend(space)
     except Exception:
         if objectmodel.we_are_translated():
             raise oefmt(space.w_ImportError,
-                        "missing reflection library %s", reflection_library)
+                        "missing reflection library %s", backend_library)
         return False
     return True
 
@@ -287,11 +296,11 @@
     try:
         c_call = state.capi_calls[name]
     except KeyError:
-        if state.library is None:
-            load_reflection_library(space)
+        if state.backend is None:
+            load_backend(space)
         iface = state.capi_call_ifaces[name]
         cfunc = W_RCTypeFunc(space, iface[0], iface[1], False)
-        c_call = state.library.load_function(cfunc, 'cppyy_'+name)
+        c_call = state.backend.load_function(cfunc, 'cppyy_'+name)
         # TODO: there must be a better way to trick the leakfinder ...
         if not objectmodel.we_are_translated():
             leakfinder.remember_free(c_call.ctype.cif_descr._obj0)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to