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)
63 # Symlinks to refer to external source documents from split and non-split HTML
64 source-links = $(outdir)/source\
65 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
68 HTML_PAGE_NAMES= index translations devel
69 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
70 OUT_CSS_FILES = $(CSS_FILES:%.css=$(outdir)/%.css)
72 MAIN_INFO_DOC = lilypond-notation
73 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
74 lilypond-learning lilypond-notation music-glossary
76 INFO_DOCS += lilypond-snippets
78 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
81 INFO_IMAGES_DIR = lilypond
82 DEST_INFO_IMAGES_SUBDIR = Documentation/
85 include $(depth)/make/stepmake.make
87 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
94 local-help: extra-local-help
98 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
99 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
100 info update info pages\n\
101 xml update Docbook xml documentation\n\
103 Translations specific targets (see TRANSLATION for details):\n\
104 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
105 po-update update and replace PO files for documentation with msgmerged versions\n\
106 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
107 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
108 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
109 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
110 docs in English (use with caution)\n\
112 LL refers to the desired locale (most often only the ISO 639 language code).\n"
115 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
116 @echo export PYTHONPATH=$(PYTHONPATH)
118 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
122 rm -f $(INFO_IMAGES_DIR)
127 local-WWW-1: $(TEXINFO_MANUALS:%=$(outdir)/%.texi) $(PDF_FILES) info
129 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
136 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
138 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
139 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
142 $(OUT_HTML_FILES): $(OUT_CSS_FILES)
144 $(outdir)/%.css: %.css
147 ## Extra images dependencies
148 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
149 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
150 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
151 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
153 # Ugh, using '%' twice not possible
154 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
156 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
158 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
160 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
162 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
164 $(foreach manual, $(MANUAL_SUBDIRS),\
165 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
167 $(outdir)/%.png: %.png
168 convert -depth 8 -geometry 50x50% $< $@
170 $(outdir)/%.png: %.eps
171 gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
173 $(outdir)/%.pdf: %.png
174 convert -depth 8 $< $@
176 $(outdir)/%.pdf: %.eps
177 gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
187 ln -sf $(depth)/.. $(@)
190 ## Snippets rules idiosyncrases
191 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
192 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
194 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
196 $(outdir)/%.bib: %.bib
199 ## notation.texi deps
200 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
201 $(MAKE) -C $(top-src-dir)/mf
203 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
205 ## Rules for the automatically generated documentation
206 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
207 cd $(outdir) && $(BISON) -v $<
208 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
210 # There used to be a dependency on a dummy target, to force a rebuild
211 # of internals every time. however, this triggers
212 # compilation during install, which is a bad thing (tm).
214 $(outdir)/internals.texi: $(LILYPOND_BINARY)
215 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
218 ###############################################
219 # Documentation and translations maintenance #
220 ###############################################
224 all-translations-update: po-update translation-status
225 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
228 CHECK_TRANSLATION_FLAGS = --no-color
233 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
234 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
237 mkdir -p $(ISOLANG)/learning
238 cp fr/GNUmakefile $(ISOLANG)
239 cp fr/learning/GNUmakefile $(ISOLANG)/learning
240 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
241 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
242 mv $(outdir)/*.*tely $(ISOLANG)/learning
243 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
244 cp po/lilypond-doc.pot po/$(ISOLANG).po
245 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
247 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
248 $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
249 $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
251 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
253 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
254 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
257 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
259 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
260 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
261 -I $(top-src-dir)/Documentation/snippets \
262 -I $(top-build-dir)/Documentation/out-www
264 else # ISOLANG is empty
266 DOCUMENTS_INCLUDES:=-I . \
267 -I $(top-build-dir)/Documentation/out-www \
268 -I $(top-src-dir)/Documentation/snippets \
269 -I $(top-build-dir)/Documentation/snippets/out-www
274 $(auxscript-dir)/check_texi_refs.py --batch \
275 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
278 $(auxscript-dir)/check_texi_refs.py --auto-fix \
279 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
282 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
285 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
288 make -C po out=www messages
289 $(auxscript-dir)/translations-status.py