3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = usage automated-engraving contributor essay general learning notation
13 SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs $(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
30 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
31 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
33 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
38 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
40 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
41 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
44 TEXINFO_MANUALS = internals\
45 $(TELY_FILES:%.tely=%)\
46 $(TEXI_FILES:%.texi=%)
47 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
49 ## CHAIN_RULE hack: keep the following line *before* including
50 # stepmake.make, so the Internals Reference is built before the
51 # Notation Reference, thus providing automatically generated sections
53 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
55 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
57 UNSPLITTED_HTML_MANUALS = changes
58 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
59 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
61 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
62 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
63 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
65 # Symlinks to refer to external source documents from split and non-split HTML
66 source-links = $(outdir)/source\
67 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
71 HTML_PAGE_NAMES= translations
72 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
74 MAIN_INFO_DOC = lilypond-notation
75 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
76 lilypond-essay lilypond-learning lilypond-notation music-glossary \
79 INFO_DOCS += lilypond-snippets
81 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
84 INFO_IMAGES_DIR = lilypond
85 DEST_INFO_IMAGES_SUBDIR = Documentation/
88 include $(depth)/make/stepmake.make
90 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
92 ### Web site idiosyncrases
94 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
95 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
97 OUT_HTML_FILES += $(outdir)/index.html
98 $(outdir)/index.html: $(outdir)/general/index.html
99 mv $(outdir)/general/* $(outdir)/
104 default: local-txt-doc
106 local-help: extra-local-help
110 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
111 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
112 info update info pages\n\
113 xml update Docbook xml documentation\n\
115 Translations specific targets (see TRANSLATION for details):\n\
116 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
117 po-update update and replace PO files for documentation with msgmerged versions\n\
118 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
119 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
120 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
121 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
122 docs in English (use with caution)\n\
124 LL refers to the desired locale (most often only the ISO 639 language code).\n"
127 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
128 @echo export PYTHONPATH=$(PYTHONPATH)
130 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
134 rm -f $(INFO_IMAGES_DIR)
139 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
141 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
148 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
149 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
151 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
153 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
154 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
157 ## Extra images dependencies
158 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
161 $(MAKE) -C pictures WWW-1
162 ln -sf ../pictures/$(outdir) $@
164 $(outdir)/general.texi: $(outdir)/examples
167 $(MAKE) -C general/examples
168 ln -sf ../general/examples/$(outdir) $@
171 # Ugh, using '%' twice not possible
172 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
174 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
176 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
178 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
180 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
182 $(foreach manual, $(MANUAL_SUBDIRS),\
183 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
194 ln -sf $(depth)/.. $(@)
197 ## Snippets rules idiosyncrases
198 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
199 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
201 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
203 $(outdir)/%.bib: %.bib
206 ## notation.texi deps
207 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
208 $(MAKE) -C $(top-src-dir)/mf
210 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
212 ## Rules for the automatically generated documentation
213 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
214 cd $(outdir) && $(BISON) -v $<
215 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
217 # There used to be a dependency on a dummy target, to force a rebuild
218 # of internals every time. however, this triggers
219 # compilation during install, which is a bad thing (tm).
221 $(outdir)/internals.texi: $(LILYPOND_BINARY)
222 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
225 ###############################################
226 # Documentation and translations maintenance #
227 ###############################################
231 all-translations-update: po-update translation-status
232 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
235 CHECK_TRANSLATION_FLAGS = --no-color
240 mkdir -p $(ISOLANG)/$(DIR)
241 cp fr/GNUmakefile $(ISOLANG)
242 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
243 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
244 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
245 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
246 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
247 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
249 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
250 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
251 test -e $(ISOLANG)/$(DIR)/$$i\
252 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
256 # Also for updating/adding missing files
257 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
258 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
259 (test -e $(ISOLANG)/$(i) \
260 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
261 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
262 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
263 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
265 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
266 TRANSLATION_DIRS = general learning notation texidocs usage
267 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
268 EXTRA_TRANSLATION_FILES =\
272 translations.html.in\
273 translations.template.html.in\
277 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
280 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
281 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
284 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
286 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
287 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
288 -I $(top-src-dir)/Documentation/snippets \
289 -I $(top-build-dir)/Documentation/out-www
291 else # ISOLANG is empty
293 DOCUMENTS_INCLUDES:=-I . \
294 -I $(top-build-dir)/Documentation/out-www \
295 -I $(top-src-dir)/Documentation/snippets \
296 -I $(top-build-dir)/Documentation/snippets/out-www
301 $(auxscript-dir)/check_texi_refs.py --batch \
302 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
305 $(auxscript-dir)/check_texi_refs.py --auto-fix \
306 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
309 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
315 make -C po out=www messages
316 $(auxscript-dir)/translations-status.py