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