1 # vi:filetype=python:expandtab:tabstop=2:shiftwidth=2
5 # This file is part of LyX, the document processor.
6 # Licence details can be found in the file COPYING.
9 # Full author contact details are available in file CREDITS.
15 targets = env['BUILD_TARGETS']
16 build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets)
21 if env['INCLUDED_BOOST'] or 'boost' in targets:
22 env.BuildDir('$BUILDDIR/boost', '$TOP_SRC_DIR/boost/libs', duplicate = 0)
25 boostenv.Append(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
27 boostenv.Append(CPPPATH = ['$TOP_SRC_DIR/src'])
29 print 'Processing files in boost/libs/filesystem/src...'
31 filesystem = boostenv.StaticLibrary(
32 target = '$LOCALLIBPATH/boost_filesystem',
33 source = ["$BUILDDIR/boost/filesystem/src/%s" % x for x in Split('''
36 operations_posix_windows.cpp
37 path_posix_windows.cpp
41 print 'Processing files in boost/libs/regex/src...'
43 regex = boostenv.StaticLibrary(
44 target = '$LOCALLIBPATH/boost_regex',
45 source = ["$BUILDDIR/boost/regex/src/%s" % x for x in Split('''
53 regex_traits_defaults.cpp
58 print 'Processing files in boost/libs/signals/src...'
60 signals = boostenv.StaticLibrary(
61 target = '$LOCALLIBPATH/boost_signals',
62 source = ["$BUILDDIR/boost/signals/src/%s" % x for x in Split('''
71 print 'Processing files in boost/libs/iostreams/src...'
73 iostreams = boostenv.StaticLibrary(
74 target = '$LOCALLIBPATH/boost_iostreams',
75 source = ["$BUILDDIR/boost/iostreams/src/%s" % x for x in Split('''
81 Alias('boost', filesystem)
83 Alias('boost', signals)
84 Alias('boost', iostreams)
87 # Now, src code under src/
90 env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
96 if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]:
97 print "Processing files in src/support"
99 env.Append(CPPPATH = ['.'])
101 env['SUBST_KEYS'] = ['LYX_DIR', 'LOCALEDIR', 'TOP_SRCDIR', 'PROGRAM_SUFFIX']
102 env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRC_DIR/src/support/package.C.in')
104 supports = env.StaticLibrary(
105 target = '$LOCALLIBPATH/supports',
106 source = ['$BUILDDIR/common/support/%s' % x for x in Split('''
137 Alias('supports', supports)
143 if build_lyx or 'mathed' in targets:
144 print "Processing files in src/mathed"
146 mathed = env.StaticLibrary(
147 target = '$LOCALLIBPATH/mathed',
148 source = ["$BUILDDIR/common/mathed/%s" % x for x in Split('''
156 math_boldsymbolinset.C
165 math_decorationinset.C
223 Alias('mathed', mathed)
226 if build_lyx or 'insets' in targets:
230 print "Processing files in src/insets"
232 insets = env.StaticLibrary(
233 target = '$LOCALLIBPATH/insets',
234 source = ["$BUILDDIR/common/insets/%s" % x for x in Split('''
261 insetgraphicsParams.C
286 Alias('insets', insets)
289 if build_lyx or 'frontends' in targets:
294 print "Processing files in src/frontends"
296 frontends = env.StaticLibrary(
297 target = '$LOCALLIBPATH/frontends',
298 source = ["$BUILDDIR/common/frontends/%s" % x for x in Split('''
310 Alias('frontends', frontends)
313 if build_lyx or 'graphics' in targets:
318 print "Processing files in src/graphics"
320 graphics = env.StaticLibrary(
321 target = '$LOCALLIBPATH/graphics',
322 source = ["$BUILDDIR/common/graphics/%s" % x for x in Split('''
336 Alias('graphics', graphics)
339 if build_lyx or 'controllers' in targets:
341 # src/frontends/controllers
344 print "Processing files in src/frontends/controllers"
346 controllers = env.StaticLibrary(
347 target = '$LOCALLIBPATH/controllers',
348 source = ["$BUILDDIR/common/frontends/controllers/%s" % x for x in Split('''
366 ControlCommandBuffer.C
386 ControlSpellchecker.C
388 ControlTabularCreate.C
398 Alias('controllers', controllers)
403 if build_lyx or env['frontend'] in targets:
404 frontend = env['frontend']
405 env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRC_DIR/src/frontend/$frontend', duplicate = 0)
407 # frontend is qt3, but specify target qt4, OK
410 elif 'qt4' in targets:
416 if frontend == 'qt3':
417 print "Processing files in src/frontends/qt3"
424 qt3env.Append(CPPPATH = [
426 '$BUILDDIR/common/frontends',
427 '$BUILDDIR/common/frontends/qt3',
428 '$BUILDDIR/common/images',
429 '$BUILDDIR/common/frontends/controllers',
430 '$BUILDDIR/common/frontends/qt3',
434 qt3_ui_files = Split('''
436 BranchesModuleBase.ui
438 TextLayoutModuleBase.ui
439 LanguageModuleBase.ui
442 NumberingModuleBase.ui
444 PageLayoutModuleBase.ui
445 PreambleModuleBase.ui
448 QBibitemDialogBase.ui
450 QBibtexAddDialogBase.ui
453 QChangesDialogBase.ui
454 QCharacterDialogBase.ui
455 QCitationDialogBase.ui
456 QCitationFindDialogBase.ui
457 QDelimiterDialogBase.ui
458 QDocumentDialogBase.ui
459 QErrorListDialogBase.ui
461 QExternalDialogBase.ui
463 QGraphicsDialogBase.ui
464 QIncludeDialogBase.ui
467 QViewSourceDialogBase.ui
469 QMathMatrixDialogBase.ui
471 QParagraphDialogBase.ui
474 QPrefConvertersModule.ui
475 QPrefCopiersModule.ui
476 QPrefCygwinPathModule.ui
478 QPrefDisplayModule.ui
479 QPrefFileformatsModule.ui
480 QPrefIdentityModule.ui
481 QPrefKeyboardModule.ui
482 QPrefLanguageModule.ui
485 QPrefPrinterModule.ui
486 QPrefScreenFontsModule.ui
488 QPrefSpellcheckerModule.ui
494 QShowFileDialogBase.ui
495 QSpellcheckerDialogBase.ui
496 QTabularCreateDialogBase.ui
497 QTabularDialogBase.ui
498 QTexinfoDialogBase.ui
499 QThesaurusDialogBase.ui
507 qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
550 QSpellcheckerDialog.C
552 QTabularCreateDialog.C
567 # under windows, because of the .C/.c confusion
568 # moc_files are not moced automatically.
569 # I am doing it manually here, until lyx changes
570 # file extension from .C to .cpp
572 if os.name == 'nt' or sys.platform == 'cygwin':
573 qt3_moced_files = [qt3env.Moc(x.replace('.C', '.h')) for x in qt3_moc_files]
575 qt3 = qt3env.StaticLibrary(
576 target = '$LOCALLIBPATH/qt3',
577 source = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
639 qt3_moc_files + qt3_moced_files +
640 ['$BUILDDIR/common/frontends/qt3/ui/' + x for x in qt3_ui_files]
645 elif frontend == 'qt4':
646 print "Processing files in src/frontends/qt4"
650 # local qt4 toolset from
651 # http://www.iua.upf.es/~dgarcia/Codders/sconstools.html
653 # NOTE: I have to patch qt4.py since it does not automatically
654 # process .C file!!! (add to cxx_suffixes )
656 qt4env.Tool('qt4', [env['SCONS_DIR']])
657 qt4env.EnableQt4Modules(env['QT_LIB'], debug = False)
659 qt4env.Append(CPPPATH = [
661 '$BUILDDIR/common/images',
662 '$BUILDDIR/common/frontends',
663 '$BUILDDIR/common/frontends/qt4',
664 '$BUILDDIR/common/frontends/controllers',
667 '$QT_INC_PATH/QtCore',
668 '$QT_INC_PATH/QtGui']
671 # FIXME: replace by something from pkg_config
672 qt4env.Append(CCFLAGS = [
674 '-DQT_CLEAN_NAMESPACE',
681 qt4_ui_files = Split('''
753 qt4_moc_files = Split('''
798 QSpellcheckerDialog.C
800 QTabularCreateDialog.C
819 for x in qt4_ui_files:
820 qt4env.Uic4('$BUILDDIR/common/frontends/qt4/ui/' + x)
822 qt4_source_files = Split('''
886 qt4 = qt4env.StaticLibrary(
887 target = '$LOCALLIBPATH/qt4',
888 LIBS = qt4env['QT_LIB'],
889 source = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in qt4_source_files] + \
890 ["$BUILDDIR/common/frontends/qt4/%s" % x for x in qt4_moc_files]
895 if 'client' in targets or 'install' in targets:
899 env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
901 print "Processing files in src/client"
903 client = env.Program(
904 target = '$BUILDDIR/common/client/lyxclient',
905 LIBS = env['BOOST_LIBRARIES'] + env['socket_libs'] + ['supports'],
906 source = ["$BUILDDIR/common/client/%s" % x for x in Split('''
914 Alias('client', env.fileCopy('$BUILDDIR/lyxclient', '$BUILDDIR/common/client/lyxclient'))
915 Alias('client', client)
918 if 'tex2lyx' in targets or 'install' in targets:
922 print "Processing files in src/tex2lyx"
924 tex2lyx_env = env.Copy()
925 # the order is important here.
926 tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx'])
927 tex2lyx_env.Append(LIBPATH = ['#$LOCALLIBPATH'])
929 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/FloatList.C', '$TOP_SRC_DIR/src/FloatList.C')
930 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/Floating.C', '$TOP_SRC_DIR/src/Floating.C')
931 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/counters.C', '$TOP_SRC_DIR/src/counters.C')
932 # for some reason I do not know, I have to copy the header files as well.
933 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.h', '$TOP_SRC_DIR/src/lyxlayout.h')
934 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.C', '$TOP_SRC_DIR/src/lyxlayout.C')
935 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.h', '$TOP_SRC_DIR/src/lyxtextclass.h')
936 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.C', '$TOP_SRC_DIR/src/lyxtextclass.C')
937 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex.C', '$TOP_SRC_DIR/src/lyxlex.C')
938 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex_pimpl.C', '$TOP_SRC_DIR/src/lyxlex_pimpl.C')
940 tex2lyx = tex2lyx_env.Program(
941 target = '$BUILDDIR/common/tex2lyx/tex2lyx',
942 LIBS = ['supports'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'],
943 source = ["$BUILDDIR/common/tex2lyx/%s" % x for x in Split('''
964 Alias('tex2lyx', env.fileCopy('$BUILDDIR/tex2lyx', '$BUILDDIR/common/tex2lyx/tex2lyx'))
965 Alias('tex2lyx', tex2lyx)
970 if build_lyx or 'lyxbase' in targets:
971 print "Processing files in src"
973 env['SUBST_KEYS'] = ['PACKAGE_VERSION', 'VERSION_INFO']
974 env.substFile('$BUILDDIR/common/version.C', '$TOP_SRC_DIR/src/version.C.in')
976 lyx_source_pre = Split('''
996 ParagraphParameters.C
1082 lyx_source_post = Split('''
1091 if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
1092 lyx_source_pre.append('aspell.C')
1093 elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
1094 lyx_source_pre.append('pspell.C')
1095 elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
1096 lyx_source_pre.append('ispell.C')
1098 lyxbase_pre = env.StaticLibrary(
1099 target = '$LOCALLIBPATH/lyxbase_pre',
1100 source = ["$BUILDDIR/common/%s" % x for x in lyx_source_pre]
1102 lyxbase_post = env.StaticLibrary(
1103 target = '$LOCALLIBPATH/lyxbase_post',
1104 source = ["$BUILDDIR/common/%s" % x for x in lyx_source_post]
1106 Alias('lyxbase', lyxbase_pre)
1107 Alias('lyxbase', lyxbase_post)
1110 if build_lyx or 'lyx' in targets:
1112 # Build lyx with given frontend
1115 target = '$BUILDDIR/$frontend/lyx',
1128 env['BOOST_LIBRARIES'] +
1132 Alias('lyx', env.fileCopy('$BUILDDIR/lyx-$frontend', '$BUILDDIR/$frontend/lyx'))
1136 if 'install' in targets:
1138 # This does not look clever right now. I am using the basic
1139 # install builder of scons instead of fancier wiki solutions
1140 # with the hope that scons can finish standarding this soon.
1144 def install(dest, src):
1145 ''' recusive installation of src '''
1146 # separate file and directory
1147 files = filter(os.path.isfile, [x for x in src])
1148 dirs = filter(os.path.isdir, [x for x in src])
1150 env.Install(dest, files)
1154 ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)),
1155 glob.glob(os.path.join(dir, '*'))) )
1158 # other targets include client, tex2lyx
1159 env.Install(env['BIN_DIR'], [lyx, tex2lyx, client])
1160 Alias('install', env['BIN_DIR'])
1163 dirs = install(os.path.join(env['PREFIX'], 'share/lyx/'),
1164 [env.subst('$TOP_SRC_DIR/lib/') + file for file in ['configure.py', 'encodings',
1165 'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages',
1166 'lyxrc.example', 'syntax.default', \
1167 'images', 'layouts', 'scripts', 'templates', \
1168 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']]
1170 Alias('install', dirs)