###### Hall C Software Main SConstruct Build File ##### ###### Author: Edward Brash (brash@jlab.org) June 2013 import os import sys import platform import commands 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) #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('!!! ./podd/scons/scons.py') EnsureSConsVersion(4,9,9) ####### Hall A Build Environment ############# # # Edit for the location of your root installation here ... # #baseenv.Append(ROOTSYS = '/usr/local/root') # baseenv.Append(MAIN_DIR = Dir('.').abspath) baseenv.Append(HC_DIR = baseenv.subst('$MAIN_DIR')) baseenv.Append(HC_SRC = baseenv.subst('$HC_DIR')+'/src ') baseenv.Append(HA_DIR = baseenv.subst('$HC_DIR')+'/podd ') baseenv.Append(HA_SRC = baseenv.subst('$HA_DIR')+'/src ') baseenv.Append(HA_DC = baseenv.subst('$HA_DIR')+'/hana_decode ') baseenv.Append(HA_SCALER = baseenv.subst('$HA_DIR')+'/hana_scaler ') baseenv.Append(SOVERSION = '1.5') baseenv.Append(PATCH = '25') baseenv.Append(VERSION = baseenv.subst('$SOVERSION')+'.'+baseenv.subst('$PATCH')) baseenv.Append(EXTVERS = '') baseenv.Append(HA_VERSION = baseenv.subst('$VERSION')+baseenv.subst('$EXTVERS')) print "Hall C Main Directory = %s" % baseenv.subst('$HC_DIR') print "Hall C Source Directory = %s" % baseenv.subst('$HC_SRC') print "Hall A 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'))) baseenv.Append(VERCODE = ivercode) baseenv.Append(CPPPATH = ['$HC_SRC','$HA_SRC','$HA_DC','$HA_SCALER']) ######## Configure Section ####### import configure configure.config(baseenv,ARGUMENTS) 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'): print('!! Your compiler and/or environment is not correctly configured.') Exit(0) baseenv = conf.Finish() ######## ROOT Dictionaries ######### baseenv.Append(ROOTCONFIG = 'root-config') baseenv.Append(ROOTCINT = 'rootcint') try: baseenv.ParseConfig('$ROOTCONFIG --cflags') baseenv.ParseConfig('$ROOTCONFIG --libs') baseenv.MergeFlags('-fPIC') 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') baseenv.MergeFlags('-fPIC') except KeyError: print('!!! Cannot find ROOT. Check if root-config is in your PATH.') Exit(1) bld = Builder(action=rootcint) baseenv.Append(BUILDERS = {'RootCint': bld}) ####### Start of main SConstruct ############ hallclib = 'HallC' hallalib = 'HallA' dclib = 'dc' scalerlib = 'scaler' baseenv.Append(LIBPATH=['$HC_DIR','$HA_DIR','$HC_SRC','$HA_SRC','$HA_DC','$HA_SCALER']) baseenv.Replace(SHLIBSUFFIX = '.so') baseenv.Append(CPPDEFINES = '-DHALLC_MODS') directorylist = ['./','src','podd','podd/src','podd/hana_decode','podd/hana_scaler'] pbaseenv=baseenv.Clone() pbaseenv.Append(LIBS=[hallclib,hallalib,dclib,scalerlib]) baseenv.Append(LIBS=[hallalib,dclib,scalerlib]) Export('pbaseenv') SConscript(dirs = directorylist,name='SConscript.py',exports='pbaseenv') ####### End of SConstruct #########