Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use standard locations if the LD_LIBRARY_PATH or ROOTSYS are empty #1378

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DDCore/python/dd4hepFactories.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ 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
Loading