Mercurial > fife-parpg
view SConstruct @ 164:5b04a7d3ded6
typo fix
some missing event (de)registrations
ability to capture one event multiple times (instead of only having one slot, we have groups and each group has an own slot, the default group is "default" so we are backward compatible
author | spq@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Wed, 15 Oct 2008 14:57:04 +0000 |
parents | d2f1e81fbe2c |
children | 2a4e53c9c01f |
line wrap: on
line source
import os, sys from utils.util_scripts.path import path as upath opts = Options('options.py', ARGUMENTS) opts.Add(BoolOption('debug', 'Build with debuginfos and without optimisations', 1)) opts.Add(BoolOption('tests', 'Build testcases in unit_tests', 0)) opts.Add(BoolOption('noengine', 'Prevents building of engine, use e.g. for util/test tweaking', 0)) opts.Add(BoolOption('opengl', 'Compile OpenGL support', 1)) opts.Add(EnumOption('script', 'Selects generated scripting language bindings', 'python', allowed_values=('python', 'lua'))) opts.Add(BoolOption('profile', 'Build with profiling information', 0)) opts.Add(BoolOption('projectfiles_only', "Creates IDE project files only. If defined, won't build code. " + "Note that normal builds generate these files also automatically.", 0)) opts.Add(BoolOption('utils', 'Build utilities', 0)) opts.Add(BoolOption('ext', 'Build external dependencies', 0)) opts.Add(BoolOption('docs', "Generates static analysis documentation into doc-folder. If defined, won't build code", 0)) opts.Add(BoolOption('zip', 'Enable ZIP archive support', 1)) opts.Add(BoolOption('log', 'Enables logging for the engine', 1)) opts.Add(BoolOption('rend_camzone', 'Enables camera zone renderer', 0)) opts.Add(BoolOption('rend_grid', 'Enables grid renderer', 0)) # Platform-specific prefix directories if sys.platform == 'linux2': opts.Add(PathOption('PREFIX', 'Directory to install under', '/usr')) env = Environment(options = opts, ENV = {'PATH' : os.environ['PATH']}) env.Replace(SCONS_ROOT_PATH=str(upath('.').abspath())) rootp = env['SCONS_ROOT_PATH'] Help(opts.GenerateHelpText(env)) # helper functions def tryConfigCommand(context, cmd): ret = context.TryAction(cmd)[0] context.Result(ret) if ret: context.env.ParseConfig(cmd) return ret def importConfig(config): module = __import__(config) parts = config.split('.') for part in parts[1:]: module = getattr(module, part) return module def getPlatformConfig(): pathparts = ('build', '%s-config' % sys.platform) filename = os.path.join(*pathparts) sconsfilename = '.'.join(pathparts) if os.path.exists(filename + '.py'): return importConfig(sconsfilename) else: print 'no custom platform-config found (searched: %s.py)' % filename filename += '-dist' sconsfilename += '-dist' if os.path.exists(filename + '.py'): return importConfig(sconsfilename) print 'no platform-config found (searched: %s.py)' % filename Exit(1) # custom checks def checkPKG(context, name): context.Message('Checking for %s (using pkg-config)... ' % name) return tryConfigCommand(context, 'pkg-config --libs --cflags \'%s\'' % name) def checkConf(context, name): binary = '%s-config' % name.lower() context.Message('Checking for %s (using %s)... ' % (name, binary)) configcall = '%s --libs --cflags' %binary return tryConfigCommand(context, configcall) def checkSimpleLib(context, liblist, header = '', lang = 'c++', required = 1): for lib in liblist: ret = checkPKG(context, lib) if ret: return ret ret = checkConf(context, lib) if ret: return ret if len(header): ret = conf.CheckLibWithHeader(lib, header, lang) else: ret = conf.CheckLib(lib,language=lang) if ret: # print "ret: " + ret if not lib in conf.env['LIBS']: conf.env.Append(LIBS = [lib]) return ret if required: print 'required lib %s not found :(' % lib Exit(1) return False if env['projectfiles_only']: Export('env') SConscript(['engine/SConscript']) elif env['docs']: _jp = os.path.join # should prolly be done using scons builders... try: print "removing old documentation directories" upath('doc/doxygen/html').rmtree() except OSError: pass print "generating new doxygen documentation" os.system('doxygen ' + _jp('doc', 'doxygen', 'doxyfile')) print "doxygen documentation created succesfully" elif env['ext']: Export('env') SConscript('ext/SConscript') else: platformConfig = getPlatformConfig() env = platformConfig.initEnvironment(env) conf = Configure(env, custom_tests = {'checkConf': checkConf, 'checkPKG': checkPKG, 'checkSimpleLib': checkSimpleLib}, conf_dir = '#/build/.sconf_temp', log_file = '#/build/config.log') platformConfig.addExtras(conf) env = conf.Finish() if sys.platform == "win32": env.Append(CPPFLAGS = ['-Wall']) else: env.Append(CPPFLAGS = ['-Wall']) # removed old style cast warnings for now (swig creates these) if env['debug'] == 1: env.Append(CPPFLAGS = ['-ggdb', '-O0']) else: if os.getenv('CXXFLAGS'): env.Append(CPPFLAGS = Split(os.environ['CXXFLAGS'])) else: env.Append(CPPFLAGS = ['-O2']) if env['profile']: env.Append(CPPFLAGS = ['-pg']) env.Append(LINKFLAGS = ['-pg']) definemap = { 'opengl': 'HAVE_OPENGL', 'zip': 'HAVE_ZIP', 'log': 'LOG_ENABLED', 'rend_camzone': 'RENDER_CAMZONES', 'rend_grid': 'RENDER_GRID', } for k, v in definemap.items(): if env[k]: env.Append(CPPDEFINES = [v]) Export('env') if not env['noengine']: SConscript('engine/SConscript') env.Append(LIBPATH = ['#/engine']) if env['tests']: SConscript('tests/core_tests/SConscript') if env['utils']: SConscript([str(p) for p in upath('utils').walkfiles('SConscript')]) # vim: set filetype=python: