]> git.lyx.org Git - lyx.git/blob - development/scons/SConscript
gettext support, fast_start option, scons all, mingw bug fix and some cleanup for...
[lyx.git] / development / scons / SConscript
1 # vi:filetype=python:expandtab:tabstop=2:shiftwidth=2
2
3 # file SConscript
4 #
5 # This file is part of LyX, the document processor.
6 # Licence details can be found in the file COPYING.
7 #
8 # \author Bo Peng
9 # Full author contact details are available in file CREDITS.
10
11 import os, sys
12
13 Import('env')
14
15 targets = env['BUILD_TARGETS']
16 build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets or 'all' in targets)
17
18
19 if env['INCLUDED_BOOST'] or 'boost' in targets:
20   #
21   # boost libraries
22   #
23   # special builddir
24   env.BuildDir('$BUILDDIR/boost', '$TOP_SRC_DIR/boost/libs', duplicate = 0)
25
26   boostenv = env.Copy()
27   boostenv.AppendUnique(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
28
29   print 'Processing files in boost/libs/filesystem/src...'
30
31   filesystem = boostenv.StaticLibrary(
32     target = '$LOCALLIBPATH/boost_filesystem',
33     source = ["$BUILDDIR/boost/filesystem/src/%s" % x for x in Split('''
34       convenience.cpp
35       exception.cpp
36       operations_posix_windows.cpp
37       path_posix_windows.cpp
38     ''')]
39   )
40
41   print 'Processing files in boost/libs/regex/src...'
42
43   regex = boostenv.StaticLibrary(
44     target = '$LOCALLIBPATH/boost_regex',
45     source = ["$BUILDDIR/boost/regex/src/%s" % x for x in Split('''
46       cpp_regex_traits.cpp
47       c_regex_traits.cpp
48       cregex.cpp
49       fileiter.cpp
50       instances.cpp
51       regex.cpp
52       regex_raw_buffer.cpp
53       regex_traits_defaults.cpp
54       w32_regex_traits.cpp
55     ''')]
56   )
57
58   print 'Processing files in boost/libs/signals/src...'
59
60   signals = boostenv.StaticLibrary(
61     target = '$LOCALLIBPATH/boost_signals',
62     source = ["$BUILDDIR/boost/signals/src/%s" % x for x in Split('''
63       connection.cpp
64       named_slot_map.cpp
65       signal_base.cpp
66       slot.cpp
67       trackable.cpp
68     ''')]
69   )
70
71   print 'Processing files in boost/libs/iostreams/src...'
72
73   iostreams = boostenv.StaticLibrary(
74     target = '$LOCALLIBPATH/boost_iostreams',
75     source = ["$BUILDDIR/boost/iostreams/src/%s" % x for x in Split('''
76       file_descriptor.cpp
77       mapped_file.cpp
78       zlib.cpp
79     ''') ]
80   )
81   Alias('boost', filesystem)
82   Alias('boost', regex)
83   Alias('boost', signals)
84   Alias('boost', iostreams)
85
86
87 #
88 # Now, src code under src/
89 #
90 env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
91
92
93 if build_lyx or True in [x in targets for x in ['supports', 'client', 'tex2lyx']]:
94   #
95   # src/support
96   #
97   print "Processing files in src/support"
98
99   env['SUBST_KEYS'] = ['LYX_DIR', 'LOCALEDIR', 'TOP_SRCDIR', 'PROGRAM_SUFFIX']
100   env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRC_DIR/src/support/package.C.in')
101
102   supports = env.StaticLibrary(
103     target = '$LOCALLIBPATH/supports',
104     source = ['$BUILDDIR/common/support/%s' % x for x in Split('''
105       FileMonitor.C
106       abort.C
107       chdir.C
108       convert.C
109       copy.C
110       environment.C
111       filefilterlist.C
112       filename.C
113       filetools.C
114       forkedcall.C
115       forkedcallqueue.C
116       forkedcontr.C
117       fs_extras.C
118       getcwd.C
119       kill.C
120       lstrings.C
121       lyxtime.C
122       lyxsum.C
123       mkdir.C
124       os.C
125       path.C
126       package.C
127       rename.C
128       socktools.C
129       systemcall.C
130       tempname.C
131       userinfo.C
132       unlink.C
133     ''')]
134   )
135   Alias('supports', supports)
136
137
138 if build_lyx or 'mathed' in targets:
139   #
140   # src/mathed
141   #
142   print "Processing files in src/mathed"
143
144   mathed = env.StaticLibrary(
145     target = '$LOCALLIBPATH/mathed',
146     source = ["$BUILDDIR/common/mathed/%s" % x for x in Split('''
147       textpainter.C
148       math_amsarrayinset.C
149       math_arrayinset.C
150       math_atom.C
151       math_autocorrect.C
152       math_biginset.C
153       math_binominset.C
154       math_boldsymbolinset.C
155       math_boxinset.C
156       math_boxedinset.C
157       math_braceinset.C
158       math_casesinset.C
159       math_charinset.C
160       math_colorinset.C
161       math_commentinset.C
162       math_data.C
163       math_decorationinset.C
164       math_deliminset.C
165       math_dfracinset.C
166       math_diffinset.C
167       math_diminset.C
168       math_dotsinset.C
169       math_envinset.C
170       math_extern.C
171       math_exfuncinset.C
172       math_exintinset.C
173       math_factory.C
174       math_fboxinset.C
175       math_frameboxinset.C
176       math_fontinset.C
177       math_fontoldinset.C
178       math_fracinset.C
179       math_fracbase.C
180       math_gridinset.C
181       math_hullinset.C
182       math_inset.C
183       math_kerninset.C
184       math_lefteqninset.C
185       math_liminset.C
186       math_macro.C
187       math_macroarg.C
188       math_macrotemplate.C
189       math_macrotable.C
190       math_makeboxinset.C
191       math_mathmlstream.C
192       math_matrixinset.C
193       math_nestinset.C
194       math_numberinset.C
195       math_oversetinset.C
196       math_parinset.C
197       math_parser.C
198       math_phantominset.C
199       math_rootinset.C
200       math_scriptinset.C
201       math_sizeinset.C
202       math_spaceinset.C
203       math_splitinset.C
204       math_sqrtinset.C
205       math_stackrelinset.C
206       math_streamstr.C
207       math_stringinset.C
208       math_substackinset.C
209       math_support.C
210       math_symbolinset.C
211       math_tabularinset.C
212       math_tfracinset.C
213       math_unknowninset.C
214       math_undersetinset.C
215       math_xarrowinset.C
216       math_xymatrixinset.C
217       command_inset.C
218       ref_inset.C
219     ''')]
220   )
221   Alias('mathed', mathed)
222
223
224 if build_lyx or 'insets' in targets:
225   #
226   # src/insets
227   #
228   print "Processing files in src/insets"
229
230   insets = env.StaticLibrary(
231     target = '$LOCALLIBPATH/insets',
232     source = ["$BUILDDIR/common/insets/%s" % x for x in Split('''
233       mailinset.C
234       ExternalSupport.C
235       ExternalTemplate.C
236       ExternalTransforms.C
237       render_button.C
238       render_graphic.C
239       render_preview.C
240       inset.C
241       insetbase.C
242       insetbibitem.C
243       insetbibtex.C
244       insetbox.C
245       insetbranch.C
246       insetcaption.C
247       insetcharstyle.C
248       insetcite.C
249       insetcollapsable.C
250       insetcommand.C
251       insetcommandparams.C
252       insetenv.C
253       insetert.C
254       insetexternal.C
255       insetfloat.C
256       insetfloatlist.C
257       insetfoot.C
258       insetfootlike.C
259       insetgraphicsParams.C
260       insetgraphics.C
261       insethfill.C
262       insetinclude.C
263       insetindex.C
264       insetlabel.C
265       insetlatexaccent.C
266       insetline.C
267       insetmarginal.C
268       insetnewline.C
269       insetnote.C
270       insetoptarg.C
271       insetpagebreak.C
272       insetquotes.C
273       insetref.C
274       insetspace.C
275       insetspecialchar.C
276       insettabular.C
277       insettext.C
278       insettoc.C
279       inseturl.C
280       insetvspace.C
281       insetwrap.C
282     ''')]
283   )
284   Alias('insets', insets)
285
286
287 if build_lyx or 'frontends' in targets:
288   #
289   # src/frontends
290   #
291   print "Processing files in src/frontends"
292
293   frontends = env.StaticLibrary(
294     target = '$LOCALLIBPATH/frontends',
295     source = ["$BUILDDIR/common/frontends/%s" % x for x in Split('''
296       Alert.C
297       Dialogs.C
298       LyXView.C
299       Painter.C
300       Timeout.C
301       Toolbars.C
302       guiapi.C
303       nullpainter.C
304       screen.C
305     ''')]
306   )
307   Alias('frontends', frontends)
308
309
310 if build_lyx or 'graphics' in targets:
311   #
312   # src/graphics
313   #
314   print "Processing files in src/graphics"
315
316   graphics = env.StaticLibrary(
317     target = '$LOCALLIBPATH/graphics',
318     source = ["$BUILDDIR/common/graphics/%s" % x for x in Split('''
319       GraphicsCache.C
320       GraphicsCacheItem.C
321       GraphicsConverter.C
322       GraphicsImage.C
323       GraphicsLoader.C
324       GraphicsParams.C
325       LoaderQueue.C
326       GraphicsTypes.C
327       PreviewImage.C
328       PreviewLoader.C
329       Previews.C
330     ''')]
331   )
332   Alias('graphics', graphics)
333
334
335 if build_lyx or 'controllers' in targets:
336   #
337   # src/frontends/controllers
338   #
339   print "Processing files in src/frontends/controllers"
340
341   controllers = env.StaticLibrary(
342     target = '$LOCALLIBPATH/controllers',
343     source = ["$BUILDDIR/common/frontends/controllers/%s" % x for x in Split('''
344       Dialog.C
345       Kernel.C
346       biblio.C
347       character.C
348       frnt_lang.C
349       tex_helpers.C
350       BCView.C
351       ButtonController.C
352       ButtonPolicies.C
353       ControlAboutlyx.C
354       ControlBibtex.C
355       ControlBox.C
356       ControlBranch.C
357       ControlCharacter.C
358       ControlChanges.C
359       ControlCitation.C
360       ControlCommand.C
361       ControlCommandBuffer.C
362       ControlDocument.C
363       ControlErrorList.C
364       ControlERT.C
365       ControlExternal.C
366       ControlFloat.C
367       ControlGraphics.C
368       ControlInclude.C
369       ControlLog.C
370       ControlViewSource.C
371       ControlMath.C
372       ControlNote.C
373       ControlParagraph.C
374       ControlPreamble.C
375       ControlPrefs.C
376       ControlPrint.C
377       ControlRef.C
378       ControlSearch.C
379       ControlSendto.C
380       ControlShowFile.C
381       ControlSpellchecker.C
382       ControlTabular.C
383       ControlTabularCreate.C
384       ControlTexinfo.C
385       ControlThesaurus.C
386       ControlToc.C
387       ControlVSpace.C
388       ControlWrap.C
389       helper_funcs.C
390       helper_funcs.h
391     ''')]
392     )
393   Alias('controllers', controllers)
394
395
396 #
397 # src/frontend/qt3/4
398 #
399 if build_lyx or env['frontend'] in targets:
400   frontend = env['frontend']
401   env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRC_DIR/src/frontend/$frontend', duplicate = 0)
402 else:
403   # frontend is qt3, but specify target qt4, OK
404   if 'qt3' in targets:
405     frontned = 'qt3'
406   elif 'qt4' in targets:
407     frontend = 'qt4'
408   else:
409     frontend = None
410
411
412 if frontend == 'qt3':
413   print "Processing files in src/frontends/qt3"
414
415   qt3env = env.Copy()
416   # disable auto scan to speed up non build time
417   qt3env['QT_AUTOSCAN'] = 0
418
419   # load qt3 tools
420   qt3env.Tool('qt')
421
422   qt3env.AppendUnique(CPPPATH = [
423     '$BUILDDIR/common',
424     '$BUILDDIR/common/images',
425     '$BUILDDIR/common/frontends',
426     '$BUILDDIR/common/frontends/qt3',
427     '$BUILDDIR/common/frontends/controllers',
428     '$QT_INC_PATH']
429   )
430
431   qt3_ui_files = Split('''
432     BiblioModuleBase.ui
433     BranchesModuleBase.ui
434     BulletsModuleBase.ui
435     TextLayoutModuleBase.ui
436     LanguageModuleBase.ui
437     LaTeXModuleBase.ui
438     MarginsModuleBase.ui
439     NumberingModuleBase.ui
440     MathsModuleBase.ui
441     PageLayoutModuleBase.ui
442     PreambleModuleBase.ui
443     QAboutDialogBase.ui
444     QAskForTextDialog.ui
445     QBibitemDialogBase.ui
446     QBibtexDialogBase.ui
447     QBibtexAddDialogBase.ui
448     QBoxDialogBase.ui
449     QBranchDialogBase.ui
450     QChangesDialogBase.ui
451     QCharacterDialogBase.ui
452     QCitationDialogBase.ui
453     QCitationFindDialogBase.ui
454     QDelimiterDialogBase.ui
455     QDocumentDialogBase.ui
456     QErrorListDialogBase.ui
457     QERTDialogBase.ui
458     QExternalDialogBase.ui
459     QFloatDialogBase.ui
460     QGraphicsDialogBase.ui
461     QIncludeDialogBase.ui
462     QIndexDialogBase.ui
463     QLogDialogBase.ui
464     QViewSourceDialogBase.ui
465     QMathDialogBase.ui
466     QMathMatrixDialogBase.ui
467     QNoteDialogBase.ui
468     QParagraphDialogBase.ui
469     QPrefAsciiModule.ui
470     QPrefColorsModule.ui
471     QPrefConvertersModule.ui
472     QPrefCopiersModule.ui
473     QPrefCygwinPathModule.ui
474     QPrefDateModule.ui
475     QPrefDisplayModule.ui
476     QPrefFileformatsModule.ui
477     QPrefIdentityModule.ui
478     QPrefKeyboardModule.ui
479     QPrefLanguageModule.ui
480     QPrefLatexModule.ui
481     QPrefPathsModule.ui
482     QPrefPrinterModule.ui
483     QPrefScreenFontsModule.ui
484     QPrefsDialogBase.ui
485     QPrefSpellcheckerModule.ui
486     QPrefUIModule.ui
487     QPrintDialogBase.ui
488     QRefDialogBase.ui
489     QSearchDialogBase.ui
490     QSendtoDialogBase.ui
491     QShowFileDialogBase.ui
492     QSpellcheckerDialogBase.ui
493     QTabularCreateDialogBase.ui
494     QTabularDialogBase.ui
495     QTexinfoDialogBase.ui
496     QThesaurusDialogBase.ui
497     QTocDialogBase.ui
498     QURLDialogBase.ui
499     QVSpaceDialogBase.ui
500     QWrapDialogBase.ui
501   ''')
502
503   qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
504     BulletsModule.C
505     emptytable.C
506     FileDialog_private.C
507     floatplacement.C
508     iconpalette.C
509     lengthcombo.C
510     panelstack.C
511     QAboutDialog.C
512     QBibitemDialog.C
513     QBibtexDialog.C
514     QBoxDialog.C
515     QBranchDialog.C
516     QBrowseBox.C
517     QChangesDialog.C
518     QCharacterDialog.C
519     QCitationDialog.C
520     QCommandBuffer.C
521     QCommandEdit.C
522     QContentPane.C
523     QDelimiterDialog.C
524     QDocumentDialog.C
525     QErrorListDialog.C
526     QERTDialog.C
527     QExternalDialog.C
528     QFloatDialog.C
529     QGraphicsDialog.C
530     QIncludeDialog.C
531     QIndexDialog.C
532     QLogDialog.C
533     QViewSourceDialog.C
534     QLPopupMenu.C
535     QLPrintDialog.C
536     QMathDialog.C
537     QMathMatrixDialog.C
538     QNoteDialog.C
539     QParagraphDialog.C
540     QPrefsDialog.C
541     QRefDialog.C
542     QSearchDialog.C
543     QSendtoDialog.C
544     qsetborder.C
545     QShowFileDialog.C
546     QSpellcheckerDialog.C
547     QDialogView.C
548     QTabularCreateDialog.C
549     QTabularDialog.C
550     QTexinfoDialog.C
551     QThesaurusDialog.C
552     QTocDialog.C
553     qttableview.C
554     QtView.C
555     QURLDialog.C
556     QVSpaceDialog.C
557     QWrapDialog.C
558     QLToolbar.C
559     socket_callback.C
560     validators.C
561   ''')]
562
563   # manually moc and uic files for better performance 
564   # (stop autoscan, 13:20s->12:50s :-)
565   qt3_moced_files = [qt3env.Moc(x.replace('.C', '.h')) for x in qt3_moc_files]
566   
567   qt3_uiced_files = [qt3env.Uic('$BUILDDIR/common/frontends/qt3/ui/'+x) for x in qt3_ui_files]
568   qt3_uiced_cc_files = []
569   for x in qt3_uiced_files:
570     qt3_uiced_cc_files.extend(x[1:])
571
572   qt3 = qt3env.StaticLibrary(
573     target = '$LOCALLIBPATH/qt3',
574     source = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split('''
575       QDialogView.C
576       Alert_pimpl.C
577       Dialogs.C
578       FileDialog.C
579       LyXKeySymFactory.C
580       LyXScreenFactory.C
581       QLMenubar.C
582       qtTimeout.C
583       QAbout.C
584       QBibitem.C
585       QBibtex.C
586       QBox.C
587       QBranch.C
588       QChanges.C
589       QCharacter.C
590       QCitation.C
591       QDocument.C
592       QErrorList.C
593       QERT.C
594       QExternal.C
595       QFloat.C
596       QGraphics.C
597       QInclude.C
598       QIndex.C
599       QLImage.C
600       QLog.C
601       QViewSource.C
602       QLPainter.C
603       QLyXKeySym.C
604       QMath.C
605       QNote.C
606       QParagraph.C
607       QPrefs.C
608       QPrint.C
609       QRef.C
610       QSearch.C
611       QSendto.C
612       QShowFile.C
613       QSpellchecker.C
614       QTabular.C
615       QTabularCreate.C
616       QTexinfo.C
617       QThesaurus.C
618       QToc.C
619       QURL.C
620       QVSpace.C
621       QWorkArea.C
622       QWrap.C
623       Qt2BC.C
624       WorkAreaFactory.C
625       checkedwidgets.C
626       lyx_gui.C
627       lcolorcache.C
628       panelstack.C
629       qcoloritem.C
630       qfontexample.C
631       qfont_loader.C
632       qfont_metrics.C
633       qscreen.C
634       qt_helpers.C
635     ''')] +
636     qt3_moc_files + qt3_moced_files + qt3_uiced_cc_files
637   )
638   Alias('qt3', qt3)
639
640
641 elif frontend == 'qt4':
642   print "Processing files in src/frontends/qt4"
643
644   qt4env = env.Copy()
645   qt4env['QT_AUTOSCAN'] = 0
646
647   # local qt4 toolset from
648   # http://www.iua.upf.es/~dgarcia/Codders/sconstools.html
649   #
650   # NOTE: I have to patch qt4.py since it does not automatically
651   # process .C file!!! (add to cxx_suffixes )
652   #
653   qt4env.Tool('qt4', [env['SCONS_DIR']])
654   qt4env.EnableQt4Modules(env['QT_LIB'], debug = False)
655
656   qt4env.AppendUnique(CPPPATH = [
657     '$BUILDDIR/common',
658     '$BUILDDIR/common/images',
659     '$BUILDDIR/common/frontends',
660     '$BUILDDIR/common/frontends/qt4',
661     '$BUILDDIR/common/frontends/controllers',
662     '$QT_INC_PATH',
663     '$QT_INC_PATH/Qt',
664     '$QT_INC_PATH/QtCore',
665     '$QT_INC_PATH/QtGui']
666   )
667
668   # FIXME: replace by something from pkg_config
669   qt4env.Append(CCFLAGS = [
670     '-DHAVE_CONFIG_H',
671     '-DQT_CLEAN_NAMESPACE',
672     '-DQT_GENUINE_STR',
673     '-DQT_NO_STL',
674     '-DQT3_SUPPORT',
675     '-Winvalid-pch']
676   )
677
678   qt4_ui_files = ['$BUILDDIR/common/frontends/qt4/ui/%s' % x for x in Split('''
679     BiblioUi
680     BranchesUi
681     BulletsUi
682     TextLayoutUi
683     LanguageUi
684     LaTeXUi
685     MarginsUi
686     NumberingUi
687     MathsUi
688     PageLayoutUi
689     PreambleUi
690     QAboutUi
691     QAskForTextUi
692     QBibitemUi
693     QBibtexUi
694     QBibtexAddUi
695     QBoxUi
696     QBranchUi
697     QChangesUi
698     QCharacterUi
699     QCitationUi
700     QCitationFindUi
701     QDelimiterUi
702     QDocumentUi
703     QErrorListUi
704     QERTUi
705     QExternalUi
706     QFloatUi
707     QGraphicsUi
708     QIncludeUi
709     QIndexUi
710     QLogUi
711     QViewSourceUi
712     QMathUi
713     QMathMatrixUi
714     QNoteUi
715     QParagraphUi
716     QPrefAsciiUi
717     QPrefColorsUi
718     QPrefConvertersUi
719     QPrefCopiersUi
720     QPrefCygwinPathUi
721     QPrefDateUi
722     QPrefDisplayUi
723     QPrefFileformatsUi
724     QPrefIdentityUi
725     QPrefKeyboardUi
726     QPrefLanguageUi
727     QPrefLatexUi
728     QPrefPathsUi
729     QPrefPrinterUi
730     QPrefScreenFontsUi
731     QPrefsUi
732     QPrefSpellcheckerUi
733     QPrefUi
734     QPrintUi
735     QRefUi
736     QSearchUi
737     QSendtoUi
738     QShowFileUi
739     QSpellcheckerUi
740     QTabularCreateUi
741     QTabularUi
742     QTexinfoUi
743     QThesaurusUi
744     QTocUi
745     QURLUi
746     QVSpaceUi
747     QWrapUi
748   ''')]
749
750   qt4_moc_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split('''
751     BulletsModule.C
752     emptytable.C
753     FileDialog_private.C
754     floatplacement.C
755     iconpalette.C
756     lengthcombo.C
757     panelstack.C
758     QAboutDialog.C
759     QBibitemDialog.C
760     QBibtexDialog.C
761     QBoxDialog.C
762     QBranchDialog.C
763     QBranches.C
764     QChangesDialog.C
765     QCharacterDialog.C
766     QCitationDialog.C
767     QCommandBuffer.C
768     QCommandEdit.C
769     QDelimiterDialog.C
770     QDocumentDialog.C
771     QErrorListDialog.C
772     QERTDialog.C
773     QExternalDialog.C
774     QFloatDialog.C
775     QGraphicsDialog.C
776     QIncludeDialog.C
777     QIndexDialog.C
778     QLAction.C
779     QLogDialog.C
780     QViewSourceDialog.C
781     QViewSource.C
782     QLMenubar.C
783     QLPopupMenu.C
784     QLPrintDialog.C
785     QMathDialog.C
786     QMathMatrixDialog.C
787     QNoteDialog.C
788     QParagraphDialog.C
789     QPrefsDialog.C
790     QRefDialog.C
791     QSearchDialog.C
792     QSendtoDialog.C
793     qsetborder.C
794     QShowFileDialog.C
795     QSpellcheckerDialog.C
796     QDialogView.C
797     QTabularCreateDialog.C
798     QTabularDialog.C
799     QTexinfoDialog.C
800     QThesaurusDialog.C
801     TocModel.C
802     QTocDialog.C
803     QtView.C
804     QURLDialog.C
805     QVSpaceDialog.C
806     QWorkArea.C
807     QWrapDialog.C
808     QLToolbar.C
809     socket_callback.C
810     validators.C
811   ''') ]
812
813   qt4_source_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split('''
814     QDialogView.C
815     Alert_pimpl.C
816     Dialogs.C
817     FileDialog.C
818     LyXKeySymFactory.C
819     LyXScreenFactory.C
820     QLMenubar.C
821     qtTimeout.C
822     QAbout.C
823     QBibitem.C
824     QBibtex.C
825     QBox.C
826     QBranch.C
827     QBranches.C
828     QChanges.C
829     QCharacter.C
830     QCitation.C
831     QDocument.C
832     QErrorList.C
833     QERT.C
834     QExternal.C
835     QFloat.C
836     QGraphics.C
837     QInclude.C
838     QIndex.C
839     QLAction.C
840     QLImage.C
841     QLog.C
842     QViewSource.C
843     QLPainter.C
844     QLyXKeySym.C
845     QMath.C
846     QNote.C
847     QParagraph.C
848     QPrefs.C
849     QPrint.C
850     QRef.C
851     QSearch.C
852     QSendto.C
853     QShowFile.C
854     QSpellchecker.C
855     QTabular.C
856     QTabularCreate.C
857     QTexinfo.C
858     QThesaurus.C
859     QToc.C
860     QURL.C
861     QVSpace.C
862     QWorkArea.C
863     QWrap.C
864     Qt2BC.C
865     WorkAreaFactory.C
866     checkedwidgets.C
867     lyx_gui.C
868     lcolorcache.C
869     panelstack.C
870     qfontexample.C
871     qfont_loader.C
872     qfont_metrics.C
873     qscreen.C
874     qt_helpers.C
875   ''')]
876
877   #
878   # Compile resources
879   #
880   resources = [qt4env.Uic4(x) for x in qt4_ui_files]
881
882   # 
883   # moc qt4_moc_files
884   #
885   qt4_moced_files = [qt4env.Moc4(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt4_moc_files]
886
887   # if the moced files are included in the .C file
888   # the Flatten(...) part will not be needed
889   qt4 = qt4env.StaticLibrary(
890     target = '$LOCALLIBPATH/qt4',
891     LIBS = qt4env['QT_LIB'],
892     source = qt4_source_files + qt4_moc_files + Flatten(qt4_moced_files)
893   )
894   Alias('qt4', qt4)
895
896
897 if 'client' in targets or 'install' in targets or 'all' in targets:
898   #
899   # src/client
900   #
901   env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0)
902
903   print "Processing files in src/client"
904
905   try:
906     client = env.Program(
907       target = '$BUILDDIR/common/client/lyxclient',
908       LIBS = env['BOOST_LIBRARIES'] + env['SOCKET_LIBS'] + ['supports'],
909       source = ["$BUILDDIR/common/client/%s" % x for x in Split('''
910         boost.C
911         client.C
912         debug.C
913         gettext.C
914         messages.C
915       ''')]
916     )
917     Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]),
918       client, [Copy('$TARGET', '$SOURCE')]))
919   except:
920     print "Building of program lyxclient failed"
921     client = None
922   Alias('client', client)
923
924
925 if 'tex2lyx' in targets or 'install' in targets or 'all' in targets:
926   #
927   # tex2lyx
928   #
929   print "Processing files in src/tex2lyx"
930
931   tex2lyx_env = env.Copy()
932   # the order is important here.
933   tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx'])
934   tex2lyx_env.AppendUnique(LIBPATH = ['#$LOCALLIBPATH'])
935
936   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/FloatList.C', '$TOP_SRC_DIR/src/FloatList.C')
937   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/Floating.C', '$TOP_SRC_DIR/src/Floating.C')
938   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/counters.C', '$TOP_SRC_DIR/src/counters.C')
939   # for some reason I do not know, I have to copy the header files as well.
940   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.h', '$TOP_SRC_DIR/src/lyxlayout.h')
941   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlayout.C', '$TOP_SRC_DIR/src/lyxlayout.C')
942   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.h', '$TOP_SRC_DIR/src/lyxtextclass.h')
943   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxtextclass.C', '$TOP_SRC_DIR/src/lyxtextclass.C')
944   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex.C', '$TOP_SRC_DIR/src/lyxlex.C')
945   tex2lyx_env.fileCopy('$BUILDDIR/common/tex2lyx/lyxlex_pimpl.C', '$TOP_SRC_DIR/src/lyxlex_pimpl.C')
946
947   try:
948     tex2lyx = tex2lyx_env.Program(
949       target = '$BUILDDIR/common/tex2lyx/tex2lyx',
950       LIBS = ['supports'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'],
951       source = ["$BUILDDIR/common/tex2lyx/%s" % x for x in Split('''
952         FloatList.C
953         Floating.C
954         counters.C
955         lyxlayout.C
956         lyxtextclass.C
957         lyxlex.C
958         lyxlex_pimpl.C
959         boost.C
960         context.C
961         gettext.C
962         lengthcommon.C
963         lyxfont.C
964         texparser.C
965         tex2lyx.C
966         preamble.C
967         math.C
968         table.C
969         text.C
970       ''')]
971     )
972     Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]),
973       tex2lyx, [Copy('$TARGET', '$SOURCE')]))
974   except:
975     print "Building of program tex2lyx failed"
976     tex2lyx = None
977   Alias('tex2lyx', tex2lyx)
978
979
980 if build_lyx or 'lyxbase' in targets:
981   #
982   # src/
983   #
984   print "Processing files in src"
985
986   env['SUBST_KEYS'] = ['PACKAGE_VERSION', 'VERSION_INFO']
987   env.substFile('$BUILDDIR/common/version.C', '$TOP_SRC_DIR/src/version.C.in')
988
989   lyx_source_pre = Split('''
990     Bidi.C
991     BufferView.C
992     BufferView_pimpl.C
993     Bullet.C
994     BranchList.C
995     Chktex.C
996     Color.C
997     CutAndPaste.C
998     DepTable.C
999     FloatList.C
1000     Floating.C
1001     FontIterator.C
1002     FuncStatus.C
1003     InsetList.C
1004     LColor.C
1005     LaTeX.C
1006     LaTeXFeatures.C
1007     LyXAction.C
1008     MenuBackend.C
1009     ParagraphParameters.C
1010     Spacing.C
1011     ToolbarBackend.C
1012     author.C
1013     boost.C
1014     buffer.C
1015     buffer_funcs.C
1016     bufferlist.C
1017     bufferparams.C
1018     bufferview_funcs.C
1019     changes.C
1020     chset.C
1021     converter.C
1022     counters.C
1023     coordcache.C
1024     cursor.C
1025     cursor_slice.C
1026     debug.C
1027     dociterator.C
1028     encoding.C
1029     errorlist.C
1030     exporter.C
1031     gettext.C
1032     factory.C
1033     format.C
1034     funcrequest.C
1035     graph.C
1036     importer.C
1037     intl.C
1038     insetiterator.C
1039     kbmap.C
1040     kbsequence.C
1041     language.C
1042     session.C
1043     lengthcommon.C
1044     lyx_cb.C
1045     lyx_main.C
1046     lyx_sty.C
1047     lyxfont.C
1048     lyxfind.C
1049     lyxfunc.C
1050     lyxgluelength.C
1051     lyxlayout.C
1052     lyxlength.C
1053     lyxlex.C
1054     lyxlex_pimpl.C
1055     lyxrc.C
1056     lyxrow.C
1057     lyxrow_funcs.C
1058     lyxserver.C
1059     lyxsocket.C
1060     lyxtextclass.C
1061     lyxtextclasslist.C
1062     lyxvc.C
1063     messages.C
1064     metricsinfo.C
1065     mover.C
1066     output.C
1067     outputparams.C
1068     output_docbook.C
1069     output_latex.C
1070     output_linuxdoc.C
1071     output_plaintext.C
1072     paragraph.C
1073     paragraph_funcs.C
1074     paragraph_pimpl.C
1075     pariterator.C
1076     rowpainter.C
1077     sgml.C
1078     tex-accent.C
1079     tex-strings.C
1080     texrow.C
1081     text.C
1082     text2.C
1083     text3.C
1084     TocBackend.C
1085     toc.C
1086     trans.C
1087     trans_mgr.C
1088     undo.C
1089     vc-backend.C
1090     version.C
1091     vspace.C
1092     main.C
1093   ''')
1094
1095   lyx_source_post = Split('''
1096     tabular.C
1097     dimension.C
1098     PrinterParams.C
1099     box.C
1100     Thesaurus.C
1101     SpellBase.C
1102   ''')
1103
1104   if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
1105     lyx_source_post.append('aspell.C')
1106   elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
1107     lyx_source_post.append('pspell.C')
1108   elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
1109     lyx_source_post.append('ispell.C')
1110
1111   lyxbase_pre = env.StaticLibrary(
1112     target = '$LOCALLIBPATH/lyxbase_pre',
1113     source = ["$BUILDDIR/common/%s" % x for x in lyx_source_pre]
1114   )
1115   lyxbase_post = env.StaticLibrary(
1116     target = '$LOCALLIBPATH/lyxbase_post',
1117     source = ["$BUILDDIR/common/%s" % x for x in lyx_source_post]
1118   )
1119   Alias('lyxbase', lyxbase_pre)
1120   Alias('lyxbase', lyxbase_post)
1121
1122
1123 if build_lyx or 'lyx' in targets:
1124   #
1125   # Build lyx with given frontend
1126   #
1127   try:
1128     lyx = env.Program(
1129       target = '$BUILDDIR/$frontend/lyx',
1130       source = [],
1131       LIBS = [
1132         'lyxbase_pre',
1133         'mathed',
1134         'insets',
1135         'frontends',
1136         env['frontend'],
1137         'controllers',
1138         'graphics',
1139         'supports',
1140         'lyxbase_post',
1141         ] +
1142         env['BOOST_LIBRARIES'] +
1143         env['EXTRA_LIBS'] +
1144         env['SOCKET_LIBS'] +
1145         env['SYSTEM_LIBS']
1146     )
1147     # [/path/to/lyx.ext] => lyx-qt3.ext
1148     target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s' % frontend)
1149     Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx,
1150       [Copy('$TARGET', '$SOURCE')]))
1151   except:
1152     print "Building of program lyx failed"
1153     lyx = None
1154     raise
1155   Alias('lyx', lyx)
1156
1157
1158 if 'po' in targets or 'install' in targets or 'all' in targets:
1159   #
1160   # po/
1161   #
1162   print 'Processing files in po...'
1163
1164   import glob
1165   # handle po files
1166   #
1167   # files to translate
1168   transfiles = glob.glob(os.path.join(env.subst('$TOP_SRC_DIR'), 'po', '*.po'))
1169   # possibly *only* handle these languages
1170   languages = None
1171   if env.has_key('languages'):
1172     languages = env.make_list(env['lanauges'])
1173   # use defulat msgfmt
1174   if not env['MSGFMT']:
1175     print 'msgfmt does not exist. Can not process po files'
1176   else:
1177     # create a builder
1178     env['BUILDERS']['Transfiles'] = Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po')
1179     #
1180     gmo_files = []
1181     for f in transfiles:
1182       # get filename
1183       fname = os.path.split(f)[1]
1184       # country code
1185       country = fname.split('.')[0]
1186       #
1187       if not languages or country in languages:
1188         gmo_files.extend(env.Transfiles(f))
1189
1190
1191 if 'install' in targets:
1192   # create the directory if needed
1193   if not os.path.isdir(env['PREFIX']):
1194     try:
1195       os.makedirs(env['PREFIX'])
1196     except:
1197       pass
1198     if not os.path.isdir(env['PREFIX']):
1199       print 'Can not create directory', env['PREFIX']
1200       Exit(3)
1201   #
1202   import glob
1203   #
1204   # windows: $PREFIX/Resources
1205   # others:  $PREDIX/share/lyx
1206   share_dir = env['SHARE_DIR']
1207   # windows: $PREFIX/Resouces/man/man1
1208   # others:  $PREFIX/man/man1
1209   man_dir = env['MAN_DIR']
1210   # windows: $PREFIX/Resources/locale
1211   # others:  $PREFIX/share/locale
1212   locale_dir = env['LOCALE_DIR']
1213
1214   def install(dest, src):
1215     ''' recusive installation of src to dest '''
1216     # separate file and directory
1217     files = filter(os.path.isfile, [x for x in src])
1218     dirs = filter(os.path.isdir, [x for x in src])
1219     # install file
1220     env.Install(dest, files)
1221     # install directory
1222     ins_dir = [dest]
1223     for dir in dirs:
1224       ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)),
1225         glob.glob(os.path.join(dir, '*'))) )
1226     return ins_dir
1227   #
1228   # executables (some of them may be none)
1229   env.Install(env['BIN_DIR'], filter(lambda x: x != None, [lyx, tex2lyx, client]))
1230   Alias('install', env['BIN_DIR'])
1231   #
1232   # share/lyx
1233   dirs = install(env['SHARE_DIR'],
1234     [env.subst('$TOP_SRC_DIR/lib/') + file for file in ['configure.py', 'encodings',
1235      'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages',
1236      'lyxrc.example', 'syntax.default', 'bind', 'images', 'layouts', 'scripts', 
1237      'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc',  'ui']]
1238   )
1239   Alias('install', dirs)
1240   # man
1241   env.InstallAs(os.path.join(env['MAN_DIR'], 'lyx.1'),
1242     env.subst('$TOP_SRC_DIR/lyx.man'))
1243   env.InstallAs(os.path.join(env['MAN_DIR'], 'tex2lyx.1'),
1244     env.subst('$TOP_SRC_DIR/src/tex2lyx/tex2lyx.man'))
1245   env.InstallAs(os.path.join(env['MAN_DIR'], 'lyxclient.1'),
1246     env.subst('$TOP_SRC_DIR/src/client/lyxclient.man'))
1247   Alias('install', [os.path.join(env['MAN_DIR'], x) for
1248     x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']])
1249   # locale files?
1250   # ru.gmo ==> ru/LC_MESSAGES/lyx.mo
1251   for gmo in gmo_files:
1252     lan = os.path.split(str(gmo))[1].split('.')[0]
1253     dest_file = os.path.join(env['LOCALE_DIR'], lan, 'LC_MESSAGES', 'lyx.mo')
1254     env.InstallAs(dest_file, gmo)
1255     Alias('install', dest_file)
1256
1257
1258 Default('lyx')
1259 Alias('all', ['lyx', 'client', 'tex2lyx', 'po'])