diff options
Diffstat (limited to 'admin/generic.py')
-rw-r--r-- | admin/generic.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/admin/generic.py b/admin/generic.py new file mode 100644 index 0000000..dbefaf5 --- /dev/null +++ b/admin/generic.py @@ -0,0 +1,161 @@ +## Thomas Nagy, 2005 + +""" +Detect and store the most common options +* kdecxxflags : debug=1 (-g) or debug=full (-g3, slower) + else use the user CXXFLAGS if any, - or -O2 by default +* prefix : the installation path +* extraincludes : a list of paths separated by ':' +ie: scons configure debug=full prefix=/usr/local extraincludes=/tmp/include:/usr/local +""" + +BOLD ="\033[1m" +RED ="\033[91m" +GREEN ="\033[92m" +YELLOW ="\033[1m" #"\033[93m" # unreadable on white backgrounds +CYAN ="\033[96m" +NORMAL ="\033[0m" + +import os + +def exists(env): + return true + +def generate(env): + env.Help(""" +"""+BOLD+ +"""*** Generic options *** +-----------------------"""+NORMAL+""" +"""+BOLD+"""* debug """+NORMAL+""": debug=1 (-g) or debug=full (-g3, slower) else use environment CXXFLAGS, or -O2 by default +"""+BOLD+"""* prefix """+NORMAL+""": the installation path +"""+BOLD+"""* extraincludes """+NORMAL+""": a list of paths separated by ':' +ie: """+BOLD+"""scons configure debug=full prefix=/usr/local extraincludes=/tmp/include:/usr/local +"""+NORMAL) + + ## Bksys requires scons 0.96 + env.EnsureSConsVersion(0, 96) + + ## Global cache directory + ## Put all project files in it so a rm -rf cache will clean up the config + if not env.has_key('CACHEDIR'): + env['CACHEDIR'] = os.getcwd()+'/cache/' + if not os.path.isdir(env['CACHEDIR']): + os.mkdir(env['CACHEDIR']) + + ## SCons cache directory + ## this avoids recompiling the same files over and over again: very handy when working with cvs + env.CacheDir(os.getcwd()+'/cache/objects') + + ## Avoid spreading .sconsign files everywhere - keep this line + env.SConsignFile(env['CACHEDIR']+'/scons_signatures') + + # Special trick for installing rpms ... + env['DESTDIR']='' + if 'install' in env['TARGS'] and os.environ.has_key('DESTDIR'): + env['DESTDIR']=os.environ['DESTDIR']+'/' + print CYAN+'** Enabling DESTDIR for the project ** ' + NORMAL + env['DESTDIR'] + + # load the options + from SCons.Options import Options, PathOption + cachefile=env['CACHEDIR']+'generic.cache.py' + opts = Options(cachefile) + opts.AddOptions( + ( 'KDECCFLAGS', 'C flags' ), + ( 'KDECXXFLAGS', 'debug level for the project : full or just anything' ), + ( 'KDELINKFLAGS', 'additional link flags' ), + ( 'PREFIX', 'prefix for installation' ), + ( 'EXTRAINCLUDES', 'extra include paths for the project' ), + ( 'ISCONFIGURED', 'is the project configured' ), + ) + opts.Update(env) + + # use this to avoid an error message 'how to make target configure ?' + env.Alias('configure', None) + + import SCons.Util + + # configure the environment if needed + if 'configure' in env['TARGS'] or not env.has_key('ISCONFIGURED'): + # be paranoid, unset existing variables + if env.has_key('KDECXXFLAGS'): + env.__delitem__('KDECXXFLAGS') + if env.has_key('KDECCFLAGS'): + env.__delitem__('KDECCFLAGS') + if env.has_key('KDELINKFLAGS'): + env.__delitem__('KDELINKFLAGS') + if env.has_key('PREFIX'): + env.__delitem__('PREFIX') + if env.has_key('EXTRAINCLUDES'): + env.__delitem__('EXTRAINCLUDES') + if env.has_key('ISCONFIGURED'): + env.__delitem__('ISCONFIGURED') + + if env['ARGS'].get('debug', None): + debuglevel = env['ARGS'].get('debug', None) + print CYAN+'** Enabling debug for the project **' + NORMAL + if (debuglevel == "full"): + env['KDECXXFLAGS'] = ['-DDEBUG', '-g3'] + else: + env['KDECXXFLAGS'] = ['-DDEBUG', '-g'] + else: + if os.environ.has_key('CXXFLAGS'): + # user-defined flags (gentooers will be elighted) + env['KDECXXFLAGS'] = SCons.Util.CLVar( os.environ['CXXFLAGS'] ) + env.Append( KDECXXFLAGS = ['-DNDEBUG', '-DNO_DEBUG'] ) + else: + env.Append(KDECXXFLAGS = ['-O2', '-DNDEBUG', '-DNO_DEBUG']) + + if os.environ.has_key('CFLAGS'): + env['KDECCFLAGS'] = SCons.Util.CLVar( os.environ['CFLAGS'] ) + + ## FreeBSD settings (contributed by will at freebsd dot org) + if os.uname()[0] == "FreeBSD": + if os.environ.has_key('PTHREAD_LIBS'): + env.AppendUnique( KDELINKFLAGS = SCons.Util.CLVar( os.environ['PTHREAD_LIBS'] ) ) + else: + syspf = os.popen('/sbin/sysctl kern.osreldate') + osreldate = int(syspf.read().split()[1]) + syspf.close() + if osreldate < 500016: + env.AppendUnique( KDELINKFLAGS = ['-pthread']) + env.AppendUnique( KDECXXFLAGS = ['-D_THREAD_SAFE']) + elif osreldate < 502102: + env.AppendUnique( KDELINKFLAGS = ['-lc_r']) + env.AppendUnique( KDECXXFLAGS = ['-D_THREAD_SAFE']) + else: + env.AppendUnique( KDELINKFLAGS = ['-pthread']) + + # User-specified prefix + if env['ARGS'].get('prefix', None): + env['PREFIX'] = env['ARGS'].get('prefix', None) + print CYAN+'** set the installation prefix for the project : ' + env['PREFIX'] +' **'+ NORMAL + elif env.has_key('PREFIX'): + env.__delitem__('PREFIX') + + # User-specified include paths + env['EXTRAINCLUDES'] = env['ARGS'].get('extraincludes', None) + if env['ARGS'].get('extraincludes', None): + print CYAN+'** set extra include paths for the project : ' + env['EXTRAINCLUDES'] +' **'+ NORMAL + elif env.has_key('EXTRAINCLUDES'): + env.__delitem__('EXTRAINCLUDES') + + env['ISCONFIGURED']=1 + + # And finally save the options in the cache + opts.Save(cachefile, env) + + if env.has_key('KDECXXFLAGS'): + env.AppendUnique( CPPFLAGS = env['KDECXXFLAGS'] ) + + if env.has_key('KDECCFLAGS'): + env.AppendUnique( CCFLAGS = env['KDECCFLAGS'] ) + + if env.has_key('KDELINKFLAGS'): + env.AppendUnique( LINKFLAGS = env['KDELINKFLAGS'] ) + + if env.has_key('EXTRAINCLUDES'): + incpaths = [] + for dir in str(env['EXTRAINCLUDES']).split(':'): + incpaths.append( dir ) + env.Append(CPPPATH = incpaths) + |