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