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