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