Skip to content

Commit

Permalink
Use standard locations if the LD_LIBRARY_PATH or ROOTSYS are empty (#…
Browse files Browse the repository at this point in the history
…1378)

Co-authored-by: Andrii Verbytskyi <[email protected]>
Co-authored-by: MarkusFrankATcernch <[email protected]>
Co-authored-by: Andre Sailer <[email protected]>
  • Loading branch information
4 people authored Jan 27, 2025
1 parent 4114265 commit 54fcf8b
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 80 deletions.
3 changes: 2 additions & 1 deletion DDCore/python/dd4hepFactories.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ def __init__(self):
self.all_components = []

def scanPath(self):
ldp = os.environ['LD_LIBRARY_PATH'].split(':')
ldp = os.getenv("LD_LIBRARY_PATH",
"/usr/lib64:/usr/lib/:/usr/local/lib:/usr/lib64/root:/usr/lib/root:/usr/local/lib/root").split(':')
for p in ldp:
if len(p):
logger.info('+== Search component directory: ' + p)
Expand Down
18 changes: 12 additions & 6 deletions DDCore/python/dd4hep_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ def compileAClick(dictionary, g4=True):
"""
from ROOT import gInterpreter, gSystem
import os.path
dd4hep = os.environ['DD4hepINSTALL']
inc = ' -I' + os.environ['ROOTSYS'] + '/include -I' + dd4hep + '/include '
lib = ' -L' + dd4hep + '/lib -lDDCore -lDDG4 -lDDSegmentation '
dd4hep = os.getenv("DD4hepINSTALL", "/usr")
rootsys = os.getenv("ROOTSYS", "/usr")

inc = ' -I' + rootsys + '/include -I' + dd4hep + '/include '
lib = ' -L' + dd4hep + '/lib64 ' + ' -L' + dd4hep + '/lib -lDDCore -lDDG4 -lDDSegmentation '
if g4:
geant4 = os.environ['G4INSTALL']
geant4 = os.getenv('G4INSTALL', "/usr")
inc = inc + ' -I' + geant4 + '/include/Geant4 -Wno-shadow -g -O0 '
lib = lib + ' -L' + geant4 + '/lib -L' + geant4 + '/lib64 -lG4event -lG4tracking -lG4particles '
lib = lib + ' -L' + geant4 + '/lib64 -L' + geant4 + '/lib -lG4event -lG4tracking -lG4particles '

gSystem.AddIncludePath(inc)
gSystem.AddLinkedLibs(lib)
Expand All @@ -50,7 +52,11 @@ def loaddd4hep():
import os
import sys
# Add ROOT to the python path in case it is not yet there....
sys.path.append(os.environ['ROOTSYS'] + os.sep + 'lib')
rootsys = os.getenv("ROOTSYS", "/usr")
sys.path.append(os.path.join(rootsys, 'lib'))
sys.path.append(os.path.join(rootsys, 'lib64'))
sys.path.append(os.path.join(rootsys, 'lib', 'root'))
sys.path.append(os.path.join(rootsys, 'lib64', 'root'))
from ROOT import gSystem

import platform
Expand Down
142 changes: 70 additions & 72 deletions GaudiPluginService/src/PluginServiceV1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,84 +156,82 @@ namespace Gaudi {
const char sep = ':';
#endif
char* search_path = ::getenv( envVar );
if ( search_path ) {
logger().debug( std::string( "searching factories in " ) + envVar );
std::string path( search_path );
std::string::size_type pos = 0;
std::string::size_type newpos = 0;
while ( pos != std::string::npos ) {
std::string dirName;
// get the next entry in the path
newpos = path.find( sep, pos );
if ( newpos != std::string::npos ) {
dirName = path.substr( pos, newpos - pos );
pos = newpos + 1;
} else {
dirName = path.substr( pos );
pos = newpos;
}
logger().debug( std::string( " looking into " ) + dirName );
// look for files called "*.components" in the directory
DIR* dir = opendir( dirName.c_str() );
if ( dir ) {
struct dirent* entry;
while ( ( entry = readdir( dir ) ) ) {
std::string name( entry->d_name );
// check if the file name ends with ".components"
std::string::size_type extpos = name.find( ".components" );
if ( ( extpos != std::string::npos ) && ( ( extpos + 11 ) == name.size() ) ) {
std::string fullPath = ( dirName + '/' + name );
{ // check if it is a regular file
struct stat buf;
if ( 0 != ::stat( fullPath.c_str(), &buf ) )
continue;
else if ( !S_ISREG( buf.st_mode ) )
continue;
logger().debug( std::string( "searching factories in " ) + envVar );
std::string path = search_path ? std::string(search_path) : "/usr/lib64:/usr/lib:/usr/local/lib";
std::string::size_type pos = 0;
std::string::size_type newpos = 0;
while ( pos != std::string::npos ) {
std::string dirName;
// get the next entry in the path
newpos = path.find( sep, pos );
if ( newpos != std::string::npos ) {
dirName = path.substr( pos, newpos - pos );
pos = newpos + 1;
} else {
dirName = path.substr( pos );
pos = newpos;
}
logger().debug( std::string( " looking into " ) + dirName );
// look for files called "*.components" in the directory
DIR* dir = opendir( dirName.c_str() );
if ( dir ) {
struct dirent* entry;
while ( ( entry = readdir( dir ) ) ) {
std::string name( entry->d_name );
// check if the file name ends with ".components"
std::string::size_type extpos = name.find( ".components" );
if ( ( extpos != std::string::npos ) && ( ( extpos + 11 ) == name.size() ) ) {
std::string fullPath = ( dirName + '/' + name );
{ // check if it is a regular file
struct stat buf;
if ( 0 != ::stat( fullPath.c_str(), &buf ) )
continue;
else if ( !S_ISREG( buf.st_mode ) )
continue;
}
// read the file
logger().debug( std::string( " reading " ) + name );
std::ifstream factories{fullPath};
std::string line;
int factoriesCount = 0;
int lineCount = 0;
while ( !factories.eof() ) {
++lineCount;
std::getline( factories, line );
trim( line );
// skip empty lines and lines starting with '#'
if ( line.empty() || line[0] == '#' ) continue;
// only accept "v1" factories
if ( line.substr( 0, 4 ) == "v1::" )
line = line.substr( 4 );
else
continue;
// look for the separator
auto pos = line.find( ':' );
if ( pos == std::string::npos ) {
logger().warning( "failed to parse line " + fullPath + ':' + std::to_string( lineCount ) );
continue;
}
// read the file
logger().debug( std::string( " reading " ) + name );
std::ifstream factories{fullPath};
std::string line;
int factoriesCount = 0;
int lineCount = 0;
while ( !factories.eof() ) {
++lineCount;
std::getline( factories, line );
trim( line );
// skip empty lines and lines starting with '#'
if ( line.empty() || line[0] == '#' ) continue;
// only accept "v1" factories
if ( line.substr( 0, 4 ) == "v1::" )
line = line.substr( 4 );
else
continue;
// look for the separator
auto pos = line.find( ':' );
if ( pos == std::string::npos ) {
logger().warning( "failed to parse line " + fullPath + ':' + std::to_string( lineCount ) );
continue;
}
const std::string lib( line, 0, pos );
const std::string fact( line, pos + 1 );
m_factories.emplace( fact, FactoryInfo( lib ) );
const std::string lib( line, 0, pos );
const std::string fact( line, pos + 1 );
m_factories.emplace( fact, FactoryInfo( lib ) );
#ifdef GAUDI_REFLEX_COMPONENT_ALIASES
// add an alias for the factory using the Reflex convention
std::string old_name = old_style_name( fact );
if ( fact != old_name ) {
FactoryInfo old_info( lib );
old_info.properties["ReflexName"] = "true";
m_factories.emplace( old_name, old_info );
}
#endif
++factoriesCount;
}
if ( logger().level() <= Logger::Debug ) {
logger().debug( " found " + std::to_string( factoriesCount ) + " factories" );
// add an alias for the factory using the Reflex convention
std::string old_name = old_style_name( fact );
if ( fact != old_name ) {
FactoryInfo old_info( lib );
old_info.properties["ReflexName"] = "true";
m_factories.emplace( old_name, old_info );
}
#endif
++factoriesCount;
}
if ( logger().level() <= Logger::Debug ) {
logger().debug( " found " + std::to_string( factoriesCount ) + " factories" );
}
}
closedir( dir );
}
closedir( dir );
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion GaudiPluginService/src/PluginServiceV2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ namespace Gaudi {

std::string search_path;
const char* envPtr = std::getenv( envVar.c_str() );
if ( envPtr ) search_path = envPtr;
search_path = envPtr ? envPtr : "/usr/lib64:/usr/lib:/usr/local/lib";
if ( search_path.empty() ) {
return;
}
Expand Down

0 comments on commit 54fcf8b

Please sign in to comment.