3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = usage automated-engraving contributor essay \
13 web 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.ihtml
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)
60 UNSPLITTED_HTML_MANUALS =
61 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
62 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
63 NOT_TOPDIR_HTML_MANUALS = $(foreach manual, $(SPLITTED_HTML_MANUALS),\
64 $(if $(findstring $(manual), $(TOPDIR_HTML_MANUALS)),,$(manual)))
66 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
67 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
68 DEEP_HTML_FILES = $(NOT_TOPDIR_HTML_MANUALS:%=$(outdir)/%/index.html)
70 # Symlinks to refer to external source documents from split and non-split HTML
71 source-links = $(outdir)/source\
72 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
76 HTML_PAGE_NAMES= translations index
77 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
79 MAIN_INFO_DOC = lilypond-web
80 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
81 lilypond-essay lilypond-learning lilypond-notation music-glossary \
82 lilypond-web lilypond-extending
84 INFO_DOCS += lilypond-snippets
86 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
89 INFO_IMAGES_DIR = lilypond
90 DEST_INFO_IMAGES_SUBDIR = Documentation/
93 include $(depth)/make/stepmake.make
95 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
97 ### Web site idiosyncrases
98 $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
101 ### bad hack for badly-integrated roadmap.
103 cp $(top-src-dir)/ROADMAP $(outdir)
104 $(outdir)/contributor.texi: $(outdir)/ROADMAP
110 default: local-txt-doc
112 local-help: extra-local-help
116 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
117 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
118 info update info pages\n\
119 xml update Docbook xml documentation\n\
121 Translations specific targets (see TRANSLATION for details):\n\
122 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
123 (if \'LL exists, update missing file)\n\
124 po-update update and replace PO files for documentation with msgmerged versions\n\
125 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
126 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
127 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
128 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
129 docs in English (use with caution)\n\
131 LL refers to the desired locale (most often only the ISO 639 language code).\n"
134 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
135 @echo export PYTHONPATH=$(PYTHONPATH)
137 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
141 rm -f $(INFO_IMAGES_DIR)
146 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
148 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
155 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
156 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
158 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
160 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
161 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
164 ## Extra images dependencies
165 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
168 $(MAKE) -C pictures WWW-1
169 ln -sf ../pictures/$(outdir) $@
171 $(outdir)/web.texi: $(outdir)/ly-examples
173 $(outdir)/ly-examples:
174 $(MAKE) -C web/ly-examples
175 ln -sf ../web/ly-examples/$(outdir) $@
178 # Ugh, using '%' twice not possible
179 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
181 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
183 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
185 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
187 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
189 $(foreach manual, $(MANUAL_SUBDIRS),\
190 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
201 ln -sf $(depth)/.. $(@)
204 ## Snippets rules idiosyncrases
205 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
206 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
208 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
210 $(outdir)/%.bib: %.bib
213 ## notation.texi deps
214 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
215 $(MAKE) -C $(top-src-dir)/mf
217 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
219 ## Rules for the automatically generated documentation
220 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
221 cd $(outdir) && $(BISON) -v $<
222 $(buildscript-dir)/yyout2grammar $(outdir)/parser.output $@
224 # There used to be a dependency on a dummy target, to force a rebuild
225 # of internals every time. however, this triggers
226 # compilation during install, which is a bad thing (tm).
228 $(outdir)/internals.texi: $(LILYPOND_BINARY)
229 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
232 ###############################################
233 # Documentation and translations maintenance #
234 ###############################################
238 all-translations-update: po-update translation-status
239 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
242 CHECK_TRANSLATION_FLAGS = --no-color
247 mkdir -p $(ISOLANG)/$(DIR)
248 cp fr/GNUmakefile $(ISOLANG)
249 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
250 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
251 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
252 $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
253 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
254 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
256 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
257 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
258 test -e $(ISOLANG)/$(DIR)/$$i\
259 || test -e $(ISOLANG)/$$i\
260 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
264 # Also for updating/adding missing files
266 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
267 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
268 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
269 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
271 TRANSLATION_DIRS = web texidocs
272 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
274 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
277 $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
278 $(PYTHON) $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
281 $(PYTHON) $(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 \
287 -I $(top-build-dir)/Documentation/out
289 else # ISOLANG is empty
291 DOCUMENTS_INCLUDES:=-I . \
292 -I $(top-build-dir)/Documentation/out-www \
293 -I $(top-src-dir)/Documentation/snippets \
294 -I $(top-build-dir)/Documentation/snippets/out-www \
295 -I $(top-build-dir)/Documentation/out
300 $(PYTHON) $(auxscript-dir)/check_texi_refs.py --batch \
301 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
304 $(PYTHON) $(auxscript-dir)/check_texi_refs.py --auto-fix \
305 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
308 ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
311 ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314 make -C po out=www messages
315 $(PYTHON) $(auxscript-dir)/translations-status.py