# 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' 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=""') 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['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 helper_funcs.h ''')] ) 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', '-Winvalid-pch'] ) 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 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 # lyx = env.Program( target = '$BUILDDIR/$frontend/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'])