]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Bump documentation license to v1.3+.
[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   web 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 TOPDIR_HTML_MANUALS = 
60 UNSPLITTED_HTML_MANUALS =
61 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
62  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
63 NOT_TOPDIR_HTML_MANUALS = $(foreach manual, $(SPLITTED_HTML_MANUALS),\
64  $(if $(findstring $(manual), $(TOPDIR_HTML_MANUALS)),,$(manual)))
65
66 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
67  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
68 DEEP_HTML_FILES = $(NOT_TOPDIR_HTML_MANUALS:%=$(outdir)/%/index.html)
69
70 # Symlinks to refer to external source documents from split and non-split HTML
71 source-links = $(outdir)/source\
72  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
73
74 # Other out files
75
76 HTML_PAGE_NAMES= translations index
77 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
78
79 MAIN_INFO_DOC = lilypond-notation
80 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
81  lilypond-essay lilypond-learning lilypond-notation music-glossary \
82  lilypond-web lilypond-extending
83 ifeq ($(out),www)
84 INFO_DOCS += lilypond-snippets 
85 endif
86 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
87
88 ifeq ($(out),www)
89 INFO_IMAGES_DIR = lilypond
90 DEST_INFO_IMAGES_SUBDIR = Documentation/
91 endif
92
93 include $(depth)/make/stepmake.make
94
95 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
96
97 ### Web site idiosyncrases
98
99 $(outdir)/web/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
100 $(outdir)/web/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
101
102 #$(outdir)/web/index.html:
103 #       $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output $(outdir)/ $(outdir)/web.texi
104
105
106 ### bad hack for badly-integrated roadmap.
107 $(outdir)/ROADMAP:
108         cp $(top-src-dir)/ROADMAP $(outdir)
109 $(outdir)/contributor.texi: $(outdir)/ROADMAP
110
111
112 ###########
113 ### Targets
114
115 default: local-txt-doc
116
117 local-help: extra-local-help
118
119 extra-local-help:
120         @echo -e "\
121   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
122   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
123   info        update info pages\n\
124   xml         update Docbook xml documentation\n\
125 \n\
126 Translations specific targets (see TRANSLATION for details):\n\
127   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
128 (if \'LL exists, update missing file)\n\
129   po-update            update and replace PO files for documentation with msgmerged versions\n\
130   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
131   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
132   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
133   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
134                               docs in English (use with caution)\n\
135 \n\
136 LL refers to the desired locale (most often only the ISO 639 language code).\n"
137
138 info: $(INFO_FILES)
139         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
140         @echo export PYTHONPATH=$(PYTHONPATH)
141
142 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
143
144
145 local-clean:
146         rm -f $(INFO_IMAGES_DIR)
147
148 ### Web targets
149
150 ifeq ($(out),www)
151 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
152
153 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
154 endif
155
156
157 #########
158 ### Rules
159
160 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
161         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
162
163 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
164 txt-to-html:
165         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
166         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
167
168 ifeq ($(out),www)
169 ## Extra images dependencies
170 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
171
172 $(outdir)/pictures:
173         $(MAKE) -C pictures WWW-1
174         ln -sf ../pictures/$(outdir) $@
175
176 $(outdir)/web.texi: $(outdir)/examples
177
178 $(outdir)/examples:
179         $(MAKE) -C web/examples
180         ln -sf ../web/examples/$(outdir) $@
181 endif
182
183 # Ugh, using '%' twice not possible
184 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
185         mkdir -p $(dir $@)
186         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
187
188 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
189         mkdir -p $(dir $@)
190         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
191
192 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
193
194 $(foreach manual, $(MANUAL_SUBDIRS),\
195 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
196
197
198
199 $(outdir)/source:
200         @rm -f $(@)
201         ln -sf $(depth) $(@)
202
203 $(outdir)/%/source:
204         @rm -f $(@)
205         mkdir -p $(dir $@)
206         ln -sf $(depth)/.. $(@)
207
208
209 ## Snippets rules idiosyncrases
210 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
211         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
212
213 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
214
215 $(outdir)/%.bib: %.bib
216         ln -f $< $@
217
218 ## notation.texi deps
219 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
220         $(MAKE) -C $(top-src-dir)/mf
221
222 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
223
224 ## Rules for the automatically generated documentation
225 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
226         cd $(outdir) && $(BISON) -v $<
227         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
228
229 # There used to be a dependency on a dummy target, to force a rebuild
230 # of internals every time.  however, this triggers
231 # compilation during install, which is a bad thing (tm).
232
233 $(outdir)/internals.texi: $(LILYPOND_BINARY)
234         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
235
236
237 ###############################################
238 #  Documentation and translations maintenance #
239 ###############################################
240 po-update:
241         make -C po po-update
242
243 all-translations-update: po-update translation-status
244         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
245
246 ifneq ($(NO_COLOR),)
247 CHECK_TRANSLATION_FLAGS = --no-color
248 endif
249
250 ifneq ($(ISOLANG),)
251 new-lang-dir:
252         mkdir -p $(ISOLANG)/$(DIR)
253         cp fr/GNUmakefile $(ISOLANG)
254         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
255         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
256         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
257         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
258         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
259             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
260         done
261         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
262         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
263             test -e $(ISOLANG)/$(DIR)/$$i\
264                 || test -e $(ISOLANG)/$$i\
265                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
266         done
267
268 new-lang:
269 # Also for updating/adding missing files
270         mkdir -p $(ISOLANG)
271         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
272         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
273         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
274         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
275
276 TRANSLATION_DIRS = web texidocs
277 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
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: