lyx_mirror/development/scons/SConscript
Bo Peng 44d2042c9a Scons: initial msvc support, and separate fast_start and load_option options.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13962 a592a061-630c-0410-9148-cb99ea01b6c8
2006-05-29 16:58:14 +00:00

1376 lines
32 KiB
Python

# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2
# file SConscript
#
# This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING.
#
# \author Bo Peng
# Full author contact details are available in file CREDITS.
import os, sys
Import('env')
targets = env['BUILD_TARGETS']
build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets or 'all' in targets)
build_boost = env['INCLUDED_BOOST'] or 'boost' in targets
build_intl = env['INCLUDED_GETTEXT'] or 'intl' in targets
build_supports = build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]
build_mathed = build_lyx or 'mathed' in targets
build_insets = build_lyx or 'insets' in targets
build_frontends = build_lyx or 'frontends' in targets
build_graphics = build_lyx or 'graphics' in targets
build_controllers = build_lyx or 'controllers' in targets
build_client = 'client' in targets or 'install' in targets or 'all' in targets
build_tex2lyx = 'tex2lyx' 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_qt3 = (build_lyx and env['frontend'] == 'qt3') or 'qt3' in targets
build_qt4 = (build_lyx and env['frontend'] == 'qt4') or 'qt4' in targets
# now, if rebuild_targets is specified, do not rebuild some targets
rebuild_targets = env['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 os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath):
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_supports = ifBuildLib('supports', 'supports', build_supports)
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_qt3 = ifBuildLib('qt3', 'qt3', build_qt3)
build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4)
# sync frontend and env['frontend'] (maybe build qt4 with frontend=qt3)
if build_qt3:
frontend = 'qt3'
env['frontend'] = 'qt4'
elif build_qt4:
frontend = 'qt4'
env['frontend'] = 'qt4'
else:
frontend = env['frontend']
if build_boost:
#
# boost libraries
#
# special builddir
env.BuildDir('$BUILDDIR/boost', '$TOP_SRC_DIR/boost/libs', duplicate = 0)
boostenv = env.Copy()
boostenv.AppendUnique(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
print 'Processing files in boost/libs/filesystem/src...'
filesystem = boostenv.StaticLibrary(
target = '$LOCALLIBPATH/included_boost_filesystem',
source = ["$BUILDDIR/boost/filesystem/src/%s" % x for x in Split('''
convenience.cpp
exception.cpp
operations_posix_windows.cpp
path_posix_windows.cpp
''')]
)
print 'Processing files in boost/libs/regex/src...'
regex = boostenv.StaticLibrary(
target = '$LOCALLIBPATH/included_boost_regex',
source = ["$BUILDDIR/boost/regex/src/%s" % x for x in Split('''
cpp_regex_traits.cpp
c_regex_traits.cpp
cregex.cpp
fileiter.cpp
instances.cpp
regex.cpp
regex_raw_buffer.cpp
regex_traits_defaults.cpp
w32_regex_traits.cpp
''')]
)
print 'Processing files in boost/libs/signals/src...'
signals = boostenv.StaticLibrary(
target = '$LOCALLIBPATH/included_boost_signals',
source = ["$BUILDDIR/boost/signals/src/%s" % x for x in Split('''
connection.cpp
named_slot_map.cpp
signal_base.cpp
slot.cpp
trackable.cpp
''')]
)
print 'Processing files in boost/libs/iostreams/src...'
iostreams = boostenv.StaticLibrary(
target = '$LOCALLIBPATH/included_boost_iostreams',
source = ["$BUILDDIR/boost/iostreams/src/%s" % x for x in Split('''
file_descriptor.cpp
mapped_file.cpp
zlib.cpp
''') ]
)
Alias('boost', filesystem)
Alias('boost', regex)
Alias('boost', signals)
Alias('boost', iostreams)
if build_intl:
#
# intl
#
print "Processing files in intl..."
env.BuildDir('$BUILDDIR/intl', '$TOP_SRC_DIR/intl', duplicate = 0)
intlenv = env.Copy()
# we need the original C compiler for these files
intlenv['CC'] = intlenv['C_COMPILER']
intlenv['CCFLAGS'] = intlenv['C_CCFLAGS']
intlenv['CPPPATH'] += ['intl']
intlenv.Append(CCFLAGS = [
r'-DLOCALEDIR=\"' + env['LOCALE_DIR'].replace('\\', '\\\\') + r'\"',
r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALE_DIR'].replace('\\', '\\\\') + r'\"',
r'-DLIBDIR=\"' + env['TOP_SRC_DIR'].replace('\\', '\\\\') + r'/lib\"',
'-DIN_LIBINTL',
'-DENABLE_RELOCATABLE=1',
'-DIN_LIBRARY',
r'-DINSTALLDIR=\"' + env['PREFIX'].replace('\\', '\\\\') + r'/lib\"',
'-DNO_XMALLOC',
'-Dset_relocation_prefix=libintl_set_relocation_prefix',
'-Drelocate=libintl_relocate',
'-DDEPENDS_ON_LIBICONV=1',
'-DHAVE_CONFIG_H'
]
)
# libgnuintl.h.in => libintl.h
env.substFile('$TOP_SRC_DIR/intl/libintl.h', '$TOP_SRC_DIR/intl/libgnuintl.h.in')
env.Command('$TOP_SRC_DIR/intl/libgnuintl.h', '$TOP_SRC_DIR/intl/libintl.h',
[Copy('$TARGET', '$SOURCE')])
intl = intlenv.StaticLibrary(
target = '$LOCALLIBPATH/included_intl',
LIBS = ['c'],
source = ["$BUILDDIR/intl/%s" % x for x in Split('''
bindtextdom.c
dcgettext.c
dgettext.c
gettext.c
finddomain.c
loadmsgcat.c
localealias.c
textdomain.c
l10nflist.c
explodename.c
dcigettext.c
dcngettext.c
dngettext.c
ngettext.c
plural.c
plural-exp.c
localcharset.c
relocatable.c
localename.c
log.c
printf.c
osdep.c
os2compat.c
intl-compat.c
''')]
)
Alias('intl', intl)
#
# Now, src code under src/
#
env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
if build_supports:
#
# src/support
#
print "Processing files in src/support..."
env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRC_DIR/src/support/package.C.in')
supports = env.StaticLibrary(
target = '$LOCALLIBPATH/supports',
source = ['$BUILDDIR/common/support/%s' % x for x in Split('''
FileMonitor.C
abort.C
chdir.C
convert.C
copy.C
environment.C
filefilterlist.C
filename.C
filetools.C
forkedcall.C
forkedcallqueue.C
forkedcontr.C
fs_extras.C
getcwd.C
kill.C
lstrings.C
lyxtime.C
lyxsum.C
mkdir.C
os.C
path.C
package.C
rename.C
socktools.C
systemcall.C
tempname.C
userinfo.C
unlink.C
''')]
)
Alias('supports', supports)
if build_mathed:
#
# src/mathed
#
print "Processing files in src/mathed..."
mathed = env.StaticLibrary(
target = '$LOCALLIBPATH/mathed',
source = ["$BUILDDIR/common/mathed/%s" % x for x in Split('''
textpainter.C
math_amsarrayinset.C
math_arrayinset.C
math_atom.C
math_autocorrect.C
math_biginset.C
math_binominset.C
math_boldsymbolinset.C
math_boxinset.C
math_boxedinset.C
math_braceinset.C
math_casesinset.C
math_charinset.C
math_colorinset.C
math_commentinset.C
math_data.C
math_decorationinset.C
math_deliminset.C
math_dfracinset.C
math_diffinset.C
math_diminset.C
math_dotsinset.C
math_envinset.C
math_extern.C
math_exfuncinset.C
math_exintinset.C
math_factory.C
math_fboxinset.C
math_frameboxinset.C
math_fontinset.C
math_fontoldinset.C
math_fracinset.C
math_fracbase.C
math_gridinset.C
math_hullinset.C
math_inset.C
math_kerninset.C
math_lefteqninset.C
math_liminset.C
math_macro.C
math_macroarg.C
math_macrotemplate.C
math_macrotable.C
math_makeboxinset.C
math_mathmlstream.C
math_matrixinset.C
math_nestinset.C
math_numberinset.C
math_oversetinset.C
math_parinset.C
math_parser.C
math_phantominset.C
math_rootinset.C
math_scriptinset.C
math_sizeinset.C
math_spaceinset.C
math_splitinset.C
math_sqrtinset.C
math_stackrelinset.C
math_streamstr.C
math_stringinset.C
math_substackinset.C
math_support.C
math_symbolinset.C
math_tabularinset.C
math_tfracinset.C
math_unknowninset.C
math_undersetinset.C
math_xarrowinset.C
math_xymatrixinset.C
command_inset.C
ref_inset.C
''')]
)
Alias('mathed', mathed)
if build_insets:
#
# src/insets
#
print "Processing files in src/insets..."
insets = env.StaticLibrary(
target = '$LOCALLIBPATH/insets',
source = ["$BUILDDIR/common/insets/%s" % x for x in Split('''
mailinset.C
ExternalSupport.C
ExternalTemplate.C
ExternalTransforms.C
render_button.C
render_graphic.C
render_preview.C
inset.C
insetbase.C
insetbibitem.C
insetbibtex.C
insetbox.C
insetbranch.C
insetcaption.C
insetcharstyle.C
insetcite.C
insetcollapsable.C
insetcommand.C
insetcommandparams.C
insetenv.C
insetert.C
insetexternal.C
insetfloat.C
insetfloatlist.C
insetfoot.C
insetfootlike.C
insetgraphicsParams.C
insetgraphics.C
insethfill.C
insetinclude.C
insetindex.C
insetlabel.C
insetlatexaccent.C
insetline.C
insetmarginal.C
insetnewline.C
insetnote.C
insetoptarg.C
insetpagebreak.C
insetquotes.C
insetref.C
insetspace.C
insetspecialchar.C
insettabular.C
insettext.C
insettoc.C
inseturl.C
insetvspace.C
insetwrap.C
''')]
)
Alias('insets', insets)
if build_frontends:
#
# src/frontends
#
print "Processing files in src/frontends..."
frontends = env.StaticLibrary(
target = '$LOCALLIBPATH/frontends',
source = ["$BUILDDIR/common/frontends/%s" % x for x in Split('''
Alert.C
Dialogs.C
LyXView.C
Painter.C
Timeout.C
Toolbars.C
guiapi.C
nullpainter.C
screen.C
''')]
)
Alias('frontends', frontends)
if build_graphics:
#
# src/graphics
#
print "Processing files in src/graphics..."
graphics = env.StaticLibrary(
target = '$LOCALLIBPATH/graphics',
source = ["$BUILDDIR/common/graphics/%s" % x for x in Split('''
GraphicsCache.C
GraphicsCacheItem.C
GraphicsConverter.C
GraphicsImage.C
GraphicsLoader.C
GraphicsParams.C
LoaderQueue.C
GraphicsTypes.C
PreviewImage.C
PreviewLoader.C
Previews.C
''')]
)
Alias('graphics', graphics)
if build_controllers:
#
# src/frontends/controllers
#
print "Processing files in src/frontends/controllers..."
controllers = env.StaticLibrary(
target = '$LOCALLIBPATH/controllers',
source = ["$BUILDDIR/common/frontends/controllers/%s" % x for x in Split('''
Dialog.C
Kernel.C
biblio.C
character.C
frnt_lang.C
tex_helpers.C
BCView.C
ButtonController.C
ButtonPolicies.C
ControlAboutlyx.C
ControlBibtex.C
ControlBox.C
ControlBranch.C
ControlCharacter.C
ControlChanges.C
ControlCitation.C
ControlCommand.C
ControlCommandBuffer.C
ControlDocument.C
ControlErrorList.C
ControlERT.C
ControlExternal.C
ControlFloat.C
ControlGraphics.C
ControlInclude.C
ControlLog.C
ControlViewSource.C
ControlMath.C
ControlNote.C
ControlParagraph.C
ControlPreamble.C
ControlPrefs.C
ControlPrint.C
ControlRef.C
ControlSearch.C
ControlSendto.C
ControlShowFile.C
ControlSpellchecker.C
ControlTabular.C
ControlTabularCreate.C
ControlTexinfo.C
ControlThesaurus.C
ControlToc.C
ControlVSpace.C
ControlWrap.C
helper_funcs.C
''')]
)
Alias('controllers', controllers)
#
# src/frontend/qt3/4
#
if build_qt3 or build_qt4:
env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRC_DIR/src/frontend/$frontend', duplicate = 0)
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_ui_files = Split('''
BiblioModuleBase.ui
BranchesModuleBase.ui
BulletsModuleBase.ui
TextLayoutModuleBase.ui
LanguageModuleBase.ui
LaTeXModuleBase.ui
MarginsModuleBase.ui
NumberingModuleBase.ui
MathsModuleBase.ui
PageLayoutModuleBase.ui
PreambleModuleBase.ui
QAboutDialogBase.ui
QAskForTextDialog.ui
QBibitemDialogBase.ui
QBibtexDialogBase.ui
QBibtexAddDialogBase.ui
QBoxDialogBase.ui
QBranchDialogBase.ui
QChangesDialogBase.ui
QCharacterDialogBase.ui
QCitationDialogBase.ui
QCitationFindDialogBase.ui
QDelimiterDialogBase.ui
QDocumentDialogBase.ui
QErrorListDialogBase.ui
QERTDialogBase.ui
QExternalDialogBase.ui
QFloatDialogBase.ui
QGraphicsDialogBase.ui
QIncludeDialogBase.ui
QIndexDialogBase.ui
QLogDialogBase.ui
QViewSourceDialogBase.ui
QMathDialogBase.ui
QMathMatrixDialogBase.ui
QNoteDialogBase.ui
QParagraphDialogBase.ui
QPrefAsciiModule.ui
QPrefColorsModule.ui
QPrefConvertersModule.ui
QPrefCopiersModule.ui
QPrefCygwinPathModule.ui
QPrefDateModule.ui
QPrefDisplayModule.ui
QPrefFileformatsModule.ui
QPrefIdentityModule.ui
QPrefKeyboardModule.ui
QPrefLanguageModule.ui
QPrefLatexModule.ui
QPrefPathsModule.ui
QPrefPrinterModule.ui
QPrefScreenFontsModule.ui
QPrefsDialogBase.ui
QPrefSpellcheckerModule.ui
QPrefUIModule.ui
QPrintDialogBase.ui
QRefDialogBase.ui
QSearchDialogBase.ui
QSendtoDialogBase.ui
QShowFileDialogBase.ui
QSpellcheckerDialogBase.ui
QTabularCreateDialogBase.ui
QTabularDialogBase.ui
QTexinfoDialogBase.ui
QThesaurusDialogBase.ui
QTocDialogBase.ui
QURLDialogBase.ui
QVSpaceDialogBase.ui
QWrapDialogBase.ui
''')
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 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('''
QDialogView.C
Alert_pimpl.C
Dialogs.C
FileDialog.C
LyXKeySymFactory.C
LyXScreenFactory.C
QLMenubar.C
qtTimeout.C
QAbout.C
QBibitem.C
QBibtex.C
QBox.C
QBranch.C
QChanges.C
QCharacter.C
QCitation.C
QDocument.C
QErrorList.C
QERT.C
QExternal.C
QFloat.C
QGraphics.C
QInclude.C
QIndex.C
QLImage.C
QLog.C
QViewSource.C
QLPainter.C
QLyXKeySym.C
QMath.C
QNote.C
QParagraph.C
QPrefs.C
QPrint.C
QRef.C
QSearch.C
QSendto.C
QShowFile.C
QSpellchecker.C
QTabular.C
QTabularCreate.C
QTexinfo.C
QThesaurus.C
QToc.C
QURL.C
QVSpace.C
QWorkArea.C
QWrap.C
Qt2BC.C
WorkAreaFactory.C
checkedwidgets.C
lyx_gui.C
lcolorcache.C
panelstack.C
qcoloritem.C
qfontexample.C
qfont_loader.C
qfont_metrics.C
qscreen.C
qt_helpers.C
''')] +
qt3_moc_files + 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', [env['SCONS_DIR']])
qt4env.EnableQt4Modules(env['QT_LIB'], debug = False)
qt4env.AppendUnique(CPPPATH = [
'$BUILDDIR/common',
'$BUILDDIR/common/images',
'$BUILDDIR/common/frontends',
'$BUILDDIR/common/frontends/qt4',
'$BUILDDIR/common/frontends/controllers'
]
)
# 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_ui_files = ['$BUILDDIR/common/frontends/qt4/ui/%s' % x for x in Split('''
BiblioUi
BranchesUi
BulletsUi
TextLayoutUi
LanguageUi
LaTeXUi
MarginsUi
NumberingUi
MathsUi
PageLayoutUi
PreambleUi
QAboutUi
QAskForTextUi
QBibitemUi
QBibtexUi
QBibtexAddUi
QBoxUi
QBranchUi
QChangesUi
QCharacterUi
QCitationUi
QCitationFindUi
QDelimiterUi
QDocumentUi
QErrorListUi
QERTUi
QExternalUi
QFloatUi
QGraphicsUi
QIncludeUi
QIndexUi
QLogUi
QViewSourceUi
QMathUi
QMathMatrixUi
QNoteUi
QParagraphUi
QPrefAsciiUi
QPrefColorsUi
QPrefConvertersUi
QPrefCopiersUi
QPrefCygwinPathUi
QPrefDateUi
QPrefDisplayUi
QPrefFileformatsUi
QPrefIdentityUi
QPrefKeyboardUi
QPrefLanguageUi
QPrefLatexUi
QPrefPathsUi
QPrefPrinterUi
QPrefScreenFontsUi
QPrefsUi
QPrefSpellcheckerUi
QPrefUi
QPrintUi
QRefUi
QSearchUi
QSendtoUi
QShowFileUi
QSpellcheckerUi
QTabularCreateUi
QTabularUi
QTexinfoUi
QThesaurusUi
QTocUi
QURLUi
QVSpaceUi
QWrapUi
''')]
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
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
QLAction.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
QtView.C
QURLDialog.C
QVSpaceDialog.C
QWorkArea.C
QWrapDialog.C
QLToolbar.C
socket_callback.C
validators.C
''') ]
qt4_source_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split('''
QDialogView.C
Alert_pimpl.C
Dialogs.C
FileDialog.C
LyXKeySymFactory.C
LyXScreenFactory.C
QLMenubar.C
qtTimeout.C
QAbout.C
QBibitem.C
QBibtex.C
QBox.C
QBranch.C
QBranches.C
QChanges.C
QCharacter.C
QCitation.C
QDocument.C
QErrorList.C
QERT.C
QExternal.C
QFloat.C
QGraphics.C
QInclude.C
QIndex.C
QLAction.C
QLImage.C
QLog.C
QViewSource.C
QLPainter.C
QLyXKeySym.C
QMath.C
QNote.C
QParagraph.C
QPrefs.C
QPrint.C
QRef.C
QSearch.C
QSendto.C
QShowFile.C
QSpellchecker.C
QTabular.C
QTabularCreate.C
QTexinfo.C
QThesaurus.C
QToc.C
QURL.C
QVSpace.C
QWorkArea.C
QWrap.C
Qt2BC.C
WorkAreaFactory.C
checkedwidgets.C
lyx_gui.C
lcolorcache.C
panelstack.C
qfontexample.C
qfont_loader.C
qfont_metrics.C
qscreen.C
qt_helpers.C
''')]
#
# Compile resources
#
resources = [qt4env.Uic4(x) for x in qt4_ui_files]
#
# 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',
LIBS = qt4env['QT_LIB'],
source = qt4_source_files + qt4_moc_files
)
Alias('qt4', qt4)
if build_client:
#
# src/client
#
env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
print "Processing files in src/client..."
if env['HAVE_FCNTL']:
client = env.Program(
target = '$BUILDDIR/common/client/lyxclient',
LIBS = ['supports'] + env['INTL_LIBS'] + env['SYSTEM_LIBS'] +
env['SOCKET_LIBS'] + env['BOOST_LIBRARIES'],
source = ["$BUILDDIR/common/client/%s" % x for x in Split('''
boost.C
client.C
debug.C
gettext.C
messages.C
''')]
)
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()
# the order is important here.
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_SRC_DIR/src/'+file,
[Copy('$TARGET', '$SOURCE')])
tex2lyx = tex2lyx_env.Program(
target = '$BUILDDIR/common/tex2lyx/tex2lyx',
LIBS = ['supports'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'],
source = ["$BUILDDIR/common/tex2lyx/%s" % x for x in Split('''
FloatList.C
Floating.C
counters.C
lyxlayout.C
lyxtextclass.C
lyxlex.C
lyxlex_pimpl.C
boost.C
context.C
gettext.C
lengthcommon.C
lyxfont.C
texparser.C
tex2lyx.C
preamble.C
math.C
table.C
text.C
''')]
)
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_SRC_DIR/src/version.C.in')
lyx_source_pre = Split('''
Bidi.C
BufferView.C
BufferView_pimpl.C
Bullet.C
BranchList.C
Chktex.C
Color.C
CutAndPaste.C
DepTable.C
FloatList.C
Floating.C
FontIterator.C
FuncStatus.C
InsetList.C
LColor.C
LaTeX.C
LaTeXFeatures.C
LyXAction.C
MenuBackend.C
ParagraphParameters.C
Spacing.C
ToolbarBackend.C
author.C
boost.C
buffer.C
buffer_funcs.C
bufferlist.C
bufferparams.C
bufferview_funcs.C
changes.C
chset.C
converter.C
counters.C
coordcache.C
cursor.C
cursor_slice.C
debug.C
dociterator.C
encoding.C
errorlist.C
exporter.C
gettext.C
factory.C
format.C
funcrequest.C
graph.C
importer.C
intl.C
insetiterator.C
kbmap.C
kbsequence.C
language.C
session.C
lengthcommon.C
lyx_cb.C
lyx_main.C
lyx_sty.C
lyxfont.C
lyxfind.C
lyxfunc.C
lyxgluelength.C
lyxlayout.C
lyxlength.C
lyxlex.C
lyxlex_pimpl.C
lyxrc.C
lyxrow.C
lyxrow_funcs.C
lyxserver.C
lyxsocket.C
lyxtextclass.C
lyxtextclasslist.C
lyxvc.C
messages.C
metricsinfo.C
mover.C
output.C
outputparams.C
output_docbook.C
output_latex.C
output_linuxdoc.C
output_plaintext.C
paragraph.C
paragraph_funcs.C
paragraph_pimpl.C
pariterator.C
rowpainter.C
sgml.C
tex-accent.C
tex-strings.C
texrow.C
text.C
text2.C
text3.C
TocBackend.C
toc.C
trans.C
trans_mgr.C
undo.C
vc-backend.C
version.C
vspace.C
''')
# temporary fix for MSVC, will remove later.
if not env['USE_VC']:
lyx_source_pre.append('main.C')
lyx_source_post = Split('''
tabular.C
dimension.C
PrinterParams.C
box.C
Thesaurus.C
SpellBase.C
''')
if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
lyx_source_post.append('aspell.C')
elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
lyx_source_post.append('pspell.C')
elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
lyx_source_post.append('ispell.C')
lyxbase_pre = env.StaticLibrary(
target = '$LOCALLIBPATH/lyxbase_pre',
source = ["$BUILDDIR/common/%s" % x for x in lyx_source_pre]
)
lyxbase_post = env.StaticLibrary(
target = '$LOCALLIBPATH/lyxbase_post',
source = ["$BUILDDIR/common/%s" % x for x in lyx_source_post]
)
Alias('lyxbase', lyxbase_pre)
Alias('lyxbase', lyxbase_post)
if build_lyx:
#
# Build lyx with given frontend
#
# temporary fix for MSVC, will remove later.
if env['USE_VC']:
lyx_source = ['$BUILDDIR/common/main.C']
else:
lyx_source = []
lyx = env.Program(
target = '$BUILDDIR/$frontend/lyx',
source = lyx_source,
LIBS = [
'lyxbase_pre',
'mathed',
'insets',
'frontends',
env['frontend'],
'controllers',
'graphics',
'supports',
'lyxbase_post',
] +
env['BOOST_LIBRARIES'] +
env['EXTRA_LIBS'] +
env['INTL_LIBS'] +
env['SOCKET_LIBS'] +
env['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_po:
#
# 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['DEST_DIR']):
try:
os.makedirs(env['DEST_DIR'])
except:
pass
if not os.path.isdir(env['DEST_DIR']):
print 'Can not create directory', env['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 env['ADD_SUFFIX_TO_EXECUTABLES']:
program_suffix = env['PROGRAM_SUFFIX']
else:
program_suffix = ''
#
# install lyx
target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx%s' % program_suffix)
target = os.path.join(env['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, program_suffix))
target = os.path.join(env['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' % program_suffix)
target = os.path.join(env['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' % program_suffix)
target = os.path.join(env['BIN_DEST_DIR'], target_name)
env.InstallAs(target, client)
Alias('install', target)
#
# share/lyx
dirs = install(env['SHARE_DEST_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', 'bind', 'images', 'layouts', 'scripts',
'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']]
)
env.substFile('$SHARE_DEST_DIR/lyx2lyx/lyx2lyx_version.py',
'$TOP_SRC_DIR/lib/lyx2lyx/lyx2lyx_version.py.in')
Alias('install', dirs)
# man
env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'lyx.1'),
env.subst('$TOP_SRC_DIR/lyx.man'))
env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'tex2lyx.1'),
env.subst('$TOP_SRC_DIR/src/tex2lyx/tex2lyx.man'))
env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'lyxclient.1'),
env.subst('$TOP_SRC_DIR/src/client/lyxclient.man'))
Alias('install', [os.path.join(env['MAN_DEST_DIR'], x) for
x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']])
# 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(env['LOCALE_DEST_DIR'], lan, 'LC_MESSAGES', 'lyx' + env['PROGRAM_SUFFIX'] + '.mo')
env.InstallAs(dest_file, gmo)
Alias('install', dest_file)
Default('lyx')
Alias('all', ['lyx', 'client', 'tex2lyx', 'po'])