# scons asks for 1.5.2, lyx requires 2.3
EnsurePythonVersion(2, 3)
-# Please use at least 0.96.91 (not 0.96.1)
+# Please use at least 0.96.92 (not 0.96.1)
EnsureSConsVersion(0, 96)
+# also check for minor version number for scons 0.96
+from SCons import __version__
+version = map(int, __version__.split('.'))
+if version[0] == 0 and version[1] == 96 and version[2] < 92:
+ print "Scons >= 0.96.92 is required."
+ Exit(1)
# determine where I am ...
#
opts.AddOptions(
# frontend
EnumOption('frontend', 'Main GUI', default_frontend,
- allowed_values = ('xform', 'qt2', 'qt3', 'qt4', 'gtk') ),
+ allowed_values = ('qt2', 'qt3', 'qt4', 'gtk') ),
# debug or release build
EnumOption('mode', 'Building method', default_build_mode,
allowed_values = ('debug', 'release') ),
#
PathOption('extra_lib_path1', 'Extra library path', None),
# rebuild only specifed, comma separated targets
- ('rebuild', 'rebuild only specifed, comma separated targets', None),
+ ('rebuild', '''rebuild only specifed, comma separated targets.
+ yes or all (default): rebuild everything
+ no or none: rebuild nothing (usually used for installation)
+ comp1,comp2,...: rebuild specified targets''', None),
# can be set to a non-existing directory
('prefix', 'install architecture-independent files in PREFIX', default_prefix),
# build directory, will use $mode if not set
('LINKFLAGS', 'replace default $LINKFLAGS', None),
)
+# allowed options
+all_options = [x.key for x in opts.options]
+
# copied from SCons/Options/BoolOption.py
# We need to use them before a boolean ARGUMENTS option is available
# in env as bool.
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']:
+ # and we do not cache some options (dest_dir is obsolete)
+ for arg in ['fast_start', 'load_option', 'dest_dir']:
if opt_cache.has_key(arg):
opt_cache.pop(arg)
+ # remove obsolete cached keys (well, SConstruct is evolving. :-)
+ for arg in opt_cache.keys():
+ if arg not in all_options:
+ print 'Option %s is obsolete, do not load it' % 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:
print "Restoring cached option %s=%s" % (key, ARGUMENTS[key])
print
+# check if there is unused (or misspelled) argument
+for arg in ARGUMENTS.keys():
+ if arg not in all_options:
+ import textwrap
+ print "Unknown option '%s'... exiting." % arg
+ print
+ print "Available options are (check 'scons -help' for details):"
+ print ' ' + '\n '.join(textwrap.wrap(', '.join(all_options)))
+ Exit(1)
+
# save arguments
env_cache['arg_cache'] = ARGUMENTS
# PACKAGE_VERSION
# src/version.C.in
# PACKAGE_VERSION, VERSION_INFO
-# src/frontends/xforms/lyx_xpm.h.in
-# XPM_H_LOCATION
-# src/frontends/xforms/lyx_forms.h.in
-# FORMS_H_LOCATION
# full path name is used to build msvs project files
# and to replace TOP_SRCDIR in package.C
if env.has_key('rebuild'):
rebuild_targets = env['rebuild'].split(',')
+ if 'none' in rebuild_targets or 'no' in rebuild_targets:
+ rebuild_targets = []
+ elif 'all' in rebuild_targets or 'yes' in rebuild_targets:
+ # None: let scons decide which components to build
+ # Forcing all components to be rebuilt is in theory not necessary
+ rebuild_targets = None
else:
rebuild_targets = None
''' Check whether or not lib $LOCALLIBNAME/libname already exists'''
return os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath)
+def appExists(apppath, appname):
+ ''' Check whether or not application already exists'''
+ return os.path.isfile(File(env.subst('$BUILDDIR/common/%s/${PROGPREFIX}%s$PROGSUFFIX' % (apppath, appname))).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] \
# now, if rebuild_targets is specified, do not rebuild some targets
-rebuild_targets = rebuild_targets
-if rebuild_targets:
+if rebuild_targets is not None:
+ #
def ifBuildLib(name, libname, old_value):
# explicitly asked to rebuild
if name in rebuild_targets:
build_qt2 = ifBuildLib('qt2', 'qt2', build_qt2)
build_qt3 = ifBuildLib('qt3', 'qt3', build_qt3)
build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4)
+ #
+ def ifBuildApp(name, appname, old_value):
+ # explicitly asked to rebuild
+ if name in rebuild_targets:
+ return True
+ # else if not rebuild, and if the library already exists
+ elif appExists(name, appname):
+ return False
+ # do not change the original value
+ else:
+ return old_value
+ build_tex2lyx = ifBuildApp('tex2lyx', 'tex2lyx', build_tex2lyx)
+ build_client = ifBuildApp('client', 'lyxclient', build_client)
# sync frontend and frontend (maybe build qt4 with frontend=qt3)
if build_qt2:
'-DQT_GENUINE_STR',
'-DQT_NO_STL',
'-DQT3_SUPPORT',
+ '-DQT_NO_KEYWORDS',
]
)
else:
client = None
Alias('client', client)
+else:
+ if env['HAVE_FCNTL']:
+ # define client even if lyxclient is not built with rebuild=no
+ client = [env.subst('$BUILDDIR/common/client/${PROGPREFIX}lyxclient$PROGSUFFIX')]
+ else:
+ client = None
if build_tex2lyx:
Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
tex2lyx, [Copy('$TARGET', '$SOURCE')]))
Alias('tex2lyx', tex2lyx)
+else:
+ # define tex2lyx even if tex2lyx is not built with rebuild=no
+ tex2lyx = [env.subst('$BUILDDIR/common/tex2lyx/${PROGPREFIX}tex2lyx$PROGSUFFIX')]
if build_lyxbase:
Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx,
[Copy('$TARGET', '$SOURCE')]))
Alias('lyx', lyx)
+else:
+ # define lyx even if lyx is not built with rebuild=no
+ lyx = [env.subst('$BUILDDIR/$frontend/${PROGPREFIX}lyx$PROGSUFFIX')]
if build_msvs_projects:
else:
res = []
if rebuildTargetOnly:
- cmds = 'faststart=yes rebuild='+target
+ cmds = 'fast_start=yes rebuild='+target
else:
- cmds = 'faststart=yes'
+ cmds = 'fast_start=yes'
if type(dir) == type([]):
src = []
inc = []
if env.has_key('languages'):
languages = env.make_list(env['lanauges'])
# use defulat msgfmt
+ gmo_files = []
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]