]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond
[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.ihtml
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-web
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 $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
99
100
101 ### bad hack for badly-integrated roadmap.
102 $(outdir)/ROADMAP:
103         cp $(top-src-dir)/ROADMAP $(outdir)
104 $(outdir)/contributor.texi: $(outdir)/ROADMAP
105
106
107 ###########
108 ### Targets
109
110 default: local-txt-doc
111
112 local-help: extra-local-help
113
114 extra-local-help:
115         @echo -e "\
116   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
117   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
118   info        update info pages\n\
119   xml         update Docbook xml documentation\n\
120 \n\
121 Translations specific targets (see TRANSLATION for details):\n\
122   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
123 (if \'LL exists, update missing file)\n\
124   po-update            update and replace PO files for documentation with msgmerged versions\n\
125   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
126   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
127   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
128   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
129                               docs in English (use with caution)\n\
130 \n\
131 LL refers to the desired locale (most often only the ISO 639 language code).\n"
132
133 info: $(INFO_FILES)
134         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
135         @echo export PYTHONPATH=$(PYTHONPATH)
136
137 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
138
139
140 local-clean:
141         rm -f $(INFO_IMAGES_DIR)
142
143 ### Web targets
144
145 ifeq ($(out),www)
146 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
147
148 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
149 endif
150
151
152 #########
153 ### Rules
154
155 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
156         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
157
158 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
159 txt-to-html:
160         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
161         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
162
163 ifeq ($(out),www)
164 ## Extra images dependencies
165 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
166
167 $(outdir)/pictures:
168         $(MAKE) -C pictures WWW-1
169         ln -sf ../pictures/$(outdir) $@
170
171 $(outdir)/web.texi: $(outdir)/ly-examples
172
173 $(outdir)/ly-examples:
174         $(MAKE) -C web/ly-examples
175         ln -sf ../web/ly-examples/$(outdir) $@
176 endif
177
178 # Ugh, using '%' twice not possible
179 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
180         mkdir -p $(dir $@)
181         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
182
183 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
184         mkdir -p $(dir $@)
185         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
186
187 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
188
189 $(foreach manual, $(MANUAL_SUBDIRS),\
190 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
191
192
193
194 $(outdir)/source:
195         @rm -f $(@)
196         ln -sf $(depth) $(@)
197
198 $(outdir)/%/source:
199         @rm -f $(@)
200         mkdir -p $(dir $@)
201         ln -sf $(depth)/.. $(@)
202
203
204 ## Snippets rules idiosyncrases
205 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
206         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
207
208 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
209
210 $(outdir)/%.bib: %.bib
211         ln -f $< $@
212
213 ## notation.texi deps
214 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
215         $(MAKE) -C $(top-src-dir)/mf
216
217 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
218
219 ## Rules for the automatically generated documentation
220 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
221         cd $(outdir) && $(BISON) -v $<
222         $(buildscript-dir)/yyout2grammar $(outdir)/parser.output $@
223
224 # There used to be a dependency on a dummy target, to force a rebuild
225 # of internals every time.  however, this triggers
226 # compilation during install, which is a bad thing (tm).
227
228 $(outdir)/internals.texi: $(LILYPOND_BINARY)
229         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
230
231
232 ###############################################
233 #  Documentation and translations maintenance #
234 ###############################################
235 po-update:
236         make -C po po-update
237
238 all-translations-update: po-update translation-status
239         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
240
241 ifneq ($(NO_COLOR),)
242 CHECK_TRANSLATION_FLAGS = --no-color
243 endif
244
245 ifneq ($(ISOLANG),)
246 new-lang-dir:
247         mkdir -p $(ISOLANG)/$(DIR)
248         cp fr/GNUmakefile $(ISOLANG)
249         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
250         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
251         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
252         $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
253         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
254             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
255         done
256         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
257         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
258             test -e $(ISOLANG)/$(DIR)/$$i\
259                 || test -e $(ISOLANG)/$$i\
260                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
261         done
262
263 new-lang:
264 # Also for updating/adding missing files
265         mkdir -p $(ISOLANG)
266         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
267         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
268         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
269         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
270
271 TRANSLATION_DIRS = web texidocs
272 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
273
274 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
275 skeleton-update:
276         mkdir -p $(ISOLANG)
277         $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
278         $(PYTHON) $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
279
280 snippet-update:
281         $(PYTHON) $(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 -I $(top-build-dir)/Documentation/out
288
289 else # ISOLANG is empty
290
291 DOCUMENTS_INCLUDES:=-I . \
292 -I $(top-build-dir)/Documentation/out-www \
293 -I $(top-src-dir)/Documentation/snippets \
294 -I $(top-build-dir)/Documentation/snippets/out-www \
295 -I $(top-build-dir)/Documentation/out
296
297 endif # ISOLANG
298
299 check-xrefs:
300         $(PYTHON) $(auxscript-dir)/check_texi_refs.py --batch \
301         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
302
303 fix-xrefs:
304         $(PYTHON) $(auxscript-dir)/check_texi_refs.py --auto-fix \
305         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
306
307 check-translation:
308         ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
309
310 update-translation:
311         ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312
313 translation-status:
314         make -C po out=www messages
315         $(PYTHON) $(auxscript-dir)/translations-status.py
316
317 .SECONDARY: