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.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]),
915 client, [Copy('$TARGET', '$SOURCE')]))
916 Alias('client', client)
919 if 'tex2lyx' in targets or 'install' in targets:
923 print "Processing files in src/tex2lyx"
925 tex2lyx_env = env.Copy()
926 # the order is important here.
927 tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx'])
928 tex2lyx_env.Append(LIBPATH = ['#$LOCALLIBPATH'])
930 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/FloatList.C', '$TOP_SRC_DIR/src/FloatList.C')
931 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/Floating.C', '$TOP_SRC_DIR/src/Floating.C')
932 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/counters.C', '$TOP_SRC_DIR/src/counters.C')
933 # for some reason I do not know, I have to copy the header files as well.
934 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.h', '$TOP_SRC_DIR/src/lyxlayout.h')
935 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.C', '$TOP_SRC_DIR/src/lyxlayout.C')
936 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.h', '$TOP_SRC_DIR/src/lyxtextclass.h')
937 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.C', '$TOP_SRC_DIR/src/lyxtextclass.C')
938 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex.C', '$TOP_SRC_DIR/src/lyxlex.C')
939 tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex_pimpl.C', '$TOP_SRC_DIR/src/lyxlex_pimpl.C')
941 tex2lyx = tex2lyx_env.Program(
942 target = '$BUILDDIR/common/tex2lyx/tex2lyx',
943 LIBS = ['supports'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'],
944 source = ["$BUILDDIR/common/tex2lyx/%s" % x for x in Split('''
965 Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
966 tex2lyx, [Copy('$TARGET', '$SOURCE')]))
967 Alias('tex2lyx', tex2lyx)
970 if build_lyx or 'lyxbase' in targets:
974 print "Processing files in src"
976 env['SUBST_KEYS'] = ['PACKAGE_VERSION', 'VERSION_INFO']
977 env.substFile('$BUILDDIR/common/version.C', '$TOP_SRC_DIR/src/version.C.in')
979 lyx_source_pre = Split('''
999 ParagraphParameters.C
1085 lyx_source_post = Split('''
1094 if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
1095 lyx_source_post.append('aspell.C')
1096 elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
1097 lyx_source_post.append('pspell.C')
1098 elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
1099 lyx_source_post.append('ispell.C')
1101 lyxbase_pre = env.StaticLibrary(
1102 target = '$LOCALLIBPATH/lyxbase_pre',
1103 source = ["$BUILDDIR/common/%s" % x for x in lyx_source_pre]
1105 lyxbase_post = env.StaticLibrary(
1106 target = '$LOCALLIBPATH/lyxbase_post',
1107 source = ["$BUILDDIR/common/%s" % x for x in lyx_source_post]
1109 Alias('lyxbase', lyxbase_pre)
1110 Alias('lyxbase', lyxbase_post)
1113 if build_lyx or 'lyx' in targets:
1115 # Build lyx with given frontend
1118 target = '$BUILDDIR/$frontend/lyx',
1131 env['BOOST_LIBRARIES'] +
1133 env['SOCKET_LIBS'] +
1136 # [/path/to/lyx.ext] => lyx-qt3.ext
1137 target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s' % frontend)
1138 Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx,
1139 [Copy('$TARGET', '$SOURCE')]))
1143 if 'install' in targets:
1145 # This does not look clever right now. I am using the basic
1146 # install builder of scons instead of fancier wiki solutions
1147 # with the hope that scons can finish standarding this soon.
1151 # windows: $PREFIX/Resources
1152 # others: $PREDIX/share/lyx
1153 share_dir = env['SHARE_DIR']
1154 # windows: $PREFIX/Resouces/man/man1
1155 # others: $PREFIX/man/man1
1156 man_dir = env['MAN_DIR']
1157 # windows: $PREFIX/Resources/locale
1158 # others: $PREFIX/share/locale
1159 locale_dir = env['LOCALE_DIR']
1161 def install(dest, src):
1162 ''' recusive installation of src '''
1163 # separate file and directory
1164 files = filter(os.path.isfile, [x for x in src])
1165 dirs = filter(os.path.isdir, [x for x in src])
1167 env.Install(dest, files)
1171 ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)),
1172 glob.glob(os.path.join(dir, '*'))) )
1176 env.Install(env['BIN_DIR'], [lyx, tex2lyx, client])
1177 Alias('install', env['BIN_DIR'])
1180 dirs = install(env['SHARE_DIR'],
1181 [env.subst('$TOP_SRC_DIR/lib/') + file for file in ['configure.py', 'encodings',
1182 'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages',
1183 'lyxrc.example', 'syntax.default', \
1184 'images', 'layouts', 'scripts', 'templates', \
1185 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']]
1187 Alias('install', dirs)
1189 env.InstallAs(os.path.join(env['MAN_DIR'], 'lyx.1'),
1190 env.subst('$TOP_SRC_DIR/lyx.man'))
1191 env.InstallAs(os.path.join(env['MAN_DIR'], 'tex2lyx.1'),
1192 env.subst('$TOP_SRC_DIR/src/tex2lyx/tex2lyx.man'))
1193 env.InstallAs(os.path.join(env['MAN_DIR'], 'lyxclient.1'),
1194 env.subst('$TOP_SRC_DIR/src/client/lyxclient.man'))
1195 Alias('install', [os.path.join(env['MAN_DIR'], x) for
1196 x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']])