3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = usage automated-engraving contributor essay \
13 general learning notation extending
14 SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs \
16 STEPMAKE_TEMPLATES = documentation texinfo tex omf
17 LOCALSTEPMAKE_TEMPLATES = lilypond ly
21 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
24 -I $(top-build-dir)/Documentation/$(outconfbase)
25 $(outdir)/snippets-big-page.html: TEXI2HTML_FLAGS += -D short_toc
26 $(outdir)/snippets/index..html: TEXI2HTML_FLAGS += -D short_toc
28 ### Extra source files
30 README_TOP_FILES= DEDICATION THANKS
32 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
33 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
35 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
40 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
42 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
43 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
46 TEXINFO_MANUALS = internals\
47 $(TELY_FILES:%.tely=%)\
48 $(TEXI_FILES:%.texi=%)
49 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
51 ## CHAIN_RULE hack: keep the following line *before* including
52 # stepmake.make, so the Internals Reference is built before the
53 # Notation Reference, thus providing automatically generated sections
55 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
57 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
59 UNSPLITTED_HTML_MANUALS = changes
60 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
61 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
63 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
64 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
65 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
67 # Symlinks to refer to external source documents from split and non-split HTML
68 source-links = $(outdir)/source\
69 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
73 HTML_PAGE_NAMES= translations
74 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
76 MAIN_INFO_DOC = lilypond-notation
77 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
78 lilypond-essay lilypond-learning lilypond-notation music-glossary \
79 lilypond-general lilypond-extending
81 INFO_DOCS += lilypond-snippets
83 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
86 INFO_IMAGES_DIR = lilypond
87 DEST_INFO_IMAGES_SUBDIR = Documentation/
90 include $(depth)/make/stepmake.make
92 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
94 ### Web site idiosyncrases
96 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
97 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
99 OUT_HTML_FILES += $(outdir)/index.html
100 $(outdir)/index.html: $(outdir)/general/index.html
101 mv $(outdir)/general/* $(outdir)/
106 default: local-txt-doc
108 local-help: extra-local-help
112 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
113 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
114 info update info pages\n\
115 xml update Docbook xml documentation\n\
117 Translations specific targets (see TRANSLATION for details):\n\
118 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
119 po-update update and replace PO files for documentation with msgmerged versions\n\
120 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
121 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
122 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
123 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
124 docs in English (use with caution)\n\
126 LL refers to the desired locale (most often only the ISO 639 language code).\n"
129 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
130 @echo export PYTHONPATH=$(PYTHONPATH)
132 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
136 rm -f $(INFO_IMAGES_DIR)
141 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
143 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
150 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
151 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
153 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
155 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
156 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
159 ## Extra images dependencies
160 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
163 $(MAKE) -C pictures WWW-1
164 ln -sf ../pictures/$(outdir) $@
166 $(outdir)/general.texi: $(outdir)/examples
169 $(MAKE) -C general/examples
170 ln -sf ../general/examples/$(outdir) $@
173 # Ugh, using '%' twice not possible
174 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
176 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
178 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
180 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
182 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
184 $(foreach manual, $(MANUAL_SUBDIRS),\
185 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
196 ln -sf $(depth)/.. $(@)
199 ## Snippets rules idiosyncrases
200 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
201 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
203 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
205 $(outdir)/%.bib: %.bib
208 ## notation.texi deps
209 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
210 $(MAKE) -C $(top-src-dir)/mf
212 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
214 ## Rules for the automatically generated documentation
215 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
216 cd $(outdir) && $(BISON) -v $<
217 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
219 # There used to be a dependency on a dummy target, to force a rebuild
220 # of internals every time. however, this triggers
221 # compilation during install, which is a bad thing (tm).
223 $(outdir)/internals.texi: $(LILYPOND_BINARY)
224 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
227 ###############################################
228 # Documentation and translations maintenance #
229 ###############################################
233 all-translations-update: po-update translation-status
234 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
237 CHECK_TRANSLATION_FLAGS = --no-color
242 mkdir -p $(ISOLANG)/$(DIR)
243 cp fr/GNUmakefile $(ISOLANG)
244 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
245 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
246 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
247 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
248 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
249 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
251 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
252 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
253 test -e $(ISOLANG)/$(DIR)/$$i\
254 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
258 # Also for updating/adding missing files
259 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
260 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
261 (test -e $(ISOLANG)/$(i) \
262 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
263 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
264 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
265 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
267 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
268 TRANSLATION_DIRS = general learning notation texidocs usage
269 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
270 EXTRA_TRANSLATION_FILES =\
274 translations.html.in\
275 translations.template.html.in\
279 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
282 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
283 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
286 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
288 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
289 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
290 -I $(top-src-dir)/Documentation/snippets \
291 -I $(top-build-dir)/Documentation/out-www
293 else # ISOLANG is empty
295 DOCUMENTS_INCLUDES:=-I . \
296 -I $(top-build-dir)/Documentation/out-www \
297 -I $(top-src-dir)/Documentation/snippets \
298 -I $(top-build-dir)/Documentation/snippets/out-www
303 $(auxscript-dir)/check_texi_refs.py --batch \
304 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
307 $(auxscript-dir)/check_texi_refs.py --auto-fix \
308 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
311 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
317 make -C po out=www messages
318 $(auxscript-dir)/translations-status.py