Scons: remove fast_start feature

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15343 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2006-10-16 03:26:14 +00:00
parent f3016d70d9
commit 90cbd48fd3

View File

@ -74,7 +74,7 @@ package_string = '%s %s' % (package_name, package_version)
# various cache/log files
default_log_file = 'scons_lyx.log'
env_cache_file = 'env.cache'
opt_cache_file = 'opt.cache'
#----------------------------------------------------------
@ -153,7 +153,7 @@ opts.AddOptions(
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),
BoolOption('fast_start', 'This option is obsolete.', False),
# 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
@ -236,23 +236,8 @@ all_options = [x.key for x in opts.options]
true_strings = ('y', 'yes', 'true', 't', '1', 'on' , 'all' )
false_strings = ('n', 'no', 'false', 'f', '0', 'off', 'none')
# whether or not use current config.h, and cached tests
#
# 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
else:
fast_start = False
env_cache = {}
if ARGUMENTS.has_key('fast_start'):
print 'fast_start option is obsolete'
# if load_option=yes (default), load saved comand line options
#
@ -260,26 +245,17 @@ else:
# 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']
and os.path.isfile(opt_cache_file):
cache_file = open(opt_cache_file)
opt_cache = cPickle.load(cache_file)
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 (dest_dir is obsolete)
for arg in ['fast_start', 'load_option', 'dest_dir']:
for arg in ['load_option', 'dest_dir']:
if opt_cache.has_key(arg):
opt_cache.pop(arg)
# remove obsolete cached keys (well, SConstruct is evolving. :-)
@ -318,9 +294,10 @@ for arg in ARGUMENTS.keys():
print ' ' + '\n '.join(textwrap.wrap(', '.join(all_options)))
Exit(1)
# save arguments
env_cache['arg_cache'] = ARGUMENTS
# save options used
cache_file = open(opt_cache_file, 'w')
cPickle.dump(ARGUMENTS, cache_file)
cache_file.close()
#---------------------------------------------------------
# Setting up environment
@ -673,46 +650,38 @@ conf = Configure(env,
)
# pkg-config? (if not, we use hard-coded options)
if not fast_start:
if conf.CheckPkgConfig('0.15.0'):
if conf.CheckPkgConfig('0.15.0'):
env['HAS_PKG_CONFIG'] = True
else:
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']
# 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')) \
# zlib? This is required.
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 conf.CheckLib('iconv'):
if conf.CheckLib('iconv'):
env['ICONV_LIB'] = 'iconv'
elif conf.CheckLib('libiconv'):
elif conf.CheckLib('libiconv'):
env['ICONV_LIB'] = 'libiconv'
elif conf.CheckFunc('iconv_open'):
elif conf.CheckFunc('iconv_open'):
env['ICONV_LIB'] = None
else:
else:
print 'Did not find iconv or libiconv, exiting!'
Exit(1)
env_cache['ICONV_LIB'] = env['ICONV_LIB']
else:
env['ICONV_LIB'] = env_cache['ICONV_LIB']
# qt libraries?
if not fast_start:
#
# qt3 does not use pkg_config
if frontend == 'qt3':
#
# qt3 does not use pkg_config
if frontend == 'qt3':
# windows lib name is qt-mt3
if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();') \
and not conf.CheckLibWithHeader('qt-mt3', 'qapp.h', 'c++', 'QApplication qapp();'):
print 'Did not find qt libraries, exiting!'
Exit(1)
elif frontend == 'qt4':
elif frontend == 'qt4':
succ = False
# first: try pkg_config
if env['HAS_PKG_CONFIG']:
@ -754,17 +723,13 @@ if use_vc:
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 = []
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'):
# 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']
# check available boost libs (since lyx1.4 does not use iostream)
boost_libs = []
@ -772,20 +737,19 @@ 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 not fast_start:
# check boost libraries
boost_opt = ARGUMENTS.get('boost', 'auto')
# check for system boost
lib_paths = env['LIBPATH'] + ['/usr/lib', '/usr/local/lib']
inc_paths = env['CPPPATH'] + ['/usr/include', '/usr/local/include']
# default to $BUILDDIR/libs (use None since this path will be added anyway)
boost_libpath = None
# here I assume that all libraries are in the same directory
if boost_opt == 'included':
# check boost libraries
boost_opt = ARGUMENTS.get('boost', 'auto')
# check for system boost
lib_paths = env['LIBPATH'] + ['/usr/lib', '/usr/local/lib']
inc_paths = env['CPPPATH'] + ['/usr/include', '/usr/local/include']
# default to $BUILDDIR/libs (use None since this path will be added anyway)
boost_libpath = None
# here I assume that all libraries are in the same directory
if boost_opt == 'included':
boost_libraries = ['included_boost_%s' % x for x in boost_libs]
included_boost = True
env['BOOST_INC_PATH'] = '$TOP_SRCDIR/boost'
elif boost_opt == 'auto':
elif boost_opt == 'auto':
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, boost_version, mode == 'debug')
# if not found, use local boost
if res[0] is None:
@ -795,7 +759,7 @@ if not fast_start:
else:
included_boost = False
(boost_libraries, boost_libpath, env['BOOST_INC_PATH']) = res
elif boost_opt == 'system':
elif boost_opt == 'system':
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, boost_version, mode == 'debug')
if res[0] is None:
print "Can not find system boost libraries with version %s " % boost_version
@ -805,15 +769,7 @@ if not fast_start:
else:
included_boost = False
(boost_libraries, boost_libpath, env['BOOST_INC_PATH']) = res
env_cache['BOOST_LIBRARIES'] = boost_libraries
env_cache['INCLUDED_BOOST'] = included_boost
env_cache['BOOST_INC_PATH'] = env['BOOST_INC_PATH']
env_cache['BOOST_LIBPATH'] = boost_libpath
else:
boost_libraries = env_cache['BOOST_LIBRARIES']
included_boost = env_cache['INCLUDED_BOOST']
env['BOOST_INC_PATH'] = env_cache['BOOST_INC_PATH']
boost_libpath = env_cache['BOOST_LIBPATH']
if boost_libpath is not None:
env.AppendUnique(LIBPATH = [boost_libpath])
@ -821,17 +777,20 @@ if boost_libpath is not None:
env['ENABLE_NLS'] = env['nls']
if not fast_start:
if not env['ENABLE_NLS']:
if not env['ENABLE_NLS']:
intl_libs = []
included_gettext = False
else:
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 conf.CheckFunc('gettext'):
included_gettext = False
intl_libs = []
succ = True
elif conf.CheckLib('intl'):
included_gettext = False
intl_libs = ['intl']
succ = True
@ -846,31 +805,18 @@ if not fast_start:
# 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']
#
# check for msgfmt command
if not fast_start:
env['MSGFMT'] = conf.CheckCommand('msgfmt')
env_cache['MSGFMT'] = env['MSGFMT']
else:
env['MSGFMT'] = env_cache['MSGFMT']
env['MSGFMT'] = conf.CheckCommand('msgfmt')
# cygwin packaging requires the binaries to be stripped
if platform_name == 'cygwin':
if not fast_start:
env['STRIP'] = conf.CheckCommand('strip')
env_cache['STRIP'] = env['STRIP']
else:
env['STRIP'] = env_cache['STRIP']
# check uic and moc commands for qt frontends
if not fast_start:
if frontend[:2] == 'qt' and (conf.CheckCommand('uic') == None \
if frontend[:2] == 'qt' and (conf.CheckCommand('uic') == None \
or conf.CheckCommand('moc') == None):
print 'uic or moc command is not found for frontend', frontend
Exit(1)
@ -893,12 +839,10 @@ if platform_name == 'win32' and mode == 'debug' and use_vc:
# 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,
#
print "Creating %s..." % boost_config_h
#
utils.createConfigFile(conf,
config_file = boost_config_h,
config_pre = '''/* boost/config.h. Generated by SCons. */
@ -962,54 +906,54 @@ if not fast_start or not os.path.isfile(boost_config_h) \
#endif
'''
)
#
print "\nGenerating %s..." % config_h
)
#
print "\nGenerating %s..." % config_h
# AIKSAURUS_H_LOCATION
if (conf.CheckCXXHeader("Aiksaurus.h")):
# AIKSAURUS_H_LOCATION
if (conf.CheckCXXHeader("Aiksaurus.h")):
aik_location = '<Aiksaurus.h>'
elif (conf.CheckCXXHeader("Aiksaurus/Aiksaurus.h")):
elif (conf.CheckCXXHeader("Aiksaurus/Aiksaurus.h")):
aik_location = '<Aiksaurus/Aiksaurus.h>'
else:
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):
# 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'):
elif spell_opt in ['auto', 'pspell'] and conf.CheckLib('pspell'):
spell_engine = 'USE_PSPELL'
elif spell_opt in ['auto', 'ispell'] and conf.CheckLib('ispell'):
elif spell_opt in ['auto', 'ispell'] and conf.CheckLib('ispell'):
spell_engine = 'USE_ISPELL'
else:
else:
spell_engine = None
if spell_engine is not None:
if spell_engine is not None:
env[spell_engine] = True
else:
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()
# check arg types of select function
(select_arg1, select_arg234, select_arg5) = conf.CheckSelectArgType()
# check the size of wchar_t
sizeof_wchar_t = conf.CheckSizeOfWChar()
# something wrong
if sizeof_wchar_t == 0:
# check the size of wchar_t
sizeof_wchar_t = conf.CheckSizeOfWChar()
# something wrong
if sizeof_wchar_t == 0:
print 'Error: Can not determine the size of wchar_t.'
Exit(1)
#
# create config.h
result = utils.createConfigFile(conf,
#
# create config.h
result = utils.createConfigFile(conf,
config_file = config_h,
config_pre = '''/* config.h. Generated by SCons. */
@ -1065,8 +1009,8 @@ if not fast_start or not os.path.isfile(boost_config_h) \
#include <algorithm>
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),
@ -1201,22 +1145,21 @@ int mkstemp(char*);
#endif
'''
)
)
# these keys are needed in env
for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\
# these keys are needed in env
for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\
'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', '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:
#
# 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
#
@ -1323,26 +1266,7 @@ int mkstemp(char*);
# 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_LIBGDI32', 'HAVE_LIBAIKSAURUS', '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_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:
@ -1507,8 +1431,7 @@ if frontend in ['qt3', 'qt4']:
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,
@ -1534,10 +1457,6 @@ if logfile != '' or platform_name == 'win32':
# -h will print out help info
Help(opts.GenerateHelpText(env))
# save environment settings (for fast_start option)
cache_file = open(env_cache_file, 'w')
cPickle.dump(env_cache, cache_file)
cache_file.close()
#----------------------------------------------------------
@ -2028,9 +1947,9 @@ if build_msvs_projects:
the full path to start debug them.
'''
if rebuildTargetOnly:
cmds = 'fast_start=yes rebuild='+target
cmds = 'rebuild='+target
else:
cmds = 'fast_start=yes'
cmds = ''
if full_target is None:
build_target = target
else: