From a5a508bdaadf5246f87d594fc2588d1a58217807 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 27 Jun 2006 21:08:54 +0000 Subject: [PATCH] Change the indent level of python code from two to four git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14250 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/scons/SConstruct | 3327 +++++++++++++++--------------- development/scons/scons_utils.py | 646 +++--- lib/configure.py | 1110 +++++----- lib/scripts/TeXFiles.py | 113 +- lib/scripts/convertDefault.py | 6 +- 5 files changed, 2601 insertions(+), 2601 deletions(-) diff --git a/development/scons/SConstruct b/development/scons/SConstruct index f714508df4..640510cf21 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -1,4 +1,4 @@ -# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2 +# vi:filetype=python:expandtab:tabstop=4:shiftwidth=4 # # file SConstruct # @@ -31,12 +31,12 @@ EnsureSConsVersion(0, 96) # # called as 'cd development/scons; scons' if os.path.isfile('SConstruct'): - top_src_dir = '../..' - scons_dir = '.' + top_src_dir = '../..' + scons_dir = '.' # called as 'scons -f development/scons/SConstruct' else: - top_src_dir = '.' - scons_dir = 'development/scons' + top_src_dir = '.' + scons_dir = 'development/scons' #---------------------------------------------------------- @@ -48,9 +48,9 @@ else: # detect version of lyx # only 1.4.x has frontends/qt2 if os.path.isdir(os.path.join(top_src_dir, 'src', 'frontends', 'qt2')): - package_version = '1.4.2svn' + package_version = '1.4.2svn' else: - package_version = '1.5.0svn' + package_version = '1.5.0svn' devel_version = True default_build_mode = 'debug' @@ -72,36 +72,36 @@ env_cache_file = 'env.cache' #---------------------------------------------------------- if os.name == 'nt': - platform_name = 'win32' - default_frontend = 'qt4' - default_prefix = 'c:/program files/lyx' - default_with_x = False - default_packaging_method = 'windows' + platform_name = 'win32' + default_frontend = 'qt4' + default_prefix = 'c:/program files/lyx' + default_with_x = False + default_packaging_method = 'windows' elif os.name == 'posix' and sys.platform != 'cygwin': - platform_name = sys.platform - default_frontend = 'qt3' - default_prefix = '/usr/local' - default_with_x = True - default_packaging_method = 'posix' + platform_name = sys.platform + default_frontend = 'qt3' + default_prefix = '/usr/local' + default_with_x = True + default_packaging_method = 'posix' elif os.name == 'posix' and sys.platform == 'cygwin': - platform_name = 'cygwin' - default_frontend = 'qt3' - default_prefix = '/usr/local' - default_with_x = True - default_packaging_method = 'posix' + platform_name = 'cygwin' + default_frontend = 'qt3' + default_prefix = '/usr/local' + default_with_x = True + default_packaging_method = 'posix' elif os.name == 'darwin': - platform_name = 'macosx' - default_frontend = 'qt3' - # FIXME: macOSX default prefix? - default_prefix = '.' - default_with_x = False - default_packaging_method = 'macosx' + platform_name = 'macosx' + default_frontend = 'qt3' + # FIXME: macOSX default prefix? + default_prefix = '.' + default_with_x = False + default_packaging_method = 'macosx' else: # unsupported system, assume posix behavior - platform_name = 'others' - default_frontend = 'qt3' - default_prefix = '.' - default_with_x = True - default_packaging_method = 'posix' + platform_name = 'others' + default_frontend = 'qt3' + default_prefix = '.' + default_with_x = True + default_packaging_method = 'posix' #--------------------------------------------------------- @@ -110,109 +110,109 @@ else: # unsupported system, assume posix behavior # # You can set perminant default values in config.py 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( - # frontend - EnumOption('frontend', 'Main GUI', default_frontend, - allowed_values = ('xform', 'qt2', 'qt3', 'qt4', 'gtk') ), - # debug or release build - EnumOption('mode', 'Building method', default_build_mode, - allowed_values = ('debug', 'release') ), - # boost libraries - EnumOption('boost', - 'Use included, system boost library, or try sytem boost first.', - 'auto', allowed_values = ( - 'auto', # detect boost, if not found, use included - 'included', # always use included boost - 'system', # always use system boost, fail if can not find - ) ), - # - EnumOption('gettext', - 'Use included, system gettext library, or try sytem gettext first', - 'auto', allowed_values = ( - 'auto', # detect gettext, if not found, use included - 'included', # always use included gettext - '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') ), - # packaging method - EnumOption('packaging', 'Packaging method to use.', default_packaging_method, - allowed_values = ('windows', 'posix', 'macosx')), - # - BoolOption('fast_start', 'Whether or not use cached tests and keep current config.h', True), - # No precompiled header support (too troublesome to make it work for msvc) - # BoolOption('pch', 'Whether or not use pch', False), - # enable assertion, (config.h has ENABLE_ASSERTIOS - BoolOption('assertions', 'Use assertions', True), - # enable warning, (config.h has WITH_WARNINGS) - # default to False since MSVC does not have #warning - BoolOption('warnings', 'Use warnings', False), - # 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), - # - BoolOption('nls', 'Whether or not use native language support', True), - # - BoolOption('profiling', 'Whether or not enable profiling', False), - # config.h define _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC - BoolOption('stdlib_debug', 'Whether or not turn on stdlib debug', False), - # using x11? - BoolOption('X11', 'Use x11 windows system', default_with_x), - # use MS VC++ to build lyx - BoolOption('use_vc', 'Use MS VC++ to build lyx (cl.exe will be probed)', None), - # - PathOption('qt_dir', 'Path to qt directory', None), - # - PathOption('qt_include_path', 'Path to qt include directory', None), - # - PathOption('qt_lib_path', 'Path to qt library directory', None), - # build directory, will use $mode if not set - PathOption('build_dir', 'Build directory', None), - # extra include and libpath - PathOption('extra_inc_path', 'Extra include path', None), - # - PathOption('extra_lib_path', 'Extra library path', None), - # - PathOption('extra_bin_path', 'A convenient way to add a path to $PATH', None), - # - 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', default_prefix), - # version suffix - ('version_suffix', 'install lyx as lyx-suffix', None), - # how to load options - ('load_option', '''load option from previous scons run. option can be - yes (default): load all options - no: do not load any option - opt1,opt2: load specified options - -opt1,opt2: load all options other than specified ones''', 'yes'), - # - ('optimization', 'optimization CCFLAGS option.', None), - # - PathOption('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 - ('dest_dir', 'install to DESTDIR. (Provided for backward compatibility only)', None), - # environment variable can be set as options. - ('DESTDIR', 'install to DESTDIR', None), - ('CC', 'replace default $CC', None), - ('LINK', 'replace default $LINK', None), - ('CPP', 'replace default $CPP', None), - ('CXX', 'replace default $CXX', None), - ('CXXCPP', 'replace default $CXXCPP', None), - ('CCFLAGS', 'replace default $CCFLAGS', None), - ('CPPFLAGS', 'replace default $CPPFLAGS', None), - ('LINKFLAGS', 'replace default $LINKFLAGS', None), + # frontend + EnumOption('frontend', 'Main GUI', default_frontend, + allowed_values = ('xform', 'qt2', 'qt3', 'qt4', 'gtk') ), + # debug or release build + EnumOption('mode', 'Building method', default_build_mode, + allowed_values = ('debug', 'release') ), + # boost libraries + EnumOption('boost', + 'Use included, system boost library, or try sytem boost first.', + 'auto', allowed_values = ( + 'auto', # detect boost, if not found, use included + 'included', # always use included boost + 'system', # always use system boost, fail if can not find + ) ), + # + EnumOption('gettext', + 'Use included, system gettext library, or try sytem gettext first', + 'auto', allowed_values = ( + 'auto', # detect gettext, if not found, use included + 'included', # always use included gettext + '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') ), + # packaging method + EnumOption('packaging', 'Packaging method to use.', default_packaging_method, + allowed_values = ('windows', 'posix', 'macosx')), + # + BoolOption('fast_start', 'Whether or not use cached tests and keep current config.h', True), + # No precompiled header support (too troublesome to make it work for msvc) + # BoolOption('pch', 'Whether or not use pch', False), + # enable assertion, (config.h has ENABLE_ASSERTIOS + BoolOption('assertions', 'Use assertions', True), + # enable warning, (config.h has WITH_WARNINGS) + # default to False since MSVC does not have #warning + BoolOption('warnings', 'Use warnings', False), + # 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), + # + BoolOption('nls', 'Whether or not use native language support', True), + # + BoolOption('profiling', 'Whether or not enable profiling', False), + # config.h define _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC + BoolOption('stdlib_debug', 'Whether or not turn on stdlib debug', False), + # using x11? + BoolOption('X11', 'Use x11 windows system', default_with_x), + # use MS VC++ to build lyx + BoolOption('use_vc', 'Use MS VC++ to build lyx (cl.exe will be probed)', None), + # + PathOption('qt_dir', 'Path to qt directory', None), + # + PathOption('qt_include_path', 'Path to qt include directory', None), + # + PathOption('qt_lib_path', 'Path to qt library directory', None), + # build directory, will use $mode if not set + PathOption('build_dir', 'Build directory', None), + # extra include and libpath + PathOption('extra_inc_path', 'Extra include path', None), + # + PathOption('extra_lib_path', 'Extra library path', None), + # + PathOption('extra_bin_path', 'A convenient way to add a path to $PATH', None), + # + 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', default_prefix), + # version suffix + ('version_suffix', 'install lyx as lyx-suffix', None), + # how to load options + ('load_option', '''load option from previous scons run. option can be + yes (default): load all options + no: do not load any option + opt1,opt2: load specified options + -opt1,opt2: load all options other than specified ones''', 'yes'), + # + ('optimization', 'optimization CCFLAGS option.', None), + # + PathOption('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 + ('dest_dir', 'install to DESTDIR. (Provided for backward compatibility only)', None), + # environment variable can be set as options. + ('DESTDIR', 'install to DESTDIR', None), + ('CC', 'replace default $CC', None), + ('LINK', 'replace default $LINK', None), + ('CPP', 'replace default $CPP', None), + ('CXX', 'replace default $CXX', None), + ('CXXCPP', 'replace default $CXXCPP', None), + ('CCFLAGS', 'replace default $CCFLAGS', None), + ('CPPFLAGS', 'replace default $CPPFLAGS', None), + ('LINKFLAGS', 'replace default $LINKFLAGS', None), ) # copied from SCons/Options/BoolOption.py @@ -225,68 +225,68 @@ false_strings = ('n', 'no', 'false', 'f', '0', 'off', 'none') # # if fast_start=yes (default), load variables from env_cache_file if (not ARGUMENTS.has_key('fast_start') or \ - ARGUMENTS['fast_start'] in true_strings) \ - and os.path.isfile(env_cache_file): - fast_start = True - cache_file = open(env_cache_file) - env_cache = cPickle.load(cache_file) - cache_file.close() - print '------------ fast_start mode --------------------' - print ' Use cached test results and current config.h' - print ' use fast_start=no to override' - print + ARGUMENTS['fast_start'] in true_strings) \ + and os.path.isfile(env_cache_file): + fast_start = True + cache_file = open(env_cache_file) + env_cache = cPickle.load(cache_file) + cache_file.close() + print '------------ fast_start mode --------------------' + print ' Use cached test results and current config.h' + print ' use fast_start=no to override' + print else: - fast_start = False - env_cache = {} + fast_start = False + env_cache = {} # if load_option=yes (default), load saved comand line options # # This option can take value yes/no/opt1,opt2/-opt1,opt2 # and tries to be clever in choosing options to load if (not ARGUMENTS.has_key('load_option') or \ - ARGUMENTS['load_option'] not in false_strings) \ - and os.path.isfile(env_cache_file): - cache_file = open(env_cache_file) - opt_cache = cPickle.load(cache_file)['arg_cache'] - cache_file.close() - # import cached options, but we should ignore qt_dir when frontend changes - if ARGUMENTS.has_key('frontend') and opt_cache.has_key('frontend') \ - and ARGUMENTS['frontend'] != opt_cache['frontend'] \ - and opt_cache.has_key('qt_dir'): - opt_cache.pop('qt_dir') - # some options will require full rebuild - # these are in general things that will change config.h - for arg in ['version_suffix', 'nls', 'boost', 'spell']: - if ARGUMENTS.has_key(arg) and ((not opt_cache.has_key(arg)) or \ - ARGUMENTS[arg] != opt_cache[arg]): - if fast_start: - print " ** fast_start is disabled because of the change of option", arg - print - fast_start = False - # and we do not cache some options - for arg in ['fast_start', 'load_option']: - if opt_cache.has_key(arg): - opt_cache.pop(arg) - # now, if load_option=opt1,opt2 or -opt1,opt2 - if ARGUMENTS.has_key('load_option') and \ - ARGUMENTS['load_option'] not in true_strings + false_strings: - # if -opt1,opt2 is specified, do not load these options - if ARGUMENTS['load_option'][0] == '-': - for arg in ARGUMENTS['load_option'][1:].split(','): + ARGUMENTS['load_option'] not in false_strings) \ + and os.path.isfile(env_cache_file): + cache_file = open(env_cache_file) + opt_cache = cPickle.load(cache_file)['arg_cache'] + cache_file.close() + # import cached options, but we should ignore qt_dir when frontend changes + if ARGUMENTS.has_key('frontend') and opt_cache.has_key('frontend') \ + and ARGUMENTS['frontend'] != opt_cache['frontend'] \ + and opt_cache.has_key('qt_dir'): + opt_cache.pop('qt_dir') + # some options will require full rebuild + # these are in general things that will change config.h + for arg in ['version_suffix', 'nls', 'boost', 'spell']: + if ARGUMENTS.has_key(arg) and ((not opt_cache.has_key(arg)) or \ + ARGUMENTS[arg] != opt_cache[arg]): + if fast_start: + print " ** fast_start is disabled because of the change of option", arg + print + fast_start = False + # and we do not cache some options + for arg in ['fast_start', 'load_option']: if opt_cache.has_key(arg): - opt_cache.pop(arg) - # if opt1,opt2 is specified, only load specified options - else: - args = ARGUMENTS['load_option'].split(',') - for arg in opt_cache.keys(): - if arg not in args: - opt_cache.pop(arg) - # now restore options as if entered from command line - for key in opt_cache.keys(): - if not ARGUMENTS.has_key(key): - ARGUMENTS[key] = opt_cache[key] - print "Restoring cached option %s=%s" % (key, ARGUMENTS[key]) - print + opt_cache.pop(arg) + # now, if load_option=opt1,opt2 or -opt1,opt2 + if ARGUMENTS.has_key('load_option') and \ + ARGUMENTS['load_option'] not in true_strings + false_strings: + # if -opt1,opt2 is specified, do not load these options + if ARGUMENTS['load_option'][0] == '-': + for arg in ARGUMENTS['load_option'][1:].split(','): + if opt_cache.has_key(arg): + opt_cache.pop(arg) + # if opt1,opt2 is specified, only load specified options + else: + args = ARGUMENTS['load_option'].split(',') + for arg in opt_cache.keys(): + if arg not in args: + opt_cache.pop(arg) + # now restore options as if entered from command line + for key in opt_cache.keys(): + if not ARGUMENTS.has_key(key): + ARGUMENTS[key] = opt_cache[key] + print "Restoring cached option %s=%s" % (key, ARGUMENTS[key]) + print # save arguments env_cache['arg_cache'] = ARGUMENTS @@ -313,26 +313,26 @@ prefix = env['prefix'] mode = env['mode'] if platform_name == 'win32': - if env.has_key('use_vc'): - use_vc = env['use_vc'] - if WhereIs('cl.exe') is None: - print "cl.exe is not found. Are you using the MSVC environment?" - Exit(2) - elif WhereIs('cl.exe') is not None: - use_vc = True - else: - use_vc = False + if env.has_key('use_vc'): + use_vc = env['use_vc'] + if WhereIs('cl.exe') is None: + print "cl.exe is not found. Are you using the MSVC environment?" + Exit(2) + elif WhereIs('cl.exe') is not None: + use_vc = True + else: + use_vc = False else: - use_vc = False + 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: - env['BUILDDIR'] = env['build_dir'] + env['BUILDDIR'] = env['build_dir'] else: - # Determine the name of the build $mode - env['BUILDDIR'] = '#' + mode + # Determine the name of the build $mode + env['BUILDDIR'] = '#' + mode # all built libraries will go to build_dir/libs # (This is different from the make file approach) @@ -366,27 +366,27 @@ env['PACKAGE_VERSION'] = package_version # determine share_dir etc packaging_method = env.get('packaging') if packaging_method == 'windows': - share_dir = 'Resources' - man_dir = 'Resources/man/man1' - locale_dir = 'Resources/locale' - default_prefix = 'c:/program files/lyx' + share_dir = 'Resources' + man_dir = 'Resources/man/man1' + locale_dir = 'Resources/locale' + default_prefix = 'c:/program files/lyx' else: - share_dir = 'share/lyx' - man_dir = 'man/man1' - locale_dir = 'share/locale' - default_prefix = '/usr/local/' + share_dir = 'share/lyx' + man_dir = 'man/man1' + locale_dir = 'share/locale' + default_prefix = '/usr/local/' # install to default_prefix by default # program suffix: can be yes, or a string if env.has_key('version_suffix'): - if env['version_suffix'] in true_strings: - program_suffix = package_version - elif env['version_suffix'] in false_strings: - program_suffix = '' - else: - program_suffix = env['version_suffix'] + if env['version_suffix'] in true_strings: + program_suffix = package_version + elif env['version_suffix'] in false_strings: + program_suffix = '' + else: + program_suffix = env['version_suffix'] else: - program_suffix = '' + program_suffix = '' # used by package.C.in env['PROGRAM_SUFFIX'] = program_suffix @@ -394,9 +394,9 @@ env['PROGRAM_SUFFIX'] = program_suffix add_suffix = packaging_method != 'windows' # LYX_DIR are different (used in package.C.in) if add_suffix: - env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir + program_suffix)).abspath + env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir + program_suffix)).abspath else: - env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir)).abspath + env['LYX_DIR'] = Dir(os.path.join(prefix, share_dir)).abspath # we need absolute path for package.C env['LOCALEDIR'] = Dir(os.path.join(prefix, locale_dir)).abspath @@ -408,12 +408,12 @@ env['LOCALEDIR'] = Dir(os.path.join(prefix, locale_dir)).abspath # Since Tool('mingw') will reset CCFLAGS etc, this should be # done before getEnvVariable if platform_name == 'win32': - if use_vc: - env.Tool('msvc') - env.Tool('mslink') - else: - env.Tool('mingw') - env.AppendUnique(CPPPATH = ['#c:/MinGW/include']) + if use_vc: + env.Tool('msvc') + env.Tool('mslink') + else: + env.Tool('mingw') + env.AppendUnique(CPPPATH = ['#c:/MinGW/include']) # we differentiate between hard-coded options and default options # hard-coded options are required and will always be there @@ -431,89 +431,89 @@ 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: - # /TP treat all source code as C++ - # C4819: The file contains a character that cannot be represented - # in the current code page (number) - # C4996: foo was decleared deprecated - CCFLAGS_required.extend(['/TP', '/EHsc']) - CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo']) + # /TP treat all source code as C++ + # C4819: The file contains a character that cannot be represented + # in the current code page (number) + # C4996: foo was decleared deprecated + CCFLAGS_required.extend(['/TP', '/EHsc']) + CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo']) 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++' + 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: - # if user supplies optimization flags, use it anyway - CCFLAGS_required.extend(env['optimization'].split()) - # and do not use default - set_default_optimization_flags = False + # if user supplies optimization flags, use it anyway + CCFLAGS_required.extend(env['optimization'].split()) + # and do not use default + set_default_optimization_flags = False else: - set_default_optimization_flags = True + set_default_optimization_flags = True if mode == 'debug': - if use_vc: - CCFLAGS_required.append('/Zi') - LINKFLAGS_required.extend(['/debug', '/map']) - else: - CCFLAGS_required.append('-g') - CCFLAGS_default.append('-O') + if use_vc: + CCFLAGS_required.append('/Zi') + LINKFLAGS_required.extend(['/debug', '/map']) + else: + CCFLAGS_required.append('-g') + CCFLAGS_default.append('-O') elif mode == 'release' and set_default_optimization_flags: - if use_vc: - CCFLAGS_default.append('/O2') - else: - CCFLAGS_default.append('-O2') + if use_vc: + CCFLAGS_default.append('/O2') + else: + CCFLAGS_default.append('-O2') # msvc uses separate tools for profiling if env.has_key('profiling') and env['profiling']: - if use_vc: - print 'Visual C++ does not use profiling options' - else: - CCFLAGS_required.append('-pg') - LINKFLAGS_required.append('-pg') + if use_vc: + print 'Visual C++ does not use profiling options' + else: + CCFLAGS_required.append('-pg') + LINKFLAGS_required.append('-pg') if env.has_key('warnings') and env['warnings']: - if use_vc: - CCFLAGS_default.append('/W2') - else: - # Note: autotools detect gxx version and pass -W for 3.x - # and -Wextra for other versions of gcc - CCFLAGS_default.append('-Wall') + if use_vc: + CCFLAGS_default.append('/W2') + else: + # Note: autotools detect gxx version and pass -W for 3.x + # and -Wextra for other versions of gcc + CCFLAGS_default.append('-Wall') # Now, set the variables as follows: # 1. if command line option exists: replace default # 2. then if s envronment variable exists: replace default # 3. set variable to required + default def setEnvVariable(env, name, required = None, default = None, split = True): - ''' env: environment to set variable - name: variable - required: hardcoded options - default: default options that can be replaced by command line or - environment variables - split: whether or not split obtained variable like '-02 -g' - ''' - # first try command line argument (override environment settings) - if ARGUMENTS.has_key(name): - default = ARGUMENTS[name] - if split: - default = default.split() - # then use environment default - elif os.environ.has_key(name): - print "Acquiring varaible %s from system environment: %s" % (name, os.environ[name]) - default = os.environ[name] - if split: - default = default.split() - # set variable - if required is not None: - env[name] = required - if default is not None: - if env.has_key(name) and env[name] != default: - env[name] += default - else: - env[name] = default + ''' env: environment to set variable + name: variable + required: hardcoded options + default: default options that can be replaced by command line or + environment variables + split: whether or not split obtained variable like '-02 -g' + ''' + # first try command line argument (override environment settings) + if ARGUMENTS.has_key(name): + default = ARGUMENTS[name] + if split: + default = default.split() + # then use environment default + elif os.environ.has_key(name): + print "Acquiring varaible %s from system environment: %s" % (name, os.environ[name]) + default = os.environ[name] + if split: + default = default.split() + # set variable + if required is not None: + env[name] = required + if default is not None: + if env.has_key(name) and env[name] != default: + env[name] += default + else: + env[name] = default setEnvVariable(env, 'DESTDIR', split=False) setEnvVariable(env, 'CC') @@ -528,8 +528,8 @@ setEnvVariable(env, 'LINKFLAGS', LINKFLAGS_required) # if DESTDIR is not set... if env.has_key('dest_dir'): - print "This option is obsolete. Please use DESTDIR instead." - env['DESTDIR'] = env['dest_dir'] + print "This option is obsolete. Please use DESTDIR instead." + env['DESTDIR'] = env['dest_dir'] #--------------------------------------------------------- @@ -537,32 +537,32 @@ if env.has_key('dest_dir'): #--------------------------------------------------------- if env.has_key('qt_dir') and env['qt_dir']: - env['QTDIR'] = env['qt_dir'] - # add path to the qt tools - env.AppendUnique(LIBPATH = [os.path.join(env['qt_dir'], 'lib')]) - # set environment so that moc etc can be found even if its path is not set properly - env.PrependENVPath('PATH', os.path.join(env['qt_dir'], 'bin')) + env['QTDIR'] = env['qt_dir'] + # add path to the qt tools + env.AppendUnique(LIBPATH = [os.path.join(env['qt_dir'], 'lib')]) + # set environment so that moc etc can be found even if its path is not set properly + env.PrependENVPath('PATH', os.path.join(env['qt_dir'], 'bin')) else: - env['QTDIR'] = os.environ.get('QTDIR', '/usr/lib/qt-3.3') + env['QTDIR'] = os.environ.get('QTDIR', '/usr/lib/qt-3.3') if env.has_key('qt_lib_path') and env['qt_lib_path']: - qt_lib_path = env.subst('$qt_lib_path') + qt_lib_path = env.subst('$qt_lib_path') else: - qt_lib_path = env.subst('$QTDIR/lib') + qt_lib_path = env.subst('$QTDIR/lib') env.AppendUnique(LIBPATH = [qt_lib_path]) # qt4 seems to be using pkg_config env.PrependENVPath('PKG_CONFIG_PATH', qt_lib_path) if env.has_key('qt_inc_path') and env['qt_inc_path']: - qt_inc_path = env['qt_inc_path'] + qt_inc_path = env['qt_inc_path'] elif os.path.isdir(os.path.join(env.subst('$QTDIR'), 'include')): - qt_inc_path = '$QTDIR/include' + qt_inc_path = '$QTDIR/include' # this is the path for cygwin. elif os.path.isdir('/usr/include/' + frontend): - qt_inc_path = '/usr/include/$frontend' + qt_inc_path = '/usr/include/$frontend' else: - print "Qt include directory not found. Please specify it using qt_inc_path" - Exit(1) + print "Qt include directory not found. Please specify it using qt_inc_path" + Exit(1) # Note that this CPPPATH is for testing only # it will be removed before calling SConscript env['CPPPATH'] = [qt_inc_path] @@ -572,17 +572,17 @@ env['CPPPATH'] = [qt_inc_path] # extra_inc_paths = [] if env.has_key('extra_inc_path') and env['extra_inc_path']: - extra_inc_paths.append(env['extra_inc_path']) + extra_inc_paths.append(env['extra_inc_path']) if env.has_key('extra_lib_path') and env['extra_lib_path']: - env.AppendUnique(LIBPATH = [env['extra_lib_path']]) + env.AppendUnique(LIBPATH = [env['extra_lib_path']]) if env.has_key('extra_inc_path1') and env['extra_inc_path1']: - extra_inc_paths.append(env['extra_inc_path1']) + extra_inc_paths.append(env['extra_inc_path1']) if env.has_key('extra_lib_path1') and env['extra_lib_path1']: - env.AppendUnique(LIBPATH = [env['extra_lib_path1']]) + env.AppendUnique(LIBPATH = [env['extra_lib_path1']]) if env.has_key('extra_bin_path') and env['extra_bin_path']: - # maybe only one of them is needed - os.environ['PATH'] += os.pathsep + env['extra_bin_path'] - env['ENV']['PATH'] += os.pathsep + env['extra_bin_path'] + # maybe only one of them is needed + os.environ['PATH'] += os.pathsep + env['extra_bin_path'] + env['ENV']['PATH'] += os.pathsep + env['extra_bin_path'] # extra_inc_paths will be used later by intlenv etc env.AppendUnique(CPPPATH = extra_inc_paths) @@ -592,188 +592,188 @@ env.AppendUnique(CPPPATH = extra_inc_paths) #---------------------------------------------------------- conf = Configure(env, - custom_tests = { - 'CheckPkgConfig' : utils.checkPkgConfig, - 'CheckPackage' : utils.checkPackage, - 'CheckMkdirOneArg' : utils.checkMkdirOneArg, - 'CheckSelectArgType' : utils.checkSelectArgType, - 'CheckBoostLibraries' : utils.checkBoostLibraries, - 'CheckCommand' : utils.checkCommand, - 'CheckCXXGlobalCstd' : utils.checkCXXGlobalCstd, - 'CheckLC_MESSAGES' : utils.checkLC_MESSAGES, - 'CheckIconvConst' : utils.checkIconvConst, - } + custom_tests = { + 'CheckPkgConfig' : utils.checkPkgConfig, + 'CheckPackage' : utils.checkPackage, + 'CheckMkdirOneArg' : utils.checkMkdirOneArg, + 'CheckSelectArgType' : utils.checkSelectArgType, + 'CheckBoostLibraries' : utils.checkBoostLibraries, + 'CheckCommand' : utils.checkCommand, + 'CheckCXXGlobalCstd' : utils.checkCXXGlobalCstd, + 'CheckLC_MESSAGES' : utils.checkLC_MESSAGES, + 'CheckIconvConst' : utils.checkIconvConst, + } ) # pkg-config? (if not, we use hard-coded options) if not fast_start: - if conf.CheckPkgConfig('0.15.0'): - env['HAS_PKG_CONFIG'] = True - else: - print 'pkg-config >= 0.1.50 is not found' - env['HAS_PKG_CONFIG'] = False - env_cache['HAS_PKG_CONFIG'] = env['HAS_PKG_CONFIG'] + if conf.CheckPkgConfig('0.15.0'): + env['HAS_PKG_CONFIG'] = True + else: + print 'pkg-config >= 0.1.50 is not found' + env['HAS_PKG_CONFIG'] = False + env_cache['HAS_PKG_CONFIG'] = env['HAS_PKG_CONFIG'] else: - env['HAS_PKG_CONFIG'] = env_cache['HAS_PKG_CONFIG'] + env['HAS_PKG_CONFIG'] = env_cache['HAS_PKG_CONFIG'] # zlib? This is required. (fast_start assumes the existance of zlib) if not fast_start: - if (not use_vc and not conf.CheckLibWithHeader('z', 'zlib.h', 'C')) \ - or (use_vc and not conf.CheckLibWithHeader('zdll', 'zlib.h', 'C')): - print 'Did not find zdll.lib or zlib.h, exiting!' - Exit(1) + if (not use_vc and not conf.CheckLibWithHeader('z', 'zlib.h', 'C')) \ + or (use_vc and not conf.CheckLibWithHeader('zdll', 'zlib.h', 'C')): + print 'Did not find zdll.lib or zlib.h, exiting!' + Exit(1) # qt libraries? if not fast_start: - # - # qt3 does not use pkg_config - if frontend in ['qt2', 'qt3']: - if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();'): - print 'Did not find qt libraries, exiting!' - Exit(1) - elif frontend == 'qt4': - succ = False - # first: try pkg_config - if env['HAS_PKG_CONFIG']: - succ = conf.CheckPackage('QtCore') or conf.CheckPackage('QtCore4') - # FIXME: use pkg_config information? - #env['QT4_PKG_CONFIG'] = succ - # second: try to link to it - if not succ: - # Under linux, I can test the following perfectly - # Under windows, lib names need to passed as libXXX4.a ... - succ = conf.CheckLibWithHeader('QtCore', 'QtGui/QApplication', 'c++', 'QApplication qapp();') or \ - conf.CheckLibWithHeader('QtCore4', 'QtGui/QApplication', 'c++', 'QApplication qapp();') - # third: try to look up the path - if not succ: - succ = True - for lib in ['QtCore', 'QtGui']: - # windows version has something like QtGui4 ... - if not (os.path.isfile(os.path.join(qt_lib_path, 'lib%s.a' % lib)) or \ - os.path.isfile(os.path.join(qt_lib_path, 'lib%s4.a' % lib))): - succ = False - break - # still can not find it - if succ: - print "Qt4 libraries are found." - else: - print 'Did not find qt libraries, exiting!' - Exit(1) + # + # qt3 does not use pkg_config + if frontend in ['qt2', 'qt3']: + if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();'): + print 'Did not find qt libraries, exiting!' + Exit(1) + elif frontend == 'qt4': + succ = False + # first: try pkg_config + if env['HAS_PKG_CONFIG']: + succ = conf.CheckPackage('QtCore') or conf.CheckPackage('QtCore4') + # FIXME: use pkg_config information? + #env['QT4_PKG_CONFIG'] = succ + # second: try to link to it + if not succ: + # Under linux, I can test the following perfectly + # Under windows, lib names need to passed as libXXX4.a ... + succ = conf.CheckLibWithHeader('QtCore', 'QtGui/QApplication', 'c++', 'QApplication qapp();') or \ + conf.CheckLibWithHeader('QtCore4', 'QtGui/QApplication', 'c++', 'QApplication qapp();') + # third: try to look up the path + if not succ: + succ = True + for lib in ['QtCore', 'QtGui']: + # windows version has something like QtGui4 ... + if not (os.path.isfile(os.path.join(qt_lib_path, 'lib%s.a' % lib)) or \ + os.path.isfile(os.path.join(qt_lib_path, 'lib%s4.a' % lib))): + succ = False + break + # still can not find it + if succ: + print "Qt4 libraries are found." + else: + print 'Did not find qt libraries, exiting!' + Exit(1) # now, if msvc2005 is used, we will need that QT_LIB_PATH/QT_LIB.manifest file if use_vc: - if mode == 'debug': - manifest = os.path.join(qt_lib_path, 'QtGuid4.dll.manifest') - else: - manifest = os.path.join(qt_lib_path, 'QtGui4.dll.manifest') - if os.path.isfile(manifest): - env['LINKCOM'] = [env['LINKCOM'], 'mt.exe /MANIFEST %s /outputresource:$TARGET;1' % manifest] + if mode == 'debug': + manifest = os.path.join(qt_lib_path, 'QtGuid4.dll.manifest') + else: + manifest = os.path.join(qt_lib_path, 'QtGui4.dll.manifest') + if os.path.isfile(manifest): + env['LINKCOM'] = [env['LINKCOM'], 'mt.exe /MANIFEST %s /outputresource:$TARGET;1' % manifest] # check socket libs if not fast_start: - socket_libs = [] - if conf.CheckLib('socket'): - socket_libs.append('socket') - # nsl is the network services library and provides a - # transport-level interface to networking services. - if conf.CheckLib('nsl'): - socket_libs.append('nsl') - env_cache['SOCKET_LIBS'] = socket_libs + socket_libs = [] + if conf.CheckLib('socket'): + socket_libs.append('socket') + # nsl is the network services library and provides a + # transport-level interface to networking services. + if conf.CheckLib('nsl'): + socket_libs.append('nsl') + env_cache['SOCKET_LIBS'] = socket_libs else: - socket_libs = env_cache['SOCKET_LIBS'] + socket_libs = env_cache['SOCKET_LIBS'] # check available boost libs (since lyx1.4 does not use iostream) boost_libs = [] for lib in ['signals', 'regex', 'filesystem', 'iostreams']: - 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) if not fast_start: - # check boost libraries - boost_opt = ARGUMENTS.get('boost', 'auto') - # check for system boost - paths = env['LIBPATH'] + ['/usr/lib', '/usr/local/lib'] - # real libraries (included or system) - boost_libraries = [] - boost_libpath = None - # here I assume that all libraries are in the same directory - for lib in boost_libs: - if boost_opt == 'included': - boost_libraries.append('included_boost_%s' % lib) - env['INCLUDED_BOOST'] = True - elif boost_opt == 'auto': - res = conf.CheckBoostLibraries('boost_%s' % lib , paths) - # if not found - if res[0] == '': - boost_libraries.append('included_boost_%s' % lib) - env['INCLUDED_BOOST'] = True - else: - boost_libraries.append(res[1]) - env['INCLUDED_BOOST'] = False - boost_libpath = res[0] - elif boost_opt == 'system': - res = conf.CheckBoostLibraries('boost_%s' % lib , paths) - if res[0] == '': - print "Can not find system boost libraries" - print "Please supply a path through extra_lib_path and try again." - print "Or use boost=included to use included boost libraries." - Exit(2) - else: - boost_libraries.append(res[1]) - env.AppendUnique(LIBPATH = [res[0]]) - boost_libpath = res[0] - env_cache['BOOST_LIBRARIES'] = boost_libraries - env_cache['INCLUDED_BOOST'] = env['INCLUDED_BOOST'] - env_cache['BOOST_LIBPATH'] = boost_libpath + # check boost libraries + boost_opt = ARGUMENTS.get('boost', 'auto') + # check for system boost + paths = env['LIBPATH'] + ['/usr/lib', '/usr/local/lib'] + # real libraries (included or system) + boost_libraries = [] + boost_libpath = None + # here I assume that all libraries are in the same directory + for lib in boost_libs: + if boost_opt == 'included': + boost_libraries.append('included_boost_%s' % lib) + env['INCLUDED_BOOST'] = True + elif boost_opt == 'auto': + res = conf.CheckBoostLibraries('boost_%s' % lib , paths) + # if not found + if res[0] == '': + boost_libraries.append('included_boost_%s' % lib) + env['INCLUDED_BOOST'] = True + else: + boost_libraries.append(res[1]) + env['INCLUDED_BOOST'] = False + boost_libpath = res[0] + elif boost_opt == 'system': + res = conf.CheckBoostLibraries('boost_%s' % lib , paths) + if res[0] == '': + print "Can not find system boost libraries" + print "Please supply a path through extra_lib_path and try again." + print "Or use boost=included to use included boost libraries." + Exit(2) + else: + boost_libraries.append(res[1]) + env.AppendUnique(LIBPATH = [res[0]]) + boost_libpath = res[0] + env_cache['BOOST_LIBRARIES'] = boost_libraries + env_cache['INCLUDED_BOOST'] = env['INCLUDED_BOOST'] + env_cache['BOOST_LIBPATH'] = boost_libpath else: - boost_libraries = env_cache['BOOST_LIBRARIES'] - env['INCLUDED_BOOST'] = env_cache['INCLUDED_BOOST'] - boost_libpath = env_cache['BOOST_LIBPATH'] + boost_libraries = env_cache['BOOST_LIBRARIES'] + env['INCLUDED_BOOST'] = env_cache['INCLUDED_BOOST'] + boost_libpath = env_cache['BOOST_LIBPATH'] if boost_libpath is not None: - env.AppendUnique(LIBPATH = [boost_libpath]) + env.AppendUnique(LIBPATH = [boost_libpath]) env['ENABLE_NLS'] = env['nls'] if not fast_start: - if not env['ENABLE_NLS']: - intl_libs = [] - included_gettext = False - else: - # check gettext libraries - gettext_opt = ARGUMENTS.get('gettext', 'auto') - # check for system gettext - succ = False - if gettext_opt in ['auto', 'system']: - if conf.CheckLib('intl'): + if not env['ENABLE_NLS']: + intl_libs = [] included_gettext = False - intl_libs = ['intl'] - succ = True - else: # no found - if gettext_opt == 'system': - print "Can not find system gettext library" - print "Please supply a path through extra_lib_path and try again." - print "Or use gettext=included to use included gettext libraries." - Exit(2) - # now, auto and succ = false, or gettext=included - if not succ: - # we do not need to set LIBPATH now. - included_gettext = True - intl_libs = ['included_intl'] - env_cache['INCLUDED_GETTEXT'] = included_gettext - env_cache['INTL_LIBS'] = intl_libs + else: + # check gettext libraries + gettext_opt = ARGUMENTS.get('gettext', 'auto') + # check for system gettext + succ = False + if gettext_opt in ['auto', 'system']: + if conf.CheckLib('intl'): + included_gettext = False + intl_libs = ['intl'] + succ = True + else: # no found + if gettext_opt == 'system': + print "Can not find system gettext library" + print "Please supply a path through extra_lib_path and try again." + print "Or use gettext=included to use included gettext libraries." + Exit(2) + # now, auto and succ = false, or gettext=included + if not succ: + # we do not need to set LIBPATH now. + included_gettext = True + intl_libs = ['included_intl'] + env_cache['INCLUDED_GETTEXT'] = included_gettext + env_cache['INTL_LIBS'] = intl_libs else: - included_gettext = env_cache['INCLUDED_GETTEXT'] - intl_libs = env_cache['INTL_LIBS'] + included_gettext = env_cache['INCLUDED_GETTEXT'] + intl_libs = env_cache['INTL_LIBS'] # # check for msgfmt command if not fast_start: - env['MSGFMT'] = conf.CheckCommand('msgfmt') - env_cache['MSGFMT'] = env['MSGFMT'] + env['MSGFMT'] = conf.CheckCommand('msgfmt') + env_cache['MSGFMT'] = env['MSGFMT'] else: - env['MSGFMT'] = env_cache['MSGFMT'] + env['MSGFMT'] = env_cache['MSGFMT'] # # Customized builders @@ -788,48 +788,48 @@ env['BUILDERS']['substFile'] = Builder(action = utils.env_subst) aspell_lib = 'aspell' # assume that we use aspell, aspelld compiled for msvc if platform_name == 'win32' and mode == 'debug' and use_vc: - aspell_lib = 'aspelld' + aspell_lib = 'aspelld' # check the existence of config.h config_h = os.path.join(env.Dir('$BUILDDIR/common').path, 'config.h') boost_config_h = os.path.join(env.Dir('$BUILDDIR/boost').path, 'config.h') if not fast_start or not os.path.isfile(boost_config_h) \ - or not os.path.isfile(config_h): - # - print "Creating %s..." % boost_config_h - # - utils.createConfigFile(conf, - config_file = boost_config_h, - config_pre = '''/* boost/config.h. Generated by SCons. */ + or not os.path.isfile(config_h): + # + print "Creating %s..." % boost_config_h + # + utils.createConfigFile(conf, + config_file = boost_config_h, + config_pre = '''/* boost/config.h. Generated by SCons. */ /* -*- C++ -*- */ /* - * \file config.h - * This file is part of LyX, the document processor. - * Licence details can be found in the file COPYING. - * - * This is the compilation configuration file for LyX. - * It was generated by scon. - * You might want to change some of the defaults if something goes wrong - * during the compilation. - */ +* \file config.h +* This file is part of LyX, the document processor. +* Licence details can be found in the file COPYING. +* +* This is the compilation configuration file for LyX. +* It was generated by scon. +* You might want to change some of the defaults if something goes wrong +* during the compilation. +*/ #ifndef _BOOST_CONFIG_H #define _BOOST_CONFIG_H ''', - headers = [ - ('ostream', 'HAVE_OSTREAM', 'cxx'), - ('locale', 'HAVE_LOCALE', 'cxx'), - ('sstream', 'HAVE_SSTREAM', 'cxx'), - #('newapis.h', 'HAVE_NEWAPIS_H', 'c'), - ], - custom_tests = [ - (env.has_key('assertions') and env['assertions'], - 'ENABLE_ASSERTIONS', - 'Define if you want assertions to be enabled in the code' - ), - ], - config_post = ''' + headers = [ + ('ostream', 'HAVE_OSTREAM', 'cxx'), + ('locale', 'HAVE_LOCALE', 'cxx'), + ('sstream', 'HAVE_SSTREAM', 'cxx'), + #('newapis.h', 'HAVE_NEWAPIS_H', 'c'), + ], + custom_tests = [ + (env.has_key('assertions') and env['assertions'], + 'ENABLE_ASSERTIONS', + 'Define if you want assertions to be enabled in the code' + ), + ], + config_post = ''' #if defined(HAVE_OSTREAM) && defined(HAVE_LOCALE) && defined(HAVE_SSTREAM) # define USE_BOOST_FORMAT 1 @@ -858,199 +858,199 @@ if not fast_start or not os.path.isfile(boost_config_h) \ #endif ''' - ) - # - print "\nGenerating %s..." % config_h - - # AIKSAURUS_H_LOCATION - if (conf.CheckCXXHeader("Aiksaurus.h")): - aik_location = '' - elif (conf.CheckCXXHeader("Aiksaurus/Aiksaurus.h")): - aik_location = '' - else: - aik_location = '' - - # 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' - 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 - - if spell_engine is not None: - env[spell_engine] = True - else: - if spell_opt == 'auto': - print "Warning: Can not locate any spell checker" - elif spell_opt != 'no': - print "Warning: Can not locate specified spell checker:", spell_opt - Exit(1) - - # check arg types of select function - (select_arg1, select_arg234, select_arg5) = conf.CheckSelectArgType() - - # - # create config.h - result = utils.createConfigFile(conf, - config_file = config_h, - config_pre = '''/* config.h. Generated by SCons. */ + ) + # + print "\nGenerating %s..." % config_h + + # AIKSAURUS_H_LOCATION + if (conf.CheckCXXHeader("Aiksaurus.h")): + aik_location = '' + elif (conf.CheckCXXHeader("Aiksaurus/Aiksaurus.h")): + aik_location = '' + else: + aik_location = '' + + # 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' + 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 + + if spell_engine is not None: + env[spell_engine] = True + else: + if spell_opt == 'auto': + print "Warning: Can not locate any spell checker" + elif spell_opt != 'no': + print "Warning: Can not locate specified spell checker:", spell_opt + Exit(1) + + # check arg types of select function + (select_arg1, select_arg234, select_arg5) = conf.CheckSelectArgType() + + # + # create config.h + result = utils.createConfigFile(conf, + config_file = config_h, + config_pre = '''/* config.h. Generated by SCons. */ /* -*- C++ -*- */ /* - * \file config.h - * This file is part of LyX, the document processor. - * Licence details can be found in the file COPYING. - * - * This is the compilation configuration file for LyX. - * It was generated by scon. - * You might want to change some of the defaults if something goes wrong - * during the compilation. - */ +* \file config.h +* This file is part of LyX, the document processor. +* Licence details can be found in the file COPYING. +* +* This is the compilation configuration file for LyX. +* It was generated by scon. +* You might want to change some of the defaults if something goes wrong +* during the compilation. +*/ #ifndef _CONFIG_H #define _CONFIG_H ''', - headers = [ - ('io.h', 'HAVE_IO_H', 'c'), - ('limits.h', 'HAVE_LIMITS_H', 'c'), - ('locale.h', 'HAVE_LOCALE_H', 'c'), - ('process.h', 'HAVE_PROCESS_H', 'c'), - ('stdlib.h', 'HAVE_STDLIB_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/utime.h', 'HAVE_SYS_UTIME_H', 'c'), - ('sys/socket.h', 'HAVE_SYS_SOCKET_H', 'c'), - ('unistd.h', 'HAVE_UNISTD_H', 'c'), - ('utime.h', 'HAVE_UTIME_H', 'c'), - ('direct.h', 'HAVE_DIRECT_H', 'c'), - ('istream', 'HAVE_ISTREAM', 'cxx'), - ('ios', 'HAVE_IOS', 'cxx'), - ], - functions = [ - ('open', 'HAVE_OPEN', None), - ('close', 'HAVE_CLOSE', None), - ('popen', 'HAVE_POPEN', None), - ('pclose', 'HAVE_PCLOSE', None), - ('_open', 'HAVE__OPEN', None), - ('_close', 'HAVE__CLOSE', None), - ('_popen', 'HAVE__POPEN', None), - ('_pclose', 'HAVE__PCLOSE', None), - ('getpid', 'HAVE_GETPID', None), - ('_getpid', 'HAVE__GETPID', None), - ('mkdir', 'HAVE_MKDIR', None), - ('_mkdir', 'HAVE__MKDIR', None), - ('mktemp', 'HAVE_MKTEMP', None), - ('mkstemp', 'HAVE_MKSTEMP', None), - ('strerror', 'HAVE_STRERROR', None), - ('count', 'HAVE_STD_COUNT', ''' + headers = [ + ('io.h', 'HAVE_IO_H', 'c'), + ('limits.h', 'HAVE_LIMITS_H', 'c'), + ('locale.h', 'HAVE_LOCALE_H', 'c'), + ('process.h', 'HAVE_PROCESS_H', 'c'), + ('stdlib.h', 'HAVE_STDLIB_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/utime.h', 'HAVE_SYS_UTIME_H', 'c'), + ('sys/socket.h', 'HAVE_SYS_SOCKET_H', 'c'), + ('unistd.h', 'HAVE_UNISTD_H', 'c'), + ('utime.h', 'HAVE_UTIME_H', 'c'), + ('direct.h', 'HAVE_DIRECT_H', 'c'), + ('istream', 'HAVE_ISTREAM', 'cxx'), + ('ios', 'HAVE_IOS', 'cxx'), + ], + functions = [ + ('open', 'HAVE_OPEN', None), + ('close', 'HAVE_CLOSE', None), + ('popen', 'HAVE_POPEN', None), + ('pclose', 'HAVE_PCLOSE', None), + ('_open', 'HAVE__OPEN', None), + ('_close', 'HAVE__CLOSE', None), + ('_popen', 'HAVE__POPEN', None), + ('_pclose', 'HAVE__PCLOSE', None), + ('getpid', 'HAVE_GETPID', None), + ('_getpid', 'HAVE__GETPID', None), + ('mkdir', 'HAVE_MKDIR', None), + ('_mkdir', 'HAVE__MKDIR', None), + ('mktemp', 'HAVE_MKTEMP', None), + ('mkstemp', 'HAVE_MKSTEMP', None), + ('strerror', 'HAVE_STRERROR', None), + ('count', 'HAVE_STD_COUNT', ''' #include int count() { - char a[] = "hello"; - return std::count(a, a+5, 'l'); + char a[] = "hello"; + return std::count(a, a+5, 'l'); } '''), - ('getcwd', 'HAVE_GETCWD', None), - ('setenv', 'HAVE_SETENV', None), - ('putenv', 'HAVE_PUTENV', None), - ('fcntl', 'HAVE_FCNTL', None), - ], - types = [ - ('std::istreambuf_iterator', 'HAVE_DECL_ISTREAMBUF_ITERATOR', - '#include \n#include ') - ], - libs = [ - ('gdi32', 'HAVE_LIBGDI32'), - (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'), - (('Aiksaurus', 'libAiksaurus'), 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB'), - ], - custom_tests = [ - (conf.CheckType('pid_t', includes='#include '), - 'HAVE_PID_T', - 'Define is sys/types.h does not have pid_t', - '', - '#define pid_t int', - ), - (conf.CheckCXXGlobalCstd(), - 'CXX_GLOBAL_CSTD', - 'Define if your C++ compiler puts C library functions in the global namespace' - ), - (conf.CheckMkdirOneArg(), - 'MKDIR_TAKES_ONE_ARG', - 'Define if mkdir takes only one argument.' - ), - (conf.CheckLC_MESSAGES(), - 'HAVE_LC_MESSAGES', - 'Define if your file defines LC_MESSAGES.' - ), - (devel_version, 'DEVEL_VERSION', 'Whether or not a development version'), - (env['nls'], - 'ENABLE_NLS', - "Define to 1 if translation of program messages to the user's native anguage is requested.", - ), - (env['nls'] and not included_gettext, - 'HAVE_GETTEXT', - 'Define to 1 if using system gettext library' - ), - (env.has_key('warnings') and env['warnings'], - 'WITH_WARNINGS', - 'Define this if you want to see the warning directives put here and there by the developpers to get attention' - ), - (env.has_key('concept_checks') and env['concept_checks'], - '_GLIBCXX_CONCEPT_CHECKS', - 'libstdc++ concept checking' - ), - (env.has_key('stdlib_debug') and env['stdlib_debug'], - '_GLIBCXX_DEBUG', - 'libstdc++ debug mode' - ), - (env.has_key('stdlib_debug') and env['stdlib_debug'], - '_GLIBCXX_DEBUG_PEDANTIC', - 'libstdc++ pedantic debug mode' - ), - (os.name != 'nt', 'BOOST_POSIX', - 'Indicates to boost which API to use (posix or windows).' - ), - (spell_engine is not None, spell_engine, - 'Spell engine to use' - ), - ], - extra_items = [ - ('#define PACKAGE "%s%s"' % (package, program_suffix), - 'Name of package'), - ('#define PACKAGE_BUGREPORT "%s"' % package_bugreport, - 'Define to the address where bug reports for this package should be sent.'), - ('#define PACKAGE_NAME "%s"' % package_name, - 'Define to the full name of this package.'), - ('#define PACKAGE_STRING "%s"' % package_string, - 'Define to the full name and version of this package.'), - ('#define PACKAGE_TARNAME "%s"' % package_tarname, - 'Define to the one symbol short name of this package.'), - ('#define PACKAGE_VERSION "%s"' % package_version, - 'Define to the version of this package.'), - ('#define BOOST_ALL_NO_LIB 1', - 'disable automatic linking of boost libraries.'), - ('#define USE_%s_PACKAGING 1' % packaging_method.upper(), - 'Packaging method'), - ('#define AIKSAURUS_H_LOCATION ' + aik_location, - 'Aiksaurus include file'), - ('#define SELECT_TYPE_ARG1 %s' % select_arg1, - "Define to the type of arg 1 for `select'."), - ('#define SELECT_TYPE_ARG234 %s' % select_arg234, - "Define to the type of arg 2, 3, 4 for `select'."), - ('#define SELECT_TYPE_ARG5 %s' % select_arg5, - "Define to the type of arg 5 for `select'."), - ], - config_post = '''/************************************************************ - ** You should not need to change anything beyond this point */ + ('getcwd', 'HAVE_GETCWD', None), + ('setenv', 'HAVE_SETENV', None), + ('putenv', 'HAVE_PUTENV', None), + ('fcntl', 'HAVE_FCNTL', None), + ], + types = [ + ('std::istreambuf_iterator', 'HAVE_DECL_ISTREAMBUF_ITERATOR', + '#include \n#include ') + ], + libs = [ + ('gdi32', 'HAVE_LIBGDI32'), + (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'), + (('Aiksaurus', 'libAiksaurus'), 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB'), + ], + custom_tests = [ + (conf.CheckType('pid_t', includes='#include '), + 'HAVE_PID_T', + 'Define is sys/types.h does not have pid_t', + '', + '#define pid_t int', + ), + (conf.CheckCXXGlobalCstd(), + 'CXX_GLOBAL_CSTD', + 'Define if your C++ compiler puts C library functions in the global namespace' + ), + (conf.CheckMkdirOneArg(), + 'MKDIR_TAKES_ONE_ARG', + 'Define if mkdir takes only one argument.' + ), + (conf.CheckLC_MESSAGES(), + 'HAVE_LC_MESSAGES', + 'Define if your file defines LC_MESSAGES.' + ), + (devel_version, 'DEVEL_VERSION', 'Whether or not a development version'), + (env['nls'], + 'ENABLE_NLS', + "Define to 1 if translation of program messages to the user's native anguage is requested.", + ), + (env['nls'] and not included_gettext, + 'HAVE_GETTEXT', + 'Define to 1 if using system gettext library' + ), + (env.has_key('warnings') and env['warnings'], + 'WITH_WARNINGS', + 'Define this if you want to see the warning directives put here and there by the developpers to get attention' + ), + (env.has_key('concept_checks') and env['concept_checks'], + '_GLIBCXX_CONCEPT_CHECKS', + 'libstdc++ concept checking' + ), + (env.has_key('stdlib_debug') and env['stdlib_debug'], + '_GLIBCXX_DEBUG', + 'libstdc++ debug mode' + ), + (env.has_key('stdlib_debug') and env['stdlib_debug'], + '_GLIBCXX_DEBUG_PEDANTIC', + 'libstdc++ pedantic debug mode' + ), + (os.name != 'nt', 'BOOST_POSIX', + 'Indicates to boost which API to use (posix or windows).' + ), + (spell_engine is not None, spell_engine, + 'Spell engine to use' + ), + ], + extra_items = [ + ('#define PACKAGE "%s%s"' % (package, program_suffix), + 'Name of package'), + ('#define PACKAGE_BUGREPORT "%s"' % package_bugreport, + 'Define to the address where bug reports for this package should be sent.'), + ('#define PACKAGE_NAME "%s"' % package_name, + 'Define to the full name of this package.'), + ('#define PACKAGE_STRING "%s"' % package_string, + 'Define to the full name and version of this package.'), + ('#define PACKAGE_TARNAME "%s"' % package_tarname, + 'Define to the one symbol short name of this package.'), + ('#define PACKAGE_VERSION "%s"' % package_version, + 'Define to the version of this package.'), + ('#define BOOST_ALL_NO_LIB 1', + 'disable automatic linking of boost libraries.'), + ('#define USE_%s_PACKAGING 1' % packaging_method.upper(), + 'Packaging method'), + ('#define AIKSAURUS_H_LOCATION ' + aik_location, + 'Aiksaurus include file'), + ('#define SELECT_TYPE_ARG1 %s' % select_arg1, + "Define to the type of arg 1 for `select'."), + ('#define SELECT_TYPE_ARG234 %s' % select_arg234, + "Define to the type of arg 2, 3, 4 for `select'."), + ('#define SELECT_TYPE_ARG5 %s' % select_arg5, + "Define to the type of arg 5 for `select'."), + ], + config_post = '''/************************************************************ +** You should not need to change anything beyond this point */ #ifndef HAVE_STRERROR #if defined(__cplusplus) @@ -1072,153 +1072,153 @@ int mkstemp(char*); #endif ''' - ) - - # these keys are needed in env - for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\ - 'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', - 'ICONV_LIB', 'AIKSAURUS_LIB']: - # USE_ASPELL etc does not go through result - if result.has_key(key): - env[key] = result[key] - env_cache[key] = env[key] - - # - # if nls=yes and gettext=included, create intl/config.h - # intl/libintl.h etc - # - intl_config_h = os.path.join(env.Dir('$BUILDDIR/intl').path, 'config.h') - if env['nls'] and included_gettext: - # - print "Creating %s..." % intl_config_h - # - # create intl/config.h - result = utils.createConfigFile(conf, - config_file = intl_config_h, - config_pre = '''/* intl/config.h. Generated by SCons. */ + ) + + # these keys are needed in env + for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\ + 'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', + 'ICONV_LIB', 'AIKSAURUS_LIB']: + # USE_ASPELL etc does not go through result + if result.has_key(key): + env[key] = result[key] + env_cache[key] = env[key] + + # + # if nls=yes and gettext=included, create intl/config.h + # intl/libintl.h etc + # + intl_config_h = os.path.join(env.Dir('$BUILDDIR/intl').path, 'config.h') + if env['nls'] and included_gettext: + # + print "Creating %s..." % intl_config_h + # + # create intl/config.h + result = utils.createConfigFile(conf, + config_file = intl_config_h, + config_pre = '''/* intl/config.h. Generated by SCons. */ /* -*- C++ -*- */ /* - * \file config.h - * This file is part of LyX, the document processor. - * Licence details can be found in the file COPYING. - * - * This is the compilation configuration file for LyX. - * It was generated by scon. - * You might want to change some of the defaults if something goes wrong - * during the compilation. - */ +* \file config.h +* This file is part of LyX, the document processor. +* Licence details can be found in the file COPYING. +* +* This is the compilation configuration file for LyX. +* It was generated by scon. +* You might want to change some of the defaults if something goes wrong +* during the compilation. +*/ #ifndef _CONFIG_H #define _CONFIG_H ''', - headers = [ - ('unistd.h', 'HAVE_UNISTD_H', 'c'), - ('inttypes.h', 'HAVE_INTTYPES_H', 'c'), - ('string.h', 'HAVE_STRING_H', 'c'), - ('strings.h', 'HAVE_STRINGS_H', 'c'), - ('argz.h', 'HAVE_ARGZ_H', 'c'), - ('limits.h', 'HAVE_LIMITS_H', 'c'), - ('alloca.h', 'HAVE_ALLOCA_H', 'c'), - ('stddef.h', 'HAVE_STDDEF_H', 'c'), - ('stdint.h', 'HAVE_STDINT_H', 'c'), - ('sys/param.h', 'HAVE_SYS_PARAM_H', 'c'), - ], - functions = [ - ('getcwd', 'HAVE_GETCWD', None), - ('stpcpy', 'HAVE_STPCPY', None), - ('strcasecmp', 'HAVE_STRCASECMP', None), - ('strdup', 'HAVE_STRDUP', None), - ('strtoul', 'HAVE_STRTOUL', None), - ('alloca', 'HAVE_ALLOCA', None), - ('__fsetlocking', 'HAVE___FSETLOCKING', None), - ('mempcpy', 'HAVE_MEMPCPY', None), - ('__argz_count', 'HAVE___ARGZ_COUNT', None), - ('__argz_next', 'HAVE___ARGZ_NEXT', None), - ('__argz_stringify', 'HAVE___ARGZ_STRINGIFY', None), - ('setlocale', 'HAVE_SETLOCALE', None), - ('tsearch', 'HAVE_TSEARCH', None), - ('getegid', 'HAVE_GETEGID', None), - ('getgid', 'HAVE_GETGID', None), - ('getuid', 'HAVE_GETUID', None), - ('wcslen', 'HAVE_WCSLEN', None), - ('asprintf', 'HAVE_ASPRINTF', None), - ('wprintf', 'HAVE_WPRINTF', None), - ('snprintf', 'HAVE_SNPRINTF', None), - ('printf', 'HAVE_POSIX_PRINTF', None), - ('fcntl', 'HAVE_FCNTL', None), - ], - types = [ - ('intmax_t', 'HAVE_INTMAX_T', None), - ('long double', 'HAVE_LONG_DOUBLE', None), - ('long long', 'HAVE_LONG_LONG', None), - ('wchar_t', 'HAVE_WCHAR_T', None), - ('wint_t', 'HAVE_WINT_T', None), - ('uintmax_t', 'HAVE_INTTYPES_H_WITH_UINTMAX', '#include '), - ('uintmax_t', 'HAVE_STDINT_H_WITH_UINTMAX', '#include '), - ], - libs = [ - (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'), - ('c', 'HAVE_LIBC'), - ], - custom_tests = [ - (conf.CheckLC_MESSAGES(), - 'HAVE_LC_MESSAGES', - 'Define if your file defines LC_MESSAGES.' - ), - (conf.CheckIconvConst(), - 'ICONV_CONST', - 'Define as const if the declaration of iconv() needs const.', - '#define ICONV_CONST', - '#define ICONV_CONST const', - ), - (conf.CheckType('intmax_t', includes='#include ') or \ - conf.CheckType('intmax_t', includes='#include '), - 'HAVE_INTMAX_T', - "Define to 1 if you have the `intmax_t' type." - ), - (env.has_key('nls') and env['nls'], - 'ENABLE_NLS', - "Define to 1 if translation of program messages to the user's native anguage is requested.", - ), - ], - config_post = '#endif' - ) - - # these keys are needed in env - for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \ - 'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']: - # USE_ASPELL etc does not go through result - if result.has_key(key): - env[key] = result[key] - env_cache[key] = env[key] + headers = [ + ('unistd.h', 'HAVE_UNISTD_H', 'c'), + ('inttypes.h', 'HAVE_INTTYPES_H', 'c'), + ('string.h', 'HAVE_STRING_H', 'c'), + ('strings.h', 'HAVE_STRINGS_H', 'c'), + ('argz.h', 'HAVE_ARGZ_H', 'c'), + ('limits.h', 'HAVE_LIMITS_H', 'c'), + ('alloca.h', 'HAVE_ALLOCA_H', 'c'), + ('stddef.h', 'HAVE_STDDEF_H', 'c'), + ('stdint.h', 'HAVE_STDINT_H', 'c'), + ('sys/param.h', 'HAVE_SYS_PARAM_H', 'c'), + ], + functions = [ + ('getcwd', 'HAVE_GETCWD', None), + ('stpcpy', 'HAVE_STPCPY', None), + ('strcasecmp', 'HAVE_STRCASECMP', None), + ('strdup', 'HAVE_STRDUP', None), + ('strtoul', 'HAVE_STRTOUL', None), + ('alloca', 'HAVE_ALLOCA', None), + ('__fsetlocking', 'HAVE___FSETLOCKING', None), + ('mempcpy', 'HAVE_MEMPCPY', None), + ('__argz_count', 'HAVE___ARGZ_COUNT', None), + ('__argz_next', 'HAVE___ARGZ_NEXT', None), + ('__argz_stringify', 'HAVE___ARGZ_STRINGIFY', None), + ('setlocale', 'HAVE_SETLOCALE', None), + ('tsearch', 'HAVE_TSEARCH', None), + ('getegid', 'HAVE_GETEGID', None), + ('getgid', 'HAVE_GETGID', None), + ('getuid', 'HAVE_GETUID', None), + ('wcslen', 'HAVE_WCSLEN', None), + ('asprintf', 'HAVE_ASPRINTF', None), + ('wprintf', 'HAVE_WPRINTF', None), + ('snprintf', 'HAVE_SNPRINTF', None), + ('printf', 'HAVE_POSIX_PRINTF', None), + ('fcntl', 'HAVE_FCNTL', None), + ], + types = [ + ('intmax_t', 'HAVE_INTMAX_T', None), + ('long double', 'HAVE_LONG_DOUBLE', None), + ('long long', 'HAVE_LONG_LONG', None), + ('wchar_t', 'HAVE_WCHAR_T', None), + ('wint_t', 'HAVE_WINT_T', None), + ('uintmax_t', 'HAVE_INTTYPES_H_WITH_UINTMAX', '#include '), + ('uintmax_t', 'HAVE_STDINT_H_WITH_UINTMAX', '#include '), + ], + libs = [ + (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'), + ('c', 'HAVE_LIBC'), + ], + custom_tests = [ + (conf.CheckLC_MESSAGES(), + 'HAVE_LC_MESSAGES', + 'Define if your file defines LC_MESSAGES.' + ), + (conf.CheckIconvConst(), + 'ICONV_CONST', + 'Define as const if the declaration of iconv() needs const.', + '#define ICONV_CONST', + '#define ICONV_CONST const', + ), + (conf.CheckType('intmax_t', includes='#include ') or \ + conf.CheckType('intmax_t', includes='#include '), + 'HAVE_INTMAX_T', + "Define to 1 if you have the `intmax_t' type." + ), + (env.has_key('nls') and env['nls'], + 'ENABLE_NLS', + "Define to 1 if translation of program messages to the user's native anguage is requested.", + ), + ], + config_post = '#endif' + ) + + # these keys are needed in env + for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \ + 'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']: + # USE_ASPELL etc does not go through result + if result.has_key(key): + env[key] = result[key] + env_cache[key] = env[key] else: - # - # this comes as a big surprise, without this line - # (doing nothing obvious), adding fast_start=yes - # to a build with fast_start=no will result in a rebuild - # Note that the exact header file to check does not matter - conf.CheckCHeader('io.h') - # only a few variables need to be rescanned - for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\ - 'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', - 'ICONV_LIB', 'AIKSAURUS_LIB']: - env[key] = env_cache[key] - # - # nls related keys - if env['nls'] and included_gettext: + # + # this comes as a big surprise, without this line + # (doing nothing obvious), adding fast_start=yes + # to a build with fast_start=no will result in a rebuild + # Note that the exact header file to check does not matter + conf.CheckCHeader('io.h') # only a few variables need to be rescanned - for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \ - 'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']: - env[key] = env_cache[key] + for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\ + 'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', + 'ICONV_LIB', 'AIKSAURUS_LIB']: + env[key] = env_cache[key] + # + # nls related keys + if env['nls'] and included_gettext: + # only a few variables need to be rescanned + for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \ + 'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']: + env[key] = env_cache[key] # this looks misplaced, but intl/libintl.h is needed by src/message.C if env['nls'] and included_gettext: - # libgnuintl.h.in => libintl.h - env.substFile('$BUILDDIR/intl/libintl.h', '$TOP_SRCDIR/intl/libgnuintl.h.in') - env.Command('$BUILDDIR/intl/libgnuintl.h', '$BUILDDIR/intl/libintl.h', - [Copy('$TARGET', '$SOURCE')]) + # libgnuintl.h.in => libintl.h + env.substFile('$BUILDDIR/intl/libintl.h', '$TOP_SRCDIR/intl/libgnuintl.h.in') + env.Command('$BUILDDIR/intl/libgnuintl.h', '$BUILDDIR/intl/libintl.h', + [Copy('$TARGET', '$SOURCE')]) # # Finish auto-configuration @@ -1234,62 +1234,62 @@ env = conf.Finish() # NOTE: Tool('qt') or Tool('qt4') will be loaded later # in their respective directory and specialized env. try: - if frontend in ['qt2', 'qt3']: - # note: env.Tool('qt') my set QT_LIB to qt - qt_libs = ['qt-mt'] - frontend_libs = ['qt-mt'] - elif frontend == 'qt4': - qt_libs = ['QtCore', 'QtGui'] - # set the right lib names - if platform_name == 'win32': - if mode == 'debug' and use_vc: - qt_lib_suffix = 'd4' - else: - qt_lib_suffix = '4' - else: - if mode == 'debug': - qt_lib_suffix = '_debug' - else: - qt_lib_suffix = '' - frontend_libs = [x + qt_lib_suffix for x in qt_libs] + if frontend in ['qt2', 'qt3']: + # note: env.Tool('qt') my set QT_LIB to qt + qt_libs = ['qt-mt'] + frontend_libs = ['qt-mt'] + elif frontend == 'qt4': + qt_libs = ['QtCore', 'QtGui'] + # set the right lib names + if platform_name == 'win32': + if mode == 'debug' and use_vc: + qt_lib_suffix = 'd4' + else: + qt_lib_suffix = '4' + else: + if mode == 'debug': + qt_lib_suffix = '_debug' + else: + qt_lib_suffix = '' + frontend_libs = [x + qt_lib_suffix for x in qt_libs] except: - print "Can not locate qt tools" - print "What I get is " - print " QTDIR: ", env['QTDIR'] + print "Can not locate qt tools" + print "What I get is " + print " QTDIR: ", env['QTDIR'] 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: - system_libs = ['shlwapi', 'shell32', 'advapi32', 'zdll'] - else: - system_libs = ['shlwapi', 'stdc++', 'z'] + # the final link step needs stdc++ to succeed under mingw + # FIXME: shouldn't g++ automatically link to stdc++? + if use_vc: + system_libs = ['shlwapi', 'shell32', 'advapi32', 'zdll'] + else: + system_libs = ['shlwapi', 'stdc++', 'z'] elif platform_name == 'cygwin' and env['X11']: - system_libs = ['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor', - 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 'resolv', - 'pthread', 'z'] + system_libs = ['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor', + 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 'resolv', + 'pthread', 'z'] else: - system_libs = ['z'] + system_libs = ['z'] libs = [ - ('HAVE_ICONV', env['ICONV_LIB']), - ('HAVE_LIBGDI32', 'gdi32'), - ('HAVE_LIBAIKSAURUS', env['AIKSAURUS_LIB']), - ('USE_ASPELL', aspell_lib), - ('USE_ISPELL', 'ispell'), - ('USE_PSPELL', 'pspell'), + ('HAVE_ICONV', env['ICONV_LIB']), + ('HAVE_LIBGDI32', 'gdi32'), + ('HAVE_LIBAIKSAURUS', env['AIKSAURUS_LIB']), + ('USE_ASPELL', aspell_lib), + ('USE_ISPELL', 'ispell'), + ('USE_PSPELL', 'pspell'), ] for lib in libs: - if env[lib[0]]: - system_libs.append(lib[1]) + if env[lib[0]]: + system_libs.append(lib[1]) # # Build parameters CPPPATH etc # if env['X11']: - env.AppendUnique(LIBPATH = ['/usr/X11R6/lib']) + env.AppendUnique(LIBPATH = ['/usr/X11R6/lib']) # # boost: for boost header files @@ -1299,7 +1299,7 @@ if env['X11']: env['CPPPATH'] += ['$TOP_SRCDIR/boost', '$BUILDDIR/common', '$TOP_SRCDIR/src'] # for intl/config.h, intl/libintl.h and intl/libgnuintl.h if env['nls'] and included_gettext: - env['CPPPATH'].append('$BUILDDIR/intl') + env['CPPPATH'].append('$BUILDDIR/intl') # # QT_INC_PATH is not needed for *every* source file env['CPPPATH'].remove(qt_inc_path) @@ -1311,10 +1311,10 @@ env['CPPPATH'].remove(qt_inc_path) # for details # if platform_name == 'cygwin': - ld_script_path = '/usr/lib/qt3/mkspecs/cygwin-g++' - ld_script = utils.installCygwinLDScript(ld_script_path) - env.AppendUnique(LINKFLAGS = ['-Wl,--enable-runtime-pseudo-reloc', - '-Wl,--script,%s' % ld_script, '-Wl,-s']) + ld_script_path = '/usr/lib/qt3/mkspecs/cygwin-g++' + ld_script = utils.installCygwinLDScript(ld_script_path) + env.AppendUnique(LINKFLAGS = ['-Wl,--enable-runtime-pseudo-reloc', + '-Wl,--script,%s' % ld_script, '-Wl,-s']) # # Report results @@ -1344,25 +1344,25 @@ Frontend: LyX dir: %s LyX files dir: %s ''' % (platform_name, - env.subst('$CCFLAGS'), env.subst('$CC'), - env.subst('$CPPFLAGS'), env.subst('$CFLAGS'), - 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(frontend_libs), str(system_libs), str(env['CPPPATH']), - frontend, packaging_method, - prefix, env['LYX_DIR']) + env.subst('$CCFLAGS'), env.subst('$CC'), + env.subst('$CPPFLAGS'), env.subst('$CFLAGS'), + 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(frontend_libs), str(system_libs), str(env['CPPPATH']), + frontend, packaging_method, + prefix, env['LYX_DIR']) if frontend in ['qt2', 'qt3', 'qt4']: - env['VERSION_INFO'] += ''' include dir: %s + env['VERSION_INFO'] += ''' include dir: %s library dir: %s X11: %s ''' % (qt_inc_path, qt_lib_path, env['X11']) if not fast_start: - print env['VERSION_INFO'] + print env['VERSION_INFO'] # # Mingw command line may be too short for our link usage, @@ -1373,14 +1373,14 @@ if not fast_start: # spawn system. logfile = env.get('logfile', default_log_file) if logfile != '' or platform_name == 'win32': - import time - utils.setLoggedSpawn(env, logfile, longarg = (platform_name == 'win32'), - info = '''# This is a log of commands used by scons to build lyx + import time + utils.setLoggedSpawn(env, logfile, longarg = (platform_name == 'win32'), + info = '''# This is a log of commands used by scons to build lyx # Time: %s # Command: %s # Info: %s ''' % (time.asctime(), ' '.join(sys.argv), - env['VERSION_INFO'].replace('\n','\n# ')) ) + env['VERSION_INFO'].replace('\n','\n# ')) ) # Cleanup stuff @@ -1406,18 +1406,18 @@ env.SConsignFile(os.path.join(Dir(env['BUILDDIR']).abspath, '.sconsign')) print "Building all targets recursively" if env.has_key('rebuild'): - rebuild_targets = env['rebuild'].split(',') + rebuild_targets = env['rebuild'].split(',') else: - rebuild_targets = None + rebuild_targets = None 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) targets = BUILD_TARGETS # msvc need to pass full target name, so I have to look for path/lyx etc build_lyx = targets == [] or True in ['lyx' in x for x in targets] \ - or 'install' in targets or 'all' in targets + or 'install' in targets or 'all' in targets build_boost = (env['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']] @@ -1427,9 +1427,9 @@ 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 'install' in targets or 'all' in targets + or 'install' in targets or 'all' in targets build_tex2lyx = True in ['tex2lyx' in x for x in targets] \ - or 'install' in targets or 'all' 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_qt2 = (build_lyx and frontend == 'qt2') or 'qt2' in targets @@ -1441,104 +1441,103 @@ build_msvs_projects = use_vc and 'msvs_projects' in targets # now, if rebuild_targets is specified, do not rebuild some targets rebuild_targets = 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 libExists(libname): - 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_support = ifBuildLib('support', 'support', build_support) - 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_qt2 = ifBuildLib('qt2', 'qt2', build_qt2) - build_qt3 = ifBuildLib('qt3', 'qt3', build_qt3) - build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4) + 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 libExists(libname): + 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_support = ifBuildLib('support', 'support', build_support) + 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_qt2 = ifBuildLib('qt2', 'qt2', build_qt2) + build_qt3 = ifBuildLib('qt3', 'qt3', build_qt3) + build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4) # sync frontend and frontend (maybe build qt4 with frontend=qt3) if build_qt2: - frontend = 'qt2' + frontend = 'qt2' elif build_qt3: - frontend = 'qt3' + frontend = 'qt3' elif build_qt4: - frontend = 'qt4' + frontend = 'qt4' if build_boost: - # - # boost libraries - # - # special builddir - env.BuildDir('$BUILDDIR/boost', '$TOP_SRCDIR/boost/libs', duplicate = 0) - - boostenv = env.Copy() - # - # - # boost use its own config.h - boostenv['CPPPATH'] = ['$TOP_SRCDIR/boost', '$BUILDDIR/boost'] + extra_inc_paths - boostenv.AppendUnique(CCFLAGS = ['-DBOOST_USER_CONFIG=""']) - - for lib in boost_libs: - print 'Processing files in boost/libs/%s/src...' % lib - boostlib = boostenv.StaticLibrary( - target = '$LOCALLIBPATH/included_boost_%s' % lib, - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/boost/libs/%s/src' % lib), - pattern = '*.cpp', build_dir = '$BUILDDIR/boost/%s/src' % lib) - ) - Alias('boost', boostlib) + # + # boost libraries + # + # special builddir + env.BuildDir('$BUILDDIR/boost', '$TOP_SRCDIR/boost/libs', duplicate = 0) + + boostenv = env.Copy() + # + # boost use its own config.h + boostenv['CPPPATH'] = ['$TOP_SRCDIR/boost', '$BUILDDIR/boost'] + extra_inc_paths + boostenv.AppendUnique(CCFLAGS = ['-DBOOST_USER_CONFIG=""']) + + for lib in boost_libs: + print 'Processing files in boost/libs/%s/src...' % lib + boostlib = boostenv.StaticLibrary( + target = '$LOCALLIBPATH/included_boost_%s' % lib, + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/boost/libs/%s/src' % lib), + pattern = '*.cpp', build_dir = '$BUILDDIR/boost/%s/src' % lib) + ) + Alias('boost', boostlib) if build_intl: - # - # intl - # - intlenv = env.Copy() - - print "Processing files in intl..." - - env.BuildDir('$BUILDDIR/intl', '$TOP_SRCDIR/intl', duplicate = 0) - - # 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 = [ - r'-DLOCALEDIR=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"', - r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"', - r'-DLIBDIR=\"' + env['TOP_SRCDIR'].replace('\\', '\\\\') + r'/lib\"', - '-DIN_LIBINTL', - '-DENABLE_RELOCATABLE=1', - '-DIN_LIBRARY', - r'-DINSTALLDIR=\"' + prefix.replace('\\', '\\\\') + r'/lib\"', - '-DNO_XMALLOC', - '-Dset_relocation_prefix=libintl_set_relocation_prefix', - '-Drelocate=libintl_relocate', - '-DDEPENDS_ON_LIBICONV=1', - '-DHAVE_CONFIG_H' - ] - ) - - intl = intlenv.StaticLibrary( - target = '$LOCALLIBPATH/included_intl', - LIBS = ['c'], - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/intl'), pattern = '*.c', - exclude = ['vasnprintf.c', 'printf-parse.c', 'printf-args.c', 'os2compat.c'], - build_dir = '$BUILDDIR/intl') - ) - Alias('intl', intl) + # + # intl + # + intlenv = env.Copy() + + print "Processing files in intl..." + + env.BuildDir('$BUILDDIR/intl', '$TOP_SRCDIR/intl', duplicate = 0) + + # 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 = [ + r'-DLOCALEDIR=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"', + r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALEDIR'].replace('\\', '\\\\') + r'\"', + r'-DLIBDIR=\"' + env['TOP_SRCDIR'].replace('\\', '\\\\') + r'/lib\"', + '-DIN_LIBINTL', + '-DENABLE_RELOCATABLE=1', + '-DIN_LIBRARY', + r'-DINSTALLDIR=\"' + prefix.replace('\\', '\\\\') + r'/lib\"', + '-DNO_XMALLOC', + '-Dset_relocation_prefix=libintl_set_relocation_prefix', + '-Drelocate=libintl_relocate', + '-DDEPENDS_ON_LIBICONV=1', + '-DHAVE_CONFIG_H' + ] + ) + + intl = intlenv.StaticLibrary( + target = '$LOCALLIBPATH/included_intl', + LIBS = ['c'], + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/intl'), pattern = '*.c', + exclude = ['vasnprintf.c', 'printf-parse.c', 'printf-args.c', 'os2compat.c'], + build_dir = '$BUILDDIR/intl') + ) + Alias('intl', intl) # @@ -1548,778 +1547,778 @@ env.BuildDir('$BUILDDIR/common', '$TOP_SRCDIR/src', duplicate = 0) if build_support: - # - # src/support - # - print "Processing files in src/support..." + # + # src/support + # + print "Processing files in src/support..." - env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRCDIR/src/support/package.C.in') + env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRCDIR/src/support/package.C.in') - support = env.StaticLibrary( - target = '$LOCALLIBPATH/support', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/support'), pattern = lyx_ext, - exclude = ['os_win32.C', 'os_unix.C', 'os_cygwin.C', 'os_os2.C', 'atexit.c'], - include = ['package.C'], build_dir = '$BUILDDIR/common/support') - ) - Alias('support', support) + support = env.StaticLibrary( + target = '$LOCALLIBPATH/support', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/support'), pattern = lyx_ext, + exclude = ['os_win32.C', 'os_unix.C', 'os_cygwin.C', 'os_os2.C', 'atexit.c'], + include = ['package.C'], build_dir = '$BUILDDIR/common/support') + ) + Alias('support', support) if build_mathed: - # - # src/mathed - # - print "Processing files in src/mathed..." - # - mathed = env.StaticLibrary( - target = '$LOCALLIBPATH/mathed', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/mathed'), - pattern = lyx_ext, - exclude = ['math_xyarrowinset.C', 'math_mboxinset.C', 'formulamacro.C'], - build_dir = '$BUILDDIR/common/mathed') - ) - Alias('mathed', mathed) + # + # src/mathed + # + print "Processing files in src/mathed..." + # + mathed = env.StaticLibrary( + target = '$LOCALLIBPATH/mathed', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/mathed'), + pattern = lyx_ext, + exclude = ['math_xyarrowinset.C', 'math_mboxinset.C', 'formulamacro.C'], + build_dir = '$BUILDDIR/common/mathed') + ) + Alias('mathed', mathed) if build_insets: - # - # src/insets - # - print "Processing files in src/insets..." - # - insets = env.StaticLibrary( - target = '$LOCALLIBPATH/insets', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/insets'), - pattern = lyx_ext, - exclude = ['insettheorem.C'], build_dir = '$BUILDDIR/common/insets') - ) - Alias('insets', insets) + # + # src/insets + # + print "Processing files in src/insets..." + # + insets = env.StaticLibrary( + target = '$LOCALLIBPATH/insets', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/insets'), + pattern = lyx_ext, + exclude = ['insettheorem.C'], build_dir = '$BUILDDIR/common/insets') + ) + Alias('insets', insets) if build_frontends: - # - # src/frontends - # - print "Processing files in src/frontends..." + # + # src/frontends + # + print "Processing files in src/frontends..." - frontends = env.StaticLibrary( - target = '$LOCALLIBPATH/frontends', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/frontends') - ) - Alias('frontends', frontends) + frontends = env.StaticLibrary( + target = '$LOCALLIBPATH/frontends', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/frontends') + ) + Alias('frontends', frontends) if build_graphics: - # - # src/graphics - # - print "Processing files in src/graphics..." + # + # src/graphics + # + print "Processing files in src/graphics..." - graphics = env.StaticLibrary( - target = '$LOCALLIBPATH/graphics', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/graphics'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/graphics') - ) - Alias('graphics', graphics) + graphics = env.StaticLibrary( + target = '$LOCALLIBPATH/graphics', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/graphics'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/graphics') + ) + Alias('graphics', graphics) if build_controllers: - # - # src/frontends/controllers - # - print "Processing files in src/frontends/controllers..." + # + # src/frontends/controllers + # + print "Processing files in src/frontends/controllers..." - controllers = env.StaticLibrary( - target = '$LOCALLIBPATH/controllers', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/controllers'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/frontends/controllers') - ) - Alias('controllers', controllers) + controllers = env.StaticLibrary( + target = '$LOCALLIBPATH/controllers', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/controllers'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/frontends/controllers') + ) + Alias('controllers', controllers) # # src/frontend/qt2/3/4 # if build_qt2 or build_qt3 or build_qt4: - env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRCDIR/src/frontend/$frontend', duplicate = 0) + env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRCDIR/src/frontend/$frontend', duplicate = 0) if build_qt2: - print "Processing files in src/frontends/qt2..." - - qt2env = env.Copy() - # disable auto scan to speed up non build time - qt2env['QT_AUTOSCAN'] = 0 - qt2env['QT_MOCHPREFIX'] = '' - - # load qt2 tools - qt2env.Tool('qt') - - qt2env.AppendUnique(CPPPATH = [ - '$BUILDDIR/common', - '$BUILDDIR/common/images', - '$BUILDDIR/common/frontends', - '$BUILDDIR/common/frontends/qt2', - '$BUILDDIR/common/frontends/controllers', - qt_inc_path] - ) - - qt2_moc_files = ["$BUILDDIR/common/frontends/qt2/%s" % x for x in Split(''' - BulletsModule.C - emptytable.C - FileDialog_private.C - floatplacement.C - iconpalette.C - lengthcombo.C - panelstack.C - QAboutDialog.C - QBibitemDialog.C - QBibtexDialog.C - QBoxDialog.C - QBranchDialog.C - QBrowseBox.C - QChangesDialog.C - QCharacterDialog.C - QCitationDialog.C - QCommandBuffer.C - QCommandEdit.C - QContentPane.C - QDelimiterDialog.C - QDocumentDialog.C - QErrorListDialog.C - QERTDialog.C - QExternalDialog.C - QFloatDialog.C - QGraphicsDialog.C - QIncludeDialog.C - QIndexDialog.C - QLogDialog.C - QLPopupMenu.C - QLPrintDialog.C - QMathDialog.C - QMathMatrixDialog.C - QNoteDialog.C - QParagraphDialog.C - QPrefsDialog.C - QRefDialog.C - QSearchDialog.C - QSendtoDialog.C - qsetborder.C - QShowFileDialog.C - QSpellcheckerDialog.C - QDialogView.C - QTabularCreateDialog.C - QTabularDialog.C - QTexinfoDialog.C - QThesaurusDialog.C - QTocDialog.C - qttableview.C - QtView.C - QURLDialog.C - QVSpaceDialog.C - QWrapDialog.C - QLToolbar.C - socket_callback.C - validators.C - ''')] - - # manually moc and uic files for better performance - qt2_moced_files = [qt2env.Moc(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt2_moc_files] - - qt2_uiced_files = [qt2env.Uic('$BUILDDIR/common/frontends/qt2/ui/'+x) for x in \ - utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt2/ui'), pattern = '*.ui')] - - qt2_uiced_cc_files = [] - for x in qt2_uiced_files: - qt2_uiced_cc_files.extend(x[1:]) - - qt2 = qt2env.StaticLibrary( - target = '$LOCALLIBPATH/qt2', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt2/'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/frontends/qt2') + qt2_moced_files + qt2_uiced_cc_files - ) - Alias('qt2', qt2) + print "Processing files in src/frontends/qt2..." + + qt2env = env.Copy() + # disable auto scan to speed up non build time + qt2env['QT_AUTOSCAN'] = 0 + qt2env['QT_MOCHPREFIX'] = '' + + # load qt2 tools + qt2env.Tool('qt') + + qt2env.AppendUnique(CPPPATH = [ + '$BUILDDIR/common', + '$BUILDDIR/common/images', + '$BUILDDIR/common/frontends', + '$BUILDDIR/common/frontends/qt2', + '$BUILDDIR/common/frontends/controllers', + qt_inc_path] + ) + + qt2_moc_files = ["$BUILDDIR/common/frontends/qt2/%s" % x for x in Split(''' + BulletsModule.C + emptytable.C + FileDialog_private.C + floatplacement.C + iconpalette.C + lengthcombo.C + panelstack.C + QAboutDialog.C + QBibitemDialog.C + QBibtexDialog.C + QBoxDialog.C + QBranchDialog.C + QBrowseBox.C + QChangesDialog.C + QCharacterDialog.C + QCitationDialog.C + QCommandBuffer.C + QCommandEdit.C + QContentPane.C + QDelimiterDialog.C + QDocumentDialog.C + QErrorListDialog.C + QERTDialog.C + QExternalDialog.C + QFloatDialog.C + QGraphicsDialog.C + QIncludeDialog.C + QIndexDialog.C + QLogDialog.C + QLPopupMenu.C + QLPrintDialog.C + QMathDialog.C + QMathMatrixDialog.C + QNoteDialog.C + QParagraphDialog.C + QPrefsDialog.C + QRefDialog.C + QSearchDialog.C + QSendtoDialog.C + qsetborder.C + QShowFileDialog.C + QSpellcheckerDialog.C + QDialogView.C + QTabularCreateDialog.C + QTabularDialog.C + QTexinfoDialog.C + QThesaurusDialog.C + QTocDialog.C + qttableview.C + QtView.C + QURLDialog.C + QVSpaceDialog.C + QWrapDialog.C + QLToolbar.C + socket_callback.C + validators.C + ''')] + + # manually moc and uic files for better performance + qt2_moced_files = [qt2env.Moc(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt2_moc_files] + + qt2_uiced_files = [qt2env.Uic('$BUILDDIR/common/frontends/qt2/ui/'+x) for x in \ + utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt2/ui'), pattern = '*.ui')] + + qt2_uiced_cc_files = [] + for x in qt2_uiced_files: + qt2_uiced_cc_files.extend(x[1:]) + + qt2 = qt2env.StaticLibrary( + target = '$LOCALLIBPATH/qt2', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt2/'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/frontends/qt2') + qt2_moced_files + qt2_uiced_cc_files + ) + Alias('qt2', qt2) if build_qt3: - print "Processing files in src/frontends/qt3..." - - qt3env = env.Copy() - # disable auto scan to speed up non build time - qt3env['QT_AUTOSCAN'] = 0 - qt3env['QT_MOCHPREFIX'] = '' - - # load qt3 tools - qt3env.Tool('qt') - - qt3env.AppendUnique(CPPPATH = [ - '$BUILDDIR/common', - '$BUILDDIR/common/images', - '$BUILDDIR/common/frontends', - '$BUILDDIR/common/frontends/qt3', - '$BUILDDIR/common/frontends/controllers', - qt_inc_path] - ) - - qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split(''' - BulletsModule.C - emptytable.C - FileDialog_private.C - floatplacement.C - iconpalette.C - lengthcombo.C - panelstack.C - QAboutDialog.C - QBibitemDialog.C - QBibtexDialog.C - QBoxDialog.C - QBranchDialog.C - QBrowseBox.C - QChangesDialog.C - QCharacterDialog.C - QCitationDialog.C - QCommandBuffer.C - QCommandEdit.C - QContentPane.C - QDelimiterDialog.C - QDocumentDialog.C - QErrorListDialog.C - QERTDialog.C - QExternalDialog.C - QFloatDialog.C - QGraphicsDialog.C - QIncludeDialog.C - QIndexDialog.C - QLogDialog.C - QViewSourceDialog.C - QLPopupMenu.C - QLPrintDialog.C - QMathDialog.C - QMathMatrixDialog.C - QNoteDialog.C - QParagraphDialog.C - QPrefsDialog.C - QRefDialog.C - QSearchDialog.C - QSendtoDialog.C - qsetborder.C - QShowFileDialog.C - QSpellcheckerDialog.C - QDialogView.C - QTabularCreateDialog.C - QTabularDialog.C - QTexinfoDialog.C - QThesaurusDialog.C - QTocDialog.C - qttableview.C - QtView.C - QURLDialog.C - QVSpaceDialog.C - QWrapDialog.C - QLToolbar.C - socket_callback.C - validators.C - ''')] - - # manually moc and uic files for better performance - qt3_moced_files = [qt3env.Moc(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt3_moc_files] - - qt3_uiced_files = [qt3env.Uic('$BUILDDIR/common/frontends/qt3/ui/'+x) for x in \ - utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt3/ui'), pattern = '*.ui')] - - qt3_uiced_cc_files = [] - for x in qt3_uiced_files: - qt3_uiced_cc_files.extend(x[1:]) - - qt3 = qt3env.StaticLibrary( - target = '$LOCALLIBPATH/qt3', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt3/'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/frontends/qt3') + qt3_moced_files + qt3_uiced_cc_files - ) - Alias('qt3', qt3) + print "Processing files in src/frontends/qt3..." + + qt3env = env.Copy() + # disable auto scan to speed up non build time + qt3env['QT_AUTOSCAN'] = 0 + qt3env['QT_MOCHPREFIX'] = '' + + # load qt3 tools + qt3env.Tool('qt') + + qt3env.AppendUnique(CPPPATH = [ + '$BUILDDIR/common', + '$BUILDDIR/common/images', + '$BUILDDIR/common/frontends', + '$BUILDDIR/common/frontends/qt3', + '$BUILDDIR/common/frontends/controllers', + qt_inc_path] + ) + + qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split(''' + BulletsModule.C + emptytable.C + FileDialog_private.C + floatplacement.C + iconpalette.C + lengthcombo.C + panelstack.C + QAboutDialog.C + QBibitemDialog.C + QBibtexDialog.C + QBoxDialog.C + QBranchDialog.C + QBrowseBox.C + QChangesDialog.C + QCharacterDialog.C + QCitationDialog.C + QCommandBuffer.C + QCommandEdit.C + QContentPane.C + QDelimiterDialog.C + QDocumentDialog.C + QErrorListDialog.C + QERTDialog.C + QExternalDialog.C + QFloatDialog.C + QGraphicsDialog.C + QIncludeDialog.C + QIndexDialog.C + QLogDialog.C + QViewSourceDialog.C + QLPopupMenu.C + QLPrintDialog.C + QMathDialog.C + QMathMatrixDialog.C + QNoteDialog.C + QParagraphDialog.C + QPrefsDialog.C + QRefDialog.C + QSearchDialog.C + QSendtoDialog.C + qsetborder.C + QShowFileDialog.C + QSpellcheckerDialog.C + QDialogView.C + QTabularCreateDialog.C + QTabularDialog.C + QTexinfoDialog.C + QThesaurusDialog.C + QTocDialog.C + qttableview.C + QtView.C + QURLDialog.C + QVSpaceDialog.C + QWrapDialog.C + QLToolbar.C + socket_callback.C + validators.C + ''')] + + # manually moc and uic files for better performance + qt3_moced_files = [qt3env.Moc(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt3_moc_files] + + qt3_uiced_files = [qt3env.Uic('$BUILDDIR/common/frontends/qt3/ui/'+x) for x in \ + utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt3/ui'), pattern = '*.ui')] + + qt3_uiced_cc_files = [] + for x in qt3_uiced_files: + qt3_uiced_cc_files.extend(x[1:]) + + qt3 = qt3env.StaticLibrary( + target = '$LOCALLIBPATH/qt3', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt3/'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/frontends/qt3') + qt3_moced_files + qt3_uiced_cc_files + ) + Alias('qt3', qt3) if build_qt4: - print "Processing files in src/frontends/qt4..." - - qt4env = env.Copy() - qt4env['QT_AUTOSCAN'] = 0 - - # local qt4 toolset from - # http://www.iua.upf.es/~dgarcia/Codders/sconstools.html - # - # NOTE: I have to patch qt4.py since it does not automatically - # process .C file!!! (add to cxx_suffixes ) - # - qt4env.Tool('qt4', [scons_dir]) - qt4env.EnableQt4Modules(qt_libs, debug = (mode == 'debug')) - - qt4env.AppendUnique(CPPPATH = [ - '$BUILDDIR/common', - '$BUILDDIR/common/images', - '$BUILDDIR/common/frontends', - '$BUILDDIR/common/frontends/qt4', - '$BUILDDIR/common/frontends/controllers', - qt_inc_path - ] - ) - - # FIXME: replace by something from pkg_config - qt4env.Append(CCFLAGS = [ - '-DHAVE_CONFIG_H', - '-DQT_CLEAN_NAMESPACE', - '-DQT_GENUINE_STR', - '-DQT_NO_STL', - '-DQT3_SUPPORT', - ] - ) - - - qt4_moc_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split(''' - BulletsModule.C - emptytable.C - FileDialog_private.C - floatplacement.C - iconpalette.C - lengthcombo.C - InsertTableWidget.C - panelstack.C - QAboutDialog.C - QBibitemDialog.C - QBibtexDialog.C - QBoxDialog.C - QBranchDialog.C - QBranches.C - QChangesDialog.C - QCharacterDialog.C - QCitationDialog.C - QCommandBuffer.C - QCommandEdit.C - QDelimiterDialog.C - QDocumentDialog.C - QErrorListDialog.C - QERTDialog.C - QExternalDialog.C - QFloatDialog.C - QGraphicsDialog.C - QIncludeDialog.C - QIndexDialog.C - Action.C - QLogDialog.C - QViewSourceDialog.C - QViewSource.C - QLMenubar.C - QLPopupMenu.C - QLPrintDialog.C - QMathDialog.C - QMathMatrixDialog.C - QNoteDialog.C - QParagraphDialog.C - QPrefsDialog.C - QRefDialog.C - QSearchDialog.C - QSendtoDialog.C - qsetborder.C - QShowFileDialog.C - QSpellcheckerDialog.C - QDialogView.C - QTabularCreateDialog.C - QTabularDialog.C - QTexinfoDialog.C - QThesaurusDialog.C - TocModel.C - QTocDialog.C - GuiView.C - QURLDialog.C - QVSpaceDialog.C - GuiWorkArea.C - QWrapDialog.C - QLToolbar.C - socket_callback.C - validators.C - ''') ] - - # - # Compile resources - # - resources = [qt4env.Uic4(x.split('.')[0]) for x in \ - utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt4/ui'), pattern = '*.ui', - build_dir = '$BUILDDIR/common/frontends/qt4/ui')] - - # - # moc qt4_moc_files, the moced files are included in the original files - # - qt4_moced_files = [qt4env.Moc4(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt4_moc_files] - - qt4 = qt4env.StaticLibrary( - target = '$LOCALLIBPATH/qt4', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt4'), pattern = lyx_ext, - exclude = ['QBrowseBox.C'], build_dir = '$BUILDDIR/common/frontends/qt4') - ) - Alias('qt4', qt4) + print "Processing files in src/frontends/qt4..." + qt4env = env.Copy() + qt4env['QT_AUTOSCAN'] = 0 -if build_client: - # - # src/client - # - env.BuildDir('$BUILDDIR/common', '$TOP_SRCDIR/src', duplicate = 0) - - print "Processing files in src/client..." - - if env['HAVE_FCNTL']: - client = env.Program( - target = '$BUILDDIR/common/client/lyxclient', - LIBS = ['support'] + intl_libs + system_libs + - socket_libs + boost_libraries, - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/client'), pattern = lyx_ext, - build_dir = '$BUILDDIR/common/client') + # local qt4 toolset from + # http://www.iua.upf.es/~dgarcia/Codders/sconstools.html + # + # NOTE: I have to patch qt4.py since it does not automatically + # process .C file!!! (add to cxx_suffixes ) + # + qt4env.Tool('qt4', [scons_dir]) + qt4env.EnableQt4Modules(qt_libs, debug = (mode == 'debug')) + + qt4env.AppendUnique(CPPPATH = [ + '$BUILDDIR/common', + '$BUILDDIR/common/images', + '$BUILDDIR/common/frontends', + '$BUILDDIR/common/frontends/qt4', + '$BUILDDIR/common/frontends/controllers', + qt_inc_path + ] + ) + + # FIXME: replace by something from pkg_config + qt4env.Append(CCFLAGS = [ + '-DHAVE_CONFIG_H', + '-DQT_CLEAN_NAMESPACE', + '-DQT_GENUINE_STR', + '-DQT_NO_STL', + '-DQT3_SUPPORT', + ] + ) + + + qt4_moc_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split(''' + BulletsModule.C + emptytable.C + FileDialog_private.C + floatplacement.C + iconpalette.C + lengthcombo.C + InsertTableWidget.C + panelstack.C + QAboutDialog.C + QBibitemDialog.C + QBibtexDialog.C + QBoxDialog.C + QBranchDialog.C + QBranches.C + QChangesDialog.C + QCharacterDialog.C + QCitationDialog.C + QCommandBuffer.C + QCommandEdit.C + QDelimiterDialog.C + QDocumentDialog.C + QErrorListDialog.C + QERTDialog.C + QExternalDialog.C + QFloatDialog.C + QGraphicsDialog.C + QIncludeDialog.C + QIndexDialog.C + Action.C + QLogDialog.C + QViewSourceDialog.C + QViewSource.C + QLMenubar.C + QLPopupMenu.C + QLPrintDialog.C + QMathDialog.C + QMathMatrixDialog.C + QNoteDialog.C + QParagraphDialog.C + QPrefsDialog.C + QRefDialog.C + QSearchDialog.C + QSendtoDialog.C + qsetborder.C + QShowFileDialog.C + QSpellcheckerDialog.C + QDialogView.C + QTabularCreateDialog.C + QTabularDialog.C + QTexinfoDialog.C + QThesaurusDialog.C + TocModel.C + QTocDialog.C + GuiView.C + QURLDialog.C + QVSpaceDialog.C + GuiWorkArea.C + QWrapDialog.C + QLToolbar.C + socket_callback.C + validators.C + ''') ] + + # + # Compile resources + # + resources = [qt4env.Uic4(x.split('.')[0]) for x in \ + utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt4/ui'), pattern = '*.ui', + build_dir = '$BUILDDIR/common/frontends/qt4/ui')] + + # + # moc qt4_moc_files, the moced files are included in the original files + # + qt4_moced_files = [qt4env.Moc4(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt4_moc_files] + + qt4 = qt4env.StaticLibrary( + target = '$LOCALLIBPATH/qt4', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/frontends/qt4'), pattern = lyx_ext, + exclude = ['QBrowseBox.C'], build_dir = '$BUILDDIR/common/frontends/qt4') ) - Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]), - client, [Copy('$TARGET', '$SOURCE')])) - else: - client = None - Alias('client', client) + Alias('qt4', qt4) + + +if build_client: + # + # src/client + # + env.BuildDir('$BUILDDIR/common', '$TOP_SRCDIR/src', duplicate = 0) + + print "Processing files in src/client..." + + if env['HAVE_FCNTL']: + client = env.Program( + target = '$BUILDDIR/common/client/lyxclient', + LIBS = ['support'] + intl_libs + system_libs + + socket_libs + boost_libraries, + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/client'), pattern = lyx_ext, + build_dir = '$BUILDDIR/common/client') + ) + Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]), + client, [Copy('$TARGET', '$SOURCE')])) + else: + client = None + Alias('client', client) if build_tex2lyx: - # - # tex2lyx - # - print "Processing files in src/tex2lyx..." - - tex2lyx_env = env.Copy() - # - tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx']) - tex2lyx_env.AppendUnique(LIBPATH = ['#$LOCALLIBPATH']) - - for file in ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.h', 'lyxlayout.C', - 'lyxtextclass.h', 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C']: - env.Command('$BUILDDIR/common/tex2lyx/'+file, '$TOP_SRCDIR/src/'+file, - [Copy('$TARGET', '$SOURCE')]) - - tex2lyx = tex2lyx_env.Program( - target = '$BUILDDIR/common/tex2lyx/tex2lyx', - LIBS = ['support'] + boost_libraries + system_libs, - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/tex2lyx'), pattern = lyx_ext, - include = ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.C', - 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C'], - build_dir = '$BUILDDIR/common/tex2lyx') - ) - Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]), - tex2lyx, [Copy('$TARGET', '$SOURCE')])) - Alias('tex2lyx', tex2lyx) + # + # tex2lyx + # + print "Processing files in src/tex2lyx..." + + tex2lyx_env = env.Copy() + # + tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx']) + tex2lyx_env.AppendUnique(LIBPATH = ['#$LOCALLIBPATH']) + + for file in ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.h', 'lyxlayout.C', + 'lyxtextclass.h', 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C']: + env.Command('$BUILDDIR/common/tex2lyx/'+file, '$TOP_SRCDIR/src/'+file, + [Copy('$TARGET', '$SOURCE')]) + + tex2lyx = tex2lyx_env.Program( + target = '$BUILDDIR/common/tex2lyx/tex2lyx', + LIBS = ['support'] + boost_libraries + system_libs, + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src/tex2lyx'), pattern = lyx_ext, + include = ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.C', + 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C'], + build_dir = '$BUILDDIR/common/tex2lyx') + ) + Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]), + tex2lyx, [Copy('$TARGET', '$SOURCE')])) + Alias('tex2lyx', tex2lyx) if build_lyxbase: - # - # src/ - # - print "Processing files in src..." - - env.substFile('$BUILDDIR/common/version.C', '$TOP_SRCDIR/src/version.C.in') - - lyx_post_source = Split(''' - tabular.C - dimension.C - PrinterParams.C - box.C - Thesaurus.C - SpellBase.C - ''') - - if env.has_key('USE_ASPELL') and env['USE_ASPELL']: - lyx_post_source.append('aspell.C') - elif env.has_key('USE_PSPELL') and env['USE_PSPELL']: - lyx_post_source.append('pspell.C') - elif env.has_key('USE_ISPELL') and env['USE_ISPELL']: - lyx_post_source.append('ispell.C') - - # msvc requires at least one source file with main() - # so I exclude main.C from lyxbase - lyxbase_pre = env.StaticLibrary( - target = '$LOCALLIBPATH/lyxbase_pre', - source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src'), pattern = lyx_ext, - exclude = lyx_post_source + ['main.C', 'aspell.C', 'pspell.C', - 'ispell.C', 'Variables.C', 'Sectioning.C'], - include = ['version.C'], build_dir = '$BUILDDIR/common') - ) - lyxbase_post = env.StaticLibrary( - target = '$LOCALLIBPATH/lyxbase_post', - source = ["$BUILDDIR/common/%s" % x for x in lyx_post_source] - ) - Alias('lyxbase', lyxbase_pre) - Alias('lyxbase', lyxbase_post) + # + # src/ + # + print "Processing files in src..." + + env.substFile('$BUILDDIR/common/version.C', '$TOP_SRCDIR/src/version.C.in') + + lyx_post_source = Split(''' + tabular.C + dimension.C + PrinterParams.C + box.C + Thesaurus.C + SpellBase.C + ''') + + if env.has_key('USE_ASPELL') and env['USE_ASPELL']: + lyx_post_source.append('aspell.C') + elif env.has_key('USE_PSPELL') and env['USE_PSPELL']: + lyx_post_source.append('pspell.C') + elif env.has_key('USE_ISPELL') and env['USE_ISPELL']: + lyx_post_source.append('ispell.C') + + # msvc requires at least one source file with main() + # so I exclude main.C from lyxbase + lyxbase_pre = env.StaticLibrary( + target = '$LOCALLIBPATH/lyxbase_pre', + source = utils.globSource(dir = env.subst('$TOP_SRCDIR/src'), pattern = lyx_ext, + exclude = lyx_post_source + ['main.C', 'aspell.C', 'pspell.C', + 'ispell.C', 'Variables.C', 'Sectioning.C'], + include = ['version.C'], build_dir = '$BUILDDIR/common') + ) + lyxbase_post = env.StaticLibrary( + target = '$LOCALLIBPATH/lyxbase_post', + source = ["$BUILDDIR/common/%s" % x for x in lyx_post_source] + ) + Alias('lyxbase', lyxbase_pre) + Alias('lyxbase', lyxbase_post) if build_lyx: - # - # Build lyx with given frontend - # - lyx = env.Program( - target = '$BUILDDIR/$frontend/lyx', - source = ['$BUILDDIR/common/main.C'], - LIBS = [ - 'lyxbase_pre', - 'mathed', - 'insets', - 'frontends', - frontend, - 'controllers', - 'graphics', - 'support', - 'lyxbase_post', - ] + - boost_libraries + - frontend_libs + - intl_libs + - socket_libs + - system_libs - ) - # [/path/to/lyx.ext] => lyx-qt3.ext - target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s' % frontend) - Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx, - [Copy('$TARGET', '$SOURCE')])) - Alias('lyx', lyx) + # + # Build lyx with given frontend + # + lyx = env.Program( + target = '$BUILDDIR/$frontend/lyx', + source = ['$BUILDDIR/common/main.C'], + LIBS = [ + 'lyxbase_pre', + 'mathed', + 'insets', + 'frontends', + frontend, + 'controllers', + 'graphics', + 'support', + 'lyxbase_post', + ] + + boost_libraries + + frontend_libs + + intl_libs + + socket_libs + + system_libs + ) + # [/path/to/lyx.ext] => lyx-qt3.ext + target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s' % frontend) + Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx, + [Copy('$TARGET', '$SOURCE')])) + Alias('lyx', lyx) if build_msvs_projects: - def build_project(target, dir, full_target = None, - src_pattern = lyx_ext, include = [], resource = None, rebuildTargetOnly = True): - ''' build mavs project files - target: alias (correspond to directory name) - dir: source directory or directories (a list) - full_target: full path/filename of the target - src_pattern: glob pattern - include: files to include into source - resource: directory or directories with resource (.ui) files - rebuildTargetOnly: whether or not only rebuild this target - - For non-debug-able targets like static libraries, target (alias) is - enough to build the target. For executable targets, msvs need to know - the full path to start debug them. - ''' - if resource is not None: - res = utils.globSource(dir = env.subst('$TOP_SRCDIR/'+resource), pattern = '*.ui', - build_dir = env.subst('$TOP_SRCDIR/'+resource)) - else: - res = [] - if rebuildTargetOnly: - cmds = 'faststart=yes rebuild='+target - else: - cmds = 'faststart=yes' - if type(dir) == type([]): - src = [] - inc = [] - for d in dir: - src.extend(utils.globSource(dir = env.subst('$TOP_SRCDIR/' + d), - pattern = src_pattern, include = include, - build_dir = env.subst('$TOP_SRCDIR/' + d) )) - inc.extend(utils.globSource(dir = env.subst('$TOP_SRCDIR/' + d), - pattern = '*.h', - build_dir = env.subst('$TOP_SRCDIR/' + d) )) - else: - src = utils.globSource(dir = env.subst('$TOP_SRCDIR/' + dir), - pattern = src_pattern, include = include, - build_dir = env.subst('$TOP_SRCDIR/' + dir) ) - inc = utils.globSource(dir = env.subst('$TOP_SRCDIR/' + dir), - pattern = '*.h', - build_dir = env.subst('$TOP_SRCDIR/' + dir) ) - if full_target is None: - build_target = target + def build_project(target, dir, full_target = None, + src_pattern = lyx_ext, include = [], resource = None, rebuildTargetOnly = True): + ''' build mavs project files + target: alias (correspond to directory name) + dir: source directory or directories (a list) + full_target: full path/filename of the target + src_pattern: glob pattern + include: files to include into source + resource: directory or directories with resource (.ui) files + rebuildTargetOnly: whether or not only rebuild this target + + For non-debug-able targets like static libraries, target (alias) is + enough to build the target. For executable targets, msvs need to know + the full path to start debug them. + ''' + if resource is not None: + res = utils.globSource(dir = env.subst('$TOP_SRCDIR/'+resource), pattern = '*.ui', + build_dir = env.subst('$TOP_SRCDIR/'+resource)) + else: + res = [] + if rebuildTargetOnly: + cmds = 'faststart=yes rebuild='+target + else: + cmds = 'faststart=yes' + if type(dir) == type([]): + src = [] + inc = [] + for d in dir: + src.extend(utils.globSource(dir = env.subst('$TOP_SRCDIR/' + d), + pattern = src_pattern, include = include, + build_dir = env.subst('$TOP_SRCDIR/' + d) )) + inc.extend(utils.globSource(dir = env.subst('$TOP_SRCDIR/' + d), + pattern = '*.h', + build_dir = env.subst('$TOP_SRCDIR/' + d) )) + else: + src = utils.globSource(dir = env.subst('$TOP_SRCDIR/' + dir), + pattern = src_pattern, include = include, + build_dir = env.subst('$TOP_SRCDIR/' + dir) ) + inc = utils.globSource(dir = env.subst('$TOP_SRCDIR/' + dir), + pattern = '*.h', + build_dir = env.subst('$TOP_SRCDIR/' + dir) ) + if full_target is None: + build_target = target + else: + build_target = full_target + # project + proj = env.MSVSProject( + target = target + env['MSVSPROJECTSUFFIX'], + srcs = src, + incs = [env.subst('$TOP_SRCDIR/src/config.h')], + localincs = inc, + resources = res, + buildtarget = build_target, + cmdargs = cmds, + variant = 'Debug' + ) + Alias('msvs_projects', proj) + # + build_project('boost', ['boost/libs/%s/src' % x for x in boost_libs], + src_pattern = '*.cpp') + # + build_project('intl', 'intl', src_pattern = '*.c') + # + build_project('support', 'src/support', include=['package.C.in']) + # + build_project('mathed', 'src/mathed') + # + build_project('insets', 'src/insets') + # + build_project('frontends', 'src/frontends') + # + build_project('graphics', 'src/graphics') + # + build_project('controllers', 'src/frontends/controllers') + # + build_project('qt3', 'src/frontends/qt3', resource = 'src/frontends/qt3/ui') + # + build_project('qt4', 'src/frontends/qt4', resource = 'src/frontends/qt4/ui') + # + build_project('client', 'src/client', rebuildTargetOnly = False, + full_target = File(env.subst('$BUILDDIR/common/client/lyxclient$PROGSUFFIX')).abspath) + # + build_project('tex2lyx', 'src/tex2lyx', rebuildTargetOnly = False, + full_target = File(env.subst('$BUILDDIR/common/tex2lyx/tex2lyx$PROGSUFFIX')).abspath) + # + build_project('lyxbase', 'src') + # + if frontend == 'qt3': + build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', + 'src/frontends', 'src/graphics', 'src/frontends/controllers', + 'src/frontends/qt3'], resource = 'src/frontends/qt3/ui', + rebuildTargetOnly = False, + full_target = File(env.subst('$BUILDDIR/$frontend/lyx$PROGSUFFIX')).abspath) else: - build_target = full_target - # project - proj = env.MSVSProject( - target = target + env['MSVSPROJECTSUFFIX'], - srcs = src, - incs = [env.subst('$TOP_SRCDIR/src/config.h')], - localincs = inc, - resources = res, - buildtarget = build_target, - cmdargs = cmds, - variant = 'Debug' - ) - Alias('msvs_projects', proj) - # - build_project('boost', ['boost/libs/%s/src' % x for x in boost_libs], - src_pattern = '*.cpp') - # - build_project('intl', 'intl', src_pattern = '*.c') - # - build_project('support', 'src/support', include=['package.C.in']) - # - build_project('mathed', 'src/mathed') - # - build_project('insets', 'src/insets') - # - build_project('frontends', 'src/frontends') - # - build_project('graphics', 'src/graphics') - # - build_project('controllers', 'src/frontends/controllers') - # - build_project('qt3', 'src/frontends/qt3', resource = 'src/frontends/qt3/ui') - # - build_project('qt4', 'src/frontends/qt4', resource = 'src/frontends/qt4/ui') - # - build_project('client', 'src/client', rebuildTargetOnly = False, - full_target = File(env.subst('$BUILDDIR/common/client/lyxclient$PROGSUFFIX')).abspath) - # - build_project('tex2lyx', 'src/tex2lyx', rebuildTargetOnly = False, - full_target = File(env.subst('$BUILDDIR/common/tex2lyx/tex2lyx$PROGSUFFIX')).abspath) - # - build_project('lyxbase', 'src') - # - if frontend == 'qt3': - build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', - 'src/frontends', 'src/graphics', 'src/frontends/controllers', - 'src/frontends/qt3'], resource = 'src/frontends/qt3/ui', - rebuildTargetOnly = False, - full_target = File(env.subst('$BUILDDIR/$frontend/lyx$PROGSUFFIX')).abspath) - else: - build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', - 'src/frontends', 'src/graphics', 'src/frontends/controllers', - 'src/frontends/qt4'], resource = 'src/frontends/qt4/ui', - rebuildTargetOnly = False, - full_target = File(env.subst('$BUILDDIR/$frontend/lyx$PROGSUFFIX')).abspath) + build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', + 'src/frontends', 'src/graphics', 'src/frontends/controllers', + 'src/frontends/qt4'], resource = 'src/frontends/qt4/ui', + rebuildTargetOnly = False, + full_target = File(env.subst('$BUILDDIR/$frontend/lyx$PROGSUFFIX')).abspath) if build_po: - # - # po/ - # - print 'Processing files in po...' - - import glob - # handle po files - # - # files to translate - transfiles = glob.glob(os.path.join(env.subst('$TOP_SRCDIR'), 'po', '*.po')) - # possibly *only* handle these languages - languages = None - if env.has_key('languages'): - languages = env.make_list(env['lanauges']) - # use defulat msgfmt - if not env['MSGFMT']: - print 'msgfmt does not exist. Can not process po files' - else: - # create a builder - env['BUILDERS']['Transfiles'] = Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po') - # - gmo_files = [] - for f in transfiles: - # get filename - fname = os.path.split(f)[1] - # country code - country = fname.split('.')[0] - # - if not languages or country in languages: - gmo_files.extend(env.Transfiles(f)) + # + # po/ + # + print 'Processing files in po...' + + import glob + # handle po files + # + # files to translate + transfiles = glob.glob(os.path.join(env.subst('$TOP_SRCDIR'), 'po', '*.po')) + # possibly *only* handle these languages + languages = None + if env.has_key('languages'): + languages = env.make_list(env['lanauges']) + # use defulat msgfmt + if not env['MSGFMT']: + print 'msgfmt does not exist. Can not process po files' + else: + # create a builder + env['BUILDERS']['Transfiles'] = Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po') + # + gmo_files = [] + for f in transfiles: + # get filename + fname = os.path.split(f)[1] + # country code + country = fname.split('.')[0] + # + if not languages or country in languages: + gmo_files.extend(env.Transfiles(f)) if 'install' in targets: - # - # install to DESTDIR or prefix - dest_dir = env.Dir(env.get('DESTDIR', prefix)).abspath - # if dest_dir is different from prefix. - if env.has_key('exec_prefix'): - bin_dest_dir = Dir(env['exec_prefix']).abspath - else: - bin_dest_dir = os.path.join(dest_dir, 'bin') - if add_suffix: - share_dest_dir = os.path.join(dest_dir, share_dir + program_suffix) - else: - share_dest_dir = os.path.join(dest_dir, share_dir) - man_dest_dir = os.path.join(dest_dir, man_dir) - locale_dest_dir = os.path.join(dest_dir, locale_dir) - # create the directory if needed - if not os.path.isdir(dest_dir): - try: - os.makedirs(dest_dir) - except: - pass + # + # install to DESTDIR or prefix + dest_dir = env.Dir(env.get('DESTDIR', prefix)).abspath + # if dest_dir is different from prefix. + if env.has_key('exec_prefix'): + bin_dest_dir = Dir(env['exec_prefix']).abspath + else: + bin_dest_dir = os.path.join(dest_dir, 'bin') + if add_suffix: + share_dest_dir = os.path.join(dest_dir, share_dir + program_suffix) + else: + share_dest_dir = os.path.join(dest_dir, share_dir) + man_dest_dir = os.path.join(dest_dir, man_dir) + locale_dest_dir = os.path.join(dest_dir, locale_dir) + # create the directory if needed if not os.path.isdir(dest_dir): - print 'Can not create directory', dest_dir - Exit(3) - # - import glob - # - # do not install these files - exclude_list = ['Makefile.am', 'Makefile.in', 'Makefile', - 'lyx2lyx_version.py', 'lyx2lyx_version.py.in'] - - def install(dest, src): - ''' recusive installation of src to dest ''' - # separate file and directory - files = filter(lambda x: os.path.isfile(x) and not os.path.split(x)[1] in exclude_list, src) - dirs = filter(os.path.isdir, src) - # install file - env.Install(dest, files) - # install directory - ins_dir = [dest] - for dir in dirs: - ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)), - glob.glob(os.path.join(dir, '*'))) ) - return ins_dir - # - # executables (some of them may be none) - # - if add_suffix: - version_suffix = program_suffix - else: - version_suffix = '' - # - # install lyx - target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx%s' % version_suffix) - target = os.path.join(bin_dest_dir, target_name) - env.InstallAs(target, lyx) - Alias('install', target) - # install lyx as lyx-qt3 - target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s%s' % (frontend, version_suffix)) - target = os.path.join(bin_dest_dir, target_name) - env.InstallAs(target, lyx) - Alias('install', target) - # - # install tex2lyx - target_name = os.path.split(str(tex2lyx[0]))[1].replace('tex2lyx', 'tex2lyx%s' % version_suffix) - target = os.path.join(bin_dest_dir, target_name) - env.InstallAs(target, tex2lyx) - Alias('install', target) - # - # install lyxclient, may not exist - if client != None: - target_name = os.path.split(str(client[0]))[1].replace('client', 'client%s' % version_suffix) + try: + os.makedirs(dest_dir) + except: + pass + if not os.path.isdir(dest_dir): + print 'Can not create directory', dest_dir + Exit(3) + # + import glob + # + # do not install these files + exclude_list = ['Makefile.am', 'Makefile.in', 'Makefile', + 'lyx2lyx_version.py', 'lyx2lyx_version.py.in'] + + def install(dest, src): + ''' recusive installation of src to dest ''' + # separate file and directory + files = filter(lambda x: os.path.isfile(x) and not os.path.split(x)[1] in exclude_list, src) + dirs = filter(os.path.isdir, src) + # install file + env.Install(dest, files) + # install directory + ins_dir = [dest] + for dir in dirs: + ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)), + glob.glob(os.path.join(dir, '*'))) ) + return ins_dir + # + # executables (some of them may be none) + # + if add_suffix: + version_suffix = program_suffix + else: + version_suffix = '' + # + # install lyx + target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx%s' % version_suffix) + target = os.path.join(bin_dest_dir, target_name) + env.InstallAs(target, lyx) + Alias('install', target) + # install lyx as lyx-qt3 + target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s%s' % (frontend, version_suffix)) + target = os.path.join(bin_dest_dir, target_name) + env.InstallAs(target, lyx) + Alias('install', target) + # + # install tex2lyx + target_name = os.path.split(str(tex2lyx[0]))[1].replace('tex2lyx', 'tex2lyx%s' % version_suffix) target = os.path.join(bin_dest_dir, target_name) - env.InstallAs(target, client) + env.InstallAs(target, tex2lyx) Alias('install', target) - # - # share/lyx - dirs = install(share_dest_dir, - [env.subst('$TOP_SRCDIR/lib/') + file for file in ['configure.py', 'encodings', - 'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages', - 'lyxrc.example', 'syntax.default', 'bind', 'images', 'layouts', 'scripts', - 'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']] - ) - env.substFile(share_dest_dir + '/lyx2lyx/lyx2lyx_version.py', - '$TOP_SRCDIR/lib/lyx2lyx/lyx2lyx_version.py.in') - Alias('install', dirs) - # man - env.InstallAs(os.path.join(man_dest_dir, 'lyx' + version_suffix + '.1'), - env.subst('$TOP_SRCDIR/lyx.man')) - env.InstallAs(os.path.join(man_dest_dir, 'tex2lyx' + version_suffix + '.1'), - env.subst('$TOP_SRCDIR/src/tex2lyx/tex2lyx.man')) - env.InstallAs(os.path.join(man_dest_dir, 'lyxclient' + version_suffix + '.1'), - env.subst('$TOP_SRCDIR/src/client/lyxclient.man')) - Alias('install', [os.path.join(man_dest_dir, x + version_suffix + '.1') for - x in ['lyx', 'tex2lyx', 'lyxclient']]) - # locale files? - # ru.gmo ==> ru/LC_MESSAGES/lyxSUFFIX.mo - for gmo in gmo_files: - lan = os.path.split(str(gmo))[1].split('.')[0] - dest_file = os.path.join(locale_dest_dir, lan, 'LC_MESSAGES', 'lyx' + version_suffix + '.mo') - env.InstallAs(dest_file, gmo) - Alias('install', dest_file) + # + # install lyxclient, may not exist + if client != None: + target_name = os.path.split(str(client[0]))[1].replace('client', 'client%s' % version_suffix) + target = os.path.join(bin_dest_dir, target_name) + env.InstallAs(target, client) + Alias('install', target) + # + # share/lyx + dirs = install(share_dest_dir, + [env.subst('$TOP_SRCDIR/lib/') + file for file in ['configure.py', 'encodings', + 'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages', + 'lyxrc.example', 'syntax.default', 'bind', 'images', 'layouts', 'scripts', + 'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']] + ) + env.substFile(share_dest_dir + '/lyx2lyx/lyx2lyx_version.py', + '$TOP_SRCDIR/lib/lyx2lyx/lyx2lyx_version.py.in') + Alias('install', dirs) + # man + env.InstallAs(os.path.join(man_dest_dir, 'lyx' + version_suffix + '.1'), + env.subst('$TOP_SRCDIR/lyx.man')) + env.InstallAs(os.path.join(man_dest_dir, 'tex2lyx' + version_suffix + '.1'), + env.subst('$TOP_SRCDIR/src/tex2lyx/tex2lyx.man')) + env.InstallAs(os.path.join(man_dest_dir, 'lyxclient' + version_suffix + '.1'), + env.subst('$TOP_SRCDIR/src/client/lyxclient.man')) + Alias('install', [os.path.join(man_dest_dir, x + version_suffix + '.1') for + x in ['lyx', 'tex2lyx', 'lyxclient']]) + # locale files? + # ru.gmo ==> ru/LC_MESSAGES/lyxSUFFIX.mo + for gmo in gmo_files: + lan = os.path.split(str(gmo))[1].split('.')[0] + dest_file = os.path.join(locale_dest_dir, lan, 'LC_MESSAGES', 'lyx' + version_suffix + '.mo') + env.InstallAs(dest_file, gmo) + Alias('install', dest_file) Default('lyx') diff --git a/development/scons/scons_utils.py b/development/scons/scons_utils.py index ca16f0ad2e..136ac7a200 100644 --- a/development/scons/scons_utils.py +++ b/development/scons/scons_utils.py @@ -1,4 +1,4 @@ -# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2 +# vi:filetype=python:expandtab:tabstop=4:shiftwidth=4 # # file scons_utils.py # @@ -17,122 +17,122 @@ from SCons.Util import WhereIs def writeToFile(filename, lines, append = False): - " utility function: write or append lines to filename " - # create directory if needed - dir = os.path.split(filename)[0] - if dir != '' and not os.path.isdir(dir): - os.makedirs(dir) - if append: - file = open(filename, 'a') - else: - file = open(filename, 'w') - file.write(lines) - file.close() + " utility function: write or append lines to filename " + # create directory if needed + dir = os.path.split(filename)[0] + if dir != '' and not os.path.isdir(dir): + os.makedirs(dir) + if append: + file = open(filename, 'a') + else: + file = open(filename, 'w') + file.write(lines) + file.close() def env_subst(target, source, env): - ''' subst variables in source by those in env, and output to target - source and target are scons File() objects - - %key% (not key itself) is an indication of substitution - ''' - assert len(target) == 1 - assert len(source) == 1 - target_file = file(str(target[0]), "w") - source_file = file(str(source[0]), "r") - - contents = source_file.read() - for k, v in env.items(): - try: - val = env.subst('$'+k) - # temporary fix for the \Resource backslash problem - val = val.replace('\\', '/') - # multi-line replacement - val = val.replace('\n',r'\\n\\\n') - contents = re.sub('@'+k+'@', val, contents) - contents = re.sub('%'+k+'%', val, contents) - except: - pass - target_file.write(contents + "\n") - target_file.close() - #st = os.stat(str(source[0])) - #os.chmod(str(target[0]), stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE) + ''' subst variables in source by those in env, and output to target + source and target are scons File() objects + + %key% (not key itself) is an indication of substitution + ''' + assert len(target) == 1 + assert len(source) == 1 + target_file = file(str(target[0]), "w") + source_file = file(str(source[0]), "r") + + contents = source_file.read() + for k, v in env.items(): + try: + val = env.subst('$'+k) + # temporary fix for the \Resource backslash problem + val = val.replace('\\', '/') + # multi-line replacement + val = val.replace('\n',r'\\n\\\n') + contents = re.sub('@'+k+'@', val, contents) + contents = re.sub('%'+k+'%', val, contents) + except: + pass + target_file.write(contents + "\n") + target_file.close() + #st = os.stat(str(source[0])) + #os.chmod(str(target[0]), stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE) # # glob filenames # def globSource(dir, pattern, build_dir = None, exclude = [], include = []): - ''' glob files, in dir and use build_dir as returned path name ''' - # exclude 'exclude+include' to avoid duplicate items in files - files = include + filter(lambda x: x not in exclude + include, glob.glob1(dir, pattern)) - if build_dir is None: - return files - else: - return ['%s/%s' % (build_dir, x) for x in files] + ''' glob files, in dir and use build_dir as returned path name ''' + # exclude 'exclude+include' to avoid duplicate items in files + files = include + filter(lambda x: x not in exclude + include, glob.glob1(dir, pattern)) + if build_dir is None: + return files + else: + return ['%s/%s' % (build_dir, x) for x in files] # # autoconf tests # def checkPkgConfig(conf, version): - ''' Return false if pkg_config does not exist, or is too old ''' - conf.Message('Checking for pkg-config...') - ret = conf.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0] - conf.Result(ret) - return ret + ''' Return false if pkg_config does not exist, or is too old ''' + conf.Message('Checking for pkg-config...') + ret = conf.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0] + conf.Result(ret) + return ret def checkPackage(conf, pkg): - ''' check if pkg is under the control of conf ''' - conf.Message('Checking for package %s...' % pkg) - ret = conf.TryAction("pkg-config --print-errors --exists %s" % pkg)[0] - conf.Result(ret) - return ret + ''' check if pkg is under the control of conf ''' + conf.Message('Checking for package %s...' % pkg) + ret = conf.TryAction("pkg-config --print-errors --exists %s" % pkg)[0] + conf.Result(ret) + return ret def checkMkdirOneArg(conf): - check_mkdir_one_arg_source = """ + check_mkdir_one_arg_source = """ #include int main() { - mkdir("somedir"); + mkdir("somedir"); } """ - conf.Message('Checking for the number of args for mkdir... ') - ret = conf.TryLink(check_mkdir_one_arg_source, '.c') or \ - conf.TryLink('#include ' + check_mkdir_one_arg_source, '.c') or \ - conf.TryLink('#include ' + check_mkdir_one_arg_source, '.c') - if ret: - conf.Result('one') - else: - conf.Result('two') - return ret + conf.Message('Checking for the number of args for mkdir... ') + ret = conf.TryLink(check_mkdir_one_arg_source, '.c') or \ + conf.TryLink('#include ' + check_mkdir_one_arg_source, '.c') or \ + conf.TryLink('#include ' + check_mkdir_one_arg_source, '.c') + if ret: + conf.Result('one') + else: + conf.Result('two') + return ret def checkCXXGlobalCstd(conf): - ''' Check the use of std::tolower or tolower ''' - check_global_cstd_source = ''' + ''' Check the use of std::tolower or tolower ''' + check_global_cstd_source = ''' #include using std::tolower; int main() { - return 0; + return 0; } ''' - conf.Message('Check for the use of global cstd... ') - ret = conf.TryLink(check_global_cstd_source, '.c') - conf.Result(ret) - return ret + conf.Message('Check for the use of global cstd... ') + ret = conf.TryLink(check_global_cstd_source, '.c') + conf.Result(ret) + return ret def checkSelectArgType(conf): - ''' Adapted from autoconf ''' - conf.Message('Checking for arg types for select... ') - for arg234 in ['fd_set *', 'int *', 'void *']: - for arg1 in ['int', 'size_t', 'unsigned long', 'unsigned']: - for arg5 in ['struct timeval *', 'const struct timeval *']: - check_select_source = ''' + ''' Adapted from autoconf ''' + conf.Message('Checking for arg types for select... ') + for arg234 in ['fd_set *', 'int *', 'void *']: + for arg1 in ['int', 'size_t', 'unsigned long', 'unsigned']: + for arg5 in ['struct timeval *', 'const struct timeval *']: + check_select_source = ''' #if HAVE_SYS_SELECT_H # include #endif @@ -142,65 +142,65 @@ def checkSelectArgType(conf): extern int select (%s, %s, %s, %s, %s); int main() { - return(0); + return(0); } ''' % (arg1, arg234, arg234, arg234, arg5) - ret = conf.TryLink(check_select_source, '.c') - if ret: - conf.Result(ret) - return (arg1, arg234, arg5) - conf.Result('no (use default)') - return ('int', 'int *', 'struct timeval *') + ret = conf.TryLink(check_select_source, '.c') + if ret: + conf.Result(ret) + return (arg1, arg234, arg5) + conf.Result('no (use default)') + return ('int', 'int *', 'struct timeval *') def checkBoostLibraries(conf, lib, pathes): - ''' look for boost libraries ''' - conf.Message('Checking for boost library %s... ' % lib) - for path in pathes: - # direct form: e.g. libboost_iostreams.a - if os.path.isfile(os.path.join(path, 'lib%s.a' % lib)): - conf.Result('yes') - return (path, lib) - # check things like libboost_iostreams-gcc.a - files = glob.glob(os.path.join(path, 'lib%s-*.a' % lib)) - # if there are more than one, choose the first one - # FIXME: choose the best one. - if len(files) >= 1: - # get xxx-gcc from /usr/local/lib/libboost_xxx-gcc.a - conf.Result('yes') - return (path, files[0].split(os.sep)[-1][3:-2]) - conf.Result('n') - return ('','') + ''' look for boost libraries ''' + conf.Message('Checking for boost library %s... ' % lib) + for path in pathes: + # direct form: e.g. libboost_iostreams.a + if os.path.isfile(os.path.join(path, 'lib%s.a' % lib)): + conf.Result('yes') + return (path, lib) + # check things like libboost_iostreams-gcc.a + files = glob.glob(os.path.join(path, 'lib%s-*.a' % lib)) + # if there are more than one, choose the first one + # FIXME: choose the best one. + if len(files) >= 1: + # get xxx-gcc from /usr/local/lib/libboost_xxx-gcc.a + conf.Result('yes') + return (path, files[0].split(os.sep)[-1][3:-2]) + conf.Result('n') + return ('','') def checkCommand(conf, cmd): - ''' check the existence of a command - return full path to the command, or none - ''' - conf.Message('Checking for command %s...' % cmd) - res = WhereIs(cmd) - conf.Result(res is not None) - return res + ''' check the existence of a command + return full path to the command, or none + ''' + conf.Message('Checking for command %s...' % cmd) + res = WhereIs(cmd) + conf.Result(res is not None) + return res def checkLC_MESSAGES(conf): - ''' check the definition of LC_MESSAGES ''' - check_LC_MESSAGES = ''' + ''' check the definition of LC_MESSAGES ''' + check_LC_MESSAGES = ''' #include int main() { - return LC_MESSAGES; + return LC_MESSAGES; } ''' - conf.Message('Check for LC_MESSAGES in locale.h... ') - ret = conf.TryLink(check_LC_MESSAGES, '.c') - conf.Result(ret) - return ret + conf.Message('Check for LC_MESSAGES in locale.h... ') + ret = conf.TryLink(check_LC_MESSAGES, '.c') + conf.Result(ret) + return ret def checkIconvConst(conf): - ''' check the declaration of iconv ''' - check_iconv_const = ''' + ''' check the declaration of iconv ''' + check_iconv_const = ''' #include #include extern @@ -208,144 +208,144 @@ extern "C" #endif #if defined(__STDC__) || defined(__cplusplus) - #ifndef LIBICONV_DLL_EXPORTED - size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); - #endif +#ifndef LIBICONV_DLL_EXPORTED +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#endif #else size_t iconv(); #endif int main() { - return 1; + return 1; } ''' - conf.Message('Check if the declaration of iconv needs const... ') - ret = conf.TryLink(check_iconv_const, '.c') - conf.Result(ret) - return ret + conf.Message('Check if the declaration of iconv needs const... ') + ret = conf.TryLink(check_iconv_const, '.c') + conf.Result(ret) + return ret def createConfigFile(conf, config_file, - config_pre = '', config_post = '', - headers = [], functions = [], types = [], libs = [], - custom_tests = [], extra_items = []): - ''' create a configuration file, with options - config_file: which file to create - config_pre: first part of the config file - config_post: last part of the config file - headers: header files to check, in the form of a list of - ('file', 'HAVE_FILE', 'c'/'c++') - functions: functions to check, in the form of a list of - ('func', 'HAVE_func', 'include lines'/None) - types: types to check, in the form of a list of - ('type', 'HAVE_TYPE', 'includelines'/None) - libs: libraries to check, in the form of a list of - ('lib', 'HAVE_LIB', 'LIB_NAME'). HAVE_LIB will be set if 'lib' exists, - or any of the libs exists if 'lib' is a list of libs. - Optionally, user can provide another key LIB_NAME, that will - be set to the detected lib (or None otherwise). - custom_tests: extra tests to perform, in the form of a list of - (test (True/False), 'key', 'desc', 'true config line', 'false config line') - If the last two are ignored, '#define key 1' '/*#undef key */' - will be used. - extra_items: extra configuration lines, in the form of a list of - ('config', 'description') - Return: - The result of each test, as a dictioanry of - res['XXX'] = True/False - XXX are keys defined in each argument. - ''' - cont = config_pre + '\n' - result = {} - # add to this string, in appropriate format - def configString(lines, desc=''): - text = '' - if lines.strip() != '': - if desc != '': - text += '/* ' + desc + ' */\n' - text += lines + '\n\n' - return text - # - # headers - for header in headers: - description = "Define to 1 if you have the <%s> header file." % header[0] - if (header[2] == 'c' and conf.CheckCHeader(header[0])) or \ - (header[2] == 'cxx' and conf.CheckCXXHeader(header[0])): - result[header[1]] = True - cont += configString('#define %s 1' % header[1], desc = description) - else: - result[header[1]] = False - cont += configString('/* #undef %s */' % header[1], desc = description) - # functions - for func in functions: - description = "Define to 1 if you have the `%s' function." % func[0] - if conf.CheckFunc(func[0], header=func[2]): - result[func[1]] = True - cont += configString('#define %s 1' % func[1], desc = description) - else: - result[func[1]] = False - cont += configString('/* #undef %s */' % func[1], desc = description) - # types - for t in types: - description = "Define to 1 if you have the `%s' type." % t[0] - if conf.CheckType(t[0], includes=t[2]): - result[t[1]] = True - cont += configString('#define %s 1' % t[1], desc = description) - else: - result[t[1]] = False - cont += configString('/* #undef %s */' % t[1], desc = description) - # libraries - for lib in libs: - description = "Define to 1 if you have the `%s' library (-l%s)." % (lib[0], lib[0]) - if type(lib[0]) is type(''): - lib_list = [lib[0]] - else: - lib_list = lib[0] - # check if any of the lib exists - result[lib[1]] = False - # if user want the name of the lib detected - if len(lib) == 3: - result[lib[2]] = None - for ll in lib_list: - if conf.CheckLib(ll): - result[lib[1]] = True + config_pre = '', config_post = '', + headers = [], functions = [], types = [], libs = [], + custom_tests = [], extra_items = []): + ''' create a configuration file, with options + config_file: which file to create + config_pre: first part of the config file + config_post: last part of the config file + headers: header files to check, in the form of a list of + ('file', 'HAVE_FILE', 'c'/'c++') + functions: functions to check, in the form of a list of + ('func', 'HAVE_func', 'include lines'/None) + types: types to check, in the form of a list of + ('type', 'HAVE_TYPE', 'includelines'/None) + libs: libraries to check, in the form of a list of + ('lib', 'HAVE_LIB', 'LIB_NAME'). HAVE_LIB will be set if 'lib' exists, + or any of the libs exists if 'lib' is a list of libs. + Optionally, user can provide another key LIB_NAME, that will + be set to the detected lib (or None otherwise). + custom_tests: extra tests to perform, in the form of a list of + (test (True/False), 'key', 'desc', 'true config line', 'false config line') + If the last two are ignored, '#define key 1' '/*#undef key */' + will be used. + extra_items: extra configuration lines, in the form of a list of + ('config', 'description') + Return: + The result of each test, as a dictioanry of + res['XXX'] = True/False + XXX are keys defined in each argument. + ''' + cont = config_pre + '\n' + result = {} + # add to this string, in appropriate format + def configString(lines, desc=''): + text = '' + if lines.strip() != '': + if desc != '': + text += '/* ' + desc + ' */\n' + text += lines + '\n\n' + return text + # + # headers + for header in headers: + description = "Define to 1 if you have the <%s> header file." % header[0] + if (header[2] == 'c' and conf.CheckCHeader(header[0])) or \ + (header[2] == 'cxx' and conf.CheckCXXHeader(header[0])): + result[header[1]] = True + cont += configString('#define %s 1' % header[1], desc = description) + else: + result[header[1]] = False + cont += configString('/* #undef %s */' % header[1], desc = description) + # functions + for func in functions: + description = "Define to 1 if you have the `%s' function." % func[0] + if conf.CheckFunc(func[0], header=func[2]): + result[func[1]] = True + cont += configString('#define %s 1' % func[1], desc = description) + else: + result[func[1]] = False + cont += configString('/* #undef %s */' % func[1], desc = description) + # types + for t in types: + description = "Define to 1 if you have the `%s' type." % t[0] + if conf.CheckType(t[0], includes=t[2]): + result[t[1]] = True + cont += configString('#define %s 1' % t[1], desc = description) + else: + result[t[1]] = False + cont += configString('/* #undef %s */' % t[1], desc = description) + # libraries + for lib in libs: + description = "Define to 1 if you have the `%s' library (-l%s)." % (lib[0], lib[0]) + if type(lib[0]) is type(''): + lib_list = [lib[0]] + else: + lib_list = lib[0] + # check if any of the lib exists + result[lib[1]] = False + # if user want the name of the lib detected if len(lib) == 3: - result[lib[2]] = ll - cont += configString('#define %s 1' % lib[1], desc = description) - break - # if not found - if not result[lib[1]]: - cont += configString('/* #undef %s */' % lib[1], desc = description) - # custom tests - for test in custom_tests: - if test[0]: - result[test[1]] = True - if len(test) == 3: - cont += configString('#define %s 1' % test[1], desc = test[2]) - else: - cont += configString(test[3], desc = test[2]) - else: - result[test[1]] = False - if len(test) == 3: - cont += configString('/* #undef %s */' % test[1], desc = test[2]) - else: - cont += configString(test[4], desc = test[2]) - # extra items (no key is returned) - for item in extra_items: - cont += configString(item[0], desc = item[1]) - # add the last part - cont += '\n' + config_post + '\n' - # write to file - writeToFile(config_file, cont) - return result + result[lib[2]] = None + for ll in lib_list: + if conf.CheckLib(ll): + result[lib[1]] = True + if len(lib) == 3: + result[lib[2]] = ll + cont += configString('#define %s 1' % lib[1], desc = description) + break + # if not found + if not result[lib[1]]: + cont += configString('/* #undef %s */' % lib[1], desc = description) + # custom tests + for test in custom_tests: + if test[0]: + result[test[1]] = True + if len(test) == 3: + cont += configString('#define %s 1' % test[1], desc = test[2]) + else: + cont += configString(test[3], desc = test[2]) + else: + result[test[1]] = False + if len(test) == 3: + cont += configString('/* #undef %s */' % test[1], desc = test[2]) + else: + cont += configString(test[4], desc = test[2]) + # extra items (no key is returned) + for item in extra_items: + cont += configString(item[0], desc = item[1]) + # add the last part + cont += '\n' + config_post + '\n' + # write to file + writeToFile(config_file, cont) + return result def installCygwinLDScript(path): - ''' Install i386pe.x-no-rdata ''' - ld_script = os.path.join(path, 'i386pe.x-no-rdata') - script = open(ld_script, 'w') - script.write('''/* specific linker script avoiding .rdata sections, for normal executables + ''' Install i386pe.x-no-rdata ''' + ld_script = os.path.join(path, 'i386pe.x-no-rdata') + script = open(ld_script, 'w') + script.write('''/* specific linker script avoiding .rdata sections, for normal executables for a reference see http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html http://www.cygwin.com/ml/cygwin-apps/2004-09/msg00309.html @@ -357,26 +357,26 @@ SECTIONS { .text __image_base__ + __section_alignment__ : { - *(.init) + *(.init) *(.text) *(SORT(.text$*)) *(.glue_7t) *(.glue_7) - ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; + ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); - ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; + ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); - *(.fini) + *(.fini) /* ??? Why is .gcc_exc here? */ - *(.gcc_exc) + *(.gcc_exc) PROVIDE (etext = .); *(.gcc_except_table) } /* The Cygwin32 library uses a section to avoid copying certain data - on fork. This used to be named ".data". The linker used - to include this between __data_start__ and __data_end__, but that - breaks building the cygwin32 dll. Instead, we name the section - ".data_cygwin_nocopy" and explictly include it after __data_end__. */ + on fork. This used to be named ".data". The linker used + to include this between __data_start__ and __data_end__, but that + breaks building the cygwin32 dll. Instead, we name the section + ".data_cygwin_nocopy" and explictly include it after __data_end__. */ .data BLOCK(__section_alignment__) : { __data_start__ = . ; @@ -463,7 +463,7 @@ SECTIONS /* end is deprecated, don't use it */ PROVIDE (end = .); PROVIDE ( _end = .); - __end__ = .; + __end__ = .; } .rsrc BLOCK(__section_alignment__) : { @@ -483,9 +483,9 @@ SECTIONS *(.stabstr) } /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section. Unlike other targets that fake this by putting the - section VMA at 0, the PE format will not allow it. */ + Symbols in the DWARF debugging sections are relative to the beginning + of the section. Unlike other targets that fake this by putting the + section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) : { @@ -548,82 +548,82 @@ SECTIONS } } ''') - script.close() - return(ld_script) + script.close() + return(ld_script) try: - # these will be used under win32 - import win32file - import win32event - import win32process - import win32security + # these will be used under win32 + import win32file + import win32event + import win32process + import win32security except: - # does not matter if it fails on other systems - pass + # does not matter if it fails on other systems + pass class loggedSpawn: - def __init__(self, env, logfile, longarg, info): - # save the spawn system - self.env = env - self.logfile = logfile - # clear the logfile (it may not exist) - if logfile != '': - # this will overwrite existing content. - writeToFile(logfile, info, append=False) - # - self.longarg = longarg - # get hold of the old spawn? (necessary?) - self._spawn = env['SPAWN'] - - # define new SPAWN - def spawn(self, sh, escape, cmd, args, spawnenv): - # get command line - newargs = ' '.join(map(escape, args[1:])) - cmdline = cmd + " " + newargs - # - # if log is not empty, write to it - if self.logfile != '': - # this tend to be slow (?) but ensure correct output - # Note that cmdline may be long so I do not escape it - try: - # since this is not an essential operation, proceed if things go wrong here. - writeToFile(self.logfile, cmd + " " + ' '.join(args[1:]) + '\n', append=True) - except: - print "Warning: can not write to log file ", self.logfile - # - # if the command is not too long, use the old - if not self.longarg or len(cmdline) < 8000: - exit_code = self._spawn(sh, escape, cmd, args, spawnenv) - else: - sAttrs = win32security.SECURITY_ATTRIBUTES() - StartupInfo = win32process.STARTUPINFO() - for var in spawnenv: - spawnenv[var] = spawnenv[var].encode('ascii', 'replace') - # check for any special operating system commands - if cmd == 'del': - for arg in args[1:]: - win32file.DeleteFile(arg) - exit_code = 0 - else: - # otherwise execute the command. - hProcess, hThread, dwPid, dwTid = win32process.CreateProcess(None, cmdline, None, None, 1, 0, spawnenv, None, StartupInfo) - win32event.WaitForSingleObject(hProcess, win32event.INFINITE) - exit_code = win32process.GetExitCodeProcess(hProcess) - win32file.CloseHandle(hProcess); - win32file.CloseHandle(hThread); - return exit_code + def __init__(self, env, logfile, longarg, info): + # save the spawn system + self.env = env + self.logfile = logfile + # clear the logfile (it may not exist) + if logfile != '': + # this will overwrite existing content. + writeToFile(logfile, info, append=False) + # + self.longarg = longarg + # get hold of the old spawn? (necessary?) + self._spawn = env['SPAWN'] + + # define new SPAWN + def spawn(self, sh, escape, cmd, args, spawnenv): + # get command line + newargs = ' '.join(map(escape, args[1:])) + cmdline = cmd + " " + newargs + # + # if log is not empty, write to it + if self.logfile != '': + # this tend to be slow (?) but ensure correct output + # Note that cmdline may be long so I do not escape it + try: + # since this is not an essential operation, proceed if things go wrong here. + writeToFile(self.logfile, cmd + " " + ' '.join(args[1:]) + '\n', append=True) + except: + print "Warning: can not write to log file ", self.logfile + # + # if the command is not too long, use the old + if not self.longarg or len(cmdline) < 8000: + exit_code = self._spawn(sh, escape, cmd, args, spawnenv) + else: + sAttrs = win32security.SECURITY_ATTRIBUTES() + StartupInfo = win32process.STARTUPINFO() + for var in spawnenv: + spawnenv[var] = spawnenv[var].encode('ascii', 'replace') + # check for any special operating system commands + if cmd == 'del': + for arg in args[1:]: + win32file.DeleteFile(arg) + exit_code = 0 + else: + # otherwise execute the command. + hProcess, hThread, dwPid, dwTid = win32process.CreateProcess(None, cmdline, None, None, 1, 0, spawnenv, None, StartupInfo) + win32event.WaitForSingleObject(hProcess, win32event.INFINITE) + exit_code = win32process.GetExitCodeProcess(hProcess) + win32file.CloseHandle(hProcess); + win32file.CloseHandle(hThread); + return exit_code def setLoggedSpawn(env, logfile = '', longarg=False, info=''): - ''' This function modify env and allow logging of - commands to a logfile. If the argument is too long - a win32 spawn will be used instead of the system one - ''' - # - # create a new spwn object - ls = loggedSpawn(env, logfile, longarg, info) - # replace the old SPAWN by the new function - env['SPAWN'] = ls.spawn + ''' This function modify env and allow logging of + commands to a logfile. If the argument is too long + a win32 spawn will be used instead of the system one + ''' + # + # create a new spwn object + ls = loggedSpawn(env, logfile, longarg, info) + # replace the old SPAWN by the new function + env['SPAWN'] = ls.spawn diff --git a/lib/configure.py b/lib/configure.py index 252f070f74..8748943e85 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -14,218 +14,218 @@ import sys, os, re, shutil, glob def writeToFile(filename, lines, append = False): - " utility function: write or append lines to filename " - if append: - file = open(filename, 'a') - else: - file = open(filename, 'w') - file.write(lines) - file.close() + " utility function: write or append lines to filename " + if append: + file = open(filename, 'a') + else: + file = open(filename, 'w') + file.write(lines) + file.close() def addToRC(lines): - ''' utility function: shortcut for appending lines to outfile - add newline at the end of lines. - ''' - if lines.strip() != '': - writeToFile(outfile, lines + '\n', append = True) + ''' utility function: shortcut for appending lines to outfile + add newline at the end of lines. + ''' + if lines.strip() != '': + writeToFile(outfile, lines + '\n', append = True) def removeFiles(filenames): - '''utility function: 'rm -f' - ignore errors when file does not exist, or is a directory. - ''' - for file in filenames: - try: - os.remove(file) - except: - pass + '''utility function: 'rm -f' + ignore errors when file does not exist, or is a directory. + ''' + for file in filenames: + try: + os.remove(file) + except: + pass def cmdOutput(cmd): - '''utility function: run a command and get its output as a string - cmd: command to run - ''' - fout = os.popen(cmd) - output = fout.read() - fout.close() - return output.strip() + '''utility function: run a command and get its output as a string + cmd: command to run + ''' + fout = os.popen(cmd) + output = fout.read() + fout.close() + return output.strip() def setEnviron(): - ''' I do not really know why this is useful, but we might as well keep it. - NLS nuisances. - Only set these to C if already set. These must not be set unconditionally - because not all systems understand e.g. LANG=C (notably SCO). - Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! - Non-C LC_CTYPE values break the ctype check. - ''' - os.environ['LANG'] = os.getenv('LANG', 'C') - os.environ['LC'] = os.getenv('LC_ALL', 'C') - os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C') - os.environ['LC_CTYPE'] = os.getenv('LC_CTYPE', 'C') + ''' I do not really know why this is useful, but we might as well keep it. + NLS nuisances. + Only set these to C if already set. These must not be set unconditionally + because not all systems understand e.g. LANG=C (notably SCO). + Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! + Non-C LC_CTYPE values break the ctype check. + ''' + os.environ['LANG'] = os.getenv('LANG', 'C') + os.environ['LC'] = os.getenv('LC_ALL', 'C') + os.environ['LC_MESSAGE'] = os.getenv('LC_MESSAGE', 'C') + os.environ['LC_CTYPE'] = os.getenv('LC_CTYPE', 'C') def createDirectories(): - ''' Create the build directories if necessary ''' - for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \ - 'layouts', 'scripts', 'templates', 'ui' ]: - if not os.path.isdir( dir ): - try: - os.mkdir( dir) - except: - print "Failed to create directory ", dir - sys.exit(1) + ''' Create the build directories if necessary ''' + for dir in ['bind', 'clipart', 'doc', 'examples', 'images', 'kbd', \ + 'layouts', 'scripts', 'templates', 'ui' ]: + if not os.path.isdir( dir ): + try: + os.mkdir( dir) + except: + print "Failed to create directory ", dir + sys.exit(1) def checkTeXPaths(): - ''' Determine the path-style needed by the TeX engine on Win32 (Cygwin) ''' - windows_style_tex_paths = '' - if os.name == 'nt' or sys.platform == 'cygwin': - from tempfile import mkstemp - fd, tmpfname = mkstemp(suffix='.ltx') - # a wrapper file - wfd, wtmpfname = mkstemp(suffix='.ltx') - if os.name == 'nt': - inpname = tmpfname.replace('\\', '/') - wtmpfname = wtmpfname.replace('\\', '/') - else: - inpname = cmdOutput('cygpath -m ' + tmpfname) - wtmpfname = cmdOutput('cygpath -m ' + wtmpfname) - os.write(fd, r''' + ''' Determine the path-style needed by the TeX engine on Win32 (Cygwin) ''' + windows_style_tex_paths = '' + if os.name == 'nt' or sys.platform == 'cygwin': + from tempfile import mkstemp + fd, tmpfname = mkstemp(suffix='.ltx') + # a wrapper file + wfd, wtmpfname = mkstemp(suffix='.ltx') + if os.name == 'nt': + inpname = tmpfname.replace('\\', '/') + wtmpfname = wtmpfname.replace('\\', '/') + else: + inpname = cmdOutput('cygpath -m ' + tmpfname) + wtmpfname = cmdOutput('cygpath -m ' + wtmpfname) + os.write(fd, r''' \documentstyle{article} \begin{document}\end{document} - ''') - os.close(fd) - os.write(wfd, r'\input{' + inpname.replace('~', '\\string~') + '}' ) - os.close(wfd) - if cmdOutput('latex ' + wtmpfname).find('Error') != -1: - print "configure: TeX engine needs posix-style paths in latex files" - windows_style_tex_paths = 'false' - else: - print "configure: TeX engine needs windows-style paths in latex files" - windows_style_tex_paths = 'true' - tmpbname,ext = os.path.splitext(os.path.basename(tmpfname)) - wtmpbname,ext = os.path.splitext(os.path.basename(wtmpfname)) - removeFiles( [ tmpfname, wtmpfname, tmpbname + '.log', \ + ''') + os.close(fd) + os.write(wfd, r'\input{' + inpname.replace('~', '\\string~') + '}' ) + os.close(wfd) + if cmdOutput('latex ' + wtmpfname).find('Error') != -1: + print "configure: TeX engine needs posix-style paths in latex files" + windows_style_tex_paths = 'false' + else: + print "configure: TeX engine needs windows-style paths in latex files" + windows_style_tex_paths = 'true' + tmpbname,ext = os.path.splitext(os.path.basename(tmpfname)) + wtmpbname,ext = os.path.splitext(os.path.basename(wtmpfname)) + removeFiles( [ tmpfname, wtmpfname, tmpbname + '.log', \ tmpbname + '.aux', wtmpbname + '.log', wtmpbname + '.aux' ] ) - return windows_style_tex_paths + return windows_style_tex_paths ## Searching some useful programs def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): - ''' - This function will search a program in $PATH plus given path - If found, return directory and program name (not the options). - - description: description of the program - - progs: check programs, for each prog, the first word is used - for searching but the whole string is used to replace - %% for a rc_entry. So, feel free to add '$$i' etc for programs. - - path: additional pathes - - rc_entry: entry to outfile, can be - 1. emtpy: no rc entry will be added - 2. one pattern: %% will be replaced by the first found program, - or '' if no program is found. - 3. several patterns for each prog and not_found. This is used - when different programs have different usages. If you do not - want not_found entry to be added to the RC file, you can specify - an entry for each prog and use '' for the not_found entry. - - not_found: the value that should be used instead of '' if no program - was found - - ''' - # one rc entry for each progs plus not_found entry - if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1: - print "rc entry should have one item or item for each prog and not_found." - sys.exit(2) - print 'checking for ' + description + '...' - ## print '(' + ','.join(progs) + ')', - for idx in range(len(progs)): - # ac_prog may have options, ac_word is the command name - ac_prog = progs[idx] - ac_word = ac_prog.split(' ')[0] - print '+checking for "' + ac_word + '"... ', - path = os.environ["PATH"].split(os.pathsep) + path - for ac_dir in path: - # check both ac_word and ac_word.exe (for windows system) - if os.path.isfile( os.path.join(ac_dir, ac_word) ) or \ - os.path.isfile( os.path.join(ac_dir, ac_word + ".exe") ): - print ' yes' - # write rc entries for this command - if len(rc_entry) == 1: - addToRC(rc_entry[0].replace('%%', ac_prog)) - elif len(rc_entry) > 1: - addToRC(rc_entry[idx].replace('%%', ac_prog)) - return [ac_dir, ac_word] - # if not successful - print ' no' - # write rc entries for 'not found' - if len(rc_entry) > 0: # the last one. - addToRC(rc_entry[-1].replace('%%', not_found)) - return ['', not_found] + ''' + This function will search a program in $PATH plus given path + If found, return directory and program name (not the options). + + description: description of the program + + progs: check programs, for each prog, the first word is used + for searching but the whole string is used to replace + %% for a rc_entry. So, feel free to add '$$i' etc for programs. + + path: additional pathes + + rc_entry: entry to outfile, can be + 1. emtpy: no rc entry will be added + 2. one pattern: %% will be replaced by the first found program, + or '' if no program is found. + 3. several patterns for each prog and not_found. This is used + when different programs have different usages. If you do not + want not_found entry to be added to the RC file, you can specify + an entry for each prog and use '' for the not_found entry. + + not_found: the value that should be used instead of '' if no program + was found + + ''' + # one rc entry for each progs plus not_found entry + if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1: + print "rc entry should have one item or item for each prog and not_found." + sys.exit(2) + print 'checking for ' + description + '...' + ## print '(' + ','.join(progs) + ')', + for idx in range(len(progs)): + # ac_prog may have options, ac_word is the command name + ac_prog = progs[idx] + ac_word = ac_prog.split(' ')[0] + print '+checking for "' + ac_word + '"... ', + path = os.environ["PATH"].split(os.pathsep) + path + for ac_dir in path: + # check both ac_word and ac_word.exe (for windows system) + if os.path.isfile( os.path.join(ac_dir, ac_word) ) or \ + os.path.isfile( os.path.join(ac_dir, ac_word + ".exe") ): + print ' yes' + # write rc entries for this command + if len(rc_entry) == 1: + addToRC(rc_entry[0].replace('%%', ac_prog)) + elif len(rc_entry) > 1: + addToRC(rc_entry[idx].replace('%%', ac_prog)) + return [ac_dir, ac_word] + # if not successful + print ' no' + # write rc entries for 'not found' + if len(rc_entry) > 0: # the last one. + addToRC(rc_entry[-1].replace('%%', not_found)) + return ['', not_found] def checkViewer(description, progs, rc_entry = [], path = []): - ''' The same as checkProg, but for viewers and editors ''' - return checkProg(description, progs, rc_entry, path, not_found = 'auto') + ''' The same as checkProg, but for viewers and editors ''' + return checkProg(description, progs, rc_entry, path, not_found = 'auto') def checkLatex(): - ''' Check latex, return lyx_check_config ''' - # Find programs! Returned path is not used now - if ((os.name == 'nt' or sys.platform == 'cygwin') and - checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and - checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): - # Windows only: DraftDVI - converter_entry = r'''\converter latex dvi2 "%%" "latex" + ''' Check latex, return lyx_check_config ''' + # Find programs! Returned path is not used now + if ((os.name == 'nt' or sys.platform == 'cygwin') and + checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and + checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): + # Windows only: DraftDVI + converter_entry = r'''\converter latex dvi2 "%%" "latex" \converter dvi2 dvi "python $$s/scripts/clean_dvi.py $$i $$o" ""''' - else: - converter_entry = r'\converter latex dvi "%%" "latex"' - path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'], - rc_entry = [converter_entry]) - # no latex - if LATEX != '': - # Check if latex is usable - writeToFile('chklatex.ltx', ''' + else: + converter_entry = r'\converter latex dvi "%%" "latex"' + path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'], + rc_entry = [converter_entry]) + # no latex + if LATEX != '': + # Check if latex is usable + writeToFile('chklatex.ltx', ''' \\nonstopmode\\makeatletter \\ifx\\undefined\\documentclass\\else \\message{ThisIsLaTeX2e} \\fi \\@@end ''') - # run latex on chklatex.ltx and check result - if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1: - # valid latex2e - return LATEX - else: - print "Latex not usable (not LaTeX2e) " - # remove temporary files - removeFiles(['chklatex.ltx', 'chklatex.log']) - return '' + # run latex on chklatex.ltx and check result + if cmdOutput(LATEX + ' chklatex.ltx').find('ThisIsLaTeX2e') != -1: + # valid latex2e + return LATEX + else: + print "Latex not usable (not LaTeX2e) " + # remove temporary files + removeFiles(['chklatex.ltx', 'chklatex.log']) + return '' def checkFormatEntries(): - ''' Check all formats (\Format entries) ''' - checkViewer('a Tgif viewer and editor', ['tgif'], - rc_entry = [r'\Format tgif obj Tgif "" "%%" "%%" ""']) - # - checkViewer('a FIG viewer and editor', ['xfig'], - rc_entry = [r'\Format fig fig FIG "" "%%" "%%" ""']) - # - checkViewer('a Grace viewer and editor', ['xmgrace'], - rc_entry = [r'\Format agr agr Grace "" "%%" "%%" ""']) - # - checkViewer('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], - rc_entry = [r'\Format fen fen FEN "" "%%" "%%" ""']) - # - path, iv = checkViewer('a raster image viewer', ['xv', 'kview', 'gimp']) - path, ie = checkViewer('a raster image editor', ['gimp']) - addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" "" + ''' Check all formats (\Format entries) ''' + checkViewer('a Tgif viewer and editor', ['tgif'], + rc_entry = [r'\Format tgif obj Tgif "" "%%" "%%" ""']) + # + checkViewer('a FIG viewer and editor', ['xfig'], + rc_entry = [r'\Format fig fig FIG "" "%%" "%%" ""']) + # + checkViewer('a Grace viewer and editor', ['xmgrace'], + rc_entry = [r'\Format agr agr Grace "" "%%" "%%" ""']) + # + checkViewer('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], + rc_entry = [r'\Format fen fen FEN "" "%%" "%%" ""']) + # + path, iv = checkViewer('a raster image viewer', ['xv', 'kview', 'gimp']) + path, ie = checkViewer('a raster image editor', ['gimp']) + addToRC(r'''\Format bmp bmp BMP "" "%s" "%s" "" \Format gif gif GIF "" "%s" "%s" "" \Format jpg jpg JPEG "" "%s" "%s" "" \Format pbm pbm PBM "" "%s" "%s" "" @@ -235,11 +235,11 @@ def checkFormatEntries(): \Format tiff tif TIFF "" "%s" "%s" "" \Format xbm xbm XBM "" "%s" "%s" "" \Format xpm xpm XPM "" "%s" "%s" ""''' % \ - (iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) ) - # - checkViewer('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ - 'nedit', 'gedit', 'notepad'], - rc_entry = [r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" "" + (iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) ) + # + checkViewer('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ + 'nedit', 'gedit', 'notepad'], + rc_entry = [r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" "" \Format asciiimage asc "Plain text (image)" "" "" "%%" "" \Format asciixfig asc "Plain text (Xfig output)" "" "" "%%" "" \Format dateout tmp "date (output)" "" "" "%%" "" @@ -251,32 +251,32 @@ def checkFormatEntries(): \Format pdflatex tex "LaTeX (pdflatex)" "" "" "%%" "document" \Format text txt "Plain text" a "" "%%" "document" \Format textparagraph txt "Plain text (paragraphs)" "" "" "%%" "document"''' ]) - # - #checkProg('a Postscript interpreter', ['gs'], - # rc_entry = [ r'\ps_command "%%"' ]) - checkViewer('a Postscript previewer', ['gv', 'ghostview -swap', 'kghostview'], - rc_entry = [r'''\Format eps eps EPS "" "%%" "" "" + # + #checkProg('a Postscript interpreter', ['gs'], + # rc_entry = [ r'\ps_command "%%"' ]) + checkViewer('a Postscript previewer', ['gv', 'ghostview -swap', 'kghostview'], + rc_entry = [r'''\Format eps eps EPS "" "%%" "" "" \Format ps ps Postscript t "%%" "" "document"''']) - # - checkViewer('a PDF previewer', ['acrobat', 'acroread', 'gv', 'ghostview', \ - 'xpdf', 'kpdf', 'kghostview'], - rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document" + # + checkViewer('a PDF previewer', ['acrobat', 'acroread', 'gv', 'ghostview', \ + 'xpdf', 'kpdf', 'kghostview'], + rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document" \Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document" \Format pdf3 pdf "PDF (dvipdfm)" m "%%" "" "document"''']) - # - checkViewer('a DVI previewer', ['xdvi', 'kdvi'], - rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document"']) - if ((os.name == 'nt' or sys.platform == 'cygwin') and - checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and - checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): - # Windows only: DraftDVI - addToRC(r'\Format dvi2 dvi DraftDVI "" "" "document"') - # - checkViewer('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], - rc_entry = [r'\Format html html HTML H "%%" "" "document"']) - # - # entried that do not need checkProg - addToRC(r'''\Format date "" "date command" "" "" "" "" + # + checkViewer('a DVI previewer', ['xdvi', 'kdvi'], + rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document"']) + if ((os.name == 'nt' or sys.platform == 'cygwin') and + checkProg('DVI to DTL converter', ['dv2dt']) != ['', ''] and + checkProg('DTL to DVI converter', ['dt2dv']) != ['', '']): + # Windows only: DraftDVI + addToRC(r'\Format dvi2 dvi DraftDVI "" "" "document"') + # + checkViewer('a HTML previewer', ['mozilla file://$$p$$i', 'netscape'], + rc_entry = [r'\Format html html HTML H "%%" "" "document"']) + # + # entried that do not need checkProg + addToRC(r'''\Format date "" "date command" "" "" "" "" \Format fax "" Fax "" "" "" "document" \Format lyx lyx LyX "" "" "" "" \Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document" @@ -291,103 +291,103 @@ def checkFormatEntries(): def checkConverterEntries(): - ''' Check all converters (\converter entries) ''' - checkProg('the pdflatex program', ['pdflatex $$i'], - rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex"' ]) - - ''' If we're running LyX in-place then tex2lyx will be found in - ../src/tex2lyx. Add this directory to the PATH temporarily and - search for tex2lyx. - Use PATH to avoid any problems with paths-with-spaces. - ''' - path_orig = os.environ["PATH"] - os.environ["PATH"] = os.path.join('..', 'src', 'tex2lyx') + \ - os.pathsep + path_orig - - checkProg('a LaTeX -> LyX converter', ['tex2lyx -f $$i $$o', \ - 'tex2lyx' + version_suffix + ' -f $$i $$o' ], - rc_entry = [ r'\converter latex lyx "%%" ""' ]) - - os.environ["PATH"] = path_orig - - # - checkProg('a Noweb -> LyX converter', ['noweb2lyx' + version_suffix + ' $$i $$o'], path = ['./reLyX'], - rc_entry = [ r'\converter literate lyx "%%" ""' ]) - # - checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'], - rc_entry = [ r'\converter literate latex "%%" ""' ]) - # - checkProg('a HTML -> LaTeX converter', ['html2latex $$i'], - rc_entry = [ r'\converter html latex "%%" ""' ]) - # - checkProg('a MSWord -> LaTeX converter', ['wvCleanLatex $$i $$o'], - rc_entry = [ r'\converter word latex "%%" ""' ]) - # - checkProg('a LaTeX -> MS Word converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"], - rc_entry = [ r'\converter latex wordhtml "%%" ""' ]) - # - checkProg('an OpenOffice.org -> LaTeX converter', ['w2l -clean $$i'], - rc_entry = [ r'\converter sxw latex "%%" ""' ]) - # - checkProg('an LaTeX -> OpenOffice.org LaTeX converter', ['oolatex $$i', 'oolatex.sh $$i'], - rc_entry = [ r'\converter latex sxw "%%" "latex"' ]) - # - checkProg('a PS to PDF converter', ['ps2pdf13 $$i $$o'], - rc_entry = [ r'\converter ps pdf "%%" ""' ]) - # - checkProg('a DVI to PS converter', ['dvips -o $$o $$i'], - rc_entry = [ r'\converter dvi ps "%%" ""' ]) - # - checkProg('a DVI to PDF converter', ['dvipdfmx -o $$o $$i', 'dvipdfm -o $$o $$i'], - rc_entry = [ r'\converter dvi pdf3 "%%" ""' ]) - # - path, dvipng = checkProg('dvipng', ['dvipng']) - if dvipng == "dvipng": - addToRC(r'\converter lyxpreview png "python $$s/scripts/lyxpreview2bitmap.py" ""') - else: - addToRC(r'\converter lyxpreview png "" ""') - # - checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i'], - rc_entry = [ r'\converter ps fax "%%" ""']) - # - checkProg('a FIG -> EPS/PPM converter', ['fig2dev'], - rc_entry = [ - r'''\converter fig eps "fig2dev -L eps $$i $$o" "" + ''' Check all converters (\converter entries) ''' + checkProg('the pdflatex program', ['pdflatex $$i'], + rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex"' ]) + + ''' If we're running LyX in-place then tex2lyx will be found in + ../src/tex2lyx. Add this directory to the PATH temporarily and + search for tex2lyx. + Use PATH to avoid any problems with paths-with-spaces. + ''' + path_orig = os.environ["PATH"] + os.environ["PATH"] = os.path.join('..', 'src', 'tex2lyx') + \ + os.pathsep + path_orig + + checkProg('a LaTeX -> LyX converter', ['tex2lyx -f $$i $$o', \ + 'tex2lyx' + version_suffix + ' -f $$i $$o' ], + rc_entry = [ r'\converter latex lyx "%%" ""' ]) + + os.environ["PATH"] = path_orig + + # + checkProg('a Noweb -> LyX converter', ['noweb2lyx' + version_suffix + ' $$i $$o'], path = ['./reLyX'], + rc_entry = [ r'\converter literate lyx "%%" ""' ]) + # + checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'], + rc_entry = [ r'\converter literate latex "%%" ""' ]) + # + checkProg('a HTML -> LaTeX converter', ['html2latex $$i'], + rc_entry = [ r'\converter html latex "%%" ""' ]) + # + checkProg('a MSWord -> LaTeX converter', ['wvCleanLatex $$i $$o'], + rc_entry = [ r'\converter word latex "%%" ""' ]) + # + checkProg('a LaTeX -> MS Word converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"], + rc_entry = [ r'\converter latex wordhtml "%%" ""' ]) + # + checkProg('an OpenOffice.org -> LaTeX converter', ['w2l -clean $$i'], + rc_entry = [ r'\converter sxw latex "%%" ""' ]) + # + checkProg('an LaTeX -> OpenOffice.org LaTeX converter', ['oolatex $$i', 'oolatex.sh $$i'], + rc_entry = [ r'\converter latex sxw "%%" "latex"' ]) + # + checkProg('a PS to PDF converter', ['ps2pdf13 $$i $$o'], + rc_entry = [ r'\converter ps pdf "%%" ""' ]) + # + checkProg('a DVI to PS converter', ['dvips -o $$o $$i'], + rc_entry = [ r'\converter dvi ps "%%" ""' ]) + # + checkProg('a DVI to PDF converter', ['dvipdfmx -o $$o $$i', 'dvipdfm -o $$o $$i'], + rc_entry = [ r'\converter dvi pdf3 "%%" ""' ]) + # + path, dvipng = checkProg('dvipng', ['dvipng']) + if dvipng == "dvipng": + addToRC(r'\converter lyxpreview png "python $$s/scripts/lyxpreview2bitmap.py" ""') + else: + addToRC(r'\converter lyxpreview png "" ""') + # + checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i'], + rc_entry = [ r'\converter ps fax "%%" ""']) + # + checkProg('a FIG -> EPS/PPM converter', ['fig2dev'], + rc_entry = [ + r'''\converter fig eps "fig2dev -L eps $$i $$o" "" \converter fig ppm "fig2dev -L ppm $$i $$o" "" \converter fig png "fig2dev -L png $$i $$o" ""''', - '']) - # - checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'], - rc_entry = [ r'\converter tiff eps "%%" ""', '']) - # - checkProg('a TGIF -> EPS/PPM converter', ['tgif'], - rc_entry = [ - r'''\converter tgif eps "tgif -stdout -print -color -eps $$i > $$o" "" + '']) + # + checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'], + rc_entry = [ r'\converter tiff eps "%%" ""', '']) + # + checkProg('a TGIF -> EPS/PPM converter', ['tgif'], + rc_entry = [ + r'''\converter tgif eps "tgif -stdout -print -color -eps $$i > $$o" "" \converter tgif ppm "tgif -stdout -print -color -ppm $$i > $$o" "" \converter tgif png "tgif -stdout -print -color -png $$i > $$o" "" \converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''', - '']) - # - checkProg('a EPS -> PDF converter', ['epstopdf'], - rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', '']) - # - checkProg('a Grace -> Image converter', ['gracebat'], - rc_entry = [ - r'''\converter agr eps "gracebat -hardcopy -printfile $$o -hdevice EPS $$i 2>/dev/null" "" + '']) + # + checkProg('a EPS -> PDF converter', ['epstopdf'], + rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', '']) + # + checkProg('a Grace -> Image converter', ['gracebat'], + rc_entry = [ + r'''\converter agr eps "gracebat -hardcopy -printfile $$o -hdevice EPS $$i 2>/dev/null" "" \converter agr png "gracebat -hardcopy -printfile $$o -hdevice PNG $$i 2>/dev/null" "" \converter agr jpg "gracebat -hardcopy -printfile $$o -hdevice JPEG $$i 2>/dev/null" "" \converter agr ppm "gracebat -hardcopy -printfile $$o -hdevice PNM $$i 2>/dev/null" ""''', - '']) - # - checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \ - 'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'], - rc_entry = [ r'\converter latex html "%%" "originaldir,needaux"' ]) - # - # FIXME: no rc_entry? comment it out - # checkProg('Image converter', ['convert $$i $$o']) - # - # Entried that do not need checkProg - addToRC(r'''\converter lyxpreview ppm "python $$s/scripts/lyxpreview2bitmap.py" "" + '']) + # + checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \ + 'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'], + rc_entry = [ r'\converter latex html "%%" "originaldir,needaux"' ]) + # + # FIXME: no rc_entry? comment it out + # checkProg('Image converter', ['convert $$i $$o']) + # + # Entried that do not need checkProg + addToRC(r'''\converter lyxpreview ppm "python $$s/scripts/lyxpreview2bitmap.py" "" \converter date dateout "date +%d-%m-%Y > $$o" "" \converter docbook docbook-xml "cp $$i $$o" "xml" \converter fen asciichess "python $$s/scripts/fen2ascii.py $$i $$o" "" @@ -398,328 +398,328 @@ def checkConverterEntries(): def checkLinuxDoc(): - ''' Check linuxdoc ''' - # - path, LINUXDOC = checkProg('SGML-tools 1.x (LinuxDoc)', ['sgml2lyx'], - rc_entry = [ - r'''\converter linuxdoc lyx "sgml2lyx $$i" "" + ''' Check linuxdoc ''' + # + path, LINUXDOC = checkProg('SGML-tools 1.x (LinuxDoc)', ['sgml2lyx'], + rc_entry = [ + r'''\converter linuxdoc lyx "sgml2lyx $$i" "" \converter linuxdoc latex "sgml2latex $$i" "" \converter linuxdoc dvi "sgml2latex -o dvi $$i" "" \converter linuxdoc html "sgml2html $$i" ""''', - r'''\converter linuxdoc lyx "" "" + r'''\converter linuxdoc lyx "" "" \converter linuxdoc latex "" "" \converter linuxdoc dvi "" "" \converter linuxdoc html "" ""''' ]) - if LINUXDOC != '': - return ('yes', 'true', '\\def\\haslinuxdoc{yes}') - else: - return ('no', 'false', '') + if LINUXDOC != '': + return ('yes', 'true', '\\def\\haslinuxdoc{yes}') + else: + return ('no', 'false', '') def checkDocBook(): - ''' Check docbook ''' - path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook) or db2x scripts', ['sgmltools', 'db2dvi'], - rc_entry = [ - r'''\converter docbook dvi "sgmltools -b dvi $$i" "" + ''' Check docbook ''' + path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook) or db2x scripts', ['sgmltools', 'db2dvi'], + rc_entry = [ + r'''\converter docbook dvi "sgmltools -b dvi $$i" "" \converter docbook html "sgmltools -b html $$i" ""''', - r'''\converter docbook dvi "db2dvi $$i" "" + r'''\converter docbook dvi "db2dvi $$i" "" \converter docbook html "db2html $$i" ""''', - r'''\converter docbook dvi "" "" + r'''\converter docbook dvi "" "" \converter docbook html "" ""''']) - # - if DOCBOOK != '': - return ('yes', 'true', '\\def\\hasdocbook{yes}') - else: - return ('no', 'false', '') + # + if DOCBOOK != '': + return ('yes', 'true', '\\def\\hasdocbook{yes}') + else: + return ('no', 'false', '') def checkOtherEntries(): - ''' entries other than Format and Converter ''' - checkProg('a *roff formatter', ['groff', 'nroff'], - rc_entry = [ - r'\ascii_roff_command "groff -t -Tlatin1 $$FName"', - r'\ascii_roff_command "tbl $$FName | nroff"', - r'\ascii_roff_command ""' ]) - checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], - rc_entry = [ r'\chktex_command "%%"' ]) - checkProg('a spellchecker', ['ispell'], - rc_entry = [ r'\spell_command "%%"' ]) - ## FIXME: OCTAVE is not used anywhere - # path, OCTAVE = checkProg('Octave', ['octave']) - ## FIXME: MAPLE is not used anywhere - # path, MAPLE = checkProg('Maple', ['maple']) - checkProg('a spool command', ['lp', 'lpr'], - rc_entry = [ - r'''\print_spool_printerprefix "-d " + ''' entries other than Format and Converter ''' + checkProg('a *roff formatter', ['groff', 'nroff'], + rc_entry = [ + r'\ascii_roff_command "groff -t -Tlatin1 $$FName"', + r'\ascii_roff_command "tbl $$FName | nroff"', + r'\ascii_roff_command ""' ]) + checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], + rc_entry = [ r'\chktex_command "%%"' ]) + checkProg('a spellchecker', ['ispell'], + rc_entry = [ r'\spell_command "%%"' ]) + ## FIXME: OCTAVE is not used anywhere + # path, OCTAVE = checkProg('Octave', ['octave']) + ## FIXME: MAPLE is not used anywhere + # path, MAPLE = checkProg('Maple', ['maple']) + checkProg('a spool command', ['lp', 'lpr'], + rc_entry = [ + r'''\print_spool_printerprefix "-d " \print_spool_command "lp"''', - r'''\print_spool_printerprefix "-P", + r'''\print_spool_printerprefix "-P", \print_spool_command "lpr"''', - '']) - # Add the rest of the entries (no checkProg is required) - addToRC(r'''\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o" + '']) + # Add the rest of the entries (no checkProg is required) + addToRC(r'''\copier fig "sh $$s/scripts/fig_copy.sh $$i $$o" \copier pstex "python $$s/scripts/tex_copy.py $$i $$o $$l" \copier pdftex "python $$s/scripts/tex_copy.py $$i $$o $$l" ''') def processLayoutFile(file, bool_docbook, bool_linuxdoc): - ''' process layout file and get a line of result - - Declear line are like this: (article.layout, scrbook.layout, svjog.layout) - - \DeclareLaTeXClass{article} - \DeclareLaTeXClass[scrbook]{book (koma-script)} - \DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)} + ''' process layout file and get a line of result + + Declear line are like this: (article.layout, scrbook.layout, svjog.layout) + + \DeclareLaTeXClass{article} + \DeclareLaTeXClass[scrbook]{book (koma-script)} + \DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)} + + we expect output: + + "article" "article" "article" "false" + "scrbook" "scrbook" "book (koma-script)" "false" + "svjog" "svjour" "article (Springer - svjour/jog)" "false" + ''' + classname = file.split(os.sep)[-1].split('.')[0] + # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclearLaTeXClass[a,b,c]{article} + p = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') + for line in open(file).readlines(): + res = p.search(line) + if res != None: + (classtype, optAll, opt, opt1, desc) = res.groups() + avai = {'LaTeX':'false', 'DocBook':bool_docbook, 'LinuxDoc':bool_linuxdoc}[classtype] + if opt == None: + opt = classname + return '"%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai) + print "Layout file without \DeclearXXClass line. " + sys.exit(2) - we expect output: - "article" "article" "article" "false" - "scrbook" "scrbook" "book (koma-script)" "false" - "svjog" "svjour" "article (Springer - svjour/jog)" "false" - ''' - classname = file.split(os.sep)[-1].split('.')[0] - # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclearLaTeXClass[a,b,c]{article} - p = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - for line in open(file).readlines(): - res = p.search(line) - if res != None: - (classtype, optAll, opt, opt1, desc) = res.groups() - avai = {'LaTeX':'false', 'DocBook':bool_docbook, 'LinuxDoc':bool_linuxdoc}[classtype] - if opt == None: - opt = classname - return '"%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai) - print "Layout file without \DeclearXXClass line. " - sys.exit(2) - - def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc): - ''' Explore the LaTeX configuration ''' - print 'checking LaTeX configuration... ', - # First, remove the files that we want to re-create - removeFiles(['textclass.lst', 'packages.lst', 'chkconfig.sed']) - # - if not check_config: - print ' default values' - print '+checking list of textclasses... ' - tx = open('textclass.lst', 'w') - tx.write(''' + ''' Explore the LaTeX configuration ''' + print 'checking LaTeX configuration... ', + # First, remove the files that we want to re-create + removeFiles(['textclass.lst', 'packages.lst', 'chkconfig.sed']) + # + if not check_config: + print ' default values' + print '+checking list of textclasses... ' + tx = open('textclass.lst', 'w') + tx.write(''' # This file declares layouts and their associated definition files # (include dir. relative to the place where this file is). # It contains only default values, since chkconfig.ltx could not be run # for some reason. Run ./configure if you need to update it after a # configuration change. ''') - # build the list of available layout files and convert it to commands - # for chkconfig.ltx - foundClasses = [] - for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ - glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : - # valid file? - if not os.path.isfile(file): - continue - # get stuff between /xxxx.layout . - classname = file.split(os.sep)[-1].split('.')[0] - # tr ' -' '__'` - cleanclass = classname.replace(' ', '_') - cleanclass = cleanclass.replace('-', '_') - # make sure the same class is not considered twice - if foundClasses.count(cleanclass) == 0: # not found before - foundClasses.append(cleanclass) - tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc)) - tx.close() - print '\tdone' - else: - print '\tauto' - removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \ - 'chkconfig.classes', 'chklayouts.tex']) - rmcopy = False - if not os.path.isfile( 'chkconfig.ltx' ): - shutil.copy( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) - rmcopy = True - writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \ - % (linuxdoc_cmd, docbook_cmd) ) - # Construct the list of classes to test for. - # build the list of available layout files and convert it to commands - # for chkconfig.ltx - p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') - testclasses = list() - for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ - glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : - if not os.path.isfile(file): - continue - classname = file.split(os.sep)[-1].split('.')[0] - for line in open(file).readlines(): - if p1.search(line) == None: - continue - if line[0] != '#': - print "Wrong input layout file with line '" + line - sys.exit(3) - testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) - break - testclasses.sort() - cl = open('chklayouts.tex', 'w') - for line in testclasses: - cl.write(line + '\n') - cl.close() - # - # we have chklayouts.tex, then process it - for line in cmdOutput(LATEX + ' wrap_chkconfig.ltx').splitlines(): - if re.match('^\+', line): - print line - # - # currently, values in chhkconfig are only used to set - # \font_encoding - values = {} - for line in open('chkconfig.vars').readlines(): - key, val = re.sub('-', '_', line).split('=') - val = val.strip() - values[key] = val.strip("'") - # chk_fontenc may not exist - try: - addToRC(r'\font_encoding "%s"' % values["chk_fontenc"]) - except: - pass - if rmcopy: # remove the copied file - removeFiles( [ 'chkconfig.ltx' ] ) + # build the list of available layout files and convert it to commands + # for chkconfig.ltx + foundClasses = [] + for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ + glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : + # valid file? + if not os.path.isfile(file): + continue + # get stuff between /xxxx.layout . + classname = file.split(os.sep)[-1].split('.')[0] + # tr ' -' '__'` + cleanclass = classname.replace(' ', '_') + cleanclass = cleanclass.replace('-', '_') + # make sure the same class is not considered twice + if foundClasses.count(cleanclass) == 0: # not found before + foundClasses.append(cleanclass) + tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc)) + tx.close() + print '\tdone' + else: + print '\tauto' + removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \ + 'chkconfig.classes', 'chklayouts.tex']) + rmcopy = False + if not os.path.isfile( 'chkconfig.ltx' ): + shutil.copy( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) + rmcopy = True + writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \ + % (linuxdoc_cmd, docbook_cmd) ) + # Construct the list of classes to test for. + # build the list of available layout files and convert it to commands + # for chkconfig.ltx + p1 = re.compile(r'\Declare(LaTeX|DocBook|LinuxDoc)Class') + testclasses = list() + for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ + glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) : + if not os.path.isfile(file): + continue + classname = file.split(os.sep)[-1].split('.')[0] + for line in open(file).readlines(): + if p1.search(line) == None: + continue + if line[0] != '#': + print "Wrong input layout file with line '" + line + sys.exit(3) + testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) + break + testclasses.sort() + cl = open('chklayouts.tex', 'w') + for line in testclasses: + cl.write(line + '\n') + cl.close() + # + # we have chklayouts.tex, then process it + for line in cmdOutput(LATEX + ' wrap_chkconfig.ltx').splitlines(): + if re.match('^\+', line): + print line + # + # currently, values in chhkconfig are only used to set + # \font_encoding + values = {} + for line in open('chkconfig.vars').readlines(): + key, val = re.sub('-', '_', line).split('=') + val = val.strip() + values[key] = val.strip("'") + # chk_fontenc may not exist + try: + addToRC(r'\font_encoding "%s"' % values["chk_fontenc"]) + except: + pass + if rmcopy: # remove the copied file + removeFiles( [ 'chkconfig.ltx' ] ) def createLaTeXConfig(): - ''' create LaTeXConfig.lyx ''' - # if chkconfig.sed does not exist (because LaTeX did not run), - # then provide a standard version. - if not os.path.isfile('chkconfig.sed'): - writeToFile('chkconfig.sed', 's!@.*@!???!g\n') - print "creating packages.lst" - # if packages.lst does not exist (because LaTeX did not run), - # then provide a standard version. - if not os.path.isfile('packages.lst'): - writeToFile('packages.lst', ''' + ''' create LaTeXConfig.lyx ''' + # if chkconfig.sed does not exist (because LaTeX did not run), + # then provide a standard version. + if not os.path.isfile('chkconfig.sed'): + writeToFile('chkconfig.sed', 's!@.*@!???!g\n') + print "creating packages.lst" + # if packages.lst does not exist (because LaTeX did not run), + # then provide a standard version. + if not os.path.isfile('packages.lst'): + writeToFile('packages.lst', ''' ### This file should contain the list of LaTeX packages that have been ### recognized by LyX. Unfortunately, since configure could not find ### your LaTeX2e program, the tests have not been run. Run ./configure ### if you need to update it after a configuration change. ''') - print 'creating doc/LaTeXConfig.lyx' - # - # This is originally done by sed, using a - # tex-generated file chkconfig.sed - ##sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in - ## >doc/LaTeXConfig.lyx - # Now, we have to do it by hand (python). - # - # add to chekconfig.sed - writeToFile('chkconfig.sed', '''s!@chk_linuxdoc@!%s!g + print 'creating doc/LaTeXConfig.lyx' + # + # This is originally done by sed, using a + # tex-generated file chkconfig.sed + ##sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in + ## >doc/LaTeXConfig.lyx + # Now, we have to do it by hand (python). + # + # add to chekconfig.sed + writeToFile('chkconfig.sed', '''s!@chk_linuxdoc@!%s!g s!@chk_docbook@!%s!g - ''' % (chk_linuxdoc, chk_docbook) , append=True) - # process this sed file!!!! - lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines() - # get the rules - p = re.compile(r's!(.*)!(.*)!g') - # process each sed replace. - for sed in open('chkconfig.sed').readlines(): - if sed.strip() == '': - continue - try: - fr, to = p.match(sed).groups() - # if latex did not run, change all @name@ to '???' - if fr == '@.*@': - for line in range(len(lyxin)): - lyxin[line] = re.sub('@.*@', to, lyxin[line]) - else: - for line in range(len(lyxin)): - lyxin[line] = lyxin[line].replace(fr, to) - except: # wrong sed entry? - print "Wrong sed entry in chkconfig.sed: '" + sed + "'" - sys.exit(4) - # - writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'), - ''.join(lyxin)) + ''' % (chk_linuxdoc, chk_docbook) , append=True) + # process this sed file!!!! + lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines() + # get the rules + p = re.compile(r's!(.*)!(.*)!g') + # process each sed replace. + for sed in open('chkconfig.sed').readlines(): + if sed.strip() == '': + continue + try: + fr, to = p.match(sed).groups() + # if latex did not run, change all @name@ to '???' + if fr == '@.*@': + for line in range(len(lyxin)): + lyxin[line] = re.sub('@.*@', to, lyxin[line]) + else: + for line in range(len(lyxin)): + lyxin[line] = lyxin[line].replace(fr, to) + except: # wrong sed entry? + print "Wrong sed entry in chkconfig.sed: '" + sed + "'" + sys.exit(4) + # + writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'), + ''.join(lyxin)) def checkTeXAllowSpaces(): - ''' Let's check whether spaces are allowed in TeX file names ''' - tex_allows_spaces = 'false' - if lyx_check_config: - print "Checking whether TeX allows spaces in file names... ", - writeToFile('a b.tex', r'\message{working^^J}' ) - # FIXME: the bsh version uses < /dev/null which is not portable. - # Can anyone confirm if this option (-interaction) is available - # at other flavor of latex as well? (MikTex/win, Web2C/linux are fine.) - if ''.join(cmdOutput(LATEX + ' -interaction=nonstopmode "a b"')).find('working') != -1: - print 'yes' - tex_allows_spaces = 'true' - else: - print 'no' - tex_allows_spaces = 'false' - addToRC(r'\tex_allows_spaces ' + tex_allows_spaces) - removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) + ''' Let's check whether spaces are allowed in TeX file names ''' + tex_allows_spaces = 'false' + if lyx_check_config: + print "Checking whether TeX allows spaces in file names... ", + writeToFile('a b.tex', r'\message{working^^J}' ) + # FIXME: the bsh version uses < /dev/null which is not portable. + # Can anyone confirm if this option (-interaction) is available + # at other flavor of latex as well? (MikTex/win, Web2C/linux are fine.) + if ''.join(cmdOutput(LATEX + ' -interaction=nonstopmode "a b"')).find('working') != -1: + print 'yes' + tex_allows_spaces = 'true' + else: + print 'no' + tex_allows_spaces = 'false' + addToRC(r'\tex_allows_spaces ' + tex_allows_spaces) + removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) def removeTempFiles(): - # Final clean-up - if not lyx_keep_temps: - removeFiles(['chkconfig.sed', 'chkconfig.vars', \ - 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \ - 'chklayouts.tex', 'missfont.log', - 'chklatex.ltx', 'chklatex.log']) + # Final clean-up + if not lyx_keep_temps: + removeFiles(['chkconfig.sed', 'chkconfig.vars', \ + 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \ + 'chklayouts.tex', 'missfont.log', + 'chklatex.ltx', 'chklatex.log']) if __name__ == '__main__': - lyx_check_config = True - outfile = 'lyxrc.defaults' - rc_entries = '' - lyx_keep_temps = False - version_suffix = '' - ## Parse the command line - for op in sys.argv[1:]: # default shell/for list is $*, the options - if op in [ '-help', '--help', '-h' ]: - print '''Usage: configure [options] + lyx_check_config = True + outfile = 'lyxrc.defaults' + rc_entries = '' + lyx_keep_temps = False + version_suffix = '' + ## Parse the command line + for op in sys.argv[1:]: # default shell/for list is $*, the options + if op in [ '-help', '--help', '-h' ]: + print '''Usage: configure [options] Options: - --help show this help lines - --keep-temps keep temporary files (for debug. purposes) - --without-latex-config do not run LaTeX to determine configuration - --with-version-suffix=suffix suffix of binary installed files + --help show this help lines + --keep-temps keep temporary files (for debug. purposes) + --without-latex-config do not run LaTeX to determine configuration + --with-version-suffix=suffix suffix of binary installed files ''' - sys.exit(0) - elif op == '--without-latex-config': - lyx_check_config = False - elif op == '--keep-temps': - lyx_keep_temps = True - elif op[0:22] == '--with-version-suffix=': # never mind if op is not long enough - version_suffix = op[22:] - else: - print "Unknown option", op - sys.exit(1) - # - # check if we run from the right directory - srcdir = os.path.dirname(sys.argv[0]) - if srcdir == '': - srcdir = '.' - if not os.path.isfile( os.path.join(srcdir, 'chkconfig.ltx') ): - print "configure: error: cannot find chkconfig.ltx script" - sys.exit(1) - setEnviron() - createDirectories() - windows_style_tex_paths = checkTeXPaths() - ## Write the first part of outfile - writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure.py + sys.exit(0) + elif op == '--without-latex-config': + lyx_check_config = False + elif op == '--keep-temps': + lyx_keep_temps = True + elif op[0:22] == '--with-version-suffix=': # never mind if op is not long enough + version_suffix = op[22:] + else: + print "Unknown option", op + sys.exit(1) + # + # check if we run from the right directory + srcdir = os.path.dirname(sys.argv[0]) + if srcdir == '': + srcdir = '.' + if not os.path.isfile( os.path.join(srcdir, 'chkconfig.ltx') ): + print "configure: error: cannot find chkconfig.ltx script" + sys.exit(1) + setEnviron() + createDirectories() + windows_style_tex_paths = checkTeXPaths() + ## Write the first part of outfile + writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure.py # script. It contains default settings that have been determined by # examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you # want to customize LyX, make a copy of the file LYXDIR/lyxrc as # ~/.lyx/lyxrc and edit this file instead. Any setting in lyxrc will # override the values given here. ''') - # check latex - LATEX = checkLatex() - checkFormatEntries() - checkConverterEntries() - (chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc() - (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook() - checkTeXAllowSpaces() - if windows_style_tex_paths != '': - addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths) - checkOtherEntries() - # --without-latex-config can disable lyx_check_config - checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc) - createLaTeXConfig() - removeTempFiles() + # check latex + LATEX = checkLatex() + checkFormatEntries() + checkConverterEntries() + (chk_linuxdoc, bool_linuxdoc, linuxdoc_cmd) = checkLinuxDoc() + (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook() + checkTeXAllowSpaces() + if windows_style_tex_paths != '': + addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths) + checkOtherEntries() + # --without-latex-config can disable lyx_check_config + checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc) + createLaTeXConfig() + removeTempFiles() diff --git a/lib/scripts/TeXFiles.py b/lib/scripts/TeXFiles.py index 375d88e389..bf85ebf44d 100755 --- a/lib/scripts/TeXFiles.py +++ b/lib/scripts/TeXFiles.py @@ -41,30 +41,30 @@ bst_stylefile = 'bstFiles.lst' bib_files = 'bibFiles.lst' def cmdOutput(cmd): - '''utility function: run a command and get its output as a string - cmd: command to run - ''' - fout = os.popen(cmd) - output = fout.read() - fout.close() - return output + '''utility function: run a command and get its output as a string + cmd: command to run + ''' + fout = os.popen(cmd) + output = fout.read() + fout.close() + return output # processing command line options if len(sys.argv) > 1: - if sys.argv[1] in ['--help', '-help']: - print '''Usage: TeXFiles.py [-version | cls | sty | bst | bib ] - Default is without any Parameters, - so that all files will be created''' - sye.exit(0) - else: - types = sys.argv[1:] - for type in types: - if type not in ['cls', 'sty', 'bst', 'bib']: - print 'ERROR: unknown type', type - sys.exit(1) + if sys.argv[1] in ['--help', '-help']: + print '''Usage: TeXFiles.py [-version | cls | sty | bst | bib ] + Default is without any Parameters, + so that all files will be created''' + sye.exit(0) + else: + types = sys.argv[1:] + for type in types: + if type not in ['cls', 'sty', 'bst', 'bib']: + print 'ERROR: unknown type', type + sys.exit(1) else: - # if no parameter is specified, assume all - types = ['cls', 'sty', 'bst', 'bib'] + # if no parameter is specified, assume all + types = ['cls', 'sty', 'bst', 'bib'] # # MS-DOS and MS-Windows define $COMSPEC or $ComSpec and use `;' to separate @@ -73,44 +73,45 @@ else: # Create a variable that holds the right character to be used by the scripts. path_sep = os.pathsep if sys.platform == 'cygwin': - # MikTeX's kpsewhich says "kpathsea emulation version x.x.x", whereas - # teTeX's simply "kpathsea version x.x.x". - if 'emulation' in cmdOutput('kpsewhich --version'): - path_sep = ';' - else: - path_sep = ':' + # MikTeX's kpsewhich says "kpathsea emulation version x.x.x", whereas + # teTeX's simply "kpathsea version x.x.x". + if 'emulation' in cmdOutput('kpsewhich --version'): + path_sep = ';' + else: + path_sep = ':' # process each file type for type in types: - print "Indexing files of type", type - if type == 'cls': - outfile = cls_stylefile - kpsetype = '.tex' - elif type == 'sty': - outfile = sty_stylefile - kpsetype = '.tex' - elif type == 'bst': - outfile = bst_stylefile - kpsetype = '.bst' - elif type == 'bib': - outfile = bib_files - kpsetype = '.bib' + print "Indexing files of type", type + if type == 'cls': + outfile = cls_stylefile + kpsetype = '.tex' + elif type == 'sty': + outfile = sty_stylefile + kpsetype = '.tex' + elif type == 'bst': + outfile = bst_stylefile + kpsetype = '.bst' + elif type == 'bib': + outfile = bib_files + kpsetype = '.bib' - dirs = cmdOutput('kpsewhich --show-path=' + kpsetype).replace('!!', '').strip() - # remove excessive // - dirs = re.sub('//+', '/', dirs) - - file_ext = '.' + type - out = open(outfile, 'w') - for dir in dirs.split(path_sep): - # for each valid directory - if os.path.isdir(dir): - # walk down the file hierarchy - for root,path,files in os.walk(dir): - # check file type - for file in files: - if len(file) > 4 and file[-4:] == file_ext: - # force the use of / since miktex uses / even under windows - print >> out, root.replace('\\', '/') + '/' + file - out.close() + dirs = cmdOutput('kpsewhich --show-path=' + kpsetype).replace('!!', '').strip() + # remove excessive // + dirs = re.sub('//+', '/', dirs) + + file_ext = '.' + type + out = open(outfile, 'w') + for dir in dirs.split(path_sep): + # for each valid directory + if not os.path.isdir(dir): + continue + # walk down the file hierarchy + for root,path,files in os.walk(dir): + # check file type + for file in files: + if len(file) > 4 and file[-4:] == file_ext: + # force the use of / since miktex uses / even under windows + print >> out, root.replace('\\', '/') + '/' + file + out.close() diff --git a/lib/scripts/convertDefault.py b/lib/scripts/convertDefault.py index a71af43999..acc0853321 100644 --- a/lib/scripts/convertDefault.py +++ b/lib/scripts/convertDefault.py @@ -19,6 +19,6 @@ # converts an image from $1 to $2 format import os, sys if os.system(r'convert -depth 8 "%s" "%s"' % (sys.argv[1], sys.argv[2])) != 0: - print >> sys.stderr, sys.argv[0], 'ERROR' - print >> sys.stderr, 'Execution of "convert" failed.' - sys.exit(1) + print >> sys.stderr, sys.argv[0], 'ERROR' + print >> sys.stderr, 'Execution of "convert" failed.' + sys.exit(1) -- 2.39.2