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= index translations devel
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)
100 default: local-txt-doc
102 local-help: extra-local-help
106 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
107 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
108 info update info pages\n\
109 xml update Docbook xml documentation\n\
111 Translations specific targets (see TRANSLATION for details):\n\
112 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
113 po-update update and replace PO files for documentation with msgmerged versions\n\
114 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
115 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
116 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
117 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
118 docs in English (use with caution)\n\
120 LL refers to the desired locale (most often only the ISO 639 language code).\n"
123 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
124 @echo export PYTHONPATH=$(PYTHONPATH)
126 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
130 rm -f $(INFO_IMAGES_DIR)
135 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
137 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
144 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
145 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
147 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
149 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
150 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
153 ## Extra images dependencies
154 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
157 $(MAKE) -C pictures WWW-1
158 ln -sf ../pictures/$(outdir) $@
160 $(outdir)/general.texi: $(outdir)/examples
163 $(MAKE) -C general/examples
164 ln -sf ../general/examples/$(outdir) $@
167 # Ugh, using '%' twice not possible
168 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
170 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
172 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
174 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
176 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
178 $(foreach manual, $(MANUAL_SUBDIRS),\
179 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
190 ln -sf $(depth)/.. $(@)
193 ## Snippets rules idiosyncrases
194 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
195 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
197 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
199 $(outdir)/%.bib: %.bib
202 ## notation.texi deps
203 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
204 $(MAKE) -C $(top-src-dir)/mf
206 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
208 ## Rules for the automatically generated documentation
209 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
210 cd $(outdir) && $(BISON) -v $<
211 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
213 # There used to be a dependency on a dummy target, to force a rebuild
214 # of internals every time. however, this triggers
215 # compilation during install, which is a bad thing (tm).
217 $(outdir)/internals.texi: $(LILYPOND_BINARY)
218 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
221 ###############################################
222 # Documentation and translations maintenance #
223 ###############################################
227 all-translations-update: po-update translation-status
228 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
231 CHECK_TRANSLATION_FLAGS = --no-color
236 mkdir -p $(ISOLANG)/$(DIR)
237 cp fr/GNUmakefile $(ISOLANG)
238 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
239 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
240 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
241 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
242 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
243 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
245 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
246 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
247 test -e $(ISOLANG)/$(DIR)/$$i\
248 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
252 # Also for updating/adding missing files
253 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
254 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
255 (test -e $(ISOLANG)/$(i) \
256 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
257 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
258 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
259 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
261 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
262 TRANSLATION_DIRS = general learning notation texidocs usage
263 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
264 EXTRA_TRANSLATION_FILES =\
269 translations.html.in\
270 translations.template.html.in\
274 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
277 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
278 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
281 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
283 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
284 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
285 -I $(top-src-dir)/Documentation/snippets \
286 -I $(top-build-dir)/Documentation/out-www
288 else # ISOLANG is empty
290 DOCUMENTS_INCLUDES:=-I . \
291 -I $(top-build-dir)/Documentation/out-www \
292 -I $(top-src-dir)/Documentation/snippets \
293 -I $(top-build-dir)/Documentation/snippets/out-www
298 $(auxscript-dir)/check_texi_refs.py --batch \
299 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
302 $(auxscript-dir)/check_texi_refs.py --auto-fix \
303 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
306 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
309 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312 make -C po out=www messages
313 $(auxscript-dir)/translations-status.py