summaryrefslogtreecommitdiffstats
path: root/admin/generic.py
diff options
context:
space:
mode:
Diffstat (limited to 'admin/generic.py')
-rw-r--r--admin/generic.py161
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)
+