Scons: add option rebuild that rebuild only specified targets, regardless of environment (e.g. CCFLAGS) changes.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13952 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2006-05-29 14:59:20 +00:00
parent a21c78f25b
commit 16a8861cd5
2 changed files with 71 additions and 28 deletions

View File

@ -14,9 +14,57 @@ Import('env')
targets = env['BUILD_TARGETS']
build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets or 'all' in targets)
build_boost = env['INCLUDED_BOOST'] or 'boost' in targets
build_intl = env['INCLUDED_GETTEXT'] or 'intl' in targets
build_supports = build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]
build_mathed = build_lyx or 'mathed' in targets
build_insets = build_lyx or 'insets' in targets
build_frontends = build_lyx or 'frontends' in targets
build_graphics = build_lyx or 'graphics' in targets
build_controllers = build_lyx or 'controllers' in targets
build_client = 'client' in targets or 'install' in targets or 'all' in targets
build_tex2lyx = 'tex2lyx' in targets or 'install' in targets or 'all' in targets
build_lyxbase = build_lyx or 'lyxbase' in targets
build_po = 'po' in targets or 'install' in targets or 'all' in targets
build_qt3 = (build_lyx and env['frontend'] == 'qt3') or 'qt3' in targets
build_qt4 = (build_lyx and env['frontend'] == 'qt4') or 'qt4' in targets
if env['INCLUDED_BOOST'] or 'boost' in targets:
# now, if rebuild_targets is specified, do not rebuild some targets
rebuild_targets = env['REBUILD_TARGETS']
if rebuild_targets:
def ifBuildLib(name, libname, old_value):
# explicitly asked to rebuild
if name in rebuild_targets:
return True
# else if not rebuild, and if the library already exists
elif os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath):
return False
# do not change the original value
else:
return old_value
build_boost = ifBuildLib('boost', 'included_boost_filesystem', build_boost)
build_intl = ifBuildLib('intl', 'included_intl', build_intl)
build_supports = ifBuildLib('supports', 'supports', build_supports)
build_mathed = ifBuildLib('mathed', 'mathed', build_mathed)
build_insets = ifBuildLib('insets', 'insets', build_insets)
build_frontends = ifBuildLib('frontends', 'frontends', build_frontends)
build_graphics = ifBuildLib('graphics', 'graphics', build_graphics)
build_controllers = ifBuildLib('controllers', 'controllers', build_controllers)
build_lyxbase = ifBuildLib('lyxbase', 'lyxbase_pre', build_lyxbase)
build_qt3 = ifBuildLib('qt3', 'qt3', build_qt3)
build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4)
# sync frontend and env['frontend'] (maybe build qt4 with frontend=qt3)
if build_qt3:
frontend = 'qt3'
env['frontend'] = 'qt4'
elif build_qt4:
frontend = 'qt4'
env['frontend'] = 'qt4'
if build_boost:
#
# boost libraries
#
@ -84,7 +132,7 @@ if env['INCLUDED_BOOST'] or 'boost' in targets:
Alias('boost', iostreams)
if env['INCLUDED_GETTEXT'] or 'intl' in targets:
if build_intl:
#
# intl
#
@ -156,7 +204,7 @@ if env['INCLUDED_GETTEXT'] or 'intl' in targets:
env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]:
if build_supports:
#
# src/support
#
@ -200,7 +248,7 @@ if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']
Alias('supports', supports)
if build_lyx or 'mathed' in targets:
if build_mathed:
#
# src/mathed
#
@ -286,7 +334,7 @@ if build_lyx or 'mathed' in targets:
Alias('mathed', mathed)
if build_lyx or 'insets' in targets:
if build_insets:
#
# src/insets
#
@ -349,7 +397,7 @@ if build_lyx or 'insets' in targets:
Alias('insets', insets)
if build_lyx or 'frontends' in targets:
if build_frontends:
#
# src/frontends
#
@ -372,7 +420,7 @@ if build_lyx or 'frontends' in targets:
Alias('frontends', frontends)
if build_lyx or 'graphics' in targets:
if build_graphics:
#
# src/graphics
#
@ -397,7 +445,7 @@ if build_lyx or 'graphics' in targets:
Alias('graphics', graphics)
if build_lyx or 'controllers' in targets:
if build_controllers:
#
# src/frontends/controllers
#
@ -461,20 +509,10 @@ if build_lyx or 'controllers' in targets:
#
# src/frontend/qt3/4
#
if build_lyx or env['frontend'] in targets:
frontend = env['frontend']
if build_qt3 or build_qt4:
env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRC_DIR/src/frontend/$frontend', duplicate = 0)
else:
# frontend is qt3, but specify target qt4, OK
if 'qt3' in targets:
frontned = 'qt3'
elif 'qt4' in targets:
frontend = 'qt4'
else:
frontend = None
if frontend == 'qt3':
if build_qt3:
print "Processing files in src/frontends/qt3..."
qt3env = env.Copy()
@ -703,7 +741,7 @@ if frontend == 'qt3':
Alias('qt3', qt3)
elif frontend == 'qt4':
if build_qt4:
print "Processing files in src/frontends/qt4..."
qt4env = env.Copy()
@ -954,7 +992,7 @@ elif frontend == 'qt4':
Alias('qt4', qt4)
if 'client' in targets or 'install' in targets or 'all' in targets:
if build_client:
#
# src/client
#
@ -982,7 +1020,7 @@ if 'client' in targets or 'install' in targets or 'all' in targets:
Alias('client', client)
if 'tex2lyx' in targets or 'install' in targets or 'all' in targets:
if build_tex2lyx:
#
# tex2lyx
#
@ -1027,7 +1065,7 @@ if 'tex2lyx' in targets or 'install' in targets or 'all' in targets:
Alias('tex2lyx', tex2lyx)
if build_lyx or 'lyxbase' in targets:
if build_lyxbase:
#
# src/
#
@ -1169,7 +1207,7 @@ if build_lyx or 'lyxbase' in targets:
Alias('lyxbase', lyxbase_post)
if build_lyx or 'lyx' in targets:
if build_lyx:
#
# Build lyx with given frontend
#
@ -1200,7 +1238,7 @@ if build_lyx or 'lyx' in targets:
Alias('lyx', lyx)
if 'po' in targets or 'install' in targets or 'all' in targets:
if build_po:
#
# po/
#

View File

@ -272,6 +272,8 @@ opts.AddOptions(
PathOption('extra_inc_path1', 'Extra include path', None),
#
PathOption('extra_lib_path1', 'Extra library path', None),
# rebuild only specifed, comma separated targets
('rebuild', 'rebuild only specifed, comma separated targets', None),
# can be set to a non-existing directory
('prefix', 'install architecture-independent files in PREFIX', None),
# will install to dest_dir if defined. Otherwise, prefix will be used.
@ -610,8 +612,7 @@ else:
env['INCLUDED_BOOST'] = env_cache['INCLUDED_BOOST']
if not env.has_key('nls') or env['nls']:
env['ENABLE_NLS'] = True
env['ENABLE_NLS'] = not env.has_key('nls') or env['nls']
if not fast_start:
if not env['ENABLE_NLS']:
@ -1208,6 +1209,10 @@ env.SConsignFile(os.path.join(Dir(env['BUILDDIR']).abspath, '.sconsign'))
#env.CacheDir('%s/Cache/%s' % (env['BUILDDIR'], frontend))
env['BUILD_TARGETS'] = BUILD_TARGETS
if env.has_key('rebuild'):
env['REBUILD_TARGETS'] = env['rebuild'].split(',')
else:
env['REBUILD_TARGETS'] = None
print "Building all targets recursively"