]> git.lyx.org Git - lyx.git/blobdiff - development/scons/SConstruct
More notes.
[lyx.git] / development / scons / SConstruct
index ccf12945dc3fc024d1e1a61c577943049127f3d8..176b6e05d851ff0ec052cf7a60976fda09e87e14 100644 (file)
@@ -29,30 +29,16 @@ if os.path.exists(os.path.join(scons_dir, 'development', 'scons', 'scons_manifes
 top_src_dir = os.path.split(os.path.split(scons_absdir)[0])[0]
 
 sys.path.extend([scons_absdir, os.path.join(top_src_dir, 'lib', 'doc')])
 top_src_dir = os.path.split(os.path.split(scons_absdir)[0])[0]
 
 sys.path.extend([scons_absdir, os.path.join(top_src_dir, 'lib', 'doc')])
-import depend
 
 # scons_utils.py defines a few utility function
 import scons_utils as utils
 # import all file lists
 from scons_manifest import *
 
 
 # scons_utils.py defines a few utility function
 import scons_utils as utils
 # import all file lists
 from scons_manifest import *
 
-#----------------------------------------------------------
-# Required runtime environment
-#----------------------------------------------------------
-
 # scons asks for 1.5.2, lyx requires 2.3
 EnsurePythonVersion(2, 3)
 # scons asks for 1.5.2, lyx requires 2.3
 EnsurePythonVersion(2, 3)
-# Please use at least 0.96.92 (not 0.96.1)
-EnsureSConsVersion(0, 96)
-# also check for minor version number for scons 0.96
-from SCons import __version__
-# allow the use of snapshot version of scons
-__version__ = __version__.split('d')[0]
-version = map(int, __version__.split('.'))
-if version[0] == 0 and version[1] == 96 and version[2] < 92:
-    print "Scons >= 0.96.92 is required."
-    Exit(1)
-
+# Please use at least version 0.97
+EnsureSConsVersion(0, 97)
 
 #----------------------------------------------------------
 # Global definitions
 
 #----------------------------------------------------------
 # Global definitions
@@ -62,7 +48,7 @@ if version[0] == 0 and version[1] == 96 and version[2] < 92:
 #
 # get version number from configure.ac so that JMarc does
 # not have to change SConstruct during lyx release
 #
 # get version number from configure.ac so that JMarc does
 # not have to change SConstruct during lyx release
-package_version, lyx_date = utils.getVerFromConfigure(top_src_dir)
+package_version, majmin_ver, lyx_date = utils.getVerFromConfigure(top_src_dir)
 package_cygwin_version = '%s-1' % package_version
 boost_version = ['1_34']
 
 package_cygwin_version = '%s-1' % package_version
 boost_version = ['1_34']
 
@@ -124,16 +110,16 @@ if os.path.isfile('config.py'):
     print "Getting options from config.py..."
     print open('config.py').read()
 
     print "Getting options from config.py..."
     print open('config.py').read()
 
-opts = Options(['config.py'])
-opts.AddOptions(
+opts = Variables(['config.py'])
+opts.AddVariables(
     # frontend
     # frontend
-    EnumOption('frontend', 'Main GUI', 'qt4',
+    EnumVariable('frontend', 'Main GUI', 'qt4',
         allowed_values = ('qt4',) ),
     # debug or release build
         allowed_values = ('qt4',) ),
     # debug or release build
-    EnumOption('mode', 'Building method', default_build_mode,
+    EnumVariable('mode', 'Building method', default_build_mode,
         allowed_values = ('debug', 'release') ),
     # boost libraries
         allowed_values = ('debug', 'release') ),
     # boost libraries
-    EnumOption('boost',
+    EnumVariable('boost',
         'Use included, system boost library, or try sytem boost first.',
         'auto', allowed_values = (
             'auto',       # detect boost, if not found, use included
         'Use included, system boost library, or try sytem boost first.',
         'auto', allowed_values = (
             'auto',       # detect boost, if not found, use included
@@ -141,7 +127,7 @@ opts.AddOptions(
             'system',     # always use system boost, fail if can not find
             ) ),
     #
             'system',     # always use system boost, fail if can not find
             ) ),
     #
-    EnumOption('gettext',
+    EnumVariable('gettext',
         'Use included, system gettext library, or try sytem gettext first',
         'auto', allowed_values = (
             'auto',       # detect gettext, if not found, use included
         'Use included, system gettext library, or try sytem gettext first',
         'auto', allowed_values = (
             'auto',       # detect gettext, if not found, use included
@@ -149,46 +135,46 @@ opts.AddOptions(
             'system',     # always use system gettext, fail if can not find
             ) ),
     #
             'system',     # always use system gettext, fail if can not find
             ) ),
     #
-    EnumOption('spell', 'Choose spell checker to use.', 'auto',
-        allowed_values = ('aspell', 'pspell', 'ispell', 'auto', 'no') ),
+    EnumVariable('spell', 'Choose spell checker to use.', 'auto',
+               allowed_values = ('aspell', 'hunspell', 'auto', 'no') ),
     # packaging method
     # packaging method
-    EnumOption('packaging', 'Packaging method to use.', default_packaging_method,
+    EnumVariable('packaging', 'Packaging method to use.', default_packaging_method,
         allowed_values = ('windows', 'posix', 'macosx')),
     #
         allowed_values = ('windows', 'posix', 'macosx')),
     #
-    BoolOption('fast_start', 'This option is obsolete.', False),
+    BoolVariable('fast_start', 'This option is obsolete.', False),
     # No precompiled header support (too troublesome to make it work for msvc)
     # No precompiled header support (too troublesome to make it work for msvc)
-    # BoolOption('pch', 'Whether or not use pch', False),
+    # BoolVariable('pch', 'Whether or not use pch', False),
     # enable assertion, (config.h has ENABLE_ASSERTIOS
     # enable assertion, (config.h has ENABLE_ASSERTIOS
-    BoolOption('assertions', 'Use assertions', True),
+    BoolVariable('assertions', 'Use assertions', True),
     # config.h define _GLIBCXX_CONCEPT_CHECKS
     # Note: for earlier version of gcc (3.3) define _GLIBCPP_CONCEPT_CHECKS
     # config.h define _GLIBCXX_CONCEPT_CHECKS
     # Note: for earlier version of gcc (3.3) define _GLIBCPP_CONCEPT_CHECKS
-    BoolOption('concept_checks', 'Enable concept checks', True),
+    BoolVariable('concept_checks', 'Enable concept checks', True),
     #
     #
-    BoolOption('nls', 'Whether or not use native language support', True),
+    BoolVariable('nls', 'Whether or not use native language support', True),
     #
     #
-    BoolOption('profiling', 'Whether or not enable profiling', False),
+    BoolVariable('profiling', 'Whether or not enable profiling', False),
     # config.h define _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC
     # config.h define _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC
-    BoolOption('stdlib_debug', 'Whether or not turn on stdlib debug', False),
+    BoolVariable('stdlib_debug', 'Whether or not turn on stdlib debug', False),
     # using x11?
     # using x11?
-    BoolOption('X11', 'Use x11 windows system', default_with_x),
+    BoolVariable('X11', 'Use x11 windows system', default_with_x),
     # use MS VC++ to build lyx
     # use MS VC++ to build lyx
-    BoolOption('use_vc', 'Use MS VC++ to build lyx (cl.exe will be probed)', None),
+    BoolVariable('use_vc', 'Use MS VC++ to build lyx (cl.exe will be probed)', None),
     #
     #
-    PathOption('qt_dir', 'Path to qt directory', None),
+    PathVariable('qt_dir', 'Path to qt directory', None),
     #
     #
-    PathOption('qt_inc_path', 'Path to qt include directory', None),
+    PathVariable('qt_inc_path', 'Path to qt include directory', None),
     #
     #
-    PathOption('qt_lib_path', 'Path to qt library directory', None),
+    PathVariable('qt_lib_path', 'Path to qt library directory', None),
     # extra include and libpath
     # extra include and libpath
-    PathOption('extra_inc_path', 'Extra include path', None),
+    PathVariable('extra_inc_path', 'Extra include path', None),
     #
     #
-    PathOption('extra_lib_path', 'Extra library path', None),
+    PathVariable('extra_lib_path', 'Extra library path', None),
     #
     #
-    PathOption('extra_bin_path', 'A convenient way to add a path to $PATH', None),
+    PathVariable('extra_bin_path', 'A convenient way to add a path to $PATH', None),
     #
     #
-    PathOption('extra_inc_path1', 'Extra include path', None),
+    PathVariable('extra_inc_path1', 'Extra include path', None),
     #
     #
-    PathOption('extra_lib_path1', 'Extra library path', None),
+    PathVariable('extra_lib_path1', 'Extra library path', None),
     #
     ('rebuild', 'Obsolete option', None),
     # can be set to a non-existing directory
     #
     ('rebuild', 'Obsolete option', None),
     # can be set to a non-existing directory
@@ -198,9 +184,9 @@ opts.AddOptions(
     # the deps package used to create minimal installer (qt and other libraries)
     ('deps_dir', 'path to the development depedency packages with zlib, iconv, zlib and qt libraries', None),
     # whether or not build bundle installer
     # the deps package used to create minimal installer (qt and other libraries)
     ('deps_dir', 'path to the development depedency packages with zlib, iconv, zlib and qt libraries', None),
     # whether or not build bundle installer
-    BoolOption('bundle', 'Whether or not build bundle installer', False),
+    BoolVariable('bundle', 'Whether or not build bundle installer', False),
     # the bundle directory, containing bundled applications
     # the bundle directory, containing bundled applications
-    PathOption('bundle_dir', 'path to the bundle dependency package with miktex setup.exe etc', None),
+    PathVariable('bundle_dir', 'path to the bundle dependency package with miktex setup.exe etc', None),
     # build directory, will use $mode if not set
     ('build_dir', 'Build directory', None),
     # version suffix
     # build directory, will use $mode if not set
     ('build_dir', 'Build directory', None),
     # version suffix
@@ -214,7 +200,7 @@ opts.AddOptions(
     #
     ('optimization', 'optimization CCFLAGS option.', None),
     #
     #
     ('optimization', 'optimization CCFLAGS option.', None),
     #
-    PathOption('exec_prefix', 'install architecture-independent executable files in PREFIX', None),
+    PathVariable('exec_prefix', 'install architecture-independent executable files in PREFIX', None),
     # log file
     ('logfile', 'save commands (not outputs) to logfile', default_log_file),
     # provided for backward compatibility
     # log file
     ('logfile', 'save commands (not outputs) to logfile', default_log_file),
     # provided for backward compatibility
@@ -234,7 +220,7 @@ opts.AddOptions(
 # allowed options
 all_options = [x.key for x in opts.options]
 
 # allowed options
 all_options = [x.key for x in opts.options]
 
-# copied from SCons/Options/BoolOption.py
+# copied from SCons/Variables/BoolVariable.py
 # We need to use them before a boolean ARGUMENTS option is available
 # in env as bool.
 true_strings  = ('y', 'yes', 'true', 't', '1', 'on' , 'all' )
 # We need to use them before a boolean ARGUMENTS option is available
 # in env as bool.
 true_strings  = ('y', 'yes', 'true', 't', '1', 'on' , 'all' )
@@ -336,19 +322,7 @@ if platform_name == 'win32':
 else:
     use_vc = False
 
 else:
     use_vc = False
 
-# lyx will be built to $build/build_dir so it is possible
-# to build multiple build_dirs using the same source
-# $mode can be debug or release
 if env.has_key('build_dir') and env['build_dir'] is not None:
 if env.has_key('build_dir') and env['build_dir'] is not None:
-    # create the directory if needed
-    if not os.path.isdir(env['build_dir']):
-        try:
-            os.makedirs(env['build_dir'])
-        except:
-            pass
-        if not os.path.isdir(env['build_dir']):
-            print 'Can not create directory', env['build_dir']
-            Exit(3)
     env['BUILDDIR'] = env['build_dir']
 else:
     # Determine the name of the build $mode
     env['BUILDDIR'] = env['build_dir']
 else:
     # Determine the name of the build $mode
@@ -366,8 +340,6 @@ env.AppendUnique(LIBPATH = ['$LOCALLIBPATH'])
 # 3. compiler commands and flags like CCFLAGS.
 #     MSGFMT used to process po files
 # 4. Variables that will be used to replace variables in some_file.in
 # 3. compiler commands and flags like CCFLAGS.
 #     MSGFMT used to process po files
 # 4. Variables that will be used to replace variables in some_file.in
-#     src/support/Package.cpp.in:
-#       TOP_SRCDIR, LOCALEDIR, LYX_DIR, PROGRAM_SUFFIX
 #     lib/lyx2lyx/lyx2lyx_version.py.in
 #       PACKAGE_VERSION
 
 #     lib/lyx2lyx/lyx2lyx_version.py.in
 #       PACKAGE_VERSION
 
@@ -399,16 +371,20 @@ if env.has_key('version_suffix'):
         program_suffix = env['version_suffix']
 else:
     program_suffix = ''
         program_suffix = env['version_suffix']
 else:
     program_suffix = ''
-# used by Package.cpp.in
-env['PROGRAM_SUFFIX'] = program_suffix
+
 
 # whether or not add suffix to file and directory names
 add_suffix = packaging_method != 'windows'
 
 # whether or not add suffix to file and directory names
 add_suffix = packaging_method != 'windows'
-# LYX_DIR are different (used in Package.cpp.in)
-if add_suffix:
-    env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir + program_suffix)).abspath
+# Absolute data directory
+if mode == 'release':
+    if add_suffix:
+        env['LYX_DATA_DIR'] = Dir(os.path.join(prefix, share_dir + program_suffix)).abspath
+    else:
+        env['LYX_DATA_DIR'] = Dir(os.path.join(prefix, share_dir)).abspath
 else:
 else:
-    env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir)).abspath
+    # in the debug mode, use $TOP_SRCDIR/lib to make sure lyx can be started from anyway
+    # by using this directory as data directory
+    env['LYX_DATA_DIR'] = os.path.join(env.subst('$TOP_SRCDIR'), 'lib')
 # we need absolute path for package.C
 env['LOCALEDIR'] = Dir(os.path.join(prefix, locale_dir)).abspath
 
 # we need absolute path for package.C
 env['LOCALEDIR'] = Dir(os.path.join(prefix, locale_dir)).abspath
 
@@ -438,13 +414,6 @@ CCFLAGS_required = []
 LINKFLAGS_required = []
 CCFLAGS_default = []
 
 LINKFLAGS_required = []
 CCFLAGS_default = []
 
-# under windows, scons is confused by .C/.c and uses gcc instead of
-# g++. I am forcing the use of g++ here. This is expected to change
-# after lyx renames all .C files to .cpp
-#
-# save the old c compiler and CCFLAGS (used by libintl)
-C_COMPILER = env.subst('$CC')
-C_CCFLAGS = env.subst('$CCFLAGS').split()
 # if we use ms vc, the commands are fine (cl.exe and link.exe)
 if use_vc:
     # C4819: The file contains a character that cannot be represented
 # if we use ms vc, the commands are fine (cl.exe and link.exe)
 if use_vc:
     # C4819: The file contains a character that cannot be represented
@@ -453,18 +422,8 @@ if use_vc:
     CCFLAGS_required.append('/EHsc')
     if mode == 'debug':
         CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo', '/MDd'])
     CCFLAGS_required.append('/EHsc')
     if mode == 'debug':
         CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo', '/MDd'])
-        # the flags are also needed in C mode (for intl lib)
-        C_CCFLAGS.extend(['/wd4819', '/wd4996', '/nologo', '/MDd'])
     else:
         CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo', '/MD'])
     else:
         CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo', '/MD'])
-        C_CCFLAGS.extend(['/wd4819', '/wd4996', '/nologo', '/MD'])
-else:
-    if env.has_key('CXX') and env['CXX']:
-        env['CC'] = env.subst('$CXX')
-        env['LINK'] = env.subst('$CXX')
-    else:
-        env['CC'] = 'g++'
-        env['LINK'] = 'g++'
 
 # for debug/release mode
 if env.has_key('optimization') and env['optimization'] is not None:
 
 # for debug/release mode
 if env.has_key('optimization') and env['optimization'] is not None:
@@ -646,7 +605,7 @@ if conf.CheckLib('nsl'):
 
 # check available boost libs (since lyx1.4 does not use iostream)
 boost_libs = []
 
 # check available boost libs (since lyx1.4 does not use iostream)
 boost_libs = []
-for lib in ['signals', 'regex', 'filesystem', 'iostreams']:
+for lib in ['signals', 'regex']:
     if os.path.isdir(os.path.join(top_src_dir, 'boost', 'libs', lib)):
         boost_libs.append(lib)
 
     if os.path.isdir(os.path.join(top_src_dir, 'boost', 'libs', lib)):
         boost_libs.append(lib)
 
@@ -740,7 +699,7 @@ if platform_name == 'cygwin':
 #
 # install customized builders
 env['BUILDERS']['substFile'] = Builder(action = utils.env_subst)
 #
 # install customized builders
 env['BUILDERS']['substFile'] = Builder(action = utils.env_subst)
-env['BUILDERS']['installTOC'] = Builder(action = utils.env_toc)
+#env['BUILDERS']['installTOC'] = Builder(action = utils.env_toc)
 env['BUILDERS']['potfiles'] = Builder(action = utils.env_potfiles)
 
 
 env['BUILDERS']['potfiles'] = Builder(action = utils.env_potfiles)
 
 
@@ -760,7 +719,7 @@ print "Creating %s..." % boost_config_h
 #
 utils.createConfigFile(conf,
     config_file = boost_config_h,
 #
 utils.createConfigFile(conf,
     config_file = boost_config_h,
-    config_pre = '''/* boost/config.h.  Generated by SCons.  */
+    config_pre = r'''/* boost/config.h.  Generated by SCons.  */
 
 /* -*- C++ -*- */
 /*
 
 /* -*- C++ -*- */
 /*
@@ -784,7 +743,7 @@ utils.createConfigFile(conf,
         #('newapis.h', 'HAVE_NEWAPIS_H', 'c'),
     ],
     custom_tests = [
         #('newapis.h', 'HAVE_NEWAPIS_H', 'c'),
     ],
     custom_tests = [
-        (env.has_key('assertions') and env['assertions'],
+        (env.has_key('assertions') and env['assertions'] and mode == 'debug',
             'ENABLE_ASSERTIONS',
             'Define if you want assertions to be enabled in the code'
         ),
             'ENABLE_ASSERTIONS',
             'Define if you want assertions to be enabled in the code'
         ),
@@ -851,14 +810,8 @@ else:
 # determine headers to use
 spell_opt = ARGUMENTS.get('spell', 'auto')
 env['USE_ASPELL'] = False
 # determine headers to use
 spell_opt = ARGUMENTS.get('spell', 'auto')
 env['USE_ASPELL'] = False
-env['USE_PSPELL'] = False
-env['USE_ISPELL'] = False
 if spell_opt in ['auto', 'aspell'] and conf.CheckLib(aspell_lib):
     spell_engine = 'USE_ASPELL'
 if spell_opt in ['auto', 'aspell'] and conf.CheckLib(aspell_lib):
     spell_engine = 'USE_ASPELL'
-elif spell_opt in ['auto', 'pspell'] and conf.CheckLib('pspell'):
-    spell_engine = 'USE_PSPELL'
-elif spell_opt in ['auto', 'ispell'] and conf.CheckLib('ispell'):
-    spell_engine = 'USE_ISPELL'
 else:
     spell_engine = None
 
 else:
     spell_engine = None
 
@@ -897,7 +850,6 @@ env['VERSION_INFO'] = '''Configuration
   Linker user flags:              %s
 Build info:
   Builing directory:              %s
   Linker user flags:              %s
 Build info:
   Builing directory:              %s
-  Local library directory:        %s
   Libraries paths:                %s
   Boost libraries:                %s
   include search path:            %s
   Libraries paths:                %s
   Boost libraries:                %s
   include search path:            %s
@@ -912,17 +864,17 @@ Frontend:
     env.subst('$CXX'), env.subst('$CXXFLAGS'),
     env.subst('$CPPFLAGS'), env.subst('$CXXFLAGS'),
     env.subst('$LINKFLAGS'), env.subst('$LINKFLAGS'),
     env.subst('$CXX'), env.subst('$CXXFLAGS'),
     env.subst('$CPPFLAGS'), env.subst('$CXXFLAGS'),
     env.subst('$LINKFLAGS'), env.subst('$LINKFLAGS'),
-    env.subst('$BUILDDIR'), env.subst('$LOCALLIBPATH'),
-    str(env['LIBPATH']), str(boost_libraries),
-    str(env['CPPPATH']),
+    env.subst('$LOCALLIBPATH'),
+    env.subst('$LIBPATH'), str(boost_libraries),
+    env.subst('$CPPPATH'),
     frontend, packaging_method,
     frontend, packaging_method,
-    prefix, env['LYX_DIR'])
+    prefix, env['LYX_DATA_DIR'])
 
 #
 # create config.h
 result = utils.createConfigFile(conf,
     config_file = config_h,
 
 #
 # create config.h
 result = utils.createConfigFile(conf,
     config_file = config_h,
-    config_pre = '''/* config.h.  Generated by SCons.  */
+    config_pre = r'''/* config.h.  Generated by SCons.  */
 
 /* -*- C++ -*- */
 /*
 
 /* -*- C++ -*- */
 /*
@@ -945,6 +897,7 @@ result = utils.createConfigFile(conf,
         ('locale.h', 'HAVE_LOCALE_H', 'c'),
         ('process.h', 'HAVE_PROCESS_H', 'c'),
         ('stdlib.h', 'HAVE_STDLIB_H', 'c'),
         ('locale.h', 'HAVE_LOCALE_H', 'c'),
         ('process.h', 'HAVE_PROCESS_H', 'c'),
         ('stdlib.h', 'HAVE_STDLIB_H', 'c'),
+        ('string.h', 'HAVE_STRING_H', 'c'),
         ('sys/stat.h', 'HAVE_SYS_STAT_H', 'c'),
         ('sys/time.h', 'HAVE_SYS_TIME_H', 'c'),
         ('sys/types.h', 'HAVE_SYS_TYPES_H', 'c'),
         ('sys/stat.h', 'HAVE_SYS_STAT_H', 'c'),
         ('sys/time.h', 'HAVE_SYS_TIME_H', 'c'),
         ('sys/types.h', 'HAVE_SYS_TYPES_H', 'c'),
@@ -1070,8 +1023,20 @@ result = utils.createConfigFile(conf,
             'Define to the version of this package.'),
         ('#define VERSION_INFO "%s"' % env['VERSION_INFO'].replace('\n', '\\n'),
             'Full version info'),
             'Define to the version of this package.'),
         ('#define VERSION_INFO "%s"' % env['VERSION_INFO'].replace('\n', '\\n'),
             'Full version info'),
+        ('#define LYX_DIR_VER "LYX_DIR_%sx"' % majmin_ver,
+            'Versioned env var for system dir'),
+        ('#define LYX_USERDIR_VER "LYX_USERDIR_%sx"' % majmin_ver,
+            'Versioned env var for user dir'),
         ('#define LYX_DATE "%s"' % lyx_date,
             'Date of release'),
         ('#define LYX_DATE "%s"' % lyx_date,
             'Date of release'),
+        ('#define PROGRAM_SUFFIX "%s"' % program_suffix,
+            'Program version suffix'),
+        ('#define LYX_ABS_INSTALLED_DATADIR "%s"' % env.subst('$LYX_DATA_DIR').replace('\\', '/'),
+            'Hard coded system support directory'),
+        ('#define LYX_ABS_INSTALLED_LOCALEDIR "%s"' % env.subst('$LOCALEDIR').replace('\\', '/'),
+            'Hard coded locale directory'),
+        ('#define LYX_ABS_TOP_SRCDIR "%s"' % env.subst('$TOP_SRCDIR').replace('\\', '/'),
+            'Top source directory'),
         ('#define BOOST_ALL_NO_LIB 1',
             'disable automatic linking of boost libraries.'),
         ('#define USE_%s_PACKAGING 1' % packaging_method.upper(),
         ('#define BOOST_ALL_NO_LIB 1',
             'disable automatic linking of boost libraries.'),
         ('#define USE_%s_PACKAGING 1' % packaging_method.upper(),
@@ -1104,7 +1069,7 @@ char * strerror(int n);
 )
 
 # these keys are needed in env
 )
 
 # these keys are needed in env
-for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\
+for key in ['USE_ASPELL', 'HAVE_FCNTL',\
     'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB']:
     # USE_ASPELL etc does not go through result
     if result.has_key(key):
     'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB']:
     # USE_ASPELL etc does not go through result
     if result.has_key(key):
@@ -1122,7 +1087,7 @@ if env['nls'] and included_gettext:
     # create intl/config.h
     result = utils.createConfigFile(conf,
         config_file = intl_config_h,
     # create intl/config.h
     result = utils.createConfigFile(conf,
         config_file = intl_config_h,
-        config_pre = '''/* intl/config.h.  Generated by SCons.  */
+        config_pre = r'''/* intl/config.h.  Generated by SCons.  */
 
 /* -*- C++ -*- */
 /*
 
 /* -*- C++ -*- */
 /*
@@ -1136,8 +1101,8 @@ if env['nls'] and included_gettext:
 * during the compilation.
 */
 
 * during the compilation.
 */
 
-#ifndef _CONFIG_H
-#define _CONFIG_H
+#ifndef _INTL_CONFIG_H
+#define _INTL_CONFIG_H
 ''',
         headers = [
             ('unistd.h', 'HAVE_UNISTD_H', 'c'),
 ''',
         headers = [
             ('unistd.h', 'HAVE_UNISTD_H', 'c'),
@@ -1248,9 +1213,9 @@ if platform_name in ['win32', 'cygwin']:
     # the final link step needs stdc++ to succeed under mingw
     # FIXME: shouldn't g++ automatically link to stdc++?
     if use_vc:
     # the final link step needs stdc++ to succeed under mingw
     # FIXME: shouldn't g++ automatically link to stdc++?
     if use_vc:
-        system_libs += ['ole32', 'shlwapi', 'shell32', 'advapi32', 'zdll']
+        system_libs += ['ole32', 'shlwapi', 'psapi', 'shell32', 'advapi32', 'zdll']
     else:
     else:
-        system_libs += ['shlwapi', 'stdc++', 'z']
+        system_libs += ['shlwapi', 'psapi', 'stdc++', 'z']
 elif platform_name == 'cygwin' and env['X11']:
     system_libs += ['GL',  'Xmu', 'Xi', 'Xrender', 'Xrandr',
         'Xcursor', 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 
 elif platform_name == 'cygwin' and env['X11']:
     system_libs += ['GL',  'Xmu', 'Xi', 'Xrender', 'Xrandr',
         'Xcursor', 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 
@@ -1262,8 +1227,6 @@ libs = [
     ('HAVE_LIBGDI32', 'gdi32'),
     ('HAVE_LIBAIKSAURUS', env['AIKSAURUS_LIB']),
     ('USE_ASPELL', aspell_lib),
     ('HAVE_LIBGDI32', 'gdi32'),
     ('HAVE_LIBAIKSAURUS', env['AIKSAURUS_LIB']),
     ('USE_ASPELL', aspell_lib),
-    ('USE_ISPELL', 'ispell'),
-    ('USE_PSPELL', 'pspell'),
 ]
 
 for lib in libs:
 ]
 
 for lib in libs:
@@ -1317,29 +1280,29 @@ if platform_name == 'cygwin':
 # to be built with all the include directories etc
 #
 if frontend == 'qt4':
 # to be built with all the include directories etc
 #
 if frontend == 'qt4':
-    frontend_env = env.Copy()
+    env['BUILDERS']['qtResource'] = Builder(action = utils.env_qtResource)
 
     # handle qt related user specified paths
     # set environment so that moc etc can be found even if its path is not set properly
 
     # handle qt related user specified paths
     # set environment so that moc etc can be found even if its path is not set properly
-    if frontend_env.has_key('qt_dir') and frontend_env['qt_dir']:
-        frontend_env['QTDIR'] = frontend_env['qt_dir']
-        if os.path.isdir(os.path.join(frontend_env['qt_dir'], 'bin')):
-            os.environ['PATH'] += os.pathsep + os.path.join(frontend_env['qt_dir'], 'bin')
-            frontend_env.PrependENVPath('PATH', os.path.join(frontend_env['qt_dir'], 'bin'))
-        if os.path.isdir(os.path.join(frontend_env['qt_dir'], 'lib')):
-            frontend_env.PrependENVPath('PKG_CONFIG_PATH', os.path.join(frontend_env['qt_dir'], 'lib'))
+    if env.has_key('qt_dir') and env['qt_dir']:
+        env['QTDIR'] = env['qt_dir']
+        if os.path.isdir(os.path.join(env['qt_dir'], 'bin')):
+            os.environ['PATH'] += os.pathsep + os.path.join(env['qt_dir'], 'bin')
+            env.PrependENVPath('PATH', os.path.join(env['qt_dir'], 'bin'))
+        if os.path.isdir(os.path.join(env['qt_dir'], 'lib')):
+            env.PrependENVPath('PKG_CONFIG_PATH', os.path.join(env['qt_dir'], 'lib'))
 
     # if separate qt_lib_path is given
 
     # if separate qt_lib_path is given
-    if frontend_env.has_key('qt_lib_path') and frontend_env['qt_lib_path']:
-        qt_lib_path = frontend_env.subst('$qt_lib_path')
-        frontend_env.AppendUnique(LIBPATH = [qt_lib_path])
-        frontend_env.PrependENVPath('PKG_CONFIG_PATH', qt_lib_path)
+    if env.has_key('qt_lib_path') and env['qt_lib_path']:
+        qt_lib_path = env.subst('$qt_lib_path')
+        env.AppendUnique(LIBPATH = [qt_lib_path])
+        env.PrependENVPath('PKG_CONFIG_PATH', qt_lib_path)
     else:
         qt_lib_path = None
 
     # if separate qt_inc_path is given
     else:
         qt_lib_path = None
 
     # if separate qt_inc_path is given
-    if frontend_env.has_key('qt_inc_path') and frontend_env['qt_inc_path']:
-        qt_inc_path = frontend_env['qt_inc_path']
+    if env.has_key('qt_inc_path') and env['qt_inc_path']:
+        qt_inc_path = env['qt_inc_path']
     else:
         qt_inc_path = None
 
     else:
         qt_inc_path = None
 
@@ -1349,18 +1312,20 @@ if frontend == 'qt4':
     # NOTE: I have to patch qt4.py since it does not automatically
     # process .C file!!! (add to cxx_suffixes )
     #
     # NOTE: I have to patch qt4.py since it does not automatically
     # process .C file!!! (add to cxx_suffixes )
     #
-    frontend_env.Tool('qt4', [scons_dir])
-    frontend_env['QT_AUTOSCAN'] = 0
-    frontend_env['QT4_AUTOSCAN'] = 0
-    frontend_env['QT4_UICDECLFLAGS'] = '-tr lyx::qt_'
+    env.Tool('qt4', [scons_dir])
+    env['QT_AUTOSCAN'] = 0
+    env['QT4_AUTOSCAN'] = 0
+    env['QT4_UICDECLFLAGS'] = '-tr lyx::qt_'
+    if platform_name == 'win32':
+        env['QT4_MOCFROMHFLAGS'] = '-D_WIN32'
 
     if qt_lib_path is None:
 
     if qt_lib_path is None:
-        qt_lib_path = os.path.join(frontend_env.subst('$QTDIR'), 'lib')
+        qt_lib_path = os.path.join(env.subst('$QTDIR'), 'lib')
     if qt_inc_path is None:
     if qt_inc_path is None:
-        qt_inc_path = os.path.join(frontend_env.subst('$QTDIR'), 'include')
+        qt_inc_path = os.path.join(env.subst('$QTDIR'), 'include')
 
 
 
 
-    conf = Configure(frontend_env,
+    conf = Configure(env,
         custom_tests = { 
             'CheckPackage' : utils.checkPackage,
             'CheckCommand' : utils.checkCommand,
         custom_tests = { 
             'CheckPackage' : utils.checkPackage,
             'CheckCommand' : utils.checkCommand,
@@ -1369,10 +1334,10 @@ if frontend == 'qt4':
 
     succ = False
     # first: try pkg_config
 
     succ = False
     # first: try pkg_config
-    if frontend_env['HAS_PKG_CONFIG']:
+    if env['HAS_PKG_CONFIG']:
         succ = conf.CheckPackage('QtCore') or conf.CheckPackage('QtCore4')
         # FIXME: use pkg_config information?
         succ = conf.CheckPackage('QtCore') or conf.CheckPackage('QtCore4')
         # FIXME: use pkg_config information?
-        #frontend_env['QT4_PKG_CONFIG'] = succ
+        #env['QT4_PKG_CONFIG'] = succ
     # second: try to link to it
     if not succ:
         # Under linux, I can test the following perfectly
     # second: try to link to it
     if not succ:
         # Under linux, I can test the following perfectly
@@ -1404,7 +1369,7 @@ if frontend == 'qt4':
         else:
             qt_lib_suffix = ''
             use_qt_debug_libs = False
         else:
             qt_lib_suffix = ''
             use_qt_debug_libs = False
-    frontend_env.EnableQt4Modules(qt_libs, debug = (mode == 'debug' and use_qt_debug_libs))
+    env.EnableQt4Modules(qt_libs, debug = (mode == 'debug' and use_qt_debug_libs))
     frontend_libs = [x + qt_lib_suffix for x in qt_libs]
     qtcore_lib = ['QtCore' + qt_lib_suffix]
 
     frontend_libs = [x + qt_lib_suffix for x in qt_libs]
     qtcore_lib = ['QtCore' + qt_lib_suffix]
 
@@ -1417,17 +1382,15 @@ if frontend == 'qt4':
     # NOTE: previously, lyx.exe had to be linked to some qt manifest to work.
     # For some unknown changes in msvc or qt, this is no longer needed.
     if use_vc:
     # NOTE: previously, lyx.exe had to be linked to some qt manifest to work.
     # For some unknown changes in msvc or qt, this is no longer needed.
     if use_vc:
-        frontend_env['LINKCOM'] = [frontend_env['LINKCOM'], \
+        env['LINKCOM'] = [env['LINKCOM'], \
             'mt.exe /MANIFEST %s /outputresource:$TARGET;1' % \
             env.File('$BUILDDIR/lyx.exe.manifest').path]
 
             'mt.exe /MANIFEST %s /outputresource:$TARGET;1' % \
             env.File('$BUILDDIR/lyx.exe.manifest').path]
 
-    frontend_env = conf.Finish()
+    env = conf.Finish()
 
 #
 # Report results
 #
 
 #
 # Report results
 #
-
-
 print env['VERSION_INFO']
 
 #
 print env['VERSION_INFO']
 
 #
@@ -1455,7 +1418,6 @@ if logfile != '' or platform_name == 'win32':
 Help(opts.GenerateHelpText(env))
 
 
 Help(opts.GenerateHelpText(env))
 
 
-
 #----------------------------------------------------------
 # Start building
 #----------------------------------------------------------
 #----------------------------------------------------------
 # Start building
 #----------------------------------------------------------
@@ -1465,8 +1427,9 @@ env.SConsignFile(os.path.join(Dir(env['BUILDDIR']).abspath, '.sconsign'))
 # this usage needs further investigation.
 #env.CacheDir('%s/Cache/%s' % (env['BUILDDIR'], frontend))
 env.BuildDir('$BUILDDIR/boost', '$TOP_SRCDIR/boost/libs', duplicate = 0)
 # this usage needs further investigation.
 #env.CacheDir('%s/Cache/%s' % (env['BUILDDIR'], frontend))
 env.BuildDir('$BUILDDIR/boost', '$TOP_SRCDIR/boost/libs', duplicate = 0)
+env.BuildDir('$BUILDDIR/intl', '$TOP_SRCDIR/intl', duplicate = 0)
+env.BuildDir('$BUILDDIR/src', '$TOP_SRCDIR/src', duplicate = 0)
 env.BuildDir('$BUILDDIR/src', '$TOP_SRCDIR/src', duplicate = 0)
 env.BuildDir('$BUILDDIR/src', '$TOP_SRCDIR/src', duplicate = 0)
-frontend_env.BuildDir('$BUILDDIR/src', '$TOP_SRCDIR/src', duplicate = 0)
 
 print "Building all targets recursively"
 
 
 print "Building all targets recursively"
 
@@ -1474,81 +1437,27 @@ def libExists(libname):
     ''' Check whether or not lib $LOCALLIBNAME/libname already exists'''
     return os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath)
 
     ''' Check whether or not lib $LOCALLIBNAME/libname already exists'''
     return os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath)
 
-def appExists(apppath, appname):
-    ''' Check whether or not application already exists'''
-    return os.path.isfile(File(env.subst('$BUILDDIR/src/%s/${PROGPREFIX}%s$PROGSUFFIX' % (apppath, appname))).abspath)
-
-targets = BUILD_TARGETS
-build_install = 'install' in targets or 'installer' in targets
-build_installer = 'installer' in targets
-# msvc need to pass full target name, so I have to look for path/lyx etc
-build_lyx = build_installer or targets == [] or True in ['lyx' in x for x in targets] \
-    or build_install or 'all' in targets
-build_boost = (included_boost and not libExists('boost_regex')) or 'boost' in targets
-build_intl = (included_gettext and not libExists('included_intl')) or 'intl' in targets
-build_support = build_lyx or True in [x in targets for x in ['support', '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 = True in ['client' in x for x in targets] \
-    or build_install or 'all' in targets or build_installer
-build_tex2lyx = True in ['tex2lyx' in x for x in targets] \
-    or build_install or 'all' in targets or build_installer
-build_lyxbase = build_lyx or 'lyxbase' in targets
-update_po = 'update_po' in targets
-update_manifest = 'update_manifest' in targets
-build_po = 'po' in targets or build_install or 'all' in targets
-build_qt4 = (build_lyx and frontend == 'qt4') or 'qt4' in targets
-build_msvs_projects = use_vc and 'msvs_projects' in targets
-
-
-# sync frontend and frontend (?)
-if build_qt4:
-    frontend = 'qt4'
-
-
-if build_boost:
-    #
-    # boost libraries
-    #
-    # special builddir
 
 
-    boostenv = env.Copy()
+if (included_boost and not libExists('included_boost_regex')) or 'boost' in BUILD_TARGETS:
+    #
+    # boost/libs
     #
     #
-    # boost use its own config.h
-    boostenv['CPPPATH'] = ['$BUILDDIR/boost'] + extra_inc_paths
-    boostenv['CCFLAGS'] = ['$INCPREFIX$TOP_SRCDIR/boost']
-    boostenv.AppendUnique(CCFLAGS = ['-DBOOST_USER_CONFIG="<config.h>"'])
-
     for lib in boost_libs:
     for lib in boost_libs:
-        print 'Processing files in boost/libs/%s/src...' % lib
-        boostlib = boostenv.StaticLibrary(
+        boostlib = env.StaticLibrary(
             target = '$LOCALLIBPATH/included_boost_%s' % lib,
             target = '$LOCALLIBPATH/included_boost_%s' % lib,
-            source = ['$BUILDDIR/boost/%s/src/%s' % (lib, x) for x in eval('boost_libs_%s_src_files' % lib)]
+            source = ['$BUILDDIR/boost/%s/src/%s' % (lib, x) for x in eval('boost_libs_%s_src_files' % lib)],
+            # do not use global CPPPATH because src/config.h will mess up with boost/config.h
+            CPPPATH = ['$BUILDDIR/boost'] + extra_inc_paths,
+            CCFLAGS = ['$CCFLAGS', '$INCPREFIX$TOP_SRCDIR/boost', '-DBOOST_USER_CONFIG="<config.h>"']
         )
         Alias('boost', boostlib)
 
 
         )
         Alias('boost', boostlib)
 
 
-if build_intl:
+if (included_gettext and not libExists('included_intl')) or 'intl' in BUILD_TARGETS:
     #
     # intl
     #
     #
     # intl
     #
-    intlenv = env.Copy()
-
-    print "Processing files in intl..."
-
-
-    # we need the original C compiler for these files
-    intlenv['CC'] = C_COMPILER
-    intlenv['CCFLAGS'] = C_CCFLAGS
-    if use_vc:
-        intlenv.Append(CCFLAGS=['/Dinline#', '/D__attribute__(x)#', '/Duintmax_t=UINT_MAX'])
-    # intl does not use global config.h
-    intlenv['CPPPATH'] = ['$BUILDDIR/intl'] + extra_inc_paths
-
-    intlenv.Append(CCFLAGS = [
+    INTL_CCFLAGS =  [
         r'-DLOCALEDIR=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"',
         r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"',
         r'-DLIBDIR=\"' + env['TOP_SRCDIR'].replace('\\', '\\\\') + r'/lib\"',
         r'-DLOCALEDIR=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"',
         r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"',
         r'-DLIBDIR=\"' + env['TOP_SRCDIR'].replace('\\', '\\\\') + r'/lib\"',
@@ -1562,271 +1471,137 @@ if build_intl:
         '-DDEPENDS_ON_LIBICONV=1',
         '-DHAVE_CONFIG_H'
         ]
         '-DDEPENDS_ON_LIBICONV=1',
         '-DHAVE_CONFIG_H'
         ]
-    )
+    if use_vc:
+        INTL_CCFLAGS.extend(['/Dinline#', '/D__attribute__(x)#', '/Duintmax_t=UINT_MAX'])
 
 
-    intl = intlenv.StaticLibrary(
+    intl = env.StaticLibrary(
         target = '$LOCALLIBPATH/included_intl',
         LIBS = ['c'],
         target = '$LOCALLIBPATH/included_intl',
         LIBS = ['c'],
+        CCFLAGS = INTL_CCFLAGS,
+        # do not use global CPPPATH because src/config.h will mess up with intl/config.h
+        CPPPATH =  ['$BUILDDIR/intl'] + extra_inc_paths,
         source = ['$BUILDDIR/intl/%s' % x for x in intl_files]
     )
     Alias('intl', intl)
 
         source = ['$BUILDDIR/intl/%s' % x for x in intl_files]
     )
     Alias('intl', intl)
 
-
 #
 #
-# Now, src code under src/
+# src/support
 #
 #
-
-
-if build_support:
-    #
-    # src/support
-    #
-    print "Processing files in src/support..."
-
-    frontend_env.Depends('$BUILDDIR/src/support/Package.cpp', '$BUILDDIR/src/config.h')
-    Package_cpp = env.substFile('$BUILDDIR/src/support/Package.cpp', '$TOP_SRCDIR/src/support/Package.cpp.in')
-
-    support = frontend_env.StaticLibrary(
-        target = '$LOCALLIBPATH/support',
-        source = ['$BUILDDIR/src/support/%s' % x for x in src_support_files] + Package_cpp + \
-            ['$BUILDDIR/src/support/minizip/%s' % x for x in src_support_minizip_files] + \
-            ['$BUILDDIR/src/support/minizip/%s' % x for x in src_support_minizip_windows_files if platform_name == 'win32'],
-        CCFLAGS =  [
-            '$CCFLAGS',
-            '-DHAVE_CONFIG_H',
-            '-DQT_CLEAN_NAMESPACE',
-            '-DQT_GENUINE_STR',
-            '-DQT_NO_STL',
-            '-DQT_NO_KEYWORDS',
-        ],
-        CPPPATH = ['$CPPPATH', '$TOP_SRCDIR/src/support/minizip']
-    )
-    Alias('support', support)
-
-
-if build_mathed:
-    #
-    # src/mathed
-    #
-    print "Processing files in src/mathed..."
-    #
-    mathed = env.StaticLibrary(
-        target = '$LOCALLIBPATH/mathed',
-        source = ['$BUILDDIR/src/mathed/%s' % x for x in src_mathed_files]
-    )
-    Alias('mathed', mathed)
-
-
-if build_insets:
-    #
-    # src/insets
-    #
-    print "Processing files in src/insets..."
-    #
-    insets = env.StaticLibrary(
-        target = '$LOCALLIBPATH/insets',
-        source = ['$BUILDDIR/src/insets/%s' % x for x in src_insets_files]
-    )
-    Alias('insets', insets)
-
-
-if build_frontends:
-    #
-    # src/frontends
-    #
-    print "Processing files in src/frontends..."
-
-    frontends = env.StaticLibrary(
-        target = '$LOCALLIBPATH/frontends',
-        source = ['$BUILDDIR/src/frontends/%s' % x for x in src_frontends_files]
-    )
-    Alias('frontends', frontends)
-
-
-if build_graphics:
-    #
-    # src/graphics
-    #
-    print "Processing files in src/graphics..."
-
-    graphics = env.StaticLibrary(
-        target = '$LOCALLIBPATH/graphics',
-        source = ['$BUILDDIR/src/graphics/%s' % x for x in src_graphics_files]
-    )
-    Alias('graphics', graphics)
-
-
-if build_controllers:
-    #
-    # src/frontends/controllers
-    #
-    print "Processing files in src/frontends/controllers..."
-
-    controllers = env.StaticLibrary(
-        target = '$LOCALLIBPATH/controllers',
-        source = ['$BUILDDIR/src/frontends/controllers/%s' % x for x in src_frontends_controllers_files]
-    )
-    Alias('controllers', controllers)
+env['QT4_MOCHPREFIX'] = 'moc_'
+env['QT4_MOCHSUFFIX'] = '.cpp'
+
+support_moced_files = [env.Moc4('$BUILDDIR/src/support/%s' % x)
+    for x in src_support_header_files ]
+support = env.StaticLibrary(
+    target = '$LOCALLIBPATH/support',
+    source = ['$BUILDDIR/src/support/%s' % x for x in src_support_files],
+    CCFLAGS =  [
+        '$CCFLAGS',
+        '-DHAVE_CONFIG_H',
+        '-DQT_NO_STL',
+        '-DQT_NO_KEYWORDS',
+    ],
+    CPPPATH = ['$CPPPATH', '$BUILDDIR/src/support']
+)
+Alias('support', support)
 
 #
 
 #
-# src/frontend/qt4
-#
-if build_qt4:
-
-    print "Processing files in src/frontends/qt4..."
-    frontend_env['QT4_MOCHPREFIX'] = ''
-    frontend_env['QT4_MOCHSUFFIX'] = '_moc.cpp'
-
-    # tells scons how to get these moced files, although not all moced files are needed
-    # (or are actually generated).
-    qt4_moced_files = [frontend_env.Moc4('$BUILDDIR/src/frontends/qt4/%s' % x)
-        for x in src_frontends_qt4_header_files ]
-    resources = [frontend_env.Uic4('$BUILDDIR/src/frontends/qt4/ui/%s' % x.split('.')[0])
-        for x in src_frontends_qt4_ui_files]
-
-    #
-    # moc qt4_moc_files, the moced files are included in the original files
-    #
-    qt4 = frontend_env.StaticLibrary(
-        target = '$LOCALLIBPATH/qt4',
-        source = ['$BUILDDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_files],
-        CPPPATH = [
-            '$CPPPATH',
-            '$BUILDDIR/src',
-            '$BUILDDIR/src/images',
-            '$BUILDDIR/src/frontends',
-            '$BUILDDIR/src/frontends/qt4',
-            '$BUILDDIR/src/frontends/qt4/ui',
-            '$BUILDDIR/src/frontends/controllers'
-        ],
-        CCFLAGS =  [
-            '$CCFLAGS',
-            '-DHAVE_CONFIG_H',
-            '-DQT_CLEAN_NAMESPACE',
-            '-DQT_GENUINE_STR',
-            '-DQT_NO_STL',
-            '-DQT_NO_KEYWORDS',
-        ]
+if env['HAVE_FCNTL']:
+    client = env.Program(
+        target = '$BUILDDIR/src/client/lyxclient',
+        LIBS = ['support'] + intl_libs + system_libs +
+            socket_libs + boost_libraries + qtcore_lib,
+        source = ['$BUILDDIR/src/client/%s' % x for x in src_client_files] + \
+            utils.createResFromIcon(env, 'lyx.ico', '$LOCALLIBPATH/client.rc')
     )
     )
-    Alias('qt4', qt4)
-
-
-if build_client:
-    #
-    # src/client
-    #
-
-    print "Processing files in src/client..."
-
-    if env['HAVE_FCNTL']:
-        client = frontend_env.Program(
-            target = '$BUILDDIR/src/client/lyxclient',
-            LIBS = ['support'] + intl_libs + system_libs +
-                socket_libs + boost_libraries + qtcore_lib,
-            source = ['$BUILDDIR/src/client/%s' % x for x in src_client_files] + \
-                utils.createResFromIcon(frontend_env, 'lyx_32x32.ico', '$LOCALLIBPATH/client.rc')
-        )
-        Alias('client', frontend_env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]),
-            client, [Copy('$TARGET', '$SOURCE')]))
-    else:
-        client = None
-    Alias('client', client)
+    Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]),
+        client, [Copy('$TARGET', '$SOURCE')]))
 else:
 else:
-    if env['HAVE_FCNTL']:
-        # define client even if lyxclient is not built with rebuild=no
-        client = [env.subst('$BUILDDIR/src/client/${PROGPREFIX}lyxclient$PROGSUFFIX')]
-    else:
-        client = None
-
+    client = None
+Alias('client', client)
 
 
-if build_tex2lyx:
-    #
-    # tex2lyx
-    #
-    print "Processing files in src/tex2lyx..."
-
-    #
-    for file in src_tex2lyx_copied_files + src_tex2lyx_copied_header_files:
-        frontend_env.Command('$BUILDDIR/src/tex2lyx/'+file, '$TOP_SRCDIR/src/'+file,
-            [Copy('$TARGET', '$SOURCE')])
-
-    tex2lyx = frontend_env.Program(
-        target = '$BUILDDIR/src/tex2lyx/tex2lyx',
-        LIBS = ['support'] + boost_libraries + intl_libs + system_libs + qtcore_lib,
-        source = ['$BUILDDIR/src/tex2lyx/%s' % x for x in src_tex2lyx_files + src_tex2lyx_copied_files] + \
-            utils.createResFromIcon(frontend_env, 'lyx_32x32.ico', '$LOCALLIBPATH/tex2lyx.rc'),
-        CPPPATH = ['$BUILDDIR/src/tex2lyx', '$CPPPATH'],
-        LIBPATH = ['#$LOCALLIBPATH', '$LIBPATH'],
-    )
-    Alias('tex2lyx', frontend_env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
-        tex2lyx, [Copy('$TARGET', '$SOURCE')]))
-    Alias('tex2lyx', tex2lyx)
-else:
-    # define tex2lyx even if tex2lyx is not built with rebuild=no
-    tex2lyx = [frontend_env.subst('$BUILDDIR/src/tex2lyx/${PROGPREFIX}tex2lyx$PROGSUFFIX')]
 
 
+#
+# tex2lyx
+#
+for file in src_tex2lyx_copied_files + src_tex2lyx_copied_header_files:
+    env.Command('$BUILDDIR/src/tex2lyx/'+file, '$TOP_SRCDIR/src/'+file,
+        [Copy('$TARGET', '$SOURCE')])
 
 
-if build_lyxbase:
-    #
-    # src/
-    #
-    print "Processing files in src..."
-
-    if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
-        src_post_files.append('ASpell.cpp')
-    elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
-        src_post_files.append('PSpell.cpp')
-    elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
-        src_post_files.append('ISpell.cpp')
-
-    # msvc requires at least one source file with main()
-    # so I exclude main.cpp from lyxbase
-    lyxbase_pre = env.StaticLibrary(
-        target = '$LOCALLIBPATH/lyxbase_pre',
-        source = ['$BUILDDIR/src/%s' % x for x in src_pre_files]
-    )
-    lyxbase_post = env.StaticLibrary(
-        target = '$LOCALLIBPATH/lyxbase_post',
-        source = ["$BUILDDIR/src/%s" % x for x in src_post_files]
-    )
-    Alias('lyxbase', lyxbase_pre)
-    Alias('lyxbase', lyxbase_post)
+tex2lyx = env.Program(
+    target = '$BUILDDIR/src/tex2lyx/tex2lyx',
+    LIBS = ['support'] + boost_libraries + intl_libs + system_libs + qtcore_lib,
+    source = ['$BUILDDIR/src/tex2lyx/%s' % x for x in src_tex2lyx_files + src_tex2lyx_copied_files] + \
+        utils.createResFromIcon(env, 'lyx.ico', '$LOCALLIBPATH/tex2lyx.rc'),
+    CPPPATH = ['$BUILDDIR/src/tex2lyx', '$BUILDDIR/src', '$CPPPATH'],
+    LIBPATH = ['#$LOCALLIBPATH', '$LIBPATH'],
+    CCFLAGS = ['$CCFLAGS', '-DTEX2LYX'],
+)
+Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
+    tex2lyx, [Copy('$TARGET', '$SOURCE')]))
+Alias('tex2lyx', tex2lyx)
 
 
 
 
-if build_lyx:
-    #
-    # Build lyx with given frontend
-    #
-    lyx = frontend_env.Program(
-        target = '$BUILDDIR/lyx',
-        source = ['$BUILDDIR/src/main.cpp'] + \
-            utils.createResFromIcon(frontend_env, 'lyx_32x32.ico', '$LOCALLIBPATH/lyx.rc'),
-        LIBS = [
-            'lyxbase_pre',
-            'mathed',
-            'insets',
-            'frontends',
-            frontend,
-            'controllers',
-            'graphics',
-            'support',
-            'lyxbase_post',
-            ] +
-            boost_libraries +
-            frontend_libs +
-            intl_libs +
-            socket_libs +
-            system_libs
-    )
-    Alias('lyx', lyx)
-else:
-    # define lyx even if lyx is not built with rebuild=no
-    lyx = [frontend_env.subst('$BUILDDIR/${PROGPREFIX}lyx$PROGSUFFIX')]
+#
+# Build lyx with given frontend
+#
+if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
+    src_post_files.append('AspellChecker.cpp')
+
+# tells scons how to get these moced files, although not all moced files are needed
+# (or are actually generated).
+qt4_moced_files = [env.Moc4('$BUILDDIR/src/frontends/qt4/%s' % x)
+    for x in src_frontends_qt4_header_files ]
+src_moced_files = [env.Moc4('$BUILDDIR/src/%s' % x)
+    for x in src_header_files ]
+ui_files = [env.Uic4('$BUILDDIR/src/frontends/qt4/ui/%s' % x.split('.')[0])
+    for x in src_frontends_qt4_ui_files]
+resource = env.Qrc(env.qtResource(
+    '$BUILDDIR/src/frontends/qt4/Resource.qrc',
+    ['$TOP_SRCDIR/lib/images/%s' % x for x in lib_images_files] +
+    ['$TOP_SRCDIR/lib/images/math/%s' % x for x in lib_images_math_files] +
+    ['$TOP_SRCDIR/lib/images/commands/%s' % x for x in lib_images_commands_files]))
+
+lyx = env.Program(
+    target = '$BUILDDIR/lyx',
+    source = ['$BUILDDIR/src/main.cpp'] +
+       ['$BUILDDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_files] +
+       resource +
+       ['$BUILDDIR/src/graphics/%s' % x for x in src_graphics_files] +
+       ['$BUILDDIR/src/mathed/%s' % x for x in src_mathed_files] +
+       ['$BUILDDIR/src/insets/%s' % x for x in src_insets_files] +
+       ['$BUILDDIR/src/frontends/%s' % x for x in src_frontends_files] +
+       ['$BUILDDIR/src/%s' % x for x in src_pre_files] +
+       ["$BUILDDIR/src/%s" % x for x in src_post_files] +
+        utils.createResFromIcon(env, 'lyx.ico', '$LOCALLIBPATH/lyx.rc'),
+    CPPPATH = [
+        '$CPPPATH',
+        '$BUILDDIR/src',
+        '$BUILDDIR/src/images',
+        '$BUILDDIR/src/frontends',
+        '$BUILDDIR/src/frontends/qt4',
+        '$BUILDDIR/src/frontends/qt4/ui',
+    ],
+    CCFLAGS =  [
+        '$CCFLAGS',
+        '-DHAVE_CONFIG_H',
+        '-DQT_NO_STL',
+        '-DQT_NO_KEYWORDS',
+    ],
+    LIBS = [
+        'support',
+        ] +
+        boost_libraries + 
+        frontend_libs +
+        intl_libs +
+        socket_libs +
+        system_libs
+)
+Alias('lyx', lyx)
 
 
 
 
-if build_msvs_projects:
-    def build_project(target, full_target = None,
-        src = [], inc = [], res = []):
+if use_vc and 'msvs_projects' in BUILD_TARGETS:
+    def build_project(target, full_target = None, src = [], inc = [], res = []):
         ''' build mavs project files
             target:      alias (correspond to directory name)
             full_target: full path/filename of the target
         ''' build mavs project files
             target:      alias (correspond to directory name)
             full_target: full path/filename of the target
@@ -1838,11 +1613,6 @@ if build_msvs_projects:
         enough to build the target. For executable targets, msvs need to know
         the full path to start debug them.
         '''
         enough to build the target. For executable targets, msvs need to know
         the full path to start debug them.
         '''
-        cmds = ''
-        if full_target is None:
-            build_target = target
-        else:
-            build_target = full_target
         # project
         proj = env.MSVSProject(
             target = target + env['MSVSPROJECTSUFFIX'],
         # project
         proj = env.MSVSProject(
             target = target + env['MSVSPROJECTSUFFIX'],
@@ -1851,8 +1621,7 @@ if build_msvs_projects:
             incs = [env.subst('$TOP_SRCDIR/src/config.h')],
             localincs = [env.subst(x) for x in inc],
             resources = [env.subst(x) for x in res],
             incs = [env.subst('$TOP_SRCDIR/src/config.h')],
             localincs = [env.subst(x) for x in inc],
             resources = [env.subst(x) for x in res],
-            buildtarget = build_target,
-            cmdargs = cmds,
+            buildtarget = full_target,
             variant = 'Debug'
         )
         Alias('msvs_projects', proj)
             variant = 'Debug'
         )
         Alias('msvs_projects', proj)
@@ -1872,88 +1641,19 @@ if build_msvs_projects:
             ['$TOP_SRCDIR/src/insets/%s' % x for x in src_insets_files] + \
             ['$TOP_SRCDIR/src/frontends/%s' % x for x in src_frontends_files] + \
             ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_files] + \
             ['$TOP_SRCDIR/src/insets/%s' % x for x in src_insets_files] + \
             ['$TOP_SRCDIR/src/frontends/%s' % x for x in src_frontends_files] + \
             ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_files] + \
-            ['$TOP_SRCDIR/src/frontends/controllers/%s' % x for x in src_frontends_controllers_files] + \
-            ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_files + src_frontends_qt4_moc_files],
+            ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_files],
         inc = ['$TOP_SRCDIR/src/%s' % x for x in src_header_files] + \
             ['$TOP_SRCDIR/src/support/%s' % x for x in src_support_header_files] + \
             ['$TOP_SRCDIR/src/mathed/%s' % x for x in src_mathed_header_files] + \
             ['$TOP_SRCDIR/src/insets/%s' % x for x in src_insets_header_files] + \
             ['$TOP_SRCDIR/src/frontends/%s' % x for x in src_frontends_header_files] + \
             ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_header_files] + \
         inc = ['$TOP_SRCDIR/src/%s' % x for x in src_header_files] + \
             ['$TOP_SRCDIR/src/support/%s' % x for x in src_support_header_files] + \
             ['$TOP_SRCDIR/src/mathed/%s' % x for x in src_mathed_header_files] + \
             ['$TOP_SRCDIR/src/insets/%s' % x for x in src_insets_header_files] + \
             ['$TOP_SRCDIR/src/frontends/%s' % x for x in src_frontends_header_files] + \
             ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_header_files] + \
-            ['$TOP_SRCDIR/src/frontends/controllers/%s' % x for x in src_frontends_controllers_header_files] + \
             ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_header_files],
         res = ['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files],
         full_target = File(env.subst('$BUILDDIR/lyx$PROGSUFFIX')).abspath)
 
 
             ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_header_files],
         res = ['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files],
         full_target = File(env.subst('$BUILDDIR/lyx$PROGSUFFIX')).abspath)
 
 
-if update_manifest:
-    #
-    # update scons_manifest.py
-    #
-    # When you run 'scons update_manifest', it tells you which files are missing
-    # and which files are not in the source tree. It also generates a 
-    # scons_manifest.py.new file with all the missing files added to 
-    # XXX_extra_files. It will *not* change other sections of existing
-    # manifest.py
-    #
-    print 'Validating development/scons/scons_manifest.py...'
-    #
-    manifest = open(env.File('$TOP_SRCDIR/development/scons/scons_manifest.py.new').abspath, 'w')
-    print >> manifest, 'from SCons.Util import Split\n'
-    #
-    ignore_dirs = ['boost/boost', 'm4', 'development', 
-        utils.relativePath(env.Dir('$BUILDDIR').abspath, env.Dir('$TOP_SRCDIR').abspath)]
-    ignore_types = ['.svn', '.deps', '.cache', '.tmp', '.bak', '.gmo', '.pot',
-        '.pyc', '.pyo', '.o', '_moc.cpp', 'Makefile.in', 'config.h.in',
-        'LaTeXConfig.lyx', 'version.cpp', 'Package.cpp']
-    ext_types = ['_header_files', '_files', '_pre_files', '_post_files', '_moc_files', '_inc_files',
-        '_copied_files', '_copied_header_files', '_extra_header_files', '_extra_src_files', '_extra_files']
-    for root,path,files in os.walk(env.Dir('$TOP_SRCDIR').abspath):
-        if os.path.split(root)[-1][0] == '.' \
-            or True in [x in root for x in ignore_types] \
-            or True in [utils.isSubDir(root, x) for x in ignore_dirs]:
-            continue
-        dirname = utils.relativePath(root, env.subst('$TOP_SRCDIR')).replace(os.sep, '_')
-        if dirname == '':
-            dirname = 'TOP'
-        # files in the current manifest.py
-        cur_files = []
-        for ext in ext_types:
-            if 'copied' not in ext and dirname + ext in locals():
-                cur_files.extend(eval(dirname + ext))
-        cur_files.sort()
-        # compare files with cur_files
-        files = [x for x in files if x[0] != '.' and True not in [len(x) >= len(y) and x[-len(y):] == y for y in ignore_types]]
-        files.sort()
-        if cur_files != files:
-            missing = []
-            for f in files:
-                if f not in cur_files:
-                    missing.append(f)
-            extra = []
-            for f in cur_files:
-                if f not in files:
-                    extra.append(f)
-            if len(missing) > 0:
-                print 'Missing: %s in %s' % (', '.join(missing), root)
-                if dirname + '_extra_files' in locals():
-                    exec('%s_extra_files.extend(missing)' % dirname)
-                else:
-                    exec('%s_extra_files = missing' % dirname)
-            if len(extra) > 0:
-                print 'Extra: %s in %s' % (', '.join(extra), root)
-        # write to a new manifest file
-        for ext in ext_types:
-            if dirname + ext in locals():
-                exec('%s%s.sort()' % (dirname, ext))
-                print >> manifest, "%s%s = Split('''\n   " % (dirname, ext),
-                print >> manifest, eval(r"'\n    '.join(%s%s)" % (dirname, ext))
-                print >> manifest, "''')\n\n"
-    manifest.close()
-    Alias('update_manifest', None)
-
-
-if update_po:
+if 'update_po' in BUILD_TARGETS:
     #
     # update po files
     #
     #
     # update po files
     #
@@ -1973,13 +1673,12 @@ if update_po:
         ['$TOP_SRCDIR/src/insets/%s' % x for x in  src_insets_header_files + src_insets_files] + \
         ['$TOP_SRCDIR/src/frontends/%s' % x for x in  src_frontends_header_files + src_frontends_files] + \
         ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_header_files + src_graphics_files] + \
         ['$TOP_SRCDIR/src/insets/%s' % x for x in  src_insets_header_files + src_insets_files] + \
         ['$TOP_SRCDIR/src/frontends/%s' % x for x in  src_frontends_header_files + src_frontends_files] + \
         ['$TOP_SRCDIR/src/graphics/%s' % x for x in src_graphics_header_files + src_graphics_files] + \
-        ['$TOP_SRCDIR/src/frontends/controllers/%s' % x for x in src_frontends_controllers_header_files + src_frontends_controllers_files] + \
-        ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_header_files + src_frontends_qt4_files + src_frontends_qt4_moc_files] + \
+        ['$TOP_SRCDIR/src/frontends/qt4/%s' % x for x in src_frontends_qt4_header_files + src_frontends_qt4_files] + \
         ['$TOP_SRCDIR/src/client/%s' % x for x in src_client_header_files + src_client_files ]  + \
         ['$TOP_SRCDIR/src/tex2lyx/%s' % x for x in src_tex2lyx_header_files + src_tex2lyx_files ]
     )
     Alias('update_po', POTFILES_in)
         ['$TOP_SRCDIR/src/client/%s' % x for x in src_client_header_files + src_client_files ]  + \
         ['$TOP_SRCDIR/src/tex2lyx/%s' % x for x in src_tex2lyx_header_files + src_tex2lyx_files ]
     )
     Alias('update_po', POTFILES_in)
-    # build language_l10n.pot, ui_l10n.pot, layouts_l10n.pot, qt4_l10n.pot, external_l10n
+    # build language_l10n.pot, encodings_10n.pot, ui_l10n.pot, layouts_l10n.pot, qt4_l10n.pot, external_l10n, formats_l10n
     # and combine them to lyx.po
     env['LYX_POT'] = 'python $TOP_SRCDIR/po/lyx_pot.py'
     lyx_po = env.Command('$BUILDDIR/po/lyx.po',
     # and combine them to lyx.po
     env['LYX_POT'] = 'python $TOP_SRCDIR/po/lyx_pot.py'
     lyx_po = env.Command('$BUILDDIR/po/lyx.po',
@@ -1988,15 +1687,19 @@ if update_po:
                 ['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files],
                 '$LYX_POT -b $TOP_SRCDIR -t qt4 -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/layouts_l10n.pot', 
                 ['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files],
                 '$LYX_POT -b $TOP_SRCDIR -t qt4 -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/layouts_l10n.pot', 
-                ['$TOP_SRCDIR/lib/layouts/%s' % x for x in lib_layouts_files + lib_layouts_inc_files],
+                ['$TOP_SRCDIR/lib/layouts/%s' % x for x in lib_layouts_files + lib_layouts_inc_files + lib_layouts_module_files],
                 '$LYX_POT -b $TOP_SRCDIR -t layouts -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/languages_l10n.pot', '$TOP_SRCDIR/lib/languages',
                 '$LYX_POT -b $TOP_SRCDIR -t languages -o $TARGET $SOURCES'),
                 '$LYX_POT -b $TOP_SRCDIR -t layouts -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/languages_l10n.pot', '$TOP_SRCDIR/lib/languages',
                 '$LYX_POT -b $TOP_SRCDIR -t languages -o $TARGET $SOURCES'),
+             env.Command('$BUILDDIR/po/encodings_l10n.pot', '$TOP_SRCDIR/lib/encodings',
+                '$LYX_POT -b $TOP_SRCDIR -t encodings -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/ui_l10n.pot', 
                 ['$TOP_SRCDIR/lib/ui/%s' % x for x in lib_ui_files],
                 '$LYX_POT -b $TOP_SRCDIR -t ui -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/external_l10n.pot', '$TOP_SRCDIR/lib/external_templates',
                 '$LYX_POT -b $TOP_SRCDIR -t external -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/ui_l10n.pot', 
                 ['$TOP_SRCDIR/lib/ui/%s' % x for x in lib_ui_files],
                 '$LYX_POT -b $TOP_SRCDIR -t ui -o $TARGET $SOURCES'),
              env.Command('$BUILDDIR/po/external_l10n.pot', '$TOP_SRCDIR/lib/external_templates',
                 '$LYX_POT -b $TOP_SRCDIR -t external -o $TARGET $SOURCES'),
+             env.Command('$BUILDDIR/po/formats_l10n.pot', '$TOP_SRCDIR/lib/configure.py',
+                '$LYX_POT -b $TOP_SRCDIR -t formats -o $TARGET $SOURCES'),
              ], utils.env_cat),
             ['$MSGUNIQ -o $TARGET $SOURCE',
              '''$XGETTEXT --default-domain=${TARGET.base} \
              ], utils.env_cat),
             ['$MSGUNIQ -o $TARGET $SOURCE',
              '''$XGETTEXT --default-domain=${TARGET.base} \
@@ -2041,12 +1744,16 @@ if update_po:
             Alias('update_po', po)
 
 
             Alias('update_po', po)
 
 
-if build_po:
+# if 'install' is not in the target, do not process this
+if 'install' in BUILD_TARGETS or 'installer' in BUILD_TARGETS:
+    #
+    # this part is a bit messy right now. Since scons will provide
+    # --DESTDIR option soon, at least the dest_dir handling can be 
+    # removed later.
+    #
     #
     # po/
     #
     #
     # po/
     #
-    print 'Processing files in po...'
-
     import glob
     # handle po files
     #
     import glob
     # handle po files
     #
@@ -2072,14 +1779,6 @@ if build_po:
             #
             if not languages or country in languages:
                 gmo_files.extend(env.Transfiles(f))
             #
             if not languages or country in languages:
                 gmo_files.extend(env.Transfiles(f))
-
-
-if build_install:
-    #
-    # this part is a bit messy right now. Since scons will provide
-    # --DESTDIR option soon, at least the dest_dir handling can be 
-    # removed later.
-    #
     # how to join dest_dir and prefix
     def joinPaths(path1, path2):
         ''' join path1 and path2, do not use os.path.join because
     # how to join dest_dir and prefix
     def joinPaths(path1, path2):
         ''' join path1 and path2, do not use os.path.join because
@@ -2151,9 +1850,11 @@ if build_install:
             ('bind/fi', lib_bind_fi_files),
             ('bind/pt', lib_bind_pt_files),
             ('bind/sv', lib_bind_sv_files),
             ('bind/fi', lib_bind_fi_files),
             ('bind/pt', lib_bind_pt_files),
             ('bind/sv', lib_bind_sv_files),
+            ('commands', lib_commands_files),
             ('doc', lib_doc_files),
             ('doc/biblio', lib_doc_biblio_files),
             ('doc/clipart', lib_doc_clipart_files),
             ('doc', lib_doc_files),
             ('doc/biblio', lib_doc_biblio_files),
             ('doc/clipart', lib_doc_clipart_files),
+            ('doc/ca', lib_doc_ca_files),
             ('doc/cs', lib_doc_cs_files),
             ('doc/da', lib_doc_da_files),
             ('doc/de', lib_doc_de_files),
             ('doc/cs', lib_doc_cs_files),
             ('doc/da', lib_doc_da_files),
             ('doc/de', lib_doc_de_files),
@@ -2162,9 +1863,16 @@ if build_install:
             ('doc/es/clipart', lib_doc_es_clipart_files),
             ('doc/eu', lib_doc_eu_files),
             ('doc/fr', lib_doc_fr_files),
             ('doc/es/clipart', lib_doc_es_clipart_files),
             ('doc/eu', lib_doc_eu_files),
             ('doc/fr', lib_doc_fr_files),
+            ('doc/fr/clipart', lib_doc_fr_clipart_files),
+            ('doc/gl', lib_doc_gl_files),
             ('doc/he', lib_doc_he_files),
             ('doc/hu', lib_doc_hu_files),
             ('doc/he', lib_doc_he_files),
             ('doc/hu', lib_doc_hu_files),
+            ('doc/id', lib_doc_id_files),
+            ('doc/id/clipart', lib_doc_id_clipart_files),
             ('doc/it', lib_doc_it_files),
             ('doc/it', lib_doc_it_files),
+            ('doc/it/clipart', lib_doc_it_clipart_files),
+            ('doc/ja', lib_doc_ja_files),
+            ('doc/ja/clipart', lib_doc_ja_clipart_files),
             ('doc/nl', lib_doc_nl_files),
             ('doc/nb', lib_doc_nb_files),
             ('doc/pl', lib_doc_pl_files),
             ('doc/nl', lib_doc_nl_files),
             ('doc/nb', lib_doc_nb_files),
             ('doc/pl', lib_doc_pl_files),
@@ -2174,6 +1882,9 @@ if build_install:
             ('doc/sk', lib_doc_sk_files),
             ('doc/sl', lib_doc_sl_files),
             ('doc/sv', lib_doc_sv_files),
             ('doc/sk', lib_doc_sk_files),
             ('doc/sl', lib_doc_sl_files),
             ('doc/sv', lib_doc_sv_files),
+            ('doc/uk', lib_doc_uk_files),
+            ('doc/uk/clipart', lib_doc_uk_clipart_files),
+            ('doc/zh_CN', lib_doc_zhCN_files),
             ('examples', lib_examples_files),
             ('examples/ca', lib_examples_ca_files),
             ('examples/cs', lib_examples_cs_files),
             ('examples', lib_examples_files),
             ('examples/ca', lib_examples_ca_files),
             ('examples/cs', lib_examples_cs_files),
@@ -2183,20 +1894,26 @@ if build_install:
             ('examples/eu', lib_examples_eu_files),
             ('examples/fa', lib_examples_fa_files),
             ('examples/fr', lib_examples_fr_files),
             ('examples/eu', lib_examples_eu_files),
             ('examples/fa', lib_examples_fa_files),
             ('examples/fr', lib_examples_fr_files),
+            ('examples/gl', lib_examples_gl_files),
             ('examples/he', lib_examples_he_files),
             ('examples/hu', lib_examples_hu_files),
             ('examples/he', lib_examples_he_files),
             ('examples/hu', lib_examples_hu_files),
+            ('examples/id', lib_examples_id_files),
             ('examples/it', lib_examples_it_files),
             ('examples/it', lib_examples_it_files),
+            ('examples/ja', lib_examples_ja_files),
             ('examples/nl', lib_examples_nl_files),
             ('examples/pl', lib_examples_pl_files),
             ('examples/pt', lib_examples_pt_files),
             ('examples/nl', lib_examples_nl_files),
             ('examples/pl', lib_examples_pl_files),
             ('examples/pt', lib_examples_pt_files),
+            ('examples/ro', lib_examples_ro_files),
             ('examples/ru', lib_examples_ru_files),
             ('examples/ru', lib_examples_ru_files),
+            ('examples/sk', lib_examples_sk_files),
             ('examples/sl', lib_examples_sl_files),
             ('examples/sl', lib_examples_sl_files),
-            ('examples/ro', lib_examples_ro_files),
+            ('examples/uk', lib_examples_uk_files),
             ('fonts', lib_fonts_files),
             ('images', lib_images_files),
             ('images/math', lib_images_math_files),
             ('fonts', lib_fonts_files),
             ('images', lib_images_files),
             ('images/math', lib_images_math_files),
+            ('images/commands', lib_images_commands_files),
             ('kbd', lib_kbd_files),
             ('kbd', lib_kbd_files),
-            ('layouts', lib_layouts_files + lib_layouts_inc_files),
+            ('layouts', lib_layouts_files + lib_layouts_inc_files + lib_layouts_module_files),
             ('lyx2lyx', lib_lyx2lyx_files),
             ('scripts', lib_scripts_files),
             ('templates', lib_templates_files),
             ('lyx2lyx', lib_lyx2lyx_files),
             ('scripts', lib_scripts_files),
             ('templates', lib_templates_files),
@@ -2213,24 +1930,6 @@ if build_install:
     Alias('install', share_dest_dir + '/lyx2lyx/lyx2lyx_version.py')
     sys.path.append(share_dest_dir + '/lyx2lyx')
     
     Alias('install', share_dest_dir + '/lyx2lyx/lyx2lyx_version.py')
     sys.path.append(share_dest_dir + '/lyx2lyx')
     
-    # generate TOC files for each doc
-    languages = depend.all_documents(env.Dir('$TOP_SRCDIR/lib/doc').abspath)
-    tocs = []
-    for lang in languages.keys():
-        if os.path.isdir(os.path.join(env.Dir('$TOP_SRCDIR/lib/doc').abspath, lang)):
-            toc = env.installTOC(os.path.join(share_dest_dir, 'doc', lang, 'TOC.lyx'),
-                languages[lang])
-            tocs.append(toc)
-            # doc_toc.build_toc needs a installed version of lyx2lyx to execute
-            env.Depends(toc, share_dest_dir + '/lyx2lyx/lyx2lyx_version.py')
-        else:
-            # this is for English
-            toc = env.installTOC(os.path.join(share_dest_dir, 'doc', 'TOC.lyx'),
-                languages[lang])
-            tocs.append(toc)
-            env.Depends(toc, share_dest_dir + '/lyx2lyx/lyx2lyx_version.py')
-    Alias('install', tocs)
-    
     if platform_name == 'cygwin':
         # cygwin packaging requires a file /usr/share/doc/Cygwin/foot-vendor-suffix.README
         Cygwin_README = os.path.join(dest_prefix_dir, 'share', 'doc', 'Cygwin', 
     if platform_name == 'cygwin':
         # cygwin packaging requires a file /usr/share/doc/Cygwin/foot-vendor-suffix.README
         Cygwin_README = os.path.join(dest_prefix_dir, 'share', 'doc', 'Cygwin', 
@@ -2254,15 +1953,13 @@ if build_install:
         postinstall_path = os.path.join(dest_dir, 'etc', 'postinstall')
         env.Install(postinstall_path, tmp_script)
         Alias('install', postinstall_path)
         postinstall_path = os.path.join(dest_dir, 'etc', 'postinstall')
         env.Install(postinstall_path, tmp_script)
         Alias('install', postinstall_path)
-
-
     # man
     env.InstallAs(os.path.join(man_dest_dir, 'lyx' + version_suffix + '.1'),
     # man
     env.InstallAs(os.path.join(man_dest_dir, 'lyx' + version_suffix + '.1'),
-        env.subst('$TOP_SRCDIR/lyx.man'))
+        env.subst('$TOP_SRCDIR/lyx.1in'))
     env.InstallAs(os.path.join(man_dest_dir, 'tex2lyx' + version_suffix + '.1'),
     env.InstallAs(os.path.join(man_dest_dir, 'tex2lyx' + version_suffix + '.1'),
-        env.subst('$TOP_SRCDIR/src/tex2lyx/tex2lyx.man'))
+        env.subst('$TOP_SRCDIR/src/tex2lyx/tex2lyx.1in'))
     env.InstallAs(os.path.join(man_dest_dir, 'lyxclient' + version_suffix + '.1'),
     env.InstallAs(os.path.join(man_dest_dir, 'lyxclient' + version_suffix + '.1'),
-        env.subst('$TOP_SRCDIR/src/client/lyxclient.man'))
+        env.subst('$TOP_SRCDIR/src/client/lyxclient.1in'))
     Alias('install', [os.path.join(man_dest_dir, x + version_suffix + '.1') for
         x in ['lyx', 'tex2lyx', 'lyxclient']])
     # locale files?
     Alias('install', [os.path.join(man_dest_dir, x + version_suffix + '.1') for
         x in ['lyx', 'tex2lyx', 'lyxclient']])
     # locale files?
@@ -2274,7 +1971,7 @@ if build_install:
         Alias('install', dest_file)
 
 
         Alias('install', dest_file)
 
 
-if build_installer:
+if 'installer' in BUILD_TARGETS:
     #
     # build windows installer using NSIS
     #
     #
     # build windows installer using NSIS
     #
@@ -2293,16 +1990,16 @@ if build_installer:
         Exit(1)
     installer_files = ['$TOP_SRCDIR/development/Win32/packaging/installer/%s' \
             % x for x in development_Win32_packaging_installer] + \
         Exit(1)
     installer_files = ['$TOP_SRCDIR/development/Win32/packaging/installer/%s' \
             % x for x in development_Win32_packaging_installer] + \
-        ['$TOP_SRCDIR/development/Win32/packaging/installer/components/%s' \
-            % x for x in development_Win32_packaging_installer_components] + \
-        ['$TOP_SRCDIR/development/Win32/packaging/installer/dialogs/%s' \
-            % x for x in development_Win32_packaging_installer_dialogs] + \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/graphics/%s' \
             % x for x in development_Win32_packaging_installer_graphics] + \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/graphics/%s' \
             % x for x in development_Win32_packaging_installer_graphics] + \
+        ['$TOP_SRCDIR/development/Win32/packaging/installer/gui/%s' \
+            % x for x in development_Win32_packaging_installer_gui] + \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/include/%s' \
             % x for x in development_Win32_packaging_installer_include] + \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/lang/%s' \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/include/%s' \
             % x for x in development_Win32_packaging_installer_include] + \
         ['$TOP_SRCDIR/development/Win32/packaging/installer/lang/%s' \
-            % x for x in development_Win32_packaging_installer_lang]
+            % x for x in development_Win32_packaging_installer_lang] + \
+        ['$TOP_SRCDIR/development/Win32/packaging/installer/setup/%s' \
+            % x for x in development_Win32_packaging_installer_setup]
     if env.has_key('NSIS') and env['NSIS'] is not None:
         # create a builder to strip and install
         env['BUILDERS']['installer'] = Builder(generator=utils.env_nsis)
     if env.has_key('NSIS') and env['NSIS'] is not None:
         # create a builder to strip and install
         env['BUILDERS']['installer'] = Builder(generator=utils.env_nsis)