X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senfscons%2FSENFSCons.py;h=b6703edd4c4be01ac3e27c7dcadb3a153c6af4fb;hb=51044eb18f034c1a059ffe2fb109a422c1cbe251;hp=74e035de46d7c360147e7ada0b1fddb607cb99f2;hpb=e84dd6c52a07fc9e283cbd72c7616f3523920387;p=senf.git diff --git a/senfscons/SENFSCons.py b/senfscons/SENFSCons.py index 74e035d..b6703ed 100644 --- a/senfscons/SENFSCons.py +++ b/senfscons/SENFSCons.py @@ -51,6 +51,7 @@ SCONS_TOOLS = [ "Dia2Png", "CopyToDir", "InstallIncludes", + "ProgramNoScan", ] opts = None @@ -77,6 +78,8 @@ def InitOpts(): opts.Add('DOCINSTALLDIR', 'Documentation install dir', '$PREFIX/doc') opts.Add('CPP_INCLUDE_EXTENSIONS', 'File extensions to include in source install', [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti', '.mpp' ]) + opts.Add('CPP_EXCLUDE_EXTENSIONS', 'File extensions to exclude from source install', + [ '.test.hh' ]) # A finalizer is any callable object. All finalizers will be called # in MakeEnvironment. We use them so every finalizer has knowledge of @@ -147,8 +150,9 @@ def FinalizeBoost(env): if runtime: runtime = "-" + runtime env['BOOST_VARIANT'] = "-" + env['BOOST_TOOLSET'] + runtime - env['BOOSTTESTLIB'] = 'libboost_unit_test_framework' + env['BOOST_VARIANT'] - env['BOOSTREGEXLIB'] = 'libboost_regex' + env['BOOST_VARIANT'] + env['BOOSTTESTLIB'] = 'boost_unit_test_framework' + env['BOOST_VARIANT'] + env['BOOSTREGEXLIB'] = 'boost_regex' + env['BOOST_VARIANT'] + env['BOOSTFSLIB'] = 'boost_filesystem' + env['BOOST_VARIANT'] env.Append(LIBPATH = [ '$BOOST_LIBDIR' ], CPPPATH = [ '$BOOST_INCLUDES' ]) @@ -214,11 +218,12 @@ def MakeEnvironment(): global opts, finalizers InitOpts() env = SCons.Environment.Environment(options=opts) - for opt in opts.options: - if SCons.Script.SConscript.Arguments.get(opt.key): - env[opt.key] = SCons.Script.SConscript.Arguments.get(opt.key) - if SCons.Script.SConscript.Arguments.get('final'): - env['final'] = 1 + env.Replace(**SCons.Script.SConscript.Arguments) + #for opt in opts.options: + # if SCons.Script.SConscript.Arguments.get(opt.key): + # env[opt.key] = SCons.Script.SConscript.Arguments.get(opt.key) + #if SCons.Script.SConscript.Arguments.get('final'): + # env['final'] = 1 env.Help("\nSupported build variables (either in SConfig or on the command line:\n") env.Help(opts.GenerateHelpText(env)) @@ -242,7 +247,7 @@ def MakeEnvironment(): if env['final']: env.Append(CXXFLAGS = [ '-O3' ], - CPPDEFINES = [ 'NDEBUG' ]) + CPPDEFINES = [ 'SENF_NO_DEBUG' ]) else: env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ], # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails. @@ -291,7 +296,7 @@ def StandardTargets(env): # # \ingroup target def GlobalTargets(env): - env.Depends(env.Alias('all'),'#') + env.Alias('all', [ 'default', 'all_tests', 'all_docs' ]) ## \brief Return path of a built library within $LOCALLIBDIR # \internal @@ -314,7 +319,7 @@ def LibPath(lib): return '$LOCALLIBDIR/lib%s.a' % lib # provide both \a sources and \a testSources. # # \ingroup target -def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []): +def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False): if type(sources) == type(()): testSources = sources[1] sources = sources[0] @@ -323,14 +328,14 @@ def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []): objects = None if sources: - objects = env.Object([ - source - for source in sources - if not str(source).endswith('.o') ]) + [ - source - for source in sources - if str(source).endswith('.o') ] - + obsources = [ source + for source in sources + if not str(source).endswith('.o') ] + objects = [ source + for source in sources + if str(source).endswith('.o') ] + if obsources: + objects += env.Object(obsources) if testSources: test = env.BoostUnitTests( @@ -349,12 +354,24 @@ def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []): return objects def InstallIncludeFiles(env, files): + # Hrmpf ... why do I need this in 0.97?? + if env.GetOption('clean'): + return target = env.Dir(env['INCLUDEINSTALLDIR']) base = env.Dir(env['INSTALL_BASE']) for f in files: src = env.File(f) env.Alias('install_all', env.Install(target.Dir(src.dir.get_path(base)), src)) +def InstallSourceIncludes(env, sources): + target = env.Dir(env['INCLUDEINSTALLDIR']).Dir( + env.Dir('.').get_path(env.Dir(env['INSTALL_BASE']))) + install = env.InstallIncludes( target = target, + source = [ type(x) is str and env.File(x) or x + for x in sources ], + INSTALL_BASE = env.Dir('.') ) + env.Alias( 'install_all', install ) + def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes = False): if type(sources) is type(()): sources, testSources = sources @@ -363,19 +380,15 @@ def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes if type(testSources) is not type([]): testSources = [ testSources ] - installs = [] - installs.append( env.Install(dir, targets) ) + installs = [ env.Install(dir, targets) ] + env.Alias( 'install_all', installs[:] ) if not no_includes: - target = env.Dir(env['INCLUDEINSTALLDIR']).Dir( - env.Dir('.').get_path(env.Dir(env['INSTALL_BASE']))) - source = targets + sources = targets if testSources: - source.append( env.File('.test.bin') ) - installs.append(env.InstallIncludes( - target = target, - source = targets, - INSTALL_BASE = env.Dir('.') )) + sources.append( env.File('.test.bin') ) + installs.append( + InstallSourceIncludes(env, sources)) return installs @@ -466,7 +479,7 @@ def Doxygen(env, doxyfile = "Doxyfile", extra_sources = []): for type in env.get("DOXY_XREF_TYPES",[ "bug", "todo" ]): xref = os.path.join(xmlnode.dir.abspath,type+".xml") xref_pp = env.Command(xref+'i', [ xref, os.path.join(basedir,'xrefxtract.xslt'), xmlnode ], - [ "test -s $SOURCE && xsltproc -o $TARGET" + + [ "test -s $SOURCE && xsltproc --nonet -o $TARGET" + " --stringparam module $MODULE" + " --stringparam type $TYPE" + " ${SOURCES[1]} $SOURCE || touch $TARGET" ], @@ -500,8 +513,8 @@ def Doxygen(env, doxyfile = "Doxyfile", extra_sources = []): l = len(env.Dir('#').abspath) if htmlnode: env.Alias('install_all', - env.Install( '$DOCINSTALLDIR' + htmlnode.dir.dir.abspath[l:], - htmlnode.dir )) + env.Command('$DOCINSTALLDIR' + htmlnode.dir.abspath[l:], htmlnode.dir, + [ SCons.Defaults.Copy('$TARGET','$SOURCE') ])) if tagnode: env.Alias('install_all', env.Install( '$DOCINSTALLDIR' + tagnode.dir.abspath[l:], @@ -587,8 +600,8 @@ def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_i lib = env.Library(env.File(LibPath(library)),objects) env.Default(lib) env.Append(ALLLIBS = library) - install = InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes) - env.Alias('install_all', install) + env.Alias('default', lib) + InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes) return lib ## \brief Build Object from multiple sources @@ -598,8 +611,8 @@ def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no if objects: ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES") env.Default(ob) - install = InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes) - env.Alias('install_all', install) + env.Alias('default', ob) + InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes) return ob ## \brief Build executable @@ -618,17 +631,16 @@ def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = [], no if objects: progEnv = env.Copy() progEnv.Prepend(LIBS = LIBS) - program = progEnv.Program(target=binary,source=objects+OBJECTS) + program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS) env.Default(program) env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ]) - install = InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, - no_includes) - env.Alias('install_all', install) + env.Alias('default', program) + InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, no_includes) return program def AllIncludesHH(env, headers): headers.sort() - file(env.File("all_includes.hh").abspath,"w").write("".join([ '#include "%s"\n' % f - for f in headers ])) - env.Clean('all','all_includes.hh') - + target = env.File("all_includes.hh") + file(target.abspath,"w").write("".join([ '#include "%s"\n' % f + for f in headers ])) + env.Clean('all', target)