X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senfscons%2FSENFSCons.py;h=d2a170a4dd63c3aa889514d922a18d6522b3738e;hb=05fab45b5f96c457d3c6b359f66ce1506c6ad510;hp=7c193c4ce76fce8c544e7d818d210dfb16d7dbf2;hpb=c3e26baef92c53af9826c2af3bfe4f3570c634bd;p=senf.git diff --git a/senfscons/SENFSCons.py b/senfscons/SENFSCons.py index 7c193c4..d2a170a 100644 --- a/senfscons/SENFSCons.py +++ b/senfscons/SENFSCons.py @@ -50,6 +50,8 @@ SCONS_TOOLS = [ "Doxygen", "Dia2Png", "CopyToDir", + "InstallIncludes", + "ProgramNoScan", ] opts = None @@ -117,7 +119,7 @@ def Finalizer(f): # libraries are provided by the distribution, you probably don't need # to specify any parameters. If your configuration is more complex, # refer to the Boost.Build +# href="http://www.boost.org/tools/build/v2/index.html">Boost.Build # documentation for a definition of the terms used above (toolset, # variant, runtime ...). # @@ -218,6 +220,7 @@ def MakeEnvironment(): 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)) # We want to pass the SSH_AUTH_SOCK system env-var so we can ssh @@ -243,10 +246,13 @@ def MakeEnvironment(): CPPDEFINES = [ 'NDEBUG' ]) else: env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ], + # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails. + # CPPDEFINES = [ '_GLIBCXX_DEBUG' ], LINKFLAGS = [ '-g' ]) env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ], - LIBS = [ '$EXTRA_LIBS' ]) + LIBS = [ '$EXTRA_LIBS' ], + ALLLIBS = []) return env @@ -286,7 +292,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 @@ -343,27 +349,33 @@ def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []): return objects -def InstallWithSources(env, targets, dir, sources, testSources = []): +def InstallIncludeFiles(env, files): + 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 InstallWithSources(env, targets, dir, sources, testSources = [], no_includes = False): if type(sources) is type(()): - sources = sources[0] + sources[1] - if testSources: - sources += testSources + sources, testSources = sources if type(sources) is not type([]): sources = [ sources ] - - installs = [] - installs.append( env.Install(dir, targets) ) - - for source in sources: - l = len(env.Dir('#').abspath) - source = str(source) - while '.' in source: - source = os.path.splitext(source)[0] - for ext in env['CPP_INCLUDE_EXTENSIONS']: - f = env.File(source+ext) - if f.exists(): - installs.append(env.Install( - '$INCLUDEINSTALLDIR' + f.dir.abspath[l:], f)) + if type(testSources) is not type([]): + testSources = [ testSources ] + + installs = [ env.Install(dir, targets) ] + + if not no_includes: + target = env.Dir(env['INCLUDEINSTALLDIR']).Dir( + env.Dir('.').get_path(env.Dir(env['INSTALL_BASE']))) + source = targets + if testSources: + source.append( env.File('.test.bin') ) + installs.append(env.InstallIncludes( + target = target, + source = targets, + INSTALL_BASE = env.Dir('.') )) return installs @@ -488,8 +500,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:], @@ -568,25 +580,27 @@ def DoxyXRef(env, docs=None, # The library is added to the list of default targets. # #\ingroup target -def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = []): +def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False): objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) lib = None if objects: lib = env.Library(env.File(LibPath(library)),objects) env.Default(lib) env.Append(ALLLIBS = library) - install = InstallWithSources(env, lib, '$LIBINSTALLDIR', sources) + env.Alias('default', lib) + install = InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes) env.Alias('install_all', install) return lib ## \brief Build Object from multiple sources -def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = []): +def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False): objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) ob = None if objects: ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES") env.Default(ob) - install = InstallWithSources(env, ob, '$OBJINSTALLDIR', sources) + env.Alias('default', ob) + install = InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes) env.Alias('install_all', install) return ob @@ -600,16 +614,24 @@ def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = []): # construction environment parameters or the framework helpers. # # \ingroup target -def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = []): +def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False): objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS) program = None 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) + env.Alias('default', program) + install = InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, + no_includes) env.Alias('install_all', install) return program + +def AllIncludesHH(env, headers): + headers.sort() + target = env.File("all_includes.hh") + file(target.abspath,"w").write("".join([ '#include "%s"\n' % f + for f in headers ])) + env.Clean('all', target)