]> git.lyx.org Git - features.git/blob - development/scons/SConscript
add 'scons lyxbase', 'scons install', nsl support, and a few other scons improvement.
[features.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.fileCopy('$BUILDDIR/lyxclient', '$BUILDDIR/common/client/lyxclient'))
915   Alias('client', client)
916
917
918 if 'tex2lyx' in targets or 'install' in targets:
919   #
920   # tex2lyx
921   #
922   print "Processing files in src/tex2lyx"
923   
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'])
928   
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')
939   
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('''
944       FloatList.C
945       Floating.C
946       counters.C
947       lyxlayout.C
948       lyxtextclass.C
949       lyxlex.C
950       lyxlex_pimpl.C
951       boost.C
952       context.C
953       gettext.C
954       lengthcommon.C
955       lyxfont.C
956       texparser.C
957       tex2lyx.C
958       preamble.C
959       math.C
960       table.C
961       text.C
962     ''')]
963   )
964   Alias('tex2lyx', env.fileCopy('$BUILDDIR/tex2lyx', '$BUILDDIR/common/tex2lyx/tex2lyx'))
965   Alias('tex2lyx', tex2lyx)
966   #
967   # src/
968   #
969   
970 if build_lyx or 'lyxbase' in targets:
971   print "Processing files in src"
972   
973   env['SUBST_KEYS'] = ['PACKAGE_VERSION', 'VERSION_INFO']
974   env.substFile('$BUILDDIR/common/version.C', '$TOP_SRC_DIR/src/version.C.in')
975   
976   lyx_source_pre = Split('''
977     Bidi.C
978     BufferView.C
979     BufferView_pimpl.C
980     Bullet.C
981     BranchList.C
982     Chktex.C
983     Color.C
984     CutAndPaste.C
985     DepTable.C
986     FloatList.C
987     Floating.C
988     FontIterator.C
989     FuncStatus.C
990     InsetList.C
991     LColor.C
992     LaTeX.C
993     LaTeXFeatures.C
994     LyXAction.C
995     MenuBackend.C
996     ParagraphParameters.C
997     Spacing.C
998     ToolbarBackend.C
999     author.C
1000     boost.C
1001     buffer.C
1002     buffer_funcs.C
1003     bufferlist.C
1004     bufferparams.C
1005     bufferview_funcs.C
1006     changes.C
1007     chset.C
1008     converter.C
1009     counters.C
1010     coordcache.C
1011     cursor.C
1012     cursor_slice.C
1013     debug.C
1014     dociterator.C
1015     encoding.C
1016     errorlist.C
1017     exporter.C
1018     gettext.C
1019     factory.C
1020     format.C
1021     funcrequest.C
1022     graph.C
1023     importer.C
1024     intl.C
1025     insetiterator.C
1026     kbmap.C
1027     kbsequence.C
1028     language.C
1029     session.C
1030     lengthcommon.C
1031     lyx_cb.C
1032     lyx_main.C
1033     lyx_sty.C
1034     lyxfont.C
1035     lyxfind.C
1036     lyxfunc.C
1037     lyxgluelength.C
1038     lyxlayout.C
1039     lyxlength.C
1040     lyxlex.C
1041     lyxlex_pimpl.C
1042     lyxrc.C
1043     lyxrow.C
1044     lyxrow_funcs.C
1045     lyxserver.C
1046     lyxsocket.C
1047     lyxtextclass.C
1048     lyxtextclasslist.C
1049     lyxvc.C
1050     messages.C
1051     metricsinfo.C
1052     mover.C
1053     output.C
1054     outputparams.C
1055     output_docbook.C
1056     output_latex.C
1057     output_linuxdoc.C
1058     output_plaintext.C
1059     paragraph.C
1060     paragraph_funcs.C
1061     paragraph_pimpl.C
1062     pariterator.C
1063     rowpainter.C
1064     sgml.C
1065     tex-accent.C
1066     tex-strings.C
1067     texrow.C
1068     text.C
1069     text2.C
1070     text3.C
1071     TocBackend.C
1072     toc.C
1073     trans.C
1074     trans_mgr.C
1075     undo.C
1076     vc-backend.C
1077     version.C
1078     vspace.C
1079     main.C
1080   ''')
1081   
1082   lyx_source_post = Split('''
1083     tabular.C
1084     dimension.C
1085     PrinterParams.C
1086     box.C
1087     Thesaurus.C
1088     SpellBase.C
1089   ''')
1090   
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')
1097   
1098   lyxbase_pre = env.StaticLibrary(
1099     target = '$LOCALLIBPATH/lyxbase_pre',
1100     source = ["$BUILDDIR/common/%s" % x for x in lyx_source_pre]
1101   )
1102   lyxbase_post = env.StaticLibrary(
1103     target = '$LOCALLIBPATH/lyxbase_post',
1104     source = ["$BUILDDIR/common/%s" % x for x in lyx_source_post]
1105   )
1106   Alias('lyxbase', lyxbase_pre)
1107   Alias('lyxbase', lyxbase_post)
1108
1109
1110 if build_lyx or 'lyx' in targets:
1111   #
1112   # Build lyx with given frontend
1113   #
1114   lyx = env.Program(
1115     target = '$BUILDDIR/$frontend/lyx',
1116     source = [],
1117     LIBS = [
1118       'lyxbase_pre',
1119       'mathed',
1120       'insets',
1121       'frontends',
1122       env['frontend'],
1123       'controllers',
1124       'graphics',
1125       'supports',
1126       'lyxbase_post',
1127       ] +
1128       env['BOOST_LIBRARIES'] +
1129       env['EXTRA_LIBS'] +
1130       env['SYSTEM_LIBS']
1131   )
1132   Alias('lyx', env.fileCopy('$BUILDDIR/lyx-$frontend', '$BUILDDIR/$frontend/lyx'))
1133   Alias('lyx', lyx)
1134
1135
1136 if 'install' in targets:
1137   #
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.
1141   #
1142   import glob
1143
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])
1149     # install file
1150     env.Install(dest, files)
1151     # install directory
1152     ins_dir = [dest]
1153     for dir in dirs:
1154       ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)), 
1155         glob.glob(os.path.join(dir, '*'))) )
1156     return ins_dir
1157   #
1158   # other targets include client, tex2lyx
1159   env.Install(env['BIN_DIR'], [lyx, tex2lyx, client])
1160   Alias('install', env['BIN_DIR'])
1161   #
1162   # copy files
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']]
1169   )
1170   Alias('install', dirs)
1171
1172 Default('lyx')
1173