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 MAIN_INFO_DOC = lilypond-web
77 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
78 lilypond-essay lilypond-learning lilypond-notation music-glossary \
79 lilypond-web 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
95 $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
98 ### bad hack for badly-integrated roadmap.
100 cp $(top-src-dir)/ROADMAP $(outdir)
101 $(outdir)/contributor.texi: $(outdir)/ROADMAP
107 default: local-txt-doc
109 local-help: extra-local-help
113 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
114 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
115 info update info pages\n\
116 xml update Docbook xml documentation\n\
118 Translations specific targets (see TRANSLATION for details):\n\
119 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
120 (if \'LL exists, update missing file)\n\
121 po-update update and replace PO files for documentation with msgmerged versions\n\
122 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
123 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
124 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
125 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
126 docs in English (use with caution)\n\
128 LL refers to the desired locale (most often only the ISO 639 language code).\n"
131 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
132 @echo export PYTHONPATH=$(PYTHONPATH)
134 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
138 rm -f $(INFO_IMAGES_DIR)
143 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
145 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
152 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
153 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
155 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
157 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
158 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
161 ## Extra images dependencies
162 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
165 $(MAKE) -C pictures WWW-1
166 ln -sf ../pictures/$(outdir) $@
168 $(outdir)/web.texi: $(outdir)/ly-examples
170 $(outdir)/ly-examples:
171 $(MAKE) -C web/ly-examples
172 ln -sf ../web/ly-examples/$(outdir) $@
175 # Ugh, using '%' twice not possible
176 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
178 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
180 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
182 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
184 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
186 $(foreach manual, $(MANUAL_SUBDIRS),\
187 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
198 ln -sf $(depth)/.. $(@)
201 ## Snippets rules idiosyncrases
202 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
203 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
205 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
207 $(outdir)/%.bib: %.bib
210 ## notation.texi deps
211 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
212 $(MAKE) -C $(top-src-dir)/mf
214 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
216 ## Rules for the automatically generated documentation
217 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
218 cd $(outdir) && $(BISON) -v $<
219 $(buildscript-dir)/yyout2grammar $(outdir)/parser.output $@
221 # There used to be a dependency on a dummy target, to force a rebuild
222 # of internals every time. however, this triggers
223 # compilation during install, which is a bad thing (tm).
225 $(outdir)/internals.texi: $(LILYPOND_BINARY)
226 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
229 ###############################################
230 # Documentation and translations maintenance #
231 ###############################################
235 all-translations-update: po-update translation-status
236 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
239 CHECK_TRANSLATION_FLAGS = --no-color
244 mkdir -p $(ISOLANG)/$(DIR)
245 cp fr/GNUmakefile $(ISOLANG)
246 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
247 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
248 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
249 $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
250 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
251 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
253 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
254 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
255 test -e $(ISOLANG)/$(DIR)/$$i\
256 || test -e $(ISOLANG)/$$i\
257 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
261 # Also for updating/adding missing files
263 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
264 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
265 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
266 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
268 TRANSLATION_DIRS = web texidocs
269 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
271 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
274 $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
275 $(PYTHON) $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
278 $(PYTHON) $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
280 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
281 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
282 -I $(top-src-dir)/Documentation/snippets \
283 -I $(top-build-dir)/Documentation/out-www \
284 -I $(top-build-dir)/Documentation/out
286 else # ISOLANG is empty
288 DOCUMENTS_INCLUDES:=-I . \
289 -I $(top-build-dir)/Documentation/out-www \
290 -I $(top-src-dir)/Documentation/snippets \
291 -I $(top-build-dir)/Documentation/snippets/out-www \
292 -I $(top-build-dir)/Documentation/out
297 $(PYTHON) $(auxscript-dir)/check_texi_refs.py --batch \
298 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
301 $(PYTHON) $(auxscript-dir)/check_texi_refs.py --auto-fix \
302 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
305 ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
308 ISOLANG=$(ISOLANG) $(PYTHON) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
311 @echo Target temporarily disabled