3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = application contributor learning notation
13 SUBDIRS = $(MANUALS_SUBDIRS) snippets bibliography pictures misc po $(LANGS)
14 STEPMAKE_TEMPLATES = documentation texinfo tex omf
15 LOCALSTEPMAKE_TEMPLATES = lilypond ly
19 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
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
26 ### Extra source files
28 README_TOP_FILES= DEDICATION THANKS
29 LATEX_FILES =$(call src-wildcard,*.latex)
30 IMAGES=$(call src-wildcard,*.png)
31 EPS_ILLUSTRATIONS=context-example.eps
33 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
34 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
39 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
41 OUT_PDF_IMAGES = $(IMAGES:%.png=$(outdir)/%.pdf)
42 OUT_PDF_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf)
43 OUT_PNG_IMAGES = $(OUT_PDF_IMAGES:%.pdf=%.png)
45 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
46 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
49 TEXINFO_MANUALS = internals\
50 $(TELY_FILES:%.tely=%)\
51 $(TEXI_FILES:%.texi=%)
53 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
55 UNSPLITTED_HTML_MANUALS = changes
56 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
57 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),, $(manual)))
59 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
60 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
61 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
64 HTML_PAGE_NAMES= index translations devel
65 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
66 OUT_CSS_FILES = $(CSS_FILES:%.css=$(outdir)/%.css)
68 MAIN_INFO_DOC = lilypond-notation
69 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
70 lilypond-learning lilypond-notation music-glossary
72 INFO_DOCS += lilypond-snippets
74 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
77 INFO_IMAGES_DIR = lilypond
78 DEST_INFO_IMAGES_SUBDIR = Documentation/
81 include $(depth)/make/stepmake.make
83 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
90 local-help: extra-local-help
94 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
95 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
96 info update info pages\n\
97 xml update Docbook xml documentation\n\
99 Translations specific targets (see TRANSLATION for details):\n\
100 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
101 po-update update and replace PO files for documentation with msgmerged versions\n\
102 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
103 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
104 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
105 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
106 docs in English (use with caution)\n\
108 LL refers to the desired locale (most often only the ISO 639 language code).\n"
111 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
112 @echo export PYTHONPATH=$(PYTHONPATH)
114 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
118 rm -f $(INFO_IMAGES_DIR)
123 local-WWW-1: $(TEXINFO_MANUALS:%=$(outdir)/%.texi) $(PDF_FILES) info
125 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
132 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
134 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
135 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
138 $(OUT_HTML_FILES): $(OUT_CSS_FILES)
140 $(outdir)/%.css: %.css
143 ## Extra images dependencies
144 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
145 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
146 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
147 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
149 # Ugh, using '%' twice not possible
150 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
152 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
154 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
156 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
158 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
160 $(foreach manual, $(MANUAL_SUBDIRS),\
161 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
163 $(outdir)/%.png: %.png
164 convert -depth 8 -geometry 50x50% $< $@
166 $(outdir)/%.png: %.eps
167 gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
169 $(outdir)/%.pdf: %.png
170 convert -depth 8 $< $@
172 $(outdir)/%.pdf: %.eps
173 gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
176 # Symlinks to refer to external source documents from split and non-split HTML
177 source-links = $(outdir)/source $(outdir)/notation/source $(outdir)/music-glossary/source \
178 $(outdir)/application/source $(outdir)/learning/source $(outdir)/internals/source \
179 $(outdir)/snippets/source
188 ln -sf $(depth)/.. $(@)
191 ## Snippets rules idiosyncrases
192 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
193 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
195 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
197 $(outdir)/%.bib: %.bib
200 ## notation.texi deps
201 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
202 $(MAKE) -C $(top-src-dir)/mf
204 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
206 ## Rules for the automatically generated documentation
207 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
208 cd $(outdir) && $(BISON) -v $<
209 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
211 # There used to be a dependency on a dummy target, to force a rebuild
212 # of internals every time. however, this triggers
213 # compilation during install, which is a bad thing (tm).
215 $(outdir)/internals.texi: $(LILYPOND_BINARY)
216 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
219 ###############################################
220 # Documentation and translations maintenance #
221 ###############################################
225 all-translations-update: po-update translation-status
226 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
229 CHECK_TRANSLATION_FLAGS = --no-color
234 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
235 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
238 mkdir -p $(ISOLANG)/learning
239 cp fr/GNUmakefile $(ISOLANG)
240 cp fr/learning/GNUmakefile $(ISOLANG)/learning
241 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
242 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
243 mv $(outdir)/*.*tely $(ISOLANG)/learning
244 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
245 cp po/lilypond-doc.pot po/$(ISOLANG).po
246 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
248 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
249 $(shell find $(ISOLANG)/$(manual) -maxdepth 1 -name '*.*te??')) \
250 $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
252 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
254 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
255 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
258 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
260 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
261 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
262 -I $(top-src-dir)/Documentation/snippets \
263 -I $(top-build-dir)/Documentation/out-www
265 else # ISOLANG is empty
267 DOCUMENTS_INCLUDES:=-I . \
268 -I $(top-build-dir)/Documentation/out-www \
269 -I $(top-src-dir)/Documentation/snippets \
270 -I $(top-build-dir)/Documentation/snippets/out-www
275 $(auxscript-dir)/check_texi_refs.py --batch \
276 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
279 $(auxscript-dir)/check_texi_refs.py --auto-fix \
280 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
283 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
286 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
289 make -C po out=www messages
290 $(auxscript-dir)/translations-status.py