3 ########################
4 # Documentation build #
5 ########################
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 \
16 STEPMAKE_TEMPLATES = documentation texinfo tex omf
17 LOCALSTEPMAKE_TEMPLATES = lilypond ly
21 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
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
28 ### Extra source files
30 README_TOP_FILES= DEDICATION THANKS
32 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
33 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
35 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
40 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
42 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
43 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
46 TEXINFO_MANUALS = internals\
47 $(TELY_FILES:%.tely=%)\
48 $(TEXI_FILES:%.texi=%)
49 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
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
55 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
57 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
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)))
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)
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)
77 HTML_PAGE_NAMES= translations
78 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
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
85 INFO_DOCS += lilypond-snippets
87 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
90 INFO_IMAGES_DIR = lilypond
91 DEST_INFO_IMAGES_SUBDIR = Documentation/
94 include $(depth)/make/stepmake.make
96 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
98 ### Web site idiosyncrases
100 $(outdir)/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
101 $(outdir)/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
103 $(outdir)/index.html: $(outdir)/general.texi
104 $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output $(outdir)/ $(outdir)/general.texi
109 default: local-txt-doc
111 local-help: extra-local-help
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\
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\
130 LL refers to the desired locale (most often only the ISO 639 language code).\n"
133 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
134 @echo export PYTHONPATH=$(PYTHONPATH)
136 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
140 rm -f $(INFO_IMAGES_DIR)
145 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
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=\"/'
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=$@ $<
160 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
162 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
163 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
166 ## Extra images dependencies
167 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
170 $(MAKE) -C pictures WWW-1
171 ln -sf ../pictures/$(outdir) $@
173 $(outdir)/general.texi: $(outdir)/examples
176 $(MAKE) -C general/examples
177 ln -sf ../general/examples/$(outdir) $@
180 # Ugh, using '%' twice not possible
181 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
183 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
185 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
187 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
189 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
191 $(foreach manual, $(MANUAL_SUBDIRS),\
192 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
203 ln -sf $(depth)/.. $(@)
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, $^)
210 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
212 $(outdir)/%.bib: %.bib
215 ## notation.texi deps
216 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
217 $(MAKE) -C $(top-src-dir)/mf
219 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
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 $@
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).
230 $(outdir)/internals.texi: $(LILYPOND_BINARY)
231 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
234 ###############################################
235 # Documentation and translations maintenance #
236 ###############################################
240 all-translations-update: po-update translation-status
241 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
244 CHECK_TRANSLATION_FLAGS = --no-color
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;\
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;\
266 # Also for updating/adding missing files
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 ***"
273 TRANSLATION_DIRS = general texidocs
274 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
276 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
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)
283 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
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
290 else # ISOLANG is empty
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
300 $(auxscript-dir)/check_texi_refs.py --batch \
301 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
304 $(auxscript-dir)/check_texi_refs.py --auto-fix \
305 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
308 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
311 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314 make -C po out=www messages
315 $(auxscript-dir)/translations-status.py