From b31adde79213b3368323eb9048d04c7edae20bc2 Mon Sep 17 00:00:00 2001 From: Ole Hansen Date: Wed, 27 Sep 2017 17:56:51 -0400 Subject: [PATCH] Merge SCons improvements from Release-150 branch and make further changes - Less verbose messages - Properly test for CXX headers, don't derive them from compiler name/version - Move configuration tasks back to right before build section now that we understand the underlying problem of issue #97. Undo commit 34b37ed. - Get rid of annoying warning about unused -pthread arg on macOS - Except for suppressing/enabling warnings, let SCons and ROOT handle the choice of compiler flags - On macOS, use .dylib suffix for shared libraries - Use .os suffix for dictionary objects, not .so - Maintain SCons's SHLIBFLAGS. Append to them as needed - Main program source is main.C, not main.o - Don't run configuration tasks with --clean or --help command line options --- .gitignore | 2 +- SConscript.py | 79 +++++---- SConstruct | 326 +++++++++++++++++++------------------- darwin64.py | 80 +++++----- hana_decode/SConscript.py | 51 +++--- linux32.py | 82 +++++----- linux64.py | 85 +++++----- src/SConscript.py | 38 ++--- 8 files changed, 364 insertions(+), 379 deletions(-) diff --git a/.gitignore b/.gitignore index c68c6257..f72f61b8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ *.d *.os lib*.so* -lib*.dylib +lib*.dylib* analyzer hana_decode/epicsd hana_decode/prfact diff --git a/SConscript.py b/SConscript.py index 4bd09e9c..e426ed3d 100644 --- a/SConscript.py +++ b/SConscript.py @@ -13,16 +13,19 @@ ######## ROOT Dictionaries ######### rootdecdict = baseenv.subst('$MAIN_DIR')+'/THaDecDict.C' -rootdecobj = baseenv.subst('$HA_DC')+'/THaDecDict.so' +rootdecobj = baseenv.subst('$HA_DC')+'/THaDecDict.os' decheaders = Split(""" -hana_decode/THaUsrstrutils.h hana_decode/THaCrateMap.h hana_decode/THaCodaData.h hana_decode/THaEpics.h -hana_decode/THaFastBusWord.h hana_decode/THaCodaFile.h hana_decode/THaSlotData.h hana_decode/THaEvData.h +hana_decode/THaUsrstrutils.h hana_decode/THaCrateMap.h +hana_decode/THaCodaData.h hana_decode/THaEpics.h +hana_decode/THaFastBusWord.h hana_decode/THaCodaFile.h +hana_decode/THaSlotData.h hana_decode/THaEvData.h hana_decode/THaCodaDecoder.h hana_decode/SimDecoder.h hana_decode/CodaDecoder.h hana_decode/Module.h hana_decode/VmeModule.h hana_decode/FastbusModule.h hana_decode/Lecroy1877Module.h hana_decode/Lecroy1881Module.h hana_decode/Lecroy1875Module.h -hana_decode/Fadc250Module.h hana_decode/GenScaler.h hana_decode/Scaler560.h -hana_decode/Scaler1151.h hana_decode/Scaler3800.h hana_decode/Scaler3801.h +hana_decode/Fadc250Module.h hana_decode/GenScaler.h +hana_decode/Scaler560.h hana_decode/Scaler1151.h +hana_decode/Scaler3800.h hana_decode/Scaler3801.h hana_decode/F1TDCModule.h hana_decode/Caen1190Module.h hana_decode/Caen775Module.h hana_decode/Caen792Module.h hana_decode/THaBenchmark.h hana_decode/haDecode_LinkDef.h @@ -31,36 +34,42 @@ baseenv.SharedObject(target = rootdecobj, source = rootdecdict) roothadict = baseenv.subst('$MAIN_DIR')+'/haDict.C' -roothaobj = baseenv.subst('$HA_SRC')+'/haDict.so' +roothaobj = baseenv.subst('$HA_SRC')+'/haDict.os' haheaders = Split(""" -src/THaFormula.h src/THaVform.h src/THaVhist.h src/THaVar.h src/THaVarList.h -src/THaCut.h src/THaNamedList.h src/THaCutList.h src/THaInterface.h src/THaRunBase.h -src/THaCodaRun.h src/THaRun.h src/THaRunParameters.h src/THaDetMap.h src/THaApparatus.h -src/THaDetector.h src/THaSpectrometer.h src/THaSpectrometerDetector.h src/THaHRS.h -src/THaDecData.h src/BdataLoc.h src/THaOutput.h src/THaString.h src/THaTrackingDetector.h -src/THaNonTrackingDetector.h src/THaPidDetector.h src/THaSubDetector.h -src/THaAnalysisObject.h src/THaDetectorBase.h src/THaRTTI.h src/THaPhysicsModule.h -src/THaVertexModule.h src/THaTrackingModule.h src/THaAnalyzer.h src/THaPrintOption.h -src/THaBeam.h src/THaIdealBeam.h src/THaRasteredBeam.h src/THaRaster.h src/THaBeamDet.h -src/THaBPM.h src/THaUnRasteredBeam.h src/THaTrack.h src/THaPIDinfo.h -src/THaParticleInfo.h src/THaCluster.h src/THaArrayString.h src/THaScintillator.h -src/THaShower.h src/THaTotalShower.h src/THaCherenkov.h src/THaEvent.h -src/THaTrackID.h src/THaVDC.h src/THaVDCPlane.h -src/THaVDCWire.h src/THaVDCHit.h src/THaVDCCluster.h src/THaVDCTimeToDistConv.h -src/THaVDCTrackID.h src/THaVDCAnalyticTTDConv.h src/VDCeff.h -src/THaElectronKine.h src/THaReactionPoint.h -src/THaReacPointFoil.h src/THaTwoarmVertex.h src/THaAvgVertex.h src/THaExtTarCor.h -src/THaDebugModule.h src/THaTrackInfo.h src/THaGoldenTrack.h src/THaPrimaryKine.h -src/THaSecondaryKine.h src/THaCoincTime.h src/THaS2CoincTime.h src/THaTrackProj.h -src/THaPostProcess.h src/THaFilter.h src/THaElossCorrection.h src/THaTrackEloss.h -src/THaBeamModule.h src/THaBeamInfo.h src/THaEpicsEbeam.h src/THaBeamEloss.h -src/THaTrackOut.h src/THaTriggerTime.h src/THaHelicityDet.h src/THaG0HelicityReader.h -src/THaG0Helicity.h src/THaADCHelicity.h src/THaHelicity.h src/THaPhotoReaction.h -src/THaSAProtonEP.h src/THaTextvars.h src/THaQWEAKHelicity.h src/THaQWEAKHelicityReader.h -src/THaEvtTypeHandler.h src/THaScalerEvtHandler.h src/THaEpicsEvtHandler.h -src/THaEvt125Handler.h -src/THaVDCChamber.h src/THaVDCPoint.h src/THaVDCPointPair.h -src/THaGlobals.h src/HallA_LinkDef.h +src/THaFormula.h src/THaVform.h src/THaVhist.h src/THaVar.h +src/THaVarList.h src/THaCut.h src/THaNamedList.h src/THaCutList.h +src/THaInterface.h src/THaRunBase.h src/THaCodaRun.h src/THaRun.h +src/THaRunParameters.h src/THaDetMap.h src/THaApparatus.h +src/THaDetector.h src/THaSpectrometer.h src/THaSpectrometerDetector.h +src/THaHRS.h src/THaDecData.h src/BdataLoc.h src/THaOutput.h +src/THaString.h src/THaTrackingDetector.h src/THaNonTrackingDetector.h +src/THaPidDetector.h src/THaSubDetector.h src/THaAnalysisObject.h +src/THaDetectorBase.h src/THaRTTI.h src/THaPhysicsModule.h +src/THaVertexModule.h src/THaTrackingModule.h src/THaAnalyzer.h +src/THaPrintOption.h src/THaBeam.h src/THaIdealBeam.h +src/THaRasteredBeam.h src/THaRaster.h src/THaBeamDet.h src/THaBPM.h +src/THaUnRasteredBeam.h src/THaTrack.h src/THaPIDinfo.h +src/THaParticleInfo.h src/THaCluster.h src/THaArrayString.h +src/THaScintillator.h src/THaShower.h src/THaTotalShower.h +src/THaCherenkov.h src/THaEvent.h src/THaTrackID.h src/THaVDC.h +src/THaVDCPlane.h src/THaVDCWire.h src/THaVDCHit.h src/THaVDCCluster.h +src/THaVDCTimeToDistConv.h src/THaVDCTrackID.h +src/THaVDCAnalyticTTDConv.h src/VDCeff.h src/THaElectronKine.h +src/THaReactionPoint.h src/THaReacPointFoil.h src/THaTwoarmVertex.h +src/THaAvgVertex.h src/THaExtTarCor.h src/THaDebugModule.h +src/THaTrackInfo.h src/THaGoldenTrack.h src/THaPrimaryKine.h +src/THaSecondaryKine.h src/THaCoincTime.h src/THaS2CoincTime.h +src/THaTrackProj.h src/THaPostProcess.h src/THaFilter.h +src/THaElossCorrection.h src/THaTrackEloss.h src/THaBeamModule.h +src/THaBeamInfo.h src/THaEpicsEbeam.h src/THaBeamEloss.h +src/THaTrackOut.h src/THaTriggerTime.h src/THaHelicityDet.h +src/THaG0HelicityReader.h src/THaG0Helicity.h src/THaADCHelicity.h +src/THaHelicity.h src/THaPhotoReaction.h src/THaSAProtonEP.h +src/THaTextvars.h src/THaQWEAKHelicity.h src/THaQWEAKHelicityReader.h +src/THaEvtTypeHandler.h src/THaScalerEvtHandler.h +src/THaEpicsEvtHandler.h src/THaEvt125Handler.h src/THaVDCChamber.h +src/THaVDCPoint.h src/THaVDCPointPair.h src/THaGlobals.h +src/HallA_LinkDef.h """) baseenv.RootCint(roothadict,haheaders) baseenv.SharedObject(target = roothaobj, source = roothadict) @@ -118,7 +127,7 @@ ####### Start of main SConscript ########### -analyzer = baseenv.Program(target = 'analyzer', source = 'src/main.o') +analyzer = baseenv.Program(target = 'analyzer', source = 'src/main.C') baseenv.Install('./bin',analyzer) baseenv.Alias('install',['./bin']) baseenv.Clean(analyzer,compiledata) diff --git a/SConstruct b/SConstruct index b211d4a2..a58a6298 100644 --- a/SConstruct +++ b/SConstruct @@ -5,49 +5,19 @@ import os import sys import platform -import commands import SCons -import time import subprocess import configure -def rootcint(target,source,env): - """Executes the ROOT dictionary generator over a list of headers.""" - dictname = target[0] - headers = "" - cpppath = env.subst('$_CCCOMCOM') - ccflags = env.subst('$CCFLAGS') - rootcint = env.subst('$ROOTCINT') - print ("Doing rootcint call now ...") - for f in source: - headers += str(f) + " " - command = rootcint + " -f %s -c -pthread -fPIC %s %s" % (dictname,cpppath,headers) - print ('RootCint Command = %s\n' % command) - ok = os.system(command) - return ok - -baseenv = Environment(ENV = os.environ,tools=["default","disttar"],toolpath='.') -#dict = baseenv.Dictionary() -#keys = dict.keys() -#keys.sort() -#for key in keys: -# print "Construction variable = '%s', value = '%s'" % (key, dict[key]) - -####### Check SCons version ################## -#print('!!! You should be using the local version of SCons, invoked with:') -#print('!!! ./scons/scons.py') -print('!!! Building the Hall A analyzer and libraries with SCons requires') -print('!!! SCons version 2.1.0 or newer.') EnsureSConsVersion(2,1,0) -configure.config(baseenv,ARGUMENTS) +baseenv = Environment(ENV = os.environ,tools=["default","disttar"],toolpath='.') ####### Hall A Build Environment ############# -# baseenv.Append(MAIN_DIR = Dir('.').abspath) baseenv.Append(HA_DIR = baseenv.subst('$MAIN_DIR')) -baseenv.Append(HA_SRC = baseenv.subst('$HA_DIR')+'/src ') -baseenv.Append(HA_DC = baseenv.subst('$HA_DIR')+'/hana_decode ') +baseenv.Append(HA_SRC = baseenv.subst('$HA_DIR')+'/src ') +baseenv.Append(HA_DC = baseenv.subst('$HA_DIR')+'/hana_decode ') baseenv.Append(MAJORVERSION = '1') baseenv.Append(MINORVERSION = '6') baseenv.Append(PATCH = '0') @@ -56,169 +26,196 @@ baseenv.Append(VERSION = baseenv.subst('$SOVERSION')+'.'+baseenv.subst('$PATCH') baseenv.Append(NAME = 'analyzer-'+baseenv.subst('$VERSION')) baseenv.Append(EXTVERS = '-beta3') baseenv.Append(HA_VERSION = baseenv.subst('$VERSION')+baseenv.subst('$EXTVERS')) -print ("Main Directory = %s" % baseenv.subst('$HA_DIR')) +#print ("Main Directory = %s" % baseenv.subst('$HA_DIR')) print ("Software Version = %s" % baseenv.subst('$VERSION')) -ivercode = 65536*int(float(baseenv.subst('$SOVERSION')))+ 256*int(10*(float(baseenv.subst('$SOVERSION'))-int(float(baseenv.subst('$SOVERSION')))))+ int(float(baseenv.subst('$PATCH'))) +ivercode = 65536*int(float(baseenv.subst('$SOVERSION'))) + \ + 256*int(10*(float(baseenv.subst('$SOVERSION')) - \ + int(float(baseenv.subst('$SOVERSION'))))) + \ + int(float(baseenv.subst('$PATCH'))) baseenv.Append(VERCODE = ivercode) -# -# evio environment -# -evio_libdir = os.getenv('EVIO_LIBDIR') -evio_incdir = os.getenv('EVIO_INCDIR') -if evio_libdir is None or evio_incdir is None: - print ("No external EVIO environment configured !!!") - print ("EVIO_LIBDIR = %s" % evio_libdir) - print ("EVIO_INCDIR = %s" % evio_incdir) - print ("Using local installation ... ") - evio_local = baseenv.subst('$HA_DIR')+'/evio' - evio_command_dircreate = "mkdir -p %s" % (evio_local) - os.system(evio_command_dircreate) - evio_version = '4.4.6' - uname = os.uname(); - platform = uname[0]; - machine = uname[4]; - evio_name = platform + '-' + machine - print ("evio_name = %s" % evio_name) - evio_local_lib = "%s/evio-%s/%s/lib" % (evio_local,evio_version,evio_name) - evio_local_inc = "%s/evio-%s/%s/include" % (evio_local,evio_version,evio_name) - evio_tarfile = "%s/evio-%s.tar.gz" % (evio_local,evio_version) - - ####### Check to see if scons -c has been called ######### - - if baseenv.GetOption('clean'): - subprocess.call(['echo', '!!!!!!!!!!!!!! EVIO Cleaning Process !!!!!!!!!!!! ']) - if not os.path.isdir(evio_local_lib): - if not os.path.exists(evio_tarfile): - evio_command_scons = "rm libevio*.*; cd %s; wget https://github.com/JeffersonLab/hallac_evio/archive/evio-%s.tar.gz; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version,evio_version) - else: - evio_command_scons = "rm libevio*.*; cd %s; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version) - else: - evio_command_scons = "rm libevio*.*; cd %s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version) - print ("evio_command_scons = %s" % evio_command_scons) - os.system(evio_command_scons) - else: - if not os.path.isdir(evio_local_lib): - if not os.path.exists(evio_tarfile): - evio_command_scons = "cd %s; wget https://github.com/JeffersonLab/hallac_evio/archive/evio-%s.tar.gz; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version,evio_version) - else: - evio_command_scons = "cd %s; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version) - else: - evio_command_scons = "cd %s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version) - print ("evio_command_scons = %s" % evio_command_scons) - os.system(evio_command_scons) - evio_local_lib_files = "%s/*.*" % (evio_local_lib) - evio_command_libcopy = "cp %s ." % (evio_local_lib_files) - print ("evio_command_libcopy = %s" % evio_command_libcopy) - os.system(evio_command_libcopy) - - baseenv.Append(EVIO_LIB = evio_local_lib) - baseenv.Append(EVIO_INC = evio_local_inc) -else: - # evio_command_scons = "cd %s; scons install --prefix=." % evio_instdir - # os.system(evio_command_scons) - baseenv.Append(EVIO_LIB = os.getenv('EVIO_LIBDIR')) - baseenv.Append(EVIO_INC = os.getenv('EVIO_INCDIR')) -print ("EVIO lib Directory = %s" % baseenv.subst('$EVIO_LIB')) -print ("EVIO include Directory = %s" % baseenv.subst('$EVIO_INC')) -baseenv.Append(CPPPATH = ['$EVIO_INC']) -# -# end evio environment -# baseenv.Append(CPPPATH = ['$HA_SRC','$HA_DC']) ####### ROOT Definitions #################### +def rootcint(target,source,env): + """Executes the ROOT dictionary generator over a list of headers.""" + dictname = target[0] + headers = "" + cpppath = env.subst('$_CCCOMCOM') + ccflags = env.subst('$CCFLAGS') + rootcint = env.subst('$ROOTCINT') + print ("Doing rootcint call now ...") + for f in source: + headers += str(f) + " " + command = rootcint + " -f %s -c -pthread -fPIC %s %s" % (dictname,cpppath,headers) +# print ('RootCint Command = %s\n' % command) + ok = os.system(command) + return ok + baseenv.Append(ROOTCONFIG = 'root-config') baseenv.Append(ROOTCINT = 'rootcint') +try: + baseenv.AppendENVPath('PATH',baseenv['ENV']['ROOTSYS'] + '/bin') +except KeyError: + pass # ROOTSYS not defined try: - baseenv.ParseConfig('$ROOTCONFIG --cflags') - baseenv.ParseConfig('$ROOTCONFIG --libs') + baseenv.ParseConfig('$ROOTCONFIG --cflags --libs') if sys.version_info >= (2, 7): cmd = baseenv['ROOTCONFIG'] + " --cxx" baseenv.Replace(CXX = subprocess.check_output(cmd, shell=True).rstrip()) + cmd = baseenv['ROOTCONFIG'] + " --version" + baseenv.Replace(ROOTVERS = subprocess.check_output(cmd, shell=True).rstrip()) else: - baseenv.Replace(CXX = subprocess.Popen([baseenv['ROOTCONFIG'], '--cxx'], stdout=subprocess.PIPE).communicate()[0].rstrip()) + baseenv.Replace(CXX = subprocess.Popen([baseenv['ROOTCONFIG'], '--cxx'],\ + stdout=subprocess.PIPE).communicate()[0].rstrip()) + baseenv.Replace(ROOTVERS = subprocess.Popen([baseenv['ROOTCONFIG'],\ + '--version'],stdout=subprocess.PIPE).communicate()[0].rstrip()) + if platform.system() == 'Darwin': + try: + baseenv.Replace(LINKFLAGS = baseenv['LINKFLAGS'].remove('-pthread')) + except: + pass # '-pthread' was not present in LINKFLAGS except OSError: - try: - baseenv.Replace(ROOTCONFIG = baseenv['ENV']['ROOTSYS'] + '/bin/root-config') - baseenv.Replace(ROOTCINT = baseenv['ENV']['ROOTSYS'] + '/bin/rootcint') - baseenv.ParseConfig('$ROOTCONFIG --cflags') - baseenv.ParseConfig('$ROOTCONFIG --libs') - if sys.version_info >= (2, 7): - cmd = baseenv['ROOTCONFIG'] + " --cxx" - baseenv.Replace(CXX = subprocess.check_output(cmd, shell=True).rstrip()) - else: - baseenv.Replace(CXX = subprocess.Popen([baseenv['ROOTCONFIG'], '--cxx'], stdout=subprocess.PIPE).communicate()[0].rstrip()) - except KeyError: - print('!!! Cannot find ROOT. Check if root-config is in your PATH.') - Exit(1) + print('!!! Cannot find ROOT. Check if root-config is in your PATH.') + Exit(1) bld = Builder(action=rootcint) baseenv.Append(BUILDERS = {'RootCint': bld}) -######## Configure Section ####### - -Export('baseenv') - -conf = Configure(baseenv) - -if not conf.CheckCXX(): - print('!!! Your compiler and/or environment is not correctly configured.') - Exit(0) - -#if not conf.CheckFunc('printf'): -if not conf.CheckCC(): - print('!!! Your compiler and/or environment is not correctly configured.') - Exit(0) - -baseenv = conf.Finish() +# +# evio environment +# +evio_libdir = os.getenv('EVIO_LIBDIR') +evio_incdir = os.getenv('EVIO_INCDIR') +if evio_libdir is None or evio_incdir is None: + print ("No external EVIO environment configured !!!") + print ("EVIO_LIBDIR = %s" % evio_libdir) + print ("EVIO_INCDIR = %s" % evio_incdir) + print ("Using local installation ... ") + evio_local = baseenv.subst('$HA_DIR')+'/evio' + evio_command_dircreate = "mkdir -p %s" % (evio_local) + os.system(evio_command_dircreate) + evio_version = '4.4.6' + uname = os.uname(); + platform = uname[0]; + machine = uname[4]; + evio_name = platform + '-' + machine + print ("evio_name = %s" % evio_name) + evio_local_lib = "%s/evio-%s/%s/lib" % (evio_local,evio_version,evio_name) + evio_local_inc = "%s/evio-%s/%s/include" % (evio_local,evio_version,evio_name) + evio_tarfile = "%s/evio-%s.tar.gz" % (evio_local,evio_version) + + ####### Check to see if scons -c has been called ######### + + if baseenv.GetOption('clean'): + subprocess.call(['echo', '!!!!!!!!!!!!!! EVIO Cleaning Process !!!!!!!!!!!! ']) + if not os.path.isdir(evio_local_lib): + if not os.path.exists(evio_tarfile): + evio_command_scons = "rm libevio*.*; cd %s; wget https://github.com/JeffersonLab/hallac_evio/archive/evio-%s.tar.gz; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version,evio_version) + else: + evio_command_scons = "rm libevio*.*; cd %s; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version) + else: + evio_command_scons = "rm libevio*.*; cd %s; cd evio-%s/ ; scons install -c --prefix=." % (evio_local,evio_version) + print ("evio_command_scons = %s" % evio_command_scons) + os.system(evio_command_scons) + else: + if not os.path.isdir(evio_local_lib): + if not os.path.exists(evio_tarfile): + evio_command_scons = "cd %s; wget https://github.com/JeffersonLab/hallac_evio/archive/evio-%s.tar.gz; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version,evio_version) + else: + evio_command_scons = "cd %s; tar xvfz evio-%s.tar.gz; mv hallac_evio-evio-%s evio-%s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version,evio_version,evio_version,evio_version) + else: + evio_command_scons = "cd %s; cd evio-%s/ ; scons install --prefix=." % (evio_local,evio_version) + print ("evio_command_scons = %s" % evio_command_scons) + os.system(evio_command_scons) + evio_local_lib_files = "%s/*.*" % (evio_local_lib) + evio_command_libcopy = "cp %s ." % (evio_local_lib_files) + print ("evio_command_libcopy = %s" % evio_command_libcopy) + os.system(evio_command_libcopy) + + baseenv.Append(EVIO_LIB = evio_local_lib) + baseenv.Append(EVIO_INC = evio_local_inc) +else: + # evio_command_scons = "cd %s; scons install --prefix=." % evio_instdir + # os.system(evio_command_scons) + baseenv.Append(EVIO_LIB = os.getenv('EVIO_LIBDIR')) + baseenv.Append(EVIO_INC = os.getenv('EVIO_INCDIR')) +print ("EVIO lib Directory = %s" % baseenv.subst('$EVIO_LIB')) +print ("EVIO include Directory = %s" % baseenv.subst('$EVIO_INC')) +baseenv.Append(CPPPATH = ['$EVIO_INC']) +# +# end evio environment +# ######## cppcheck ########################### def which(program): - import os - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) - - fpath, fname = os.path.split(program) - if fpath: - if is_exe(program): - return program - else: - for path in os.environ["PATH"].split(os.pathsep): - path = path.strip('"') - exe_file = os.path.join(path, program) - if is_exe(exe_file): - return exe_file - return None + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + return None proceed = "1" or "y" or "yes" or "Yes" or "Y" if baseenv.subst('$CPPCHECK')==proceed: - is_cppcheck = which('cppcheck') - print ("Path to cppcheck is %s\n" % is_cppcheck) + is_cppcheck = which('cppcheck') + print ("Path to cppcheck is %s\n" % is_cppcheck) - if(is_cppcheck == None): - print('!!! cppcheck not found on this system. Check if cppcheck is installed and in your PATH.') - Exit(1) - else: - cppcheck_command = baseenv.Command('cppcheck_report.txt',[],"cppcheck --quiet --enable=all src/ hana_decode/ 2> $TARGET") - print ("cppcheck_command = %s" % cppcheck_command) - baseenv.AlwaysBuild(cppcheck_command) + if(is_cppcheck == None): + print('!!! cppcheck not found on this system. Check if cppcheck is installed and in your PATH.') + Exit(1) + else: + cppcheck_command = baseenv.Command('cppcheck_report.txt',[],"cppcheck --quiet --enable=all src/ hana_decode/ 2> $TARGET") + print ("cppcheck_command = %s" % cppcheck_command) + baseenv.AlwaysBuild(cppcheck_command) ####### build source distribution tarball ############# if baseenv.subst('$SRCDIST')==proceed: - baseenv['DISTTAR_FORMAT']='gz' - baseenv.Append( - DISTTAR_EXCLUDEEXTS=['.o','.os','.so','.a','.dll','.cache','.pyc','.cvsignore','.dblite','.log', '.gz', '.bz2', '.zip','.pcm','.supp','.patch','.txt'] - , DISTTAR_EXCLUDEDIRS=['.git','VDCsim','bin','scripts','.sconf_temp','tests','work','hana_scaler'] - , DISTTAR_EXCLUDERES=[r'Dict\.C$', r'Dict\.h$',r'analyzer',r'\~$',r'\.so\.',r'\.#'] - ) - tar = baseenv.DistTar("dist/analyzer-"+baseenv.subst('$VERSION'),[baseenv.Dir('#')]) - print ("tarball target = %s" % tar) + baseenv['DISTTAR_FORMAT']='gz' + baseenv.Append( + DISTTAR_EXCLUDEEXTS=['.o','.os','.so','.a','.dll','.cache','.pyc','.cvsignore','.dblite','.log', '.gz', '.bz2', '.zip','.pcm','.supp','.patch','.txt','.dylib'] + , DISTTAR_EXCLUDEDIRS=['.git','VDCsim','bin','scripts','.sconf_temp','tests','work','hana_scaler'] + , DISTTAR_EXCLUDERES=[r'Dict\.C$', r'Dict\.h$',r'analyzer',r'\~$',r'\.so\.',r'\.#', r'\.dylib\.'] + ) + tar = baseenv.DistTar("dist/analyzer-"+baseenv.subst('$VERSION'),[baseenv.Dir('#')]) + print ("tarball target = %s" % tar) ### tar_command = 'tar cvz -C .. -f ../' + baseenv.subst('$NAME') + '.tar.gz -X .exclude -V "JLab/Hall A C++ Analysis Software '+baseenv.subst('$VERSION') + ' `date -I`" ' + '../' + baseenv.subst('$NAME') + '/.exclude ' + '../' + baseenv.subst('$NAME') + '/Changelog ' + '../' + baseenv.subst('$NAME') + '/src ' + '../' + baseenv.subst('$NAME') + '/hana_decode ' + '../' + baseenv.subst('$NAME') + '/Makefile ' + '../' + baseenv.subst('$NAME') + '/*.py' + '../' + baseenv.subst('$NAME') + '/SConstruct' +######## Configure Section ####### + +if not (baseenv.GetOption('clean') or baseenv.GetOption('help')): + + configure.config(baseenv,ARGUMENTS) + + conf = Configure(baseenv) + if not conf.CheckCXX(): + print('!!! Your compiler and/or environment is not correctly configured.') + Exit(1) + # if not conf.CheckFunc('printf'): + # print('!!! Your compiler and/or environment is not correctly configured.') + # Exit(1) + if conf.CheckCXXHeader('sstream'): + conf.env.Append(CPPDEFINES = 'HAS_SSTREAM') + baseenv = conf.Finish() + +Export('baseenv') + +#print (baseenv.Dump()) +#print ('CXXFLAGS = ', baseenv['CXXFLAGS']) +#print ('LINKFLAGS = ', baseenv['LINKFLAGS']) +#print ('SHLINKFLAGS = ', baseenv['SHLINKFLAGS']) + ####### Start of main SConstruct ############ hallalib = 'HallA' @@ -227,7 +224,8 @@ eviolib = 'evio' baseenv.Append(LIBPATH=['$HA_DIR','$EVIO_LIB','$HA_SRC','$HA_DC']) baseenv.Prepend(LIBS=[hallalib,dclib,eviolib]) -baseenv.Replace(SHLIBSUFFIX = '.so') +baseenv.Replace(SOSUFFIX = baseenv.subst('$SHLIBSUFFIX')) +#baseenv.Replace(SHLIBSUFFIX = '.so') baseenv.Append(SHLIBSUFFIX = '.'+baseenv.subst('$VERSION')) SConscript(dirs = ['./','src/','hana_decode/'],name='SConscript.py',exports='baseenv') diff --git a/darwin64.py b/darwin64.py index cd6659b9..5bdbbadc 100644 --- a/darwin64.py +++ b/darwin64.py @@ -1,51 +1,43 @@ -import platform -import os +# darwin64.py +# Mac OS X platform specific configuration def config(env,args): - debug = args.get('debug',0) - standalone = args.get('standalone',0) - cppcheck = args.get('cppcheck',0) - checkheaders = args.get('checkheaders',0) - srcdist = args.get('srcdist',0) - - if int(debug): - env.Append(CXXFLAGS = '-g') - env.Append(CXXFLAGS = '-O0') - env.Append(CPPDEFINES= '-DWITH_DEBUG') - else: - env.Append(CXXFLAGS = '-O') - env.Append(CPPDEFINES= '-DNDEBUG') - - if int(standalone): - env.Append(STANDALONE= '1') - - if int(cppcheck): - env.Append(CPPCHECK= '1') - - if int(checkheaders): - env.Append(CHECKHEADERS= '1') - - if int(srcdist): - env.Append(SRCDIST= '1') - - #env.Append(CXXFLAGS = '-Wall -Woverloaded-virtual -pthread -rdynamic') - env.Append(CXXFLAGS = '-Wall') - env.Append(CXXFLAGS = '-Woverloaded-virtual') - env.Append(CPPDEFINES = '-DMACVERS') - - cxxversion = env.subst('$CXXVERSION') - - if float(cxxversion[0:2])>=4.0: - env.Append(CXXFLAGS = '-Wextra') - env.Append(CXXFLAGS = '-Wno-missing-field-initializers') + debug = args.get('debug',0) + standalone = args.get('standalone',0) + cppcheck = args.get('cppcheck',0) + checkheaders = args.get('checkheaders',0) + srcdist = args.get('srcdist',0) + + if int(debug): + env.Append(CXXFLAGS = env.Split('-g -O0')) + env.Append(CPPDEFINES= 'WITH_DEBUG') + else: + env.Append(CXXFLAGS = '-O') + env.Append(CPPDEFINES= 'NDEBUG') + + if int(standalone): + env.Append(STANDALONE= '1') + + if int(cppcheck): + env.Append(CPPCHECK= '1') + + if int(checkheaders): + env.Append(CHECKHEADERS= '1') + + if int(srcdist): + env.Append(SRCDIST= '1') + + env.Append(CXXFLAGS = env.Split('-Wall -Woverloaded-virtual')) + env.Append(CPPDEFINES = 'MACVERS') + + cxxversion = env.subst('$CXXVERSION') + + if float(cxxversion[0:2])>=4.0: + env.Append(CXXFLAGS = env.Split('-Wextra -Wno-missing-field-initializers')) + if not int(debug): env.Append(CXXFLAGS = '-Wno-unused-parameter') - - if float(cxxversion[0:2])>=3.0: - env.Append(CPPDEFINES = '-DHAS_SSTREAM') - - env['SHLINKFLAGS'] = '$LINKFLAGS -shared -Wl,-undefined,dynamic_lookup' - env['SHLIBSUFFIX'] = '.so' + env.Append(SHLINKFLAGS = '-Wl,-undefined,dynamic_lookup') #end darwin64.py diff --git a/hana_decode/SConscript.py b/hana_decode/SConscript.py index 6dab53db..219f1b6f 100644 --- a/hana_decode/SConscript.py +++ b/hana_decode/SConscript.py @@ -7,13 +7,13 @@ Import('baseenv') standalone = baseenv.subst('$STANDALONE') -print ('Compiling decoder executables: STANDALONE = %s\n' % standalone) +#print ('Compiling decoder executables: STANDALONE = %s\n' % standalone) standalonelist = Split(""" tstoo tstfadc tstf1tdc tstio tdecpr prfact epicsd tdecex tst1190 """) # Still to come, perhaps, are (etclient, tstcoda) which should be compiled -# if the ONLINE_ET variable is set. +# if the ONLINE_ET variable is set. list = Split(""" Caen1190Module.C @@ -57,41 +57,42 @@ for scalex in standalonelist: pname = scalex - if scalex=='epicsd': - main = 'epics_main.C' - else: - main = scalex+'_main.C' + if scalex=='epicsd': + main = 'epics_main.C' + else: + main = scalex+'_main.C' if scalex=='tdecex': - pname = baseenv.Program(target = pname, source = [main,'THaGenDetTest.C']) - else: - pname = baseenv.Program(target = pname, source = [main]) - + pname = baseenv.Program(target = pname, source = [main,'THaGenDetTest.C']) + else: + pname = baseenv.Program(target = pname, source = [main]) + baseenv.Install('../bin',pname) baseenv.Alias('install',['../bin']) sotarget = 'dc' -#dclib = baseenv.SharedLibrary(target=sotarget, source = list+['THaDecDict.so'],SHLIBPREFIX='../lib',SHLIBVERSION=['$VERSION'],LIBS=['']) -dclib = baseenv.SharedLibrary(target=sotarget, source = list+['THaDecDict.so'],SHLIBPREFIX='../lib',LIBS=['']) -print ('Decoder shared library = %s\n' % dclib) +dclib = baseenv.SharedLibrary(target=sotarget, source = list+['THaDecDict.os'],\ + SHLIBPREFIX='../lib',LIBS=[''],LIBPATH=['']) +#print ('Decoder shared library = %s\n' % dclib) linkbase = baseenv.subst('$SHLIBPREFIX')+sotarget -cleantarget = linkbase+'.so.'+baseenv.subst('$VERSION') -majorcleantarget = linkbase+'.so' -localmajorcleantarget = '../'+linkbase+'.so' -shortcleantarget = linkbase+'.so.'+baseenv.subst('$SOVERSION') -localshortcleantarget = '../'+linkbase+'.so.'+baseenv.subst('$SOVERSION') +cleantarget = linkbase+baseenv.subst('$SHLIBSUFFIX') +majorcleantarget = linkbase+baseenv.subst('$SOSUFFIX') +localmajorcleantarget = '../'+linkbase+baseenv.subst('$SOSUFFIX') +shortcleantarget = linkbase+baseenv.subst('$SOSUFFIX')+'.'+baseenv.subst('$SOVERSION') +localshortcleantarget = '../'+linkbase+baseenv.subst('$SOSUFFIX')+'.'+\ + baseenv.subst('$SOVERSION') -print ('cleantarget = %s\n' % cleantarget) -print ('majorcleantarget = %s\n' % majorcleantarget) -print ('shortcleantarget = %s\n' % shortcleantarget) +#print ('cleantarget = %s\n' % cleantarget) +#print ('majorcleantarget = %s\n' % majorcleantarget) +#print ('shortcleantarget = %s\n' % shortcleantarget) try: - os.symlink(cleantarget,localshortcleantarget) - os.symlink(shortcleantarget,localmajorcleantarget) -except: - print (" Continuing ... ") + os.symlink(cleantarget,localshortcleantarget) + os.symlink(shortcleantarget,localmajorcleantarget) +except: + pass Clean(dclib,cleantarget) Clean(dclib,localmajorcleantarget) diff --git a/linux32.py b/linux32.py index 4c641da0..c1f0bdba 100644 --- a/linux32.py +++ b/linux32.py @@ -1,51 +1,43 @@ -import platform -import os +# linux32.py +# Linux 32-bit platform specific configuration def config(env,args): - debug = args.get('debug',0) - standalone = args.get('standalone',0) - cppcheck = args.get('cppcheck',0) - checkheaders = args.get('checkheaders',0) - srcdist = args.get('srcdist',0) - - if int(debug): - env.Append(CXXFLAGS = '-g') - env.Append(CXXFLAGS = '-O0') - env.Append(CPPDEFINES= '-DWITH_DEBUG') - else: - env.Append(CXXFLAGS = '-O') - env.Append(CPPDEFINES= '-DNDEBUG') - - if int(standalone): - env.Append(STANDALONE= '1') - - if int(cppcheck): - env.Append(CPPCHECK= '1') - - if int(checkheaders): - env.Append(CHECKHEADERS= '1') - - if int(srcdist): - env.Append(SRCDIST= '1') - - env.Append(CXXFLAGS = '-m32') - env.Append(CXXFLAGS = '-Wall') - env.Append(CXXFLAGS = '-Woverloaded-virtual') - env.Append(CPPDEFINES = '-DLINUXVERS') - - cxxversion = env.subst('$CXXVERSION') - - if float(cxxversion[0:2])>=4.0: - env.Append(CXXFLAGS = '-Wextra') - env.Append(CXXFLAGS = '-Wno-missing-field-initializers') - env.Append(CXXFLAGS = '-Wno-unused-parameter') - - if float(cxxversion[0:2])>=3.0: - env.Append(CPPDEFINES = '-DHAS_SSTREAM') - - env['SHLINKFLAGS'] = '$LINKFLAGS -m32 -shared' - env['SHLIBSUFFIX'] = '.so' + debug = args.get('debug',0) + standalone = args.get('standalone',0) + cppcheck = args.get('cppcheck',0) + checkheaders = args.get('checkheaders',0) + srcdist = args.get('srcdist',0) + if int(debug): + env.Append(CXXFLAGS = env.Split('-g -O0')) + env.Append(CPPDEFINES= 'WITH_DEBUG') + else: + env.Append(CXXFLAGS = '-O') + env.Append(CPPDEFINES= 'NDEBUG') + + if int(standalone): + env.Append(STANDALONE= '1') + + if int(cppcheck): + env.Append(CPPCHECK= '1') + + if int(checkheaders): + env.Append(CHECKHEADERS= '1') + + if int(srcdist): + env.Append(SRCDIST= '1') + + env.Append(CXXFLAGS = env.Split('-m32 -Wall -Woverloaded-virtual')) + env.Append(CPPDEFINES = 'LINUXVERS') + + cxxversion = env.subst('$CXXVERSION') + + if float(cxxversion[0:2])>=4.0: + env.Append(CXXFLAGS = env.Split('-Wextra -Wno-missing-field-initializers')) + if not int(debug): + env.Append(CXXFLAGS = '-Wno-unused-parameter') + + env.Append(SHLINKFLAGS = '-m32') #end linux32.py diff --git a/linux64.py b/linux64.py index 0e31356f..78520d3e 100644 --- a/linux64.py +++ b/linux64.py @@ -1,50 +1,41 @@ -import platform -import os +# linux64.py +# Linux x86_64 platform specific configuration def config(env,args): - debug = args.get('debug',0) - standalone = args.get('standalone',0) - cppcheck = args.get('cppcheck',0) - checkheaders = args.get('checkheaders',0) - srcdist = args.get('srcdist',0) - - if int(debug): - env.Append(CXXFLAGS = '-g') - env.Append(CXXFLAGS = '-O0') - env.Append(CPPDEFINES= '-DWITH_DEBUG') - else: - env.Append(CXXFLAGS = '-O') - env.Append(CPPDEFINES= '-DNDEBUG') - - if int(standalone): - env.Append(STANDALONE= '1') - - if int(cppcheck): - env.Append(CPPCHECK= '1') - - if int(checkheaders): - env.Append(CHECKHEADERS= '1') - - if int(srcdist): - env.Append(SRCDIST= '1') - - env.Append(CXXFLAGS = '-Wall') - env.Append(CXXFLAGS = '-Woverloaded-virtual') - env.Append(CPPDEFINES = '-DLINUXVERS') - - cxxversion = env.subst('$CXXVERSION') - - if float(cxxversion[0:2])>=4.0: - env.Append(CXXFLAGS = '-Wextra') - env.Append(CXXFLAGS = '-Wno-missing-field-initializers') - env.Append(CXXFLAGS = '-Wno-unused-parameter') - - if float(cxxversion[0:2])>=3.0: - env.Append(CPPDEFINES = '-DHAS_SSTREAM') - - env['SHLINKFLAGS'] = '$LINKFLAGS -shared' - env['SHLIBSUFFIX'] = '.so' - - -#end linux6432.py + debug = args.get('debug',0) + standalone = args.get('standalone',0) + cppcheck = args.get('cppcheck',0) + checkheaders = args.get('checkheaders',0) + srcdist = args.get('srcdist',0) + + if int(debug): + env.Append(CXXFLAGS = env.Split('-g -O0')) + env.Append(CPPDEFINES= 'WITH_DEBUG') + else: + env.Append(CXXFLAGS = '-O') + env.Append(CPPDEFINES= 'NDEBUG') + + if int(standalone): + env.Append(STANDALONE= '1') + + if int(cppcheck): + env.Append(CPPCHECK= '1') + + if int(checkheaders): + env.Append(CHECKHEADERS= '1') + + if int(srcdist): + env.Append(SRCDIST= '1') + + env.Append(CXXFLAGS = env.Split('-Wall -Woverloaded-virtual')) + env.Append(CPPDEFINES = 'LINUXVERS') + + cxxversion = env.subst('$CXXVERSION') + + if float(cxxversion[0:2])>=4.0: + env.Append(CXXFLAGS = env.Split('-Wextra -Wno-missing-field-initializers')) + if not int(debug): + env.Append(CXXFLAGS = '-Wno-unused-parameter') + +#end linux64.py diff --git a/src/SConscript.py b/src/SConscript.py index aaf638d4..09ea5d96 100644 --- a/src/SConscript.py +++ b/src/SConscript.py @@ -9,13 +9,13 @@ list = Split(""" THaADCHelicity.C THaCoincTime.C THaG0Helicity.C THaPhotoReaction.C THaRunParameters.C THaTrackID.C THaVDCTrackID.C -THaAnalysisObject.C THaCut.C THaG0HelicityReader.C +THaAnalysisObject.C THaCut.C THaG0HelicityReader.C THaPhysicsModule.C THaS2CoincTime.C THaTrackInfo.C -THaAnalyzer.C THaCutList.C THaGoldenTrack.C -THaPidDetector.C THaSAProtonEP.C THaTrackOut.C THaVDCPointPair.C +THaAnalyzer.C THaCutList.C THaGoldenTrack.C +THaPidDetector.C THaSAProtonEP.C THaTrackOut.C THaVDCPointPair.C THaApparatus.C THaDebugModule.C THaHRS.C THaVDCPoint.C -THaPostProcess.C THaTrackProj.C THaEpicsEvtHandler.C THaVDCChamber.C -THaArrayString.C THaDecData.C BdataLoc.C THaHelicity.C +THaPostProcess.C THaTrackProj.C THaEpicsEvtHandler.C THaVDCChamber.C +THaArrayString.C THaDecData.C BdataLoc.C THaHelicity.C THaPrimaryKine.C THaScintillator.C THaTrackingDetector.C THaVDCWire.C THaAvgVertex.C THaDetMap.C THaHelicityDet.C THaPrintOption.C THaSecondaryKine.C THaTrackingModule.C THaVar.C @@ -44,25 +44,27 @@ sotarget = 'HallA' -srclib = baseenv.SharedLibrary(target = sotarget, source = list+['haDict.so'],SHLIBPREFIX='../lib',LIBS=['']) -print ('Source shared library = %s\n' % srclib) +srclib = baseenv.SharedLibrary(target = sotarget, source = list+['haDict.os'],\ + SHLIBPREFIX='../lib',LIBS=[''],LIBPATH=['']) +#print ('Source shared library = %s\n' % srclib) linkbase = baseenv.subst('$SHLIBPREFIX')+sotarget -cleantarget = linkbase+'.so.'+baseenv.subst('$VERSION') -majorcleantarget = linkbase+'.so' -localmajorcleantarget = '../'+linkbase+'.so' -shortcleantarget = linkbase+'.so.'+baseenv.subst('$SOVERSION') -localshortcleantarget = '../'+linkbase+'.so.'+baseenv.subst('$SOVERSION') +cleantarget = linkbase+baseenv.subst('$SHLIBSUFFIX') +majorcleantarget = linkbase+baseenv.subst('$SOSUFFIX') +localmajorcleantarget = '../'+linkbase+baseenv.subst('$SOSUFFIX') +shortcleantarget = linkbase+baseenv.subst('$SOSUFFIX')+'.'+baseenv.subst('$SOVERSION') +localshortcleantarget = '../'+linkbase+baseenv.subst('$SOSUFFIX')+'.'+\ + baseenv.subst('$SOVERSION') -print ('cleantarget = %s\n' % cleantarget) -print ('majorcleantarget = %s\n' % majorcleantarget) -print ('shortcleantarget = %s\n' % shortcleantarget) +#print ('cleantarget = %s\n' % cleantarget) +#print ('majorcleantarget = %s\n' % majorcleantarget) +#print ('shortcleantarget = %s\n' % shortcleantarget) try: - os.symlink(cleantarget,localshortcleantarget) - os.symlink(shortcleantarget,localmajorcleantarget) + os.symlink(cleantarget,localshortcleantarget) + os.symlink(shortcleantarget,localmajorcleantarget) except: - print (" Continuing ... ") + pass Clean(srclib,cleantarget) Clean(srclib,localmajorcleantarget)