]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Build: add Documentation/included/. (sorry)
[lilypond.git] / Documentation / GNUmakefile
1 depth = ..
2
3 ########################
4 #  Documentation build #
5 ########################
6
7 #############
8 ### Variables
9
10 NAME = documentation
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = usage automated-engraving contributor essay \
13   general learning notation extending
14 SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs \
15   included $(LANGS)
16 STEPMAKE_TEMPLATES = documentation texinfo tex omf
17 LOCALSTEPMAKE_TEMPLATES = lilypond ly
18
19 ### Extra flags
20
21 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
22 TEXI2PDF_FLAGS = \
23   -I $(outdir) \
24   -I $(top-build-dir)/Documentation/$(outconfbase)
25 $(outdir)/snippets-big-page.html: TEXI2HTML_FLAGS += -D short_toc
26 $(outdir)/snippets/index..html: TEXI2HTML_FLAGS += -D short_toc
27
28 ### Extra source files
29
30 README_TOP_FILES= DEDICATION THANKS
31
32 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
33 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
34
35 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
36
37 ### Out files
38
39 # Dependencies
40 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
41
42 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
43 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
44
45 # Main manuals
46 TEXINFO_MANUALS = internals\
47  $(TELY_FILES:%.tely=%)\
48  $(TEXI_FILES:%.texi=%)
49 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
50
51 ## CHAIN_RULE hack: keep the following line *before* including
52 # stepmake.make, so the Internals Reference is built before the
53 # Notation Reference, thus providing automatically generated sections
54 # of the NR
55 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
56
57 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
58
59 UNSPLITTED_HTML_MANUALS = changes
60 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
61  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
62
63 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
64  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
65 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
66
67 # Symlinks to refer to external source documents from split and non-split HTML
68 source-links = $(outdir)/source\
69  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
70
71 # Other out files
72
73 HTML_PAGE_NAMES= translations
74 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
75
76 MAIN_INFO_DOC = lilypond-notation
77 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
78  lilypond-essay lilypond-learning lilypond-notation music-glossary \
79  lilypond-general lilypond-extending
80 ifeq ($(out),www)
81 INFO_DOCS += lilypond-snippets 
82 endif
83 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
84
85 ifeq ($(out),www)
86 INFO_IMAGES_DIR = lilypond
87 DEST_INFO_IMAGES_SUBDIR = Documentation/
88 endif
89
90 include $(depth)/make/stepmake.make
91
92 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
93
94 ### Web site idiosyncrases
95
96 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
97 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
98
99 OUT_HTML_FILES += $(outdir)/index.html
100 $(outdir)/index.html: $(outdir)/general/index.html
101         mv $(outdir)/general/* $(outdir)/
102
103 ###########
104 ### Targets
105
106 default: local-txt-doc
107
108 local-help: extra-local-help
109
110 extra-local-help:
111         @echo -e "\
112   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
113   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
114   info        update info pages\n\
115   xml         update Docbook xml documentation\n\
116 \n\
117 Translations specific targets (see TRANSLATION for details):\n\
118   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
119   po-update            update and replace PO files for documentation with msgmerged versions\n\
120   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
121   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
122   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
123   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
124                               docs in English (use with caution)\n\
125 \n\
126 LL refers to the desired locale (most often only the ISO 639 language code).\n"
127
128 info: $(INFO_FILES)
129         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
130         @echo export PYTHONPATH=$(PYTHONPATH)
131
132 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
133
134
135 local-clean:
136         rm -f $(INFO_IMAGES_DIR)
137
138 ### Web targets
139
140 ifeq ($(out),www)
141 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
142
143 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
144 endif
145
146
147 #########
148 ### Rules
149
150 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
151         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
152
153 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
154 txt-to-html:
155         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
156         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
157
158 ifeq ($(out),www)
159 ## Extra images dependencies
160 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
161
162 $(outdir)/pictures:
163         $(MAKE) -C pictures WWW-1
164         ln -sf ../pictures/$(outdir) $@
165
166 $(outdir)/general.texi: $(outdir)/examples
167
168 $(outdir)/examples:
169         $(MAKE) -C general/examples
170         ln -sf ../general/examples/$(outdir) $@
171 endif
172
173 # Ugh, using '%' twice not possible
174 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
175         mkdir -p $(dir $@)
176         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
177
178 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
179         mkdir -p $(dir $@)
180         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
181
182 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
183
184 $(foreach manual, $(MANUAL_SUBDIRS),\
185 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
186
187
188
189 $(outdir)/source:
190         @rm -f $(@)
191         ln -sf $(depth) $(@)
192
193 $(outdir)/%/source:
194         @rm -f $(@)
195         mkdir -p $(dir $@)
196         ln -sf $(depth)/.. $(@)
197
198
199 ## Snippets rules idiosyncrases
200 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
201         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
202
203 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
204
205 $(outdir)/%.bib: %.bib
206         ln -f $< $@
207
208 ## notation.texi deps
209 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
210         $(MAKE) -C $(top-src-dir)/mf
211
212 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
213
214 ## Rules for the automatically generated documentation
215 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
216         cd $(outdir) && $(BISON) -v $<
217         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
218
219 # There used to be a dependency on a dummy target, to force a rebuild
220 # of internals every time.  however, this triggers
221 # compilation during install, which is a bad thing (tm).
222
223 $(outdir)/internals.texi: $(LILYPOND_BINARY)
224         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
225
226
227 ###############################################
228 #  Documentation and translations maintenance #
229 ###############################################
230 po-update:
231         make -C po po-update
232
233 all-translations-update: po-update translation-status
234         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
235
236 ifneq ($(NO_COLOR),)
237 CHECK_TRANSLATION_FLAGS = --no-color
238 endif
239
240 ifneq ($(ISOLANG),)
241 new-lang-dir:
242         mkdir -p $(ISOLANG)/$(DIR)
243         cp fr/GNUmakefile $(ISOLANG)
244         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
245         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
246         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
247         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
248         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
249             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
250         done
251         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
252         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
253             test -e $(ISOLANG)/$(DIR)/$$i\
254                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
255         done
256
257 new-lang:
258 # Also for updating/adding missing files
259         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
260         $(foreach i, $(EXTRA_TRANSLATION_FILES), \
261             (test -e $(ISOLANG)/$(i) \
262                 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
263         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
264         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
265         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
266
267 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
268 TRANSLATION_DIRS = general learning notation texidocs usage
269 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
270 EXTRA_TRANSLATION_FILES =\
271  dedication.itely\
272  common-macros.itexi\
273  macros.itexi\
274  translations.html.in\
275  translations.template.html.in\
276 #
277
278
279 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
280 skeleton-update:
281         mkdir -p $(ISOLANG)
282         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
283         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
284
285 snippet-update:
286         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
287
288 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
289 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
290 -I $(top-src-dir)/Documentation/snippets \
291 -I $(top-build-dir)/Documentation/out-www
292
293 else # ISOLANG is empty
294
295 DOCUMENTS_INCLUDES:=-I . \
296 -I $(top-build-dir)/Documentation/out-www \
297 -I $(top-src-dir)/Documentation/snippets \
298 -I $(top-build-dir)/Documentation/snippets/out-www
299
300 endif # ISOLANG
301
302 check-xrefs:
303         $(auxscript-dir)/check_texi_refs.py --batch \
304         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
305
306 fix-xrefs:
307         $(auxscript-dir)/check_texi_refs.py --auto-fix \
308         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
309
310 check-translation:
311         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312
313 update-translation:
314         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
315
316 translation-status:
317         make -C po out=www messages
318         $(auxscript-dir)/translations-status.py
319
320 .SECONDARY: