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 $(outdir)/%.css: %.css
145 ## Extra images dependencies
146 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
147 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
148 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
149 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
151 # Ugh, using '%' twice not possible
152 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
154 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
156 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
158 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
160 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
162 $(foreach manual, $(MANUAL_SUBDIRS),\
163 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
165 $(outdir)/%.png: %.png
166 convert -depth 8 -geometry 50x50% $< $@
168 $(outdir)/%.png: %.eps
169 gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
171 $(outdir)/%.pdf: %.png
172 convert -depth 8 $< $@
174 $(outdir)/%.pdf: %.eps
175 gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
185 ln -sf $(depth)/.. $(@)
188 ## Snippets rules idiosyncrases
189 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
190 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
192 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
194 $(outdir)/%.bib: %.bib
197 ## notation.texi deps
198 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
199 $(MAKE) -C $(top-src-dir)/mf
201 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
203 ## Rules for the automatically generated documentation
204 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
205 cd $(outdir) && $(BISON) -v $<
206 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
208 # There used to be a dependency on a dummy target, to force a rebuild
209 # of internals every time. however, this triggers
210 # compilation during install, which is a bad thing (tm).
212 $(outdir)/internals.texi: $(LILYPOND_BINARY)
213 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
216 ###############################################
217 # Documentation and translations maintenance #
218 ###############################################
222 all-translations-update: po-update translation-status
223 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
226 CHECK_TRANSLATION_FLAGS = --no-color
231 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
232 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
235 mkdir -p $(ISOLANG)/learning
236 cp fr/GNUmakefile $(ISOLANG)
237 cp fr/learning/GNUmakefile $(ISOLANG)/learning
238 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
239 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
240 mv $(outdir)/*.*tely $(ISOLANG)/learning
241 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
242 cp po/lilypond-doc.pot po/$(ISOLANG).po
243 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
245 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
246 $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
247 $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
249 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
251 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
252 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
255 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
257 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
258 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
259 -I $(top-src-dir)/Documentation/snippets \
260 -I $(top-build-dir)/Documentation/out-www
262 else # ISOLANG is empty
264 DOCUMENTS_INCLUDES:=-I . \
265 -I $(top-build-dir)/Documentation/out-www \
266 -I $(top-src-dir)/Documentation/snippets \
267 -I $(top-build-dir)/Documentation/snippets/out-www
272 $(auxscript-dir)/check_texi_refs.py --batch \
273 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
276 $(auxscript-dir)/check_texi_refs.py --auto-fix \
277 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
280 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
283 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
286 make -C po out=www messages
287 $(auxscript-dir)/translations-status.py