SCons: rearrange output directory to target/modules
This commit is contained in:
parent
764a38abe6
commit
35953b335b
12 changed files with 38 additions and 39 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -10,7 +10,7 @@
|
||||||
optcache
|
optcache
|
||||||
Makefile.in
|
Makefile.in
|
||||||
build/*
|
build/*
|
||||||
bin/*
|
target/*
|
||||||
autom4te.cache/*
|
autom4te.cache/*
|
||||||
scripts/*
|
scripts/*
|
||||||
configure
|
configure
|
||||||
|
|
|
||||||
16
SConstruct
16
SConstruct
|
|
@ -26,9 +26,9 @@
|
||||||
OPTIONSCACHEFILE = 'optcache'
|
OPTIONSCACHEFILE = 'optcache'
|
||||||
CUSTOPTIONSFILE = 'custom-options'
|
CUSTOPTIONSFILE = 'custom-options'
|
||||||
SRCDIR = 'src'
|
SRCDIR = 'src'
|
||||||
BINDIR = 'bin'
|
TARDIR = 'target'
|
||||||
LIBDIR = '.libs'
|
LIBDIR = 'modules'
|
||||||
PLUGDIR = '.libs'
|
PLUGDIR = 'modules'
|
||||||
TESTDIR = 'tests'
|
TESTDIR = 'tests'
|
||||||
ICONDIR = 'icons'
|
ICONDIR = 'icons'
|
||||||
VERSION = '0.1+pre.01'
|
VERSION = '0.1+pre.01'
|
||||||
|
|
@ -76,7 +76,7 @@ def setupBasicEnvironment():
|
||||||
env.Append ( SHCCCOM=' -std=gnu99') # workaround for a bug: CCCOM currently doesn't honour CFLAGS, only CCFLAGS
|
env.Append ( SHCCCOM=' -std=gnu99') # workaround for a bug: CCCOM currently doesn't honour CFLAGS, only CCFLAGS
|
||||||
env.Replace( VERSION=VERSION
|
env.Replace( VERSION=VERSION
|
||||||
, SRCDIR=SRCDIR
|
, SRCDIR=SRCDIR
|
||||||
, BINDIR=BINDIR
|
, TARDIR=TARDIR
|
||||||
, LIBDIR=LIBDIR
|
, LIBDIR=LIBDIR
|
||||||
, PLUGDIR=PLUGDIR
|
, PLUGDIR=PLUGDIR
|
||||||
, ICONDIR=ICONDIR
|
, ICONDIR=ICONDIR
|
||||||
|
|
@ -96,8 +96,8 @@ def setupBasicEnvironment():
|
||||||
appendVal(env,'DEBUG', 'CCFLAGS', val=' -ggdb')
|
appendVal(env,'DEBUG', 'CCFLAGS', val=' -ggdb')
|
||||||
|
|
||||||
# setup search path for Lumiera plugins
|
# setup search path for Lumiera plugins
|
||||||
appendCppDefine(env,'PKGLIBDIR','LUMIERA_PLUGIN_PATH=\\"$PKGLIBDIR/:./.libs\\"'
|
appendCppDefine(env,'PKGLIBDIR','LUMIERA_PLUGIN_PATH=\\"$PKGLIBDIR/:./modules\\"'
|
||||||
,'LUMIERA_PLUGIN_PATH=\\"$DESTDIR/lib/lumiera/:./.libs\\"')
|
,'LUMIERA_PLUGIN_PATH=\\"$DESTDIR/lib/lumiera/:./modules\\"')
|
||||||
appendCppDefine(env,'PKGDATADIR','LUMIERA_CONFIG_PATH=\\"$PKGLIBDIR/:.\\"'
|
appendCppDefine(env,'PKGDATADIR','LUMIERA_CONFIG_PATH=\\"$PKGLIBDIR/:.\\"'
|
||||||
,'LUMIERA_CONFIG_PATH=\\"$DESTDIR/share/lumiera/:.\\"')
|
,'LUMIERA_CONFIG_PATH=\\"$DESTDIR/share/lumiera/:.\\"')
|
||||||
|
|
||||||
|
|
@ -344,7 +344,7 @@ def defineBuildTargets(env, artifacts):
|
||||||
|
|
||||||
core = lLib+lApp+lBack+lProc
|
core = lLib+lApp+lBack+lProc
|
||||||
|
|
||||||
artifacts['lumiera'] = env.LumieraExe('$BINDIR/lumiera', ['$SRCDIR/lumiera/main.cpp'], LIBS=core)
|
artifacts['lumiera'] = env.LumieraExe('$TARDIR/lumiera', ['$SRCDIR/lumiera/main.cpp'], LIBS=core)
|
||||||
artifacts['corelib'] = lLib+lApp
|
artifacts['corelib'] = lLib+lApp
|
||||||
artifacts['support'] = lLib
|
artifacts['support'] = lLib
|
||||||
|
|
||||||
|
|
@ -368,7 +368,7 @@ def defineBuildTargets(env, artifacts):
|
||||||
objgui = srcSubtree(envGtk,'$SRCDIR/gui')
|
objgui = srcSubtree(envGtk,'$SRCDIR/gui')
|
||||||
guimodule = envGtk.LoadableModule('$LIBDIR/gtk_gui', objgui, SHLIBPREFIX='', SHLIBSUFFIX='.lum')
|
guimodule = envGtk.LoadableModule('$LIBDIR/gtk_gui', objgui, SHLIBPREFIX='', SHLIBSUFFIX='.lum')
|
||||||
artifacts['gui'] = ( guimodule
|
artifacts['gui'] = ( guimodule
|
||||||
+ env.Install('$BINDIR', env.Glob('$SRCDIR/gui/*.rc'))
|
+ env.Install('$TARDIR', env.Glob('$SRCDIR/gui/*.rc'))
|
||||||
+ artifacts['icons']
|
+ artifacts['icons']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -203,11 +203,11 @@ def RegisterIcon_Builder(env):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import render_icon as renderer # load Joel's python script for invoking the rsvg-convert (SVG render)
|
import render_icon as renderer # load Joel's python script for invoking the rsvg-convert (SVG render)
|
||||||
renderer.rsvgPath = env.subst("$BINDIR/rsvg-convert")
|
renderer.rsvgPath = env.subst("$TARDIR/rsvg-convert")
|
||||||
|
|
||||||
def invokeRenderer(target, source, env):
|
def invokeRenderer(target, source, env):
|
||||||
source = str(source[0])
|
source = str(source[0])
|
||||||
targetdir = env.subst("$BINDIR")
|
targetdir = env.subst("$TARDIR")
|
||||||
renderer.main([source,targetdir])
|
renderer.main([source,targetdir])
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
@ -216,12 +216,12 @@ def RegisterIcon_Builder(env):
|
||||||
source = str(source[0])
|
source = str(source[0])
|
||||||
targetdir = os.path.basename(str(target[0]))
|
targetdir = os.path.basename(str(target[0]))
|
||||||
targetfiles = renderer.getTargetNames(source) # parse SVG
|
targetfiles = renderer.getTargetNames(source) # parse SVG
|
||||||
return (["$BINDIR/%s" % name for name in targetfiles], source)
|
return (["$TARDIR/%s" % name for name in targetfiles], source)
|
||||||
|
|
||||||
def IconCopy(env, source):
|
def IconCopy(env, source):
|
||||||
"""Copy icon to corresponding icon dir. """
|
"""Copy icon to corresponding icon dir. """
|
||||||
subdir = getDirname(source)
|
subdir = getDirname(source)
|
||||||
return env.Install("$BINDIR/%s" % subdir, source)
|
return env.Install("$TARDIR/%s" % subdir, source)
|
||||||
|
|
||||||
|
|
||||||
buildIcon = env.Builder( action = Action(invokeRenderer, "rendering Icon: $SOURCE --> $TARGETS")
|
buildIcon = env.Builder( action = Action(invokeRenderer, "rendering Icon: $SOURCE --> $TARGETS")
|
||||||
|
|
|
||||||
|
|
@ -83,12 +83,12 @@ class LumieraEnvironment(Environment):
|
||||||
|
|
||||||
|
|
||||||
def LumieraLibrary (self, *args,**kw):
|
def LumieraLibrary (self, *args,**kw):
|
||||||
""" add some tweaks missing in SCons 1.0
|
""" augments the built-in SharedLibrary() builder to add
|
||||||
like proper handling for SONAME
|
some tweaks missing in SCons 1.0, like setting a SONAME proper
|
||||||
|
instead of just passing the relative pathname to the linker
|
||||||
"""
|
"""
|
||||||
print "hurgha"
|
|
||||||
if 'soname' in kw:
|
if 'soname' in kw:
|
||||||
soname = self.subst(kw['soname'])
|
soname = self.subst(kw['soname']) # explicitely defined by user
|
||||||
else:
|
else:
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
pathname = args[0]
|
pathname = args[0]
|
||||||
|
|
@ -96,30 +96,28 @@ class LumieraEnvironment(Environment):
|
||||||
pathname = kw['target']
|
pathname = kw['target']
|
||||||
else:
|
else:
|
||||||
raise SyntaxError("Library builder requires target spec. Arguments: %s %s" % (args,kw))
|
raise SyntaxError("Library builder requires target spec. Arguments: %s %s" % (args,kw))
|
||||||
print "SharedLib: path=%s" % pathname
|
|
||||||
(dirprefix, libname) = path.split(pathname)
|
(dirprefix, libname) = path.split(pathname)
|
||||||
if not libname:
|
if not libname:
|
||||||
raise ValueError("Library name missing. Only got a directory: "+pathname)
|
raise ValueError("Library name missing. Only got a directory: "+pathname)
|
||||||
|
|
||||||
libname = "${SHLIBPREFIX}%s$SHLIBSUFFIX" % libname
|
libname = "${SHLIBPREFIX}%s$SHLIBSUFFIX" % libname
|
||||||
print "name = "+libname
|
soname = self.subst(libname) # else: use the library filename as DT_SONAME
|
||||||
soname = self.subst(libname)
|
|
||||||
print "konstruierter name "+soname
|
|
||||||
|
|
||||||
assert soname
|
assert soname
|
||||||
subEnv = self.Clone()
|
subEnv = self.Clone()
|
||||||
subEnv.Append(LINKFLAGS = "-Wl,-soname="+soname )
|
subEnv.Append(LINKFLAGS = "-Wl,-soname="+soname )
|
||||||
|
|
||||||
libBuilder = self.get_builder('SharedLibrary')
|
libBuilder = self.get_builder('SharedLibrary')
|
||||||
print "libBuilder=%s" % libBuilder
|
return libBuilder(subEnv, *args,**kw); # invoke the predefined builder on the augmented environment
|
||||||
print "args = %s, kw = %s" % (args,kw)
|
|
||||||
return libBuilder(subEnv, *args,**kw);
|
|
||||||
|
|
||||||
|
|
||||||
def LumieraExe (self, *args,**kw):
|
def LumieraExe (self, *args,**kw):
|
||||||
""" add handling for rpath with $ORIGIN
|
""" augments the built-in Program() builder to add a fixed rpath based on $ORIGIN
|
||||||
|
That is: after searching LD_LIBRARY_PATH, but before the standard linker search,
|
||||||
|
the directory relative to the position of the executable ($ORIGIN) is searched.
|
||||||
|
This search path is active not only for the executable, but for all libraries
|
||||||
|
it is linked with
|
||||||
"""
|
"""
|
||||||
print "progrom"
|
|
||||||
|
|
||||||
subEnv = self.Clone()
|
subEnv = self.Clone()
|
||||||
subEnv.Append( LINKFLAGS = "-Wl,-rpath=\\$$ORIGIN/$LIBDIR,--enable-new-dtags" )
|
subEnv.Append( LINKFLAGS = "-Wl,-rpath=\\$$ORIGIN/$LIBDIR,--enable-new-dtags" )
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
../.libs
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Lumiera executable(s) and libraries will be built here
|
|
||||||
1
modules
Symbolic link
1
modules
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
target/modules
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
namespace lumiera {
|
namespace lumiera {
|
||||||
|
|
||||||
const char * const GUI_MODULE_NAME = ".libs/gtk_gui.lum";
|
const char * const GUI_MODULE_NAME = "modules/gtk_gui.lum";
|
||||||
|
|
||||||
typedef void (*VoidFunc)(void);
|
typedef void (*VoidFunc)(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,12 @@ envSvg.mergeConf(['librsvg-2.0'])
|
||||||
envSvg.Append(LIBS=support_lib)
|
envSvg.Append(LIBS=support_lib)
|
||||||
|
|
||||||
|
|
||||||
luidgen = env.LumieraExe('#$BINDIR/luidgen', 'luidgen.c', LIBS=support_lib) ## for generating Lumiera-UIDs
|
luidgen = env.LumieraExe('#$TARDIR/luidgen', 'luidgen.c', LIBS=support_lib) ## for generating Lumiera-UIDs
|
||||||
rsvg = envSvg.LumieraExe('#$BINDIR/rsvg-convert','rsvg-convert.c') ## for rendering SVG icons (uses librsvg)
|
rsvg = envSvg.LumieraExe('#$TARDIR/rsvg-convert','rsvg-convert.c') ## for rendering SVG icons (uses librsvg)
|
||||||
|
|
||||||
# build additional test and administrative tools....
|
# build additional test and administrative tools....
|
||||||
artifacts['tools'] = [ env.LumieraExe('#$BINDIR/hello-world','hello.c') #### hello world (checks C build)
|
artifacts['tools'] = [ env.LumieraExe('#$TARDIR/hello-world','hello.c') #### hello world (checks C build)
|
||||||
+ env.LumieraExe('#$BINDIR/try', 'try.cpp') #### to try out some feature...
|
+ env.LumieraExe('#$TARDIR/try', 'try.cpp') #### to try out some feature...
|
||||||
# + luidgen
|
# + luidgen
|
||||||
+ rsvg
|
+ rsvg
|
||||||
]
|
]
|
||||||
|
|
|
||||||
1
target/DIR_INFO
Normal file
1
target/DIR_INFO
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Lumiera program package tree, holding executable(s) and libraries to be built
|
||||||
1
target/modules/DIR_INFO
Normal file
1
target/modules/DIR_INFO
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Lumiera subsystems and other dynamically loadable application components
|
||||||
|
|
@ -35,7 +35,7 @@ def testExecutable(env,tree, exeName=None, obj=None):
|
||||||
obj = srcSubtree(env,tree, isShared=False) # use all sourcefiles found in subtree
|
obj = srcSubtree(env,tree, isShared=False) # use all sourcefiles found in subtree
|
||||||
if not exeName:
|
if not exeName:
|
||||||
exeName = 'test-%s' % tree
|
exeName = 'test-%s' % tree
|
||||||
return env.LumieraExe('#$BINDIR/'+exeName, obj + core)
|
return env.LumieraExe('#$TARDIR/'+exeName, obj + core)
|
||||||
|
|
||||||
|
|
||||||
def testCollection(env,dir):
|
def testCollection(env,dir):
|
||||||
|
|
@ -44,7 +44,7 @@ def testCollection(env,dir):
|
||||||
"""
|
"""
|
||||||
srcpatt = ['test-*.c']
|
srcpatt = ['test-*.c']
|
||||||
exeName = lambda p: path.basename(path.splitext(p)[0])
|
exeName = lambda p: path.basename(path.splitext(p)[0])
|
||||||
buildIt = lambda p: env.LumieraExe("#$BINDIR/"+exeName(p), [p] + core)
|
buildIt = lambda p: env.LumieraExe("#$TARDIR/"+exeName(p), [p] + core)
|
||||||
return [buildIt(f) for f in scanSubtree(dir,srcpatt)]
|
return [buildIt(f) for f in scanSubtree(dir,srcpatt)]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ artifacts['testsuite'] = ts = ( [ testExecutable(env, dir) for dir in ['bugs'] ]
|
||||||
|
|
||||||
|
|
||||||
# for creating a Valgrind-Suppression file
|
# for creating a Valgrind-Suppression file
|
||||||
vgsuppr = env.LumieraExe('#$BINDIR/vgsuppression','tool/vgsuppression.c', LIBS=core) ## for suppressing false valgrind alarms
|
vgsuppr = env.LumieraExe('#$TARDIR/vgsuppression','tool/vgsuppression.c', LIBS=core) ## for suppressing false valgrind alarms
|
||||||
artifacts['tools'] += [vgsuppr]
|
artifacts['tools'] += [vgsuppr]
|
||||||
Depends(ts,vgsuppr)
|
Depends(ts,vgsuppr)
|
||||||
|
|
||||||
|
|
@ -103,10 +103,10 @@ if testsuites:
|
||||||
testEnv['ENV']['TEST_CONF'] = env.File("test.conf").abspath
|
testEnv['ENV']['TEST_CONF'] = env.File("test.conf").abspath
|
||||||
|
|
||||||
|
|
||||||
testDir = env.Dir('#$BINDIR')
|
testDir = env.Dir('#$TARDIR')
|
||||||
runTest = env.File("test.sh").abspath
|
runTest = env.File("test.sh").abspath
|
||||||
|
|
||||||
runTs = testEnv.Command('#$BINDIR/,testlog', ts, runTest, chdir=testDir)
|
runTs = testEnv.Command('#$TARDIR/,testlog', ts, runTest, chdir=testDir)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue