mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-03 00:20:43 +00:00
gettext support, fast_start option, scons all, mingw bug fix and some cleanup for the scons build system
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13849 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
479abc6efd
commit
e94889a041
@ -13,18 +13,18 @@ import os, sys
|
||||
Import('env')
|
||||
|
||||
targets = env['BUILD_TARGETS']
|
||||
build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets)
|
||||
build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets or 'all' in targets)
|
||||
|
||||
|
||||
if env['INCLUDED_BOOST'] or 'boost' in targets:
|
||||
#
|
||||
# boost libraries
|
||||
#
|
||||
if env['INCLUDED_BOOST'] or 'boost' in targets:
|
||||
# special builddir
|
||||
env.BuildDir('$BUILDDIR/boost', '$TOP_SRC_DIR/boost/libs', duplicate = 0)
|
||||
|
||||
boostenv = env.Copy()
|
||||
boostenv.Append(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
|
||||
# for config.h
|
||||
boostenv.Append(CPPPATH = ['$TOP_SRC_DIR/src'])
|
||||
boostenv.AppendUnique(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
|
||||
|
||||
print 'Processing files in boost/libs/filesystem/src...'
|
||||
|
||||
@ -83,21 +83,19 @@ if env['INCLUDED_BOOST'] or 'boost' in targets:
|
||||
Alias('boost', signals)
|
||||
Alias('boost', iostreams)
|
||||
|
||||
|
||||
#
|
||||
# Now, src code under src/
|
||||
#
|
||||
|
||||
env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
|
||||
|
||||
|
||||
if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]:
|
||||
#
|
||||
# src/support
|
||||
#
|
||||
|
||||
if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]:
|
||||
print "Processing files in src/support"
|
||||
|
||||
env.Append(CPPPATH = ['.'])
|
||||
|
||||
env['SUBST_KEYS'] = ['LYX_DIR', 'LOCALEDIR', 'TOP_SRCDIR', 'PROGRAM_SUFFIX']
|
||||
env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRC_DIR/src/support/package.C.in')
|
||||
|
||||
@ -136,11 +134,11 @@ if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']
|
||||
)
|
||||
Alias('supports', supports)
|
||||
|
||||
|
||||
if build_lyx or 'mathed' in targets:
|
||||
#
|
||||
# src/mathed
|
||||
#
|
||||
|
||||
if build_lyx or 'mathed' in targets:
|
||||
print "Processing files in src/mathed"
|
||||
|
||||
mathed = env.StaticLibrary(
|
||||
@ -290,7 +288,6 @@ if build_lyx or 'frontends' in targets:
|
||||
#
|
||||
# src/frontends
|
||||
#
|
||||
|
||||
print "Processing files in src/frontends"
|
||||
|
||||
frontends = env.StaticLibrary(
|
||||
@ -314,7 +311,6 @@ if build_lyx or 'graphics' in targets:
|
||||
#
|
||||
# src/graphics
|
||||
#
|
||||
|
||||
print "Processing files in src/graphics"
|
||||
|
||||
graphics = env.StaticLibrary(
|
||||
@ -340,7 +336,6 @@ if build_lyx or 'controllers' in targets:
|
||||
#
|
||||
# src/frontends/controllers
|
||||
#
|
||||
|
||||
print "Processing files in src/frontends/controllers"
|
||||
|
||||
controllers = env.StaticLibrary(
|
||||
@ -397,6 +392,7 @@ if build_lyx or 'controllers' in targets:
|
||||
)
|
||||
Alias('controllers', controllers)
|
||||
|
||||
|
||||
#
|
||||
# src/frontend/qt3/4
|
||||
#
|
||||
@ -417,18 +413,19 @@ if frontend == 'qt3':
|
||||
print "Processing files in src/frontends/qt3"
|
||||
|
||||
qt3env = env.Copy()
|
||||
# disable auto scan to speed up non build time
|
||||
qt3env['QT_AUTOSCAN'] = 0
|
||||
|
||||
# load qt3 tools
|
||||
qt3env.Tool('qt')
|
||||
|
||||
qt3env.Append(CPPPATH = [
|
||||
qt3env.AppendUnique(CPPPATH = [
|
||||
'$BUILDDIR/common',
|
||||
'$BUILDDIR/common/images',
|
||||
'$BUILDDIR/common/frontends',
|
||||
'$BUILDDIR/common/frontends/qt3',
|
||||
'$BUILDDIR/common/images',
|
||||
'$BUILDDIR/common/frontends/controllers',
|
||||
'$BUILDDIR/common/frontends/qt3',
|
||||
'$QT_INC_DIR']
|
||||
'$QT_INC_PATH']
|
||||
)
|
||||
|
||||
qt3_ui_files = Split('''
|
||||
@ -503,7 +500,6 @@ if frontend == 'qt3':
|
||||
QWrapDialogBase.ui
|
||||
''')
|
||||
|
||||
|
||||
qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
|
||||
BulletsModule.C
|
||||
emptytable.C
|
||||
@ -564,14 +560,15 @@ if frontend == 'qt3':
|
||||
validators.C
|
||||
''')]
|
||||
|
||||
# under windows, because of the .C/.c confusion
|
||||
# moc_files are not moced automatically.
|
||||
# I am doing it manually here, until lyx changes
|
||||
# file extension from .C to .cpp
|
||||
qt3_moced_files = []
|
||||
if os.name == 'nt' or sys.platform == 'cygwin':
|
||||
# manually moc and uic files for better performance
|
||||
# (stop autoscan, 13:20s->12:50s :-)
|
||||
qt3_moced_files = [qt3env.Moc(x.replace('.C', '.h')) for x in qt3_moc_files]
|
||||
|
||||
qt3_uiced_files = [qt3env.Uic('$BUILDDIR/common/frontends/qt3/ui/'+x) for x in qt3_ui_files]
|
||||
qt3_uiced_cc_files = []
|
||||
for x in qt3_uiced_files:
|
||||
qt3_uiced_cc_files.extend(x[1:])
|
||||
|
||||
qt3 = qt3env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/qt3',
|
||||
source = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
|
||||
@ -636,8 +633,7 @@ if frontend == 'qt3':
|
||||
qscreen.C
|
||||
qt_helpers.C
|
||||
''')] +
|
||||
qt3_moc_files + qt3_moced_files +
|
||||
['$BUILDDIR/common/frontends/qt3/ui/' + x for x in qt3_ui_files]
|
||||
qt3_moc_files + qt3_moced_files + qt3_uiced_cc_files
|
||||
)
|
||||
Alias('qt3', qt3)
|
||||
|
||||
@ -646,6 +642,7 @@ elif frontend == '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
|
||||
@ -656,7 +653,7 @@ elif frontend == 'qt4':
|
||||
qt4env.Tool('qt4', [env['SCONS_DIR']])
|
||||
qt4env.EnableQt4Modules(env['QT_LIB'], debug = False)
|
||||
|
||||
qt4env.Append(CPPPATH = [
|
||||
qt4env.AppendUnique(CPPPATH = [
|
||||
'$BUILDDIR/common',
|
||||
'$BUILDDIR/common/images',
|
||||
'$BUILDDIR/common/frontends',
|
||||
@ -678,7 +675,7 @@ elif frontend == 'qt4':
|
||||
'-Winvalid-pch']
|
||||
)
|
||||
|
||||
qt4_ui_files = Split('''
|
||||
qt4_ui_files = ['$BUILDDIR/common/frontends/qt4/ui/%s' % x for x in Split('''
|
||||
BiblioUi
|
||||
BranchesUi
|
||||
BulletsUi
|
||||
@ -748,9 +745,9 @@ elif frontend == 'qt4':
|
||||
QURLUi
|
||||
QVSpaceUi
|
||||
QWrapUi
|
||||
''')
|
||||
''')]
|
||||
|
||||
qt4_moc_files = Split('''
|
||||
qt4_moc_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split('''
|
||||
BulletsModule.C
|
||||
emptytable.C
|
||||
FileDialog_private.C
|
||||
@ -811,15 +808,9 @@ elif frontend == 'qt4':
|
||||
QLToolbar.C
|
||||
socket_callback.C
|
||||
validators.C
|
||||
''')
|
||||
''') ]
|
||||
|
||||
#
|
||||
# Compile resources
|
||||
#
|
||||
for x in qt4_ui_files:
|
||||
qt4env.Uic4('$BUILDDIR/common/frontends/qt4/ui/' + x)
|
||||
|
||||
qt4_source_files = Split('''
|
||||
qt4_source_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split('''
|
||||
QDialogView.C
|
||||
Alert_pimpl.C
|
||||
Dialogs.C
|
||||
@ -881,18 +872,29 @@ elif frontend == 'qt4':
|
||||
qfont_metrics.C
|
||||
qscreen.C
|
||||
qt_helpers.C
|
||||
''')
|
||||
''')]
|
||||
|
||||
#
|
||||
# Compile resources
|
||||
#
|
||||
resources = [qt4env.Uic4(x) for x in qt4_ui_files]
|
||||
|
||||
#
|
||||
# moc qt4_moc_files
|
||||
#
|
||||
qt4_moced_files = [qt4env.Moc4(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt4_moc_files]
|
||||
|
||||
# if the moced files are included in the .C file
|
||||
# the Flatten(...) part will not be needed
|
||||
qt4 = qt4env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/qt4',
|
||||
LIBS = qt4env['QT_LIB'],
|
||||
source = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in qt4_source_files] + \
|
||||
["$BUILDDIR/common/frontends/qt4/%s" % x for x in qt4_moc_files]
|
||||
source = qt4_source_files + qt4_moc_files + Flatten(qt4_moced_files)
|
||||
)
|
||||
Alias('qt4', qt4)
|
||||
|
||||
|
||||
if 'client' in targets or 'install' in targets:
|
||||
if 'client' in targets or 'install' in targets or 'all' in targets:
|
||||
#
|
||||
# src/client
|
||||
#
|
||||
@ -900,6 +902,7 @@ if 'client' in targets or 'install' in targets:
|
||||
|
||||
print "Processing files in src/client"
|
||||
|
||||
try:
|
||||
client = env.Program(
|
||||
target = '$BUILDDIR/common/client/lyxclient',
|
||||
LIBS = env['BOOST_LIBRARIES'] + env['SOCKET_LIBS'] + ['supports'],
|
||||
@ -913,10 +916,13 @@ if 'client' in targets or 'install' in targets:
|
||||
)
|
||||
Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]),
|
||||
client, [Copy('$TARGET', '$SOURCE')]))
|
||||
except:
|
||||
print "Building of program lyxclient failed"
|
||||
client = None
|
||||
Alias('client', client)
|
||||
|
||||
|
||||
if 'tex2lyx' in targets or 'install' in targets:
|
||||
if 'tex2lyx' in targets or 'install' in targets or 'all' in targets:
|
||||
#
|
||||
# tex2lyx
|
||||
#
|
||||
@ -925,7 +931,7 @@ if 'tex2lyx' in targets or 'install' in targets:
|
||||
tex2lyx_env = env.Copy()
|
||||
# the order is important here.
|
||||
tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx'])
|
||||
tex2lyx_env.Append(LIBPATH = ['#$LOCALLIBPATH'])
|
||||
tex2lyx_env.AppendUnique(LIBPATH = ['#$LOCALLIBPATH'])
|
||||
|
||||
tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/FloatList.C', '$TOP_SRC_DIR/src/FloatList.C')
|
||||
tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/Floating.C', '$TOP_SRC_DIR/src/Floating.C')
|
||||
@ -938,6 +944,7 @@ if 'tex2lyx' in targets or 'install' in targets:
|
||||
tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex.C', '$TOP_SRC_DIR/src/lyxlex.C')
|
||||
tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex_pimpl.C', '$TOP_SRC_DIR/src/lyxlex_pimpl.C')
|
||||
|
||||
try:
|
||||
tex2lyx = tex2lyx_env.Program(
|
||||
target = '$BUILDDIR/common/tex2lyx/tex2lyx',
|
||||
LIBS = ['supports'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'],
|
||||
@ -964,6 +971,9 @@ if 'tex2lyx' in targets or 'install' in targets:
|
||||
)
|
||||
Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
|
||||
tex2lyx, [Copy('$TARGET', '$SOURCE')]))
|
||||
except:
|
||||
print "Building of program tex2lyx failed"
|
||||
tex2lyx = None
|
||||
Alias('tex2lyx', tex2lyx)
|
||||
|
||||
|
||||
@ -1114,6 +1124,7 @@ if build_lyx or 'lyx' in targets:
|
||||
#
|
||||
# Build lyx with given frontend
|
||||
#
|
||||
try:
|
||||
lyx = env.Program(
|
||||
target = '$BUILDDIR/$frontend/lyx',
|
||||
source = [],
|
||||
@ -1137,17 +1148,59 @@ if build_lyx or 'lyx' in targets:
|
||||
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')]))
|
||||
except:
|
||||
print "Building of program lyx failed"
|
||||
lyx = None
|
||||
raise
|
||||
Alias('lyx', lyx)
|
||||
|
||||
|
||||
if 'install' in targets:
|
||||
if 'po' in targets or 'install' in targets or 'all' in targets:
|
||||
#
|
||||
# This does not look clever right now. I am using the basic
|
||||
# install builder of scons instead of fancier wiki solutions
|
||||
# with the hope that scons can finish standarding this soon.
|
||||
# po/
|
||||
#
|
||||
print 'Processing files in po...'
|
||||
|
||||
import glob
|
||||
# handle po files
|
||||
#
|
||||
# files to translate
|
||||
transfiles = glob.glob(os.path.join(env.subst('$TOP_SRC_DIR'), '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:
|
||||
# create the directory if needed
|
||||
if not os.path.isdir(env['PREFIX']):
|
||||
try:
|
||||
os.makedirs(env['PREFIX'])
|
||||
except:
|
||||
pass
|
||||
if not os.path.isdir(env['PREFIX']):
|
||||
print 'Can not create directory', env['PREFIX']
|
||||
Exit(3)
|
||||
#
|
||||
import glob
|
||||
|
||||
#
|
||||
# windows: $PREFIX/Resources
|
||||
# others: $PREDIX/share/lyx
|
||||
share_dir = env['SHARE_DIR']
|
||||
@ -1159,7 +1212,7 @@ if 'install' in targets:
|
||||
locale_dir = env['LOCALE_DIR']
|
||||
|
||||
def install(dest, src):
|
||||
''' recusive installation of src '''
|
||||
''' recusive installation of src to dest '''
|
||||
# separate file and directory
|
||||
files = filter(os.path.isfile, [x for x in src])
|
||||
dirs = filter(os.path.isdir, [x for x in src])
|
||||
@ -1172,17 +1225,16 @@ if 'install' in targets:
|
||||
glob.glob(os.path.join(dir, '*'))) )
|
||||
return ins_dir
|
||||
#
|
||||
# executables
|
||||
env.Install(env['BIN_DIR'], [lyx, tex2lyx, client])
|
||||
# executables (some of them may be none)
|
||||
env.Install(env['BIN_DIR'], filter(lambda x: x != None, [lyx, tex2lyx, client]))
|
||||
Alias('install', env['BIN_DIR'])
|
||||
#
|
||||
# share/lyx
|
||||
dirs = install(env['SHARE_DIR'],
|
||||
[env.subst('$TOP_SRC_DIR/lib/') + file for file in ['configure.py', 'encodings',
|
||||
'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages',
|
||||
'lyxrc.example', 'syntax.default', \
|
||||
'images', 'layouts', 'scripts', 'templates', \
|
||||
'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']]
|
||||
'lyxrc.example', 'syntax.default', 'bind', 'images', 'layouts', 'scripts',
|
||||
'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']]
|
||||
)
|
||||
Alias('install', dirs)
|
||||
# man
|
||||
@ -1194,7 +1246,14 @@ if 'install' in targets:
|
||||
env.subst('$TOP_SRC_DIR/src/client/lyxclient.man'))
|
||||
Alias('install', [os.path.join(env['MAN_DIR'], x) for
|
||||
x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']])
|
||||
# locale files?
|
||||
# ru.gmo ==> ru/LC_MESSAGES/lyx.mo
|
||||
for gmo in gmo_files:
|
||||
lan = os.path.split(str(gmo))[1].split('.')[0]
|
||||
dest_file = os.path.join(env['LOCALE_DIR'], lan, 'LC_MESSAGES', 'lyx.mo')
|
||||
env.InstallAs(dest_file, gmo)
|
||||
Alias('install', dest_file)
|
||||
|
||||
|
||||
Default('lyx')
|
||||
|
||||
Alias('all', ['lyx', 'client', 'tex2lyx', 'po'])
|
||||
|
@ -10,22 +10,22 @@
|
||||
#
|
||||
#
|
||||
# This is a scons based building system for lyx, you can use it as follows:
|
||||
# (after of course installation of scons from www.scons.org)
|
||||
#
|
||||
# $ cd development/scons
|
||||
# $ scons [options] [targets]
|
||||
# or:
|
||||
# $ scons -f development/scons/SConstruct [options] [targets]
|
||||
#
|
||||
# After compiling, you can install lyx by
|
||||
# and:
|
||||
# $ scons [prefix=.] install
|
||||
#
|
||||
# Where:
|
||||
# * targets can be one or more of lyx, tex2lyx, client, default to lyx
|
||||
# * options: use scons -h for details about parameters, the most important
|
||||
# * targets can be one or more of lyx, tex2lyx, client, po, install.
|
||||
# default to lyx, you can use 'scons all' to build all targets except
|
||||
# for install
|
||||
# * options: use scons -h for details about options, the most important
|
||||
# one is frontend=qt3|qt4.
|
||||
# * qt3 is used by default on linux, cygwin and mac
|
||||
# * qt4 is used by default on win32/mingw
|
||||
# - qt3 is used by default on linux, cygwin and mac
|
||||
# - qt4 is used by default on win32/mingw
|
||||
#
|
||||
# File layouts (Important):
|
||||
# * Unless you specify builddir=dir, building will happen
|
||||
@ -33,29 +33,29 @@
|
||||
# * $BUILDDIR has subdirectories
|
||||
# libs: all intermediate libraries
|
||||
# boost: boost libraries, if boost=included is used
|
||||
# qt3: build result
|
||||
# * lyx executable will be in directories like debug/linux-qt3
|
||||
# qt3/4: frontend-specific objects
|
||||
# * executables will be copied to $BUILDDIR/
|
||||
#
|
||||
# Hints:
|
||||
# * scons fast_start=yes
|
||||
# If env.cache exists, bypass all tests and use existing src/config.h
|
||||
#
|
||||
# * scons --config=force
|
||||
# force re-configuration (use scons -H for details)
|
||||
#
|
||||
# * check config.log to see why config has failed
|
||||
#
|
||||
# * use extra_inc_path, extra_lib_path, qt_dir, qt_inc_path
|
||||
# qt_lib_path to help locate qt and other libraries
|
||||
# (there are extra_inc_path1, extra_lib_path1 for now)
|
||||
# qt_lib_path to help locate qt and other libraries.
|
||||
# There are also extra_inc_path1, extra_lib_path1 if you need to spacify
|
||||
# more than one extra paths.
|
||||
#
|
||||
# * (Important) use scons logfile=logfile.log to enable command line
|
||||
# logging. (default is no logging)
|
||||
# * executed commands will be logged in scons_lyx.log. You can use logfile=
|
||||
# option to save log to another file.
|
||||
#
|
||||
# Notes:
|
||||
# * Currently, all scons does is building lyx in
|
||||
# $LYXROOT/$mode/$build_dir/
|
||||
# where $mode is debug or release, $build_dir is the build_dir name
|
||||
# listed above
|
||||
#
|
||||
# * scons install etc may be added later. Interested contributors can follow
|
||||
# * scons dist etc may be added later. Interested contributors can follow
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/AccumulateBuilder
|
||||
# or
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/DistTarBuilder
|
||||
@ -71,14 +71,12 @@
|
||||
# features.
|
||||
#
|
||||
|
||||
import os, sys
|
||||
import os, sys, copy, cPickle
|
||||
|
||||
# config/scons_utils.py defines a few utility function
|
||||
sys.path.append('config')
|
||||
import scons_utils as utils
|
||||
|
||||
SetOption('implicit_cache', 1)
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Required runtime environment
|
||||
#----------------------------------------------------------
|
||||
@ -114,18 +112,15 @@ PACKAGE_NAME = 'LyX'
|
||||
PACKAGE_TARNAME = 'lyx'
|
||||
PACKAGE_STRING = '%s %s' % (PACKAGE_NAME, PACKAGE_VERSION)
|
||||
PROGRAM_SUFFIX = ''
|
||||
|
||||
# various cache/log files
|
||||
default_log_file = 'scons_lyx.log'
|
||||
env_cache_file = 'env.cache'
|
||||
|
||||
# FIXME: what is this? (They are used in src/support/package.C.in
|
||||
LOCALEDIR = "../locale/"
|
||||
LYX_DIR = "/usr/local/share/lyx"
|
||||
|
||||
# platform dependent default build_dir and other settings
|
||||
#
|
||||
# I know, somebody would say:
|
||||
# This is TOTALLY wrong! Everything should be automatically
|
||||
# determined.
|
||||
#
|
||||
#----------------------------------------------------------
|
||||
# platform dependent settings
|
||||
#----------------------------------------------------------
|
||||
if os.name == 'nt':
|
||||
platform_name = 'win32'
|
||||
default_frontend = 'qt4'
|
||||
@ -135,13 +130,13 @@ if os.name == 'nt':
|
||||
default_pch_opt = False
|
||||
default_with_x = False
|
||||
spell_checker = 'auto'
|
||||
# FIXME: I need to know what exactly is boost_posix
|
||||
# EF: It indicates to boost which API to use (posix or windows).
|
||||
# boost_posix indicates to boost which API to use (posix or windows).
|
||||
# If not specified, boost tries to figure out by itself, but it may fail.
|
||||
boost_posix = False
|
||||
packaging_method = 'windows'
|
||||
default_prefix = 'c:/program files/lyx'
|
||||
share_dir = 'Resources'
|
||||
man_dir = 'Resouces/man/man1'
|
||||
man_dir = 'Resources/man/man1'
|
||||
locale_dir = 'Resources/locale'
|
||||
elif os.name == 'posix' and sys.platform != 'cygwin':
|
||||
platform_name = sys.platform
|
||||
@ -153,6 +148,7 @@ elif os.name == 'posix' and sys.platform != 'cygwin':
|
||||
default_with_x = True
|
||||
boost_posix = True
|
||||
packaging_method = 'posix'
|
||||
default_prefix = '/usr/local/'
|
||||
share_dir = 'share/lyx'
|
||||
man_dir = 'man/man1'
|
||||
locale_dir = 'share/locale'
|
||||
@ -166,6 +162,7 @@ elif os.name == 'posix' and sys.platform == 'cygwin':
|
||||
default_with_x = True
|
||||
boost_posix = True
|
||||
packaging_method = 'posix'
|
||||
default_prefix = '/usr/local/'
|
||||
share_dir = 'share/lyx'
|
||||
man_dir = 'man/man1'
|
||||
locale_dir = 'share/locale'
|
||||
@ -178,9 +175,11 @@ elif os.name == 'darwin':
|
||||
default_pch_opt = False
|
||||
default_with_x = False
|
||||
boost_posix = True
|
||||
packaging_method = 'msc'
|
||||
packaging_method = 'mac'
|
||||
# FIXME: where to install?
|
||||
default_prefix = '/usr/local/'
|
||||
share_dir = 'Resources'
|
||||
man_dir = 'Resouces/man/man1'
|
||||
man_dir = 'Resources/man/man1'
|
||||
locale_dir = 'Resources/locale'
|
||||
else: # unsupported system
|
||||
platform_name = 'others'
|
||||
@ -192,68 +191,55 @@ else: # unsupported system
|
||||
default_with_x = True
|
||||
boost_posix = False
|
||||
packaging_method = 'posix'
|
||||
default_prefix = '/usr/local/'
|
||||
share_dir = 'share/lyx'
|
||||
man_dir = 'man/man1'
|
||||
locale_dir = 'share/locale'
|
||||
|
||||
|
||||
#---------------------------------------------------------
|
||||
# Handling options
|
||||
#----------------------------------------------------------
|
||||
# Note that if you set the options via the command line,
|
||||
# they will be remembered in the file 'options.cache'
|
||||
#
|
||||
# NOTE: the scons people are trying to fix scons so that
|
||||
# options like --prefix will be accepted. Right now,
|
||||
# we have to use the KEY=VALUE style of scons
|
||||
#
|
||||
if os.path.isfile('options.cache'):
|
||||
print "Getting options from auto-saved options.cache..."
|
||||
print open('options.cache').read()
|
||||
if os.path.isfile('config.py'):
|
||||
print "Getting options from config.py..."
|
||||
print open('config.py').read()
|
||||
|
||||
opts = Options(['options.cache', 'config.py'])
|
||||
opts = Options(['config.py'])
|
||||
opts.AddOptions(
|
||||
# frontend,
|
||||
EnumOption('frontend', 'Main GUI',
|
||||
default_frontend,
|
||||
EnumOption('frontend', 'Main GUI', default_frontend,
|
||||
allowed_values = ('xform', '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 first.',
|
||||
'Use included, system boost library, or try sytem boost first.',
|
||||
default_boost_opt,
|
||||
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
|
||||
) ),
|
||||
# FIXME: not implemented yet.
|
||||
EnumOption('gettext',
|
||||
'Use included, system gettext library, or try sytem first',
|
||||
'Use included, system gettext library, or try sytem gettext first',
|
||||
default_gettext_opt,
|
||||
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
|
||||
) ),
|
||||
# FIXME: I am not allowed to use '' as default, '.' is not good either.
|
||||
PathOption('qt_dir', 'Path to qt directory', '.'),
|
||||
PathOption('qt_include_path', 'Path to qt include directory', '.'),
|
||||
PathOption('qt_lib_path', 'Path to qt library directory', '.'),
|
||||
#
|
||||
EnumOption('spell', 'Choose spell checker to use.', 'auto',
|
||||
allowed_values = ('aspell', 'pspell', 'ispell', 'auto') ),
|
||||
#
|
||||
BoolOption('fast_start', 'Whether or not use cached tests and keep current config.h', True),
|
||||
# FIXME: I do not know how pch is working. Ignore this option now.
|
||||
BoolOption('pch', '(NA) Whether or not use pch', default_pch_opt),
|
||||
# FIXME: Not implemented yet.
|
||||
BoolOption('version_suffix', '(NA) Whether or not add version suffix', False),
|
||||
# build directory, will replace build_dir if set
|
||||
PathOption('build_dir', 'Build directory', '.'),
|
||||
# extra include and libpath
|
||||
PathOption('extra_inc_path', 'Extra include path', '.'),
|
||||
PathOption('extra_lib_path', 'Extra library path', '.'),
|
||||
PathOption('extra_inc_path1', 'Extra include path', '.'),
|
||||
PathOption('extra_lib_path1', 'Extra library path', '.'),
|
||||
# enable assertion, (config.h has ENABLE_ASSERTIOS
|
||||
BoolOption('assertions', 'Use assertions', True),
|
||||
# enable warning, (config.h has WITH_WARNINGS)
|
||||
@ -264,34 +250,47 @@ opts.AddOptions(
|
||||
BoolOption('nls', '(NA) Whether or not use native language support', False),
|
||||
# FIXME: not implemented
|
||||
BoolOption('profile', '(NA) Whether or not enable profiling', False),
|
||||
#
|
||||
PathOption('prefix', 'install architecture-independent files in PREFIX', '.'),
|
||||
#
|
||||
PathOption('exec_prefix', 'install architecture-independent executable files in PREFIX', '.'),
|
||||
# FIXME: not implemented
|
||||
BoolOption('std_debug', '(NA) Whether or not turn on stdlib debug', False),
|
||||
# using x11?
|
||||
BoolOption('X11', 'Use x11 windows system', default_with_x),
|
||||
# FIXME: not implemented
|
||||
BoolOption('libintl', '(NA) Use libintl library', False),
|
||||
#
|
||||
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_inc_path1', 'Extra include path', None),
|
||||
#
|
||||
PathOption('extra_lib_path1', 'Extra library path', None),
|
||||
# can be set to a non-existing directory
|
||||
('prefix', 'install architecture-independent files in PREFIX', None),
|
||||
#
|
||||
PathOption('exec_prefix', 'install architecture-independent executable files in PREFIX', None),
|
||||
# FIXME: not implemented
|
||||
PathOption('intl_prefix', '(NA) Path to intl library', '.'),
|
||||
PathOption('intl_prefix', '(NA) Path to intl library', None),
|
||||
# log file
|
||||
('logfile', 'save commands (not outputs) to logfile', default_log_file),
|
||||
# Path to aikasurus
|
||||
PathOption('aikasurus_path', 'Path to aikasurus library', '.'),
|
||||
#
|
||||
EnumOption('spell', 'Choose spell checker to use.', 'auto',
|
||||
allowed_values = ('aspell', 'pspell', 'ispell', 'auto') ),
|
||||
# environment variable can be set as options
|
||||
('CC', '$CC', 'gcc'),
|
||||
('CPP', '$CPP', 'gcc -E'),
|
||||
('CXX', '$CXX', 'g++'),
|
||||
('CXXCPP', '$CXXCPP', 'g++ -E'),
|
||||
('CCFLAGS', '$CCFLAGS', ''),
|
||||
('CPPFLAGS', '$CPPFLAGS', ''),
|
||||
('CPPPATH', '$CPPPATH', ''),
|
||||
('LDFLAGS', '$LDFLAGS', ''),
|
||||
PathOption('aikasurus_path', 'Path to aikasurus library', None),
|
||||
# environment variable can be set as options. (DO NOT set defaults)
|
||||
('CC', '$CC', None),
|
||||
('LINK', '$LINK', None),
|
||||
('CPP', '$CPP', None),
|
||||
('CXX', '$CXX', None),
|
||||
('CXXCPP', '$CXXCPP', None),
|
||||
('CCFLAGS', '$CCFLAGS', None),
|
||||
('CPPFLAGS', '$CPPFLAGS', None),
|
||||
('LDFLAGS', '$LDFLAGS', None),
|
||||
)
|
||||
|
||||
|
||||
@ -304,16 +303,35 @@ env = Environment(options = opts)
|
||||
# Determine the frontend to use, which may be loaded
|
||||
# from option cache
|
||||
frontend = env.get('frontend', default_frontend)
|
||||
# make sure the key exists
|
||||
env['frontend'] = frontend
|
||||
#
|
||||
use_X11 = env.get('X11', default_with_x)
|
||||
|
||||
# set environment since I do not really like ENV = os.environ
|
||||
# whether or not use current config.h, and cached tests
|
||||
if env['fast_start'] and os.path.isfile(env_cache_file):
|
||||
fast_start = True
|
||||
SetOption('implicit_cache', 1)
|
||||
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
|
||||
SetOption('implicit_cache', 0)
|
||||
env_cache = {}
|
||||
|
||||
# set individual variables since I do not really like ENV = os.environ
|
||||
env['ENV']['PATH'] = os.environ.get('PATH')
|
||||
env['ENV']['HOME'] = os.environ.get('HOME')
|
||||
env['TOP_SRC_DIR'] = TOP_SRC_DIR
|
||||
env['SCONS_DIR'] = SCONS_DIR
|
||||
# install to current directory by default
|
||||
env['PREFIX'] = env.get('prefix', '.')
|
||||
if env.has_key('exec_prefix') and env['exec_prefix'] != '.':
|
||||
# install to default_prefix by default
|
||||
env['PREFIX'] = env.get('prefix', default_prefix)
|
||||
if env.has_key('exec_prefix'):
|
||||
env['BIN_DIR'] = env['exec_prefix']
|
||||
else:
|
||||
env['BIN_DIR'] = os.path.join(env['PREFIX'], 'bin')
|
||||
@ -329,50 +347,36 @@ def getEnvVariable(env, name):
|
||||
# first try command line argument (override environment settings)
|
||||
if ARGUMENTS.has_key(name) and ARGUMENTS[name].strip() != '':
|
||||
env[name] = ARGUMENTS[name]
|
||||
# then try environment variable
|
||||
# then use environment default
|
||||
elif os.environ.has_key(name) and os.environ[name].strip() != '':
|
||||
env[name] = os.environ[name]
|
||||
print "Acquiring varaible %s from system environment: %s" % (name, env[name])
|
||||
# finally, env['CC'] etc is set to the default values of Options.
|
||||
# and env['CPP'] etc does not exist
|
||||
|
||||
getEnvVariable(env, 'CC')
|
||||
getEnvVariable(env, 'LINK')
|
||||
getEnvVariable(env, 'CPP')
|
||||
getEnvVariable(env, 'CXX')
|
||||
getEnvVariable(env, 'CXXCPP')
|
||||
getEnvVariable(env, 'CCFLAGS')
|
||||
getEnvVariable(env, 'CXXFLAGS')
|
||||
getEnvVariable(env, 'CPPFLAGS')
|
||||
getEnvVariable(env, 'CPPPATH')
|
||||
getEnvVariable(env, 'LDFLAGS')
|
||||
|
||||
# under windows, scons is confused by .C/.c and uses gcc instead of
|
||||
# g++. I am forcing the use of g++ here. This is expected to change
|
||||
# after lyx renames all .C files to .cpp
|
||||
#
|
||||
# Solaris seems to use gcc for the last step as well, so, to
|
||||
# make sure everyone uses a C++ compiler, linker, I do this for
|
||||
# all platform
|
||||
#
|
||||
# just to be safe
|
||||
if env.has_key('CXX') and env['CXX'] != '':
|
||||
env['CC'] = env['CXX']
|
||||
env['LINK'] = env['CXX']
|
||||
else:
|
||||
env['CC'] = 'g++'
|
||||
env['LINK'] = 'g++'
|
||||
|
||||
#
|
||||
# frontend, mode, BUILDDIR and LOCALLIBPATH=BUILDDIR/libs
|
||||
#
|
||||
env['frontend'] = frontend
|
||||
env['mode'] = env.get('mode', default_build_mode)
|
||||
# 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 ARGUMENTS.has_key('build_dir'):
|
||||
build_dir = ARGUMENTS['build_dir']
|
||||
if env.has_key('build_dir') and env['build_dir']:
|
||||
build_dir = env['build_dir']
|
||||
env['BUILDDIR'] = build_dir
|
||||
else:
|
||||
# Determine the name of the build (platform+frontend
|
||||
# Determine the name of the build $mode
|
||||
env['BUILDDIR'] = '#' + env['mode']
|
||||
# all built libraries will go to build_dir/libs
|
||||
# (This is different from the make file approach)
|
||||
@ -382,20 +386,16 @@ env.AppendUnique(LIBPATH = ['$LOCALLIBPATH'])
|
||||
#
|
||||
# QTDIR, QT_LIB_PATH, QT_INC_PATH
|
||||
#
|
||||
if platform_name == 'win32':
|
||||
env.Tool('mingw')
|
||||
|
||||
if env.has_key('qt_dir') and env['qt_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')])
|
||||
env.AppendUnique(CPPPATH = [os.path.join(env['qt_dir'], 'include')])
|
||||
# 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')
|
||||
|
||||
if env.has_key('qt_lib_path') and env['qt_lib_path'] != '.':
|
||||
if env.has_key('qt_lib_path') and env['qt_lib_path']:
|
||||
env['QT_LIB_PATH'] = env['qt_lib_path']
|
||||
else:
|
||||
env['QT_LIB_PATH'] = '$QTDIR/lib'
|
||||
@ -403,26 +403,28 @@ env.AppendUnique(LIBPATH = ['$QT_LIB_PATH'])
|
||||
# qt4 seems to be using pkg_config
|
||||
env.PrependENVPath('PKG_CONFIG_PATH', env.subst('$QT_LIB_PATH'))
|
||||
|
||||
if env.has_key('qt_inc_path') and env['qt_inc_path'] != '.':
|
||||
if env.has_key('qt_inc_path') and env['qt_inc_path']:
|
||||
env['QT_INC_PATH'] = env['qt_inc_path']
|
||||
elif os.path.isdir(os.path.join(env.subst('$QTDIR'), 'include')):
|
||||
env['QT_INC_PATH'] = '$QTDIR/include'
|
||||
else: # have to guess
|
||||
env['QT_INC_PATH'] = '/usr/include/$frontend/'
|
||||
# Note that this CPPPATH is for testing only
|
||||
# it will be removed before calling SConscript
|
||||
env.AppendUnique(CPPPATH = env['QT_INC_PATH'])
|
||||
|
||||
#
|
||||
# extra_inc_path and extra_lib_path
|
||||
#
|
||||
if env.has_key('extra_inc_path'):
|
||||
if env.has_key('extra_inc_path') and env['extra_inc_path']:
|
||||
env.AppendUnique(CPPPATH = [env['extra_inc_path']])
|
||||
if env.has_key('extra_lib_path'):
|
||||
if env.has_key('extra_lib_path') and env['extra_lib_path']:
|
||||
env.AppendUnique(LIBPATH = [env['extra_lib_path']])
|
||||
if env.has_key('extra_inc_path1'):
|
||||
if env.has_key('extra_inc_path1') and env['extra_inc_path1']:
|
||||
env.AppendUnique(CPPPATH = [env['extra_inc_path1']])
|
||||
if env.has_key('extra_lib_path1'):
|
||||
if env.has_key('extra_lib_path1') and env['extra_lib_path1']:
|
||||
env.AppendUnique(LIBPATH = [env['extra_lib_path1']])
|
||||
if env.has_key('aikasurus_path'):
|
||||
if env.has_key('aikasurus_path') and env['aikasurus_path']:
|
||||
env.AppendUnique(LIBPATH = [env['aikasurus_path']])
|
||||
|
||||
#
|
||||
@ -430,6 +432,22 @@ if env.has_key('aikasurus_path'):
|
||||
# but it is required to do the tests.
|
||||
if platform_name == 'win32':
|
||||
env.AppendUnique(CPPPATH = ['#c:/MinGW/include'])
|
||||
env.Tool('mingw')
|
||||
|
||||
# under windows, scons is confused by .C/.c and uses gcc instead of
|
||||
# g++. I am forcing the use of g++ here. This is expected to change
|
||||
# after lyx renames all .C files to .cpp
|
||||
#
|
||||
# Note that this step has to be after env.Tool('mingw') step
|
||||
# since env.Tool('mingw') will set env['CC'] etc.
|
||||
#
|
||||
if env.has_key('CXX') and env['CXX']:
|
||||
env['CC'] = env['CXX']
|
||||
env['LINK'] = env['CXX']
|
||||
else:
|
||||
env['CC'] = 'g++'
|
||||
env['LINK'] = 'g++'
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Autoconf business
|
||||
@ -445,29 +463,35 @@ conf = Configure(env,
|
||||
'CheckStdCount' : utils.checkStdCount,
|
||||
'CheckSelectArgType' : utils.checkSelectArgType,
|
||||
'CheckBoostLibraries' : utils.checkBoostLibraries,
|
||||
'CheckMsgFmt' : utils.checkMsgFmt,
|
||||
}
|
||||
)
|
||||
|
||||
# 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']
|
||||
else:
|
||||
env['HAS_PKG_CONFIG'] = env_cache['HAS_PKG_CONFIG']
|
||||
|
||||
# zlib? This is required.
|
||||
if not conf.CheckLibWithHeader('z', 'zlib.h', 'C'):
|
||||
# zlib? This is required. (fast_start assumes the existance of zlib)
|
||||
if not fast_start and not conf.CheckLibWithHeader('z', 'zlib.h', 'C'):
|
||||
print 'Did not find libz or zlib.h, exiting!'
|
||||
Exit(1)
|
||||
|
||||
# qt libraries?
|
||||
if not fast_start:
|
||||
#
|
||||
# qt3 does not use pkg_config
|
||||
if env['frontend'] == 'qt3':
|
||||
if frontend == 'qt3':
|
||||
if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();'):
|
||||
print 'Did not find qt libraries, exiting!'
|
||||
Exit(1)
|
||||
elif env['frontend'] == 'qt4':
|
||||
elif frontend == 'qt4':
|
||||
succ = False
|
||||
# first: try pkg_config
|
||||
if env['HAS_PKG_CONFIG']:
|
||||
@ -495,16 +519,23 @@ elif env['frontend'] == 'qt4':
|
||||
print 'Did not find qt libraries, exiting!'
|
||||
Exit(1)
|
||||
|
||||
|
||||
# check socket libs
|
||||
if not fast_start:
|
||||
env['SOCKET_LIBS'] = []
|
||||
if conf.CheckLib('socket'):
|
||||
env['SOCKET_LIBS'].append('socket')
|
||||
|
||||
# EF: This is the network services library and provides a
|
||||
# nsl is the network services library and provides a
|
||||
# transport-level interface to networking services.
|
||||
if conf.CheckLib('nsl'):
|
||||
env['SOCKET_LIBS'].append('nsl')
|
||||
|
||||
env_cache['SOCKET_LIBS'] = env['SOCKET_LIBS']
|
||||
else:
|
||||
env['SOCKET_LIBS'] = env_cache['SOCKET_LIBS']
|
||||
|
||||
if not fast_start:
|
||||
# check boost libraries
|
||||
boost_opt = ARGUMENTS.get('boost', default_boost_opt)
|
||||
# check for system boost
|
||||
@ -515,31 +546,44 @@ if boost_opt in ['auto', 'system']:
|
||||
reg = conf.CheckBoostLibraries('boost_regex', pathes)
|
||||
fil = conf.CheckBoostLibraries('boost_filesystem', pathes)
|
||||
ios = conf.CheckBoostLibraries('boost_iostreams', pathes)
|
||||
# if any them is not found
|
||||
# if any of them is not found
|
||||
if ('' in [sig[0], reg[0], fil[0], ios[0]]):
|
||||
if boost_opt == 'system':
|
||||
print "Can not find system boost libraries"
|
||||
print "Please supply a path through extra_lib_path"
|
||||
print "and try again."
|
||||
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:
|
||||
env['BOOST_LIBRARIES'] = [sig[1], reg[1], fil[1], ios[1]]
|
||||
# assume all boost libraries are in the same path...
|
||||
print sig[0]
|
||||
env.AppendUnique(LIBPATH = [sig[0]])
|
||||
env['INCLUDED_BOOST'] = False
|
||||
succ = True
|
||||
# now, auto and succ = false, or included
|
||||
# now, auto and succ = false, or boost=included
|
||||
if not succ:
|
||||
# we do not need to set LIBPATH now.
|
||||
env['BOOST_LIBRARIES'] = ['boost_signals', 'boost_regex',
|
||||
'boost_filesystem', 'boost_iostreams']
|
||||
env['INCLUDED_BOOST'] = True
|
||||
env_cache['BOOST_LIBRARIES'] = env['BOOST_LIBRARIES']
|
||||
env_cache['INCLUDED_BOOST'] = env['INCLUDED_BOOST']
|
||||
else:
|
||||
env['BOOST_LIBRARIES'] = env_cache['BOOST_LIBRARIES']
|
||||
env['INCLUDED_BOOST'] = env_cache['INCLUDED_BOOST']
|
||||
|
||||
#
|
||||
# Building config.h
|
||||
#
|
||||
# check for msgfmt command
|
||||
if not fast_start:
|
||||
env['MSGFMT'] = conf.CheckMsgFmt()
|
||||
env_cache['MSGFMT'] = env['MSGFMT']
|
||||
else:
|
||||
env['MSGFMT'] = env_cache['MSGFMT']
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Generating config.h
|
||||
#----------------------------------------------------------
|
||||
if not fast_start:
|
||||
print "Generating ", utils.config_h, "..."
|
||||
|
||||
# I do not handle all macros in src/config.h.in, rather I am following a list
|
||||
@ -687,28 +731,44 @@ if spell_engine in ['auto', 'aspell'] and \
|
||||
conf.CheckLib('aspell'):
|
||||
utils.addToConfig('#define USE_ASPELL 1', TOP_SRC_DIR)
|
||||
env['USE_ASPELL'] = True
|
||||
env['USE_PSPELL'] = False
|
||||
env['USE_ISPELL'] = False
|
||||
env['EXTRA_LIBS'].append('aspell')
|
||||
spell_detected = True
|
||||
elif spell_engine in ['auto', 'pspell'] and \
|
||||
conf.CheckLib('pspell'):
|
||||
utils.addToConfig('#define USE_PSPELL 1', TOP_SRC_DIR)
|
||||
env['USE_ASPELL'] = False
|
||||
env['USE_PSPELL'] = True
|
||||
env['USE_ISPELL'] = False
|
||||
env['EXTRA_LIBS'].append('pspell')
|
||||
spell_detected = True
|
||||
elif spell_engine in ['auto', 'ispell'] and \
|
||||
conf.CheckLib('ispell'):
|
||||
utils.addToConfig('#define USE_ISPELL 1', TOP_SRC_DIR)
|
||||
env['USE_ASPELL'] = False
|
||||
env['USE_PSPELL'] = False
|
||||
env['USE_ISPELL'] = True
|
||||
env['EXTRA_LIBS'].append('ispell')
|
||||
spell_detected = True
|
||||
|
||||
if not spell_detected:
|
||||
env['USE_ASPELL'] = False
|
||||
env['USE_PSPELL'] = False
|
||||
env['USE_ISPELL'] = False
|
||||
# FIXME: can lyx work without an spell engine
|
||||
if spell_engine == 'auto':
|
||||
print "Warning: Can not locate any spell checker"
|
||||
else:
|
||||
print "Warning: Can not locate specified spell checker:", spell_engine
|
||||
|
||||
# env['EXTRA_LIBS'] will be modified later, so a unique copy is needed
|
||||
# NOTE that we do *not* save qt_libs in environment.
|
||||
env_cache['EXTRA_LIBS'] = copy.copy(env['EXTRA_LIBS'])
|
||||
env_cache['USE_ASPELL'] = env['USE_ASPELL']
|
||||
env_cache['USE_PSPELL'] = env['USE_PSPELL']
|
||||
env_cache['USE_ISPELL'] = env['USE_ISPELL']
|
||||
|
||||
# USE_POSIX_PACKAGING
|
||||
# USE_MACOSX_PACKAGING
|
||||
# USE_WINDOWS_PACKAGING
|
||||
@ -762,6 +822,13 @@ utils.addToConfig('#define SELECT_TYPE_ARG5 %s' % arg5, TOP_SRC_DIR)
|
||||
# WANT_GETFILEATTRIBUTESEX_WRAPPER
|
||||
utils.endConfigH(TOP_SRC_DIR)
|
||||
|
||||
else:
|
||||
# only a few variables need to be rescanned
|
||||
env['EXTRA_LIBS'] = copy.copy(env_cache['EXTRA_LIBS'])
|
||||
env['USE_ASPELL'] = env_cache['USE_ASPELL']
|
||||
env['USE_PSPELL'] = env_cache['USE_PSPELL']
|
||||
env['USE_ISPELL'] = env_cache['USE_ISPELL']
|
||||
|
||||
#
|
||||
# Finish auto-configuration
|
||||
env = conf.Finish()
|
||||
@ -779,35 +846,39 @@ try:
|
||||
if frontend == 'qt3':
|
||||
# note: env.Tool('qt') my set QT_LIB to qt
|
||||
env['QT_LIB'] = 'qt-mt'
|
||||
env['EXTRA_LIBS'] += ['qt-mt']
|
||||
env['EXTRA_LIBS'].append('qt-mt')
|
||||
if platform_name == 'cygwin' and use_X11:
|
||||
env['EXTRA_LIBS'] += ['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor',
|
||||
env['EXTRA_LIBS'].extend(['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor',
|
||||
'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 'resolv',
|
||||
'pthread']
|
||||
'pthread'])
|
||||
env.AppendUnique(LIBPATH = ['/usr/X11R6/lib'])
|
||||
elif frontend == 'qt4':
|
||||
# local qt4 toolset from
|
||||
# http://www.iua.upf.es/~dgarcia/Codders/sconstools.html
|
||||
if platform_name == "win32":
|
||||
env['QT_LIB'] = ['QtCore4', 'QtGui4']
|
||||
else:
|
||||
env['QT_LIB'] = ['QtCore', 'QtGui']
|
||||
env['EXTRA_LIBS'] += [x for x in env['QT_LIB']]
|
||||
env['EXTRA_LIBS'] += env['QT_LIB']
|
||||
except:
|
||||
print "Can not locate qt tools"
|
||||
print "What I get is "
|
||||
print " QTDIR: ", env['QTDIR']
|
||||
|
||||
|
||||
if platform_name in ['win32', 'cygwin']:
|
||||
env['SYSTEM_LIBS'] = ['shlwapi', 'z']
|
||||
# the final link step needs stdc++ to succeed under mingw
|
||||
# FIXME: shouldn't g++ automatically link to stdc++?
|
||||
env['SYSTEM_LIBS'] = ['shlwapi', 'z', 'stdc++']
|
||||
else:
|
||||
env['SYSTEM_LIBS'] = ['z']
|
||||
|
||||
#
|
||||
# Build parameters CPPPATH etc
|
||||
#
|
||||
# boost is always in
|
||||
env.AppendUnique(CPPPATH = ['$TOP_SRC_DIR/boost', '$TOP_SRC_DIR/src'])
|
||||
# boost is always in, src is needed for config.h
|
||||
#
|
||||
# Note that previously added QT_DIR/include etc is removed
|
||||
# they will be added when processing for example src/qt3
|
||||
env['CPPPATH'] = ['$TOP_SRC_DIR/boost', '$TOP_SRC_DIR/src']
|
||||
|
||||
# TODO: add (more) appropriate compiling options (-DNDEBUG etc)
|
||||
# for debug/release mode
|
||||
@ -830,7 +901,7 @@ env['BUILDERS']['fileCopy'] = Builder(action = utils.env_filecopy)
|
||||
# http://www.cygwin.com/ml/cygwin-apps/2004-09/msg00309.html
|
||||
# for details
|
||||
#
|
||||
if platform_name == 'cygwin' and env['frontend'] == 'qt3':
|
||||
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',
|
||||
@ -840,9 +911,11 @@ if platform_name == 'cygwin' and env['frontend'] == 'qt3':
|
||||
# Report results
|
||||
#
|
||||
# src/support/package.C.in needs the following to replace
|
||||
env['LYX_DIR'] = LYX_DIR
|
||||
env['LOCALEDIR'] = LOCALEDIR
|
||||
env['TOP_SRCDIR'] = str(Dir('#'))
|
||||
# LYX_ABS_INSTALLED_DATADIR (e.g. /usr/local/lyx/share/lyx)
|
||||
env['LYX_DIR'] = env['SHARE_DIR']
|
||||
# LYX_ABS_INSTALLED_LOCALEDIR
|
||||
env['LOCALEDIR'] = env['LOCALE_DIR']
|
||||
env['TOP_SRCDIR'] = env['TOP_SRC_DIR']
|
||||
env['PROGRAM_SUFFIX'] = PROGRAM_SUFFIX
|
||||
# needed by src/version.C.in => src/version.C
|
||||
env['PACKAGE_VERSION'] = PACKAGE_VERSION
|
||||
@ -886,6 +959,7 @@ if env['frontend'] in ['qt3', 'qt4']:
|
||||
X11: %s
|
||||
''' % (env.subst('$QT_INC_PATH'), env.subst('$QT_LIB_PATH'), use_X11)
|
||||
|
||||
if not fast_start:
|
||||
print env['VERSION_INFO']
|
||||
|
||||
#
|
||||
@ -895,7 +969,7 @@ print env['VERSION_INFO']
|
||||
#
|
||||
# I also would like to add logging (commands only) capacity to the
|
||||
# spawn system.
|
||||
logfile = ARGUMENTS.get('logfile', default_log_file)
|
||||
logfile = env.get('logfile', default_log_file)
|
||||
if logfile != '' or platform_name == 'win32':
|
||||
import time
|
||||
utils.setLoggedSpawn(env, logfile, longarg = (platform_name == 'win32'),
|
||||
@ -910,18 +984,23 @@ if logfile != '' or platform_name == 'win32':
|
||||
#
|
||||
# Cleanup stuff
|
||||
#
|
||||
# save options
|
||||
opts.Save('options.cache', env)
|
||||
# -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()
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Start building
|
||||
#----------------------------------------------------------
|
||||
Export('env')
|
||||
|
||||
SConsignFile(os.path.abspath('%s/sconsign' % env['BUILDDIR']))
|
||||
# this has been the source of problem on some platforms...
|
||||
# needs more testing
|
||||
env.SConsignFile('%s/.sconsign' % env['BUILDDIR'][1:])
|
||||
# this usage needs further investigation.
|
||||
#env.CacheDir('%s/Cache/%s' % (env['BUILDDIR'], frontend))
|
||||
|
||||
env['BUILD_TARGETS'] = BUILD_TARGETS
|
||||
|
||||
|
@ -292,40 +292,15 @@ def checkBoostLibraries(conf, lib, pathes):
|
||||
return ('','')
|
||||
|
||||
|
||||
import SCons.Node
|
||||
def processLang(env, folder):
|
||||
""" Process translations (.po files) in a po/ dir
|
||||
This is copied from KDE knetstats-1.5/admin/kde.py
|
||||
|
||||
FIXME: imcomplete
|
||||
"""
|
||||
import glob
|
||||
dir=SCons.Node.FS.default_fs.Dir(folder).srcnode()
|
||||
fld=dir.srcnode()
|
||||
tmptransfiles = glob.glob(str(fld)+'/*.po')
|
||||
|
||||
transfiles=[]
|
||||
if env.has_key('_BUILDDIR_'):
|
||||
bdir=env['_BUILDDIR_']
|
||||
for dir in env.make_list(tmptransfiles):
|
||||
transfiles.append( env.join(bdir, dir) )
|
||||
def checkMsgFmt(conf):
|
||||
''' check the existence of command msgfmt '''
|
||||
conf.Message('Checking for gettext command msgfmt...')
|
||||
res = conf.TryAction('msgfmt --help')
|
||||
conf.Result(res[0])
|
||||
if res[0]:
|
||||
return 'msgfmt'
|
||||
else:
|
||||
transfiles=tmptransfiles
|
||||
|
||||
env['MSGFMT'] = 'msgfmt'
|
||||
env['BUILDERS']['Transfiles']=SCons.Builder.Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po')
|
||||
languages=None
|
||||
# FIXME: KDE has this ARGS thing...
|
||||
#if env['ARGS'] and env['ARGS'].has_key('languages'):
|
||||
# languages=env.make_list(env['ARGS']['languages'])
|
||||
mydir=SCons.Node.FS.default_fs.Dir('.')
|
||||
for f in transfiles:
|
||||
fname=f.replace(mydir.abspath, '')
|
||||
file=SCons.Node.FS.default_fs.File(fname)
|
||||
country = SCons.Util.splitext(file.name)[0]
|
||||
if not languages or country in languages:
|
||||
result = env.Transfiles(file)
|
||||
# FIXME
|
||||
return None
|
||||
|
||||
|
||||
def installCygwinLDScript(path):
|
||||
|
Loading…
Reference in New Issue
Block a user