From 12fc97b8e2ddacf1cb5978dd4b91356f67436c54 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Fri, 12 Dec 2008 02:04:50 +0100 Subject: [PATCH] Build most of Lumiera as shared library (SCons build) --- SConstruct | 24 +++++++++++++++--------- admin/scons/Buildhelper.py | 12 ++++++------ tests/SConscript | 6 +++--- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/SConstruct b/SConstruct index 48bd57009..26c1795c6 100644 --- a/SConstruct +++ b/SConstruct @@ -27,6 +27,7 @@ OPTIONSCACHEFILE = 'optcache' CUSTOPTIONSFILE = 'custom-options' SRCDIR = 'src' BINDIR = 'bin' +LIBDIR = 'bin/.libs' TESTDIR = 'tests' ICONDIR = 'icons' VERSION = '0.1+pre.01' @@ -65,14 +66,17 @@ def setupBasicEnvironment(): ) handleVerboseMessages(env) - env.Append ( CCCOM=' -std=gnu99') # workaround for a bug: CCCOM currently doesn't honor CFLAGS, only CCFLAGS + env.Append ( CCCOM=' -std=gnu99') + env.Append ( SHCCCOM=' -std=gnu99') # workaround for a bug: CCCOM currently doesn't honour CFLAGS, only CCFLAGS env.Replace( VERSION=VERSION , SRCDIR=SRCDIR , BINDIR=BINDIR + , LIBDIR=LIBDIR , ICONDIR=ICONDIR , CPPPATH=["#"+SRCDIR] # used to find includes, "#" means always absolute to build-root , CPPDEFINES=['-DLUMIERA_VERSION='+VERSION ] # note: it's a list to append further defines - , CCFLAGS='-Wall ' # -fdiagnostics-show-option + , CCFLAGS='-Wall ' # -fdiagnostics-show-option + , CFLAGS='-std=gnu99' ) RegisterIcon_Builder(env,SVGRENDERER) handleNoBugSwitches(env) @@ -123,10 +127,10 @@ def handleVerboseMessages(env): """ toggle verbose build output """ if not env['VERBOSE']: # SetOption('silent', True) - env['CCCOMSTR'] = " Compiling $SOURCE" - env['CXXCOMSTR'] = " Compiling++ $SOURCE" - env['LINKCOMSTR'] = " Linking --> $TARGET" - env['LDMODULECOMSTR'] = " creating module [ $TARGET ]" + env['CCCOMSTR'] = env['SHCCCOMSTR'] = " Compiling $SOURCE" + env['CXXCOMSTR'] = env['SHCXXCOMSTR'] = " Compiling++ $SOURCE" + env['LINKCOMSTR'] = " Linking --> $TARGET" + env['LDMODULECOMSTR'] = " creating module [ $TARGET ]" @@ -313,12 +317,13 @@ def defineBuildTargets(env, artifacts): + srcSubtree(env,'$SRCDIR/common') + srcSubtree(env,'$SRCDIR/lib') ) - core = ( env.StaticLibrary('$BINDIR/lumiback.la', objback) - + env.StaticLibrary('$BINDIR/lumiproc.la', objproc) - + env.StaticLibrary('$BINDIR/lumiera.la', objlib) + core = ( env.SharedLibrary('$LIBDIR/lumiback', objback) + + env.SharedLibrary('$LIBDIR/lumiproc', objproc) + + env.SharedLibrary('$LIBDIR/lumiera', objlib) ) artifacts['lumiera'] = env.Program('$BINDIR/lumiera', ['$SRCDIR/lumiera/main.cpp']+ core ) + artifacts['corelib'] = core # temporary solution to build the GuiStarterPlugin (TODO: implement plugin building as discussed on November meeting) envplug = env.Clone() @@ -375,6 +380,7 @@ def defineInstallTargets(env, artifacts): """ define some artifacts to be installed into target locations. """ env.Install(dir = '$DESTDIR/bin', source=artifacts['lumiera']) + env.Install(dir = '$DESTDIR/lib', source=artifacts['corelib']) env.Install(dir = '$DESTDIR/lib', source=artifacts['plugins']) env.Install(dir = '$DESTDIR/bin', source=artifacts['tools']) diff --git a/admin/scons/Buildhelper.py b/admin/scons/Buildhelper.py index 38940424c..7eef32750 100644 --- a/admin/scons/Buildhelper.py +++ b/admin/scons/Buildhelper.py @@ -40,7 +40,7 @@ def isCleanupOperation(env): def isHelpRequest(): """ this is a hack: SCons does all configure tests even if only - the helpmessage is requested. SCons doesn't export the + the help message is requested. SCons doesn't export the help option for retrieval by env.GetOption(), so we scan the commandline directly. """ @@ -48,8 +48,8 @@ def isHelpRequest(): -def srcSubtree(env,tree,isShared=False,builder=None, **args): - """ convienience wrapper: scans the given subtree, which is +def srcSubtree(env,tree,isShared=True,builder=None, **args): + """ convenience wrapper: scans the given subtree, which is relative to the current SConscript, find all source files and declare them as Static or SharedObjects for compilation """ @@ -68,7 +68,7 @@ SRCPATTERNS = ['*.c','*.cpp','*.cc'] def scanSubtree(roots, patterns=SRCPATTERNS): """ first expand (possible) wildcards and filter out non-dirs. - Then scan the given subtree for source filesnames + Then scan the given subtree for source filenames (python generator function) """ for root in globRootdirs(roots): @@ -116,7 +116,7 @@ def getDirname(dir): def RegisterIcon_Builder(env, renderer): - """ Registeres Custom Builders for generating and installing Icons. + """ Registers Custom Builders for generating and installing Icons. Additionally you need to build the tool (rsvg-convert.c) used to generate png from the svg source using librsvg. """ @@ -157,7 +157,7 @@ def Tarball(env,location,dirs,suffix=''): suffix: (optional) suffix to include in the tar name dirs: directories to include in the tar - This is a bit of a hack, because we want to be able to include arbitrary dirctories, + This is a bit of a hack, because we want to be able to include arbitrary directories, without creating new dependencies on those dirs. Esp. we want to tar the source tree prior to compiling. Solution is - use the Command-Builder, but pass all target specifications as custom build vars diff --git a/tests/SConscript b/tests/SConscript index 38fe59e1f..682b4918e 100644 --- a/tests/SConscript +++ b/tests/SConscript @@ -27,7 +27,7 @@ def testExecutable(env,tree, exeName=None, obj=None): if obj: obj = [path.join(tree,name) for name in obj] else: - obj = srcSubtree(env,tree) # use all sourcefiles found in subtree + obj = srcSubtree(env,tree, isShared=False) # use all sourcefiles found in subtree if not exeName: exeName = 'test-%s' % tree return env.Program('#$BINDIR/'+exeName, obj + core) @@ -52,8 +52,8 @@ def treatPluginTestcase(env): prfx = path.join(tree,'example_plugin') oC = env.SharedObject(prfx, prfx+'.c') oCPP = env.SharedObject(prfx+'_cpp', prfx+'.cpp') - testplugin = ( env.LoadableModule('#$BINDIR/.libs/examplepluginc', oC, SHLIBPREFIX='') -# + env.SharedLibrary('#$BINDIR/.libs/exampleplugincpp', oCPP, SHLIBPREFIX='') + testplugin = ( env.LoadableModule('#$LIBDIR/examplepluginc', oC, SHLIBPREFIX='') +# + env.SharedLibrary('#$LIBDIR/exampleplugincpp', oCPP, SHLIBPREFIX='') # doesn't compile yet... )