Author: Wim Lavrijsen <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit