]> git.lyx.org Git - features.git/commitdiff
Scons: add option rebuild that rebuild only specified targets, regardless of environm...
authorBo Peng <bpeng@lyx.org>
Mon, 29 May 2006 14:59:20 +0000 (14:59 +0000)
committerBo Peng <bpeng@lyx.org>
Mon, 29 May 2006 14:59:20 +0000 (14:59 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13952 a592a061-630c-0410-9148-cb99ea01b6c8

development/scons/SConscript
development/scons/SConstruct

index 7031c51f225094fa1c97117ce3297ea56bc9ac29..0229ec96590ebaf2ca46b0831809d4ae63befec7 100644 (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)
-
-
-if env['INCLUDED_BOOST'] or 'boost' 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
+
+
+# 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/
   #
index 3ed35bc5443957e88b152d3a7e6a339c6553cf0d..487625a316a962849cd318e0b83d5d63074b6615 100644 (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"