/Users/proj/soft/ilcsoft/v02-03-03/DD4hep/tmp
diff -uNr v01-28.ORIG/CMakeLists.txt v01-28/CMakeLists.txt
--- v01-28.ORIG/CMakeLists.txt	2024-02-23 22:27:44
+++ v01-28/CMakeLists.txt	2024-12-27 19:34:41
@@ -308,7 +308,7 @@
 
 if(APPLE)
   fill_dd4hep_library_path()
-  message(STATUS "DD4HEP_LIBRARY_PATH= $ENV{DD4HEP_LIBRARY_PATH}")
+  message(STATUS "DD4HEP_LIBRARY_PATH=$ENV{DD4HEP_LIBRARY_PATH}")
 endif()
 
 INSTALL(EXPORT DD4hep 
diff -uNr v01-28.ORIG/DDCore/CMakeLists.txt v01-28/DDCore/CMakeLists.txt
--- v01-28.ORIG/DDCore/CMakeLists.txt	2024-02-23 22:27:44
+++ v01-28/DDCore/CMakeLists.txt	2024-12-27 19:14:19
@@ -129,7 +129,8 @@
 IF(TARGET ${DD4HEP_ROOT_PYTHON})
   dd4hep_add_plugin(DDPythonPlugins
     SOURCES src/python/*.cpp
-    USES DDCore ROOT::Core ${DD4HEP_ROOT_PYTHON}
+    #    USES DDCore ROOT::Core ${DD4HEP_ROOT_PYTHON}
+    USES DDCore ROOT::Core ROOT::ROOTTPython ${DD4HEP_ROOT_PYTHON}
     )
   set_target_properties(DDPythonPlugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
   LIST(APPEND OPTIONAL_TARGETS DDPythonPlugins)
diff -uNr v01-28.ORIG/DDG4/CMakeLists.txt v01-28/DDG4/CMakeLists.txt
--- v01-28.ORIG/DDG4/CMakeLists.txt	2024-02-23 22:27:44
+++ v01-28/DDG4/CMakeLists.txt	2024-12-27 19:14:45
@@ -67,7 +67,8 @@
   dd4hep_print("|++> ROOT Has Python, creating DDPython library and plugins")
   add_library(DDPython G__DDPython.cxx tpython/DDPython.cpp)
   add_library(DD4hep::DDPython ALIAS DDPython)
-  target_link_libraries(DDPython DD4hep::DDG4 ROOT::Core Python::Python ${DD4HEP_ROOT_PYTHON})
+  #target_link_libraries(DDPython DD4hep::DDG4 ROOT::Core Python::Python ${DD4HEP_ROOT_PYTHON})
+  target_link_libraries(DDPython DD4hep::DDG4 ROOT::Core ROOT::ROOTTPython Python::Python ${DD4HEP_ROOT_PYTHON})
   IF(${CMAKE_CXX_STANDARD} GREATER 16)
     # python header not cxx17 compatible, gives error in clang
     target_compile_options(DDPython PUBLIC -Wno-register)
@@ -79,7 +80,8 @@
     )
   #---Helper to overcome deficiency of the python executable concerning multi-threading
   add_executable(pyddg4 pyddg4.cpp)
-  target_link_libraries(pyddg4 PUBLIC DD4hep::DDPython ROOT::Core ${DD4HEP_ROOT_PYTHON})
+  #target_link_libraries(pyddg4 PUBLIC DD4hep::DDPython ROOT::Core ${DD4HEP_ROOT_PYTHON})
+  target_link_libraries(pyddg4 PUBLIC DD4hep::DDPython ROOT::Core ROOT::ROOTTPython ${DD4HEP_ROOT_PYTHON})
 
   # install these libraries
   set_target_properties(DDPython DDG4Python PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
diff -uNr v01-28.ORIG/cmake/DD4hep.cmake v01-28/cmake/DD4hep.cmake
--- v01-28.ORIG/cmake/DD4hep.cmake	2024-02-23 22:27:44
+++ v01-28/cmake/DD4hep.cmake	2024-12-27 19:34:41
@@ -71,11 +71,13 @@
 function(dd4hep_generate_rootmap library)
 
   if(APPLE)
-    set(ENV_VAR DYLD_LIBRARY_PATH)
+    set(ENV_VAR DD4HEP_LIBRARY_PATH)
   else()
     set(ENV_VAR LD_LIBRARY_PATH)
   endif()
   set(${ENV_VAR}_VALUE $<TARGET_FILE_DIR:${library}>:$<TARGET_FILE_DIR:DD4hep::DD4hepGaudiPluginMgr>:$ENV{${ENV_VAR}})
+
+  dd4hep_print("|++> For listcomponent: ${ENV_VAR}_VALUE:  ${${ENV_VAR}_VALUE}")
 
   set(rootmapfile ${CMAKE_SHARED_MODULE_PREFIX}${library}.components)
 
diff -uNr v01-28.ORIG/cmake/DD4hepBuild.cmake v01-28/cmake/DD4hepBuild.cmake
--- v01-28.ORIG/cmake/DD4hepBuild.cmake	2024-02-23 22:27:44
+++ v01-28/cmake/DD4hepBuild.cmake	2024-12-27 19:34:41
@@ -506,6 +506,10 @@
     SET( ENV{DD4HEP_LIBRARY_PATH} ${Geant4_ROOT}/lib:$ENV{DD4HEP_LIBRARY_PATH} )
   endif()
 
+  if ( ${DD4HEP_USE_GEAR} )
+    SET( ENV{DD4HEP_LIBRARY_PATH} ${GEAR_ROOT_DIR}/lib:$ENV{DD4HEP_LIBRARY_PATH} )
+  endif()
+
   if(${DD4HEP_USE_LCIO})
     SET( ENV{DD4HEP_LIBRARY_PATH} ${LCIO_DIR}/lib:$ENV{DD4HEP_LIBRARY_PATH} )
   endif()
--- v01-28/DDG4.ORIG/python/DDG4.py	2024-02-23 22:27:44
+++ v01-28/DDG4/python/DDG4.py	2024-12-28 00:59:36
@@ -10,8 +10,9 @@
 # ==========================================================================
 from __future__ import absolute_import, unicode_literals
 import logging
+import signal
+import cppyy
 from dd4hep_base import *  # noqa: F403
-import ddsix as six
 
 logger = logging.getLogger(__name__)
 
@@ -93,9 +94,9 @@
   strings = {}
   for c in description.constants():
     if c.second.dataType == 'string':
-      strings[c.first] = c.second.GetTitle()
+      strings[str(c.first)] = c.second.GetTitle()
     else:
-      todo[c.first] = c.second.GetTitle().replace('(int)', '')
+      todo[str(c.first)] = c.second.GetTitle().replace('(int)', '')
   while len(todo) and cnt < 100:
     cnt = cnt + 1
     if cnt == 100:
@@ -134,9 +135,11 @@
 def _evalProperty(data):
   """
     Function necessary to extract real strings from the property value.
-    Strings may be embraced by quotes: '<value>'
+    Strings may be embraced by quotes: '<value>', or could be cppyy.gbl.std.string with extra "b''"
   """
   try:
+    if isinstance(data, (cppyy.gbl.std.string, )):
+      return _evalProperty(data.decode('utf-8'))
     if isinstance(data, str):
       import ast
       return ast.literal_eval(data)
@@ -252,9 +255,9 @@
     self.__adopt(action.get())
   _import_class('Sim', obj)
   o = getattr(current, obj)
-  setattr(o, '__adopt', getattr(o, 'adopt'))
-  setattr(o, 'adopt', _adopt)
-  setattr(o, 'add', _adopt)
+  o.__adopt = o.adopt
+  o.adopt = _adopt
+  o.add = _adopt
 
 
 def _setup_callback(obj):
@@ -262,8 +265,8 @@
     self.__adopt(action.get(), action.callback())
   _import_class('Sim', obj)
   o = getattr(current, obj)
-  setattr(o, '__adopt', getattr(o, 'add'))
-  setattr(o, 'add', _adopt)
+  o.__adopt = o.add
+  o.add = _adopt
 
 
 _setup_callback('Geant4ActionPhase')
@@ -302,11 +305,11 @@
   a = Interface.toAction(self)
   ret = Interface.getProperty(a, name)
   if ret.status > 0:
-    return ret.data
+    return _evalProperty(ret.data)
   elif hasattr(self.action, name):
-    return getattr(self.action, name)
+    return _evalProperty(getattr(self.action, name))
   elif hasattr(a, name):
-    return getattr(a, name)
+    return _evalProperty(getattr(a, name))
   msg = 'Geant4Action::GetProperty [Unhandled]: Cannot access property ' + a.name() + '.' + name
   raise KeyError(msg)
 
@@ -441,9 +444,21 @@
 
     \author  M.Frank
     """
-    ui_name = getattr(self.master(), 'UI')
+    # calls __getattr__ implicitly, which calls getKernelProperty
+    ui_name = self.master().UI
     return self.master().globalAction(ui_name)
 
+  def registerInterruptHandler(self, signum=signal.SIGINT):
+    """
+    Enable interrupt handling: smooth handling of CTRL-C
+      - Finish processing of the current event(s)
+      - Drain the event loop
+      - Properly finalize the job
+
+    \author  M.Frank
+    """
+    return self.master().registerInterruptHandler(signum)
+
   def addUserInitialization(self, worker, worker_args=None, master=None, master_args=None):
     """
     Configure Geant4 user initialization for optionasl multi-threading mode
@@ -634,7 +649,7 @@
       collections = ro.collectionNames()
       if len(collections) == 0:
         act = SensitiveAction(self.kernel(), sensitive_type + '/' + name + 'Handler', name)
-        for parameter, value in six.iteritems(parameterDict):
+        for parameter, value in parameterDict.items():
           setattr(act, parameter, value)
         acts.append(act)
 
@@ -656,7 +671,7 @@
           coll_nam = str(coll)
         act = SensitiveAction(self.kernel(), sensitive_type + '/' + coll_nam + 'Handler', name)
         act.CollectionName = coll_nam
-        for parameter, value in six.iteritems(params):
+        for parameter, value in params.items():
           setattr(act, parameter, value)
         acts.append(act)
 
