110 def __init__(self):
111 from ctypes import RTLD_GLOBAL, PyDLL, c_bool, c_char_p, c_int, c_void_p, util
112
113
114
115
116 class IInterface_p(c_void_p):
117 def __repr__(self):
118 return "IInterface_p(0x%x)" % (0 if self.value is None else self.value)
119
120 self.log = logging.getLogger("BootstrapHelper")
121 libname = util.find_library("GaudiKernel") or "libGaudiKernel.so"
122 self.log.debug("loading GaudiKernel (%s)", libname)
123
124
125
126 self.lib = gkl = PyDLL(libname, mode=RTLD_GLOBAL)
127
128 functions = [
129 ("createApplicationMgr", IInterface_p, []),
130 ("getService", IInterface_p, [IInterface_p, c_char_p]),
131 ("setProperty", c_bool, [IInterface_p, c_char_p, c_char_p]),
132 ("getProperty", c_char_p, [IInterface_p, c_char_p]),
133 ("setOption", None, [IInterface_p, c_char_p, c_char_p]),
134 ("ROOT_VERSION_CODE", c_int, []),
135 ]
136
137 for name, restype, argtypes in functions:
138 f = getattr(gkl, "py_bootstrap_%s" % name)
139 f.restype, f.argtypes = restype, argtypes
140
141
142 if name not in self.__class__.__dict__:
143 setattr(self, name, f)
144
145 for name in (
146 "configure",
147 "initialize",
148 "start",
149 "stop",
150 "finalize",
151 "terminate",
152 ):
153 f = getattr(gkl, "py_bootstrap_fsm_%s" % name)
154 f.restype, f.argtypes = c_bool, [IInterface_p]
155 gkl.py_bootstrap_app_run.restype = c_bool
156 gkl.py_bootstrap_app_run.argtypes = [IInterface_p, c_int]
157
158 gkl.py_helper_printAlgsSequences.restype = None
159 gkl.py_helper_printAlgsSequences.argtypes = [IInterface_p]
160