3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = application contributor essay learning notation
13 SUBDIRS = $(MANUALS_SUBDIRS) snippets bibliography logo 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 ## CHAIN_RULE hack: keep the following line *before* including
54 # stepmake.make, so the Internals Reference is built before the
55 # Notation Reference, thus providing automatically generated sections
57 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
59 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
61 UNSPLITTED_HTML_MANUALS = changes
62 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
63 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
65 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
66 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
67 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
69 # Symlinks to refer to external source documents from split and non-split HTML
70 source-links = $(outdir)/source\
71 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
75 HTML_PAGE_NAMES= index translations devel
76 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
77 OUT_CSS_FILES = $(CSS_FILES:%.css=$(outdir)/%.css)
79 MAIN_INFO_DOC = lilypond-notation
80 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
81 lilypond-essay lilypond-learning lilypond-notation music-glossary
83 INFO_DOCS += lilypond-snippets
85 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
88 INFO_IMAGES_DIR = lilypond
89 DEST_INFO_IMAGES_SUBDIR = Documentation/
92 include $(depth)/make/stepmake.make
94 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
99 default: local-txt-doc
101 local-help: extra-local-help
105 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
106 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
107 info update info pages\n\
108 xml update Docbook xml documentation\n\
110 Translations specific targets (see TRANSLATION for details):\n\
111 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
112 po-update update and replace PO files for documentation with msgmerged versions\n\
113 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
114 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
115 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
116 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
117 docs in English (use with caution)\n\
119 LL refers to the desired locale (most often only the ISO 639 language code).\n"
122 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
123 @echo export PYTHONPATH=$(PYTHONPATH)
125 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
129 rm -f $(INFO_IMAGES_DIR)
134 local-WWW-1: $(TEXINFO_MANUALS:%=$(outdir)/%.texi) $(PDF_FILES) info
136 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
143 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
145 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
146 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
149 $(outdir)/%.css: %.css
152 ## Extra images dependencies
153 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
154 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
155 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
156 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
158 # Ugh, using '%' twice not possible
159 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
161 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
163 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
165 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
167 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
169 $(foreach manual, $(MANUAL_SUBDIRS),\
170 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
172 $(outdir)/%.png: %.png
173 convert -depth 8 -geometry 50x50% $< $@
175 $(outdir)/%.png: %.eps
176 gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
178 $(outdir)/%.pdf: %.png
179 convert -depth 8 $< $@
181 $(outdir)/%.pdf: %.eps
182 gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
192 ln -sf $(depth)/.. $(@)
195 ## Snippets rules idiosyncrases
196 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
197 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
199 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
201 $(outdir)/%.bib: %.bib
204 ## notation.texi deps
205 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
206 $(MAKE) -C $(top-src-dir)/mf
208 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
210 ## Rules for the automatically generated documentation
211 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
212 cd $(outdir) && $(BISON) -v $<
213 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
215 # There used to be a dependency on a dummy target, to force a rebuild
216 # of internals every time. however, this triggers
217 # compilation during install, which is a bad thing (tm).
219 $(outdir)/internals.texi: $(LILYPOND_BINARY)
220 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
223 ###############################################
224 # Documentation and translations maintenance #
225 ###############################################
229 all-translations-update: po-update translation-status
230 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
233 CHECK_TRANSLATION_FLAGS = --no-color
238 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
239 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
242 mkdir -p $(ISOLANG)/learning
243 cp fr/GNUmakefile $(ISOLANG)
244 cp fr/learning/GNUmakefile $(ISOLANG)/learning
245 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
246 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
247 mv $(outdir)/*.*tely $(ISOLANG)/learning
248 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
249 cp po/lilypond-doc.pot po/$(ISOLANG).po
250 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
252 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
253 $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
254 $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
256 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
258 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
259 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
262 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
264 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
265 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
266 -I $(top-src-dir)/Documentation/snippets \
267 -I $(top-build-dir)/Documentation/out-www
269 else # ISOLANG is empty
271 DOCUMENTS_INCLUDES:=-I . \
272 -I $(top-build-dir)/Documentation/out-www \
273 -I $(top-src-dir)/Documentation/snippets \
274 -I $(top-build-dir)/Documentation/snippets/out-www
279 $(auxscript-dir)/check_texi_refs.py --batch \
280 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
283 $(auxscript-dir)/check_texi_refs.py --auto-fix \
284 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
287 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
290 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
293 make -C po out=www messages
294 $(auxscript-dir)/translations-status.py