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.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)
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
99 # now all handled by the init file.
102 ### bad hack for badly-integrated roadmap.
104 cp $(top-src-dir)/ROADMAP $(outdir)
105 $(outdir)/contributor.texi: $(outdir)/ROADMAP
111 default: local-txt-doc
113 local-help: extra-local-help
117 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
118 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
119 info update info pages\n\
120 xml update Docbook xml documentation\n\
122 Translations specific targets (see TRANSLATION for details):\n\
123 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
124 (if \'LL exists, update missing file)\n\
125 po-update update and replace PO files for documentation with msgmerged versions\n\
126 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
127 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
128 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
129 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
130 docs in English (use with caution)\n\
132 LL refers to the desired locale (most often only the ISO 639 language code).\n"
135 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
136 @echo export PYTHONPATH=$(PYTHONPATH)
138 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
142 rm -f $(INFO_IMAGES_DIR)
147 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
149 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
156 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
157 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
159 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
161 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
162 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
165 ## Extra images dependencies
166 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
169 $(MAKE) -C pictures WWW-1
170 ln -sf ../pictures/$(outdir) $@
172 $(outdir)/web.texi: $(outdir)/examples
175 $(MAKE) -C web/examples
176 ln -sf ../web/examples/$(outdir) $@
179 # Ugh, using '%' twice not possible
180 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
182 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
184 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
186 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
188 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
190 $(foreach manual, $(MANUAL_SUBDIRS),\
191 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
202 ln -sf $(depth)/.. $(@)
205 ## Snippets rules idiosyncrases
206 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
207 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
209 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
211 $(outdir)/%.bib: %.bib
214 ## notation.texi deps
215 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
216 $(MAKE) -C $(top-src-dir)/mf
218 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
220 ## Rules for the automatically generated documentation
221 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
222 cd $(outdir) && $(BISON) -v $<
223 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
225 # There used to be a dependency on a dummy target, to force a rebuild
226 # of internals every time. however, this triggers
227 # compilation during install, which is a bad thing (tm).
229 $(outdir)/internals.texi: $(LILYPOND_BINARY)
230 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
233 ###############################################
234 # Documentation and translations maintenance #
235 ###############################################
239 all-translations-update: po-update translation-status
240 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
243 CHECK_TRANSLATION_FLAGS = --no-color
248 mkdir -p $(ISOLANG)/$(DIR)
249 cp fr/GNUmakefile $(ISOLANG)
250 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
251 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
252 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
253 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
254 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
255 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
257 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
258 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
259 test -e $(ISOLANG)/$(DIR)/$$i\
260 || test -e $(ISOLANG)/$$i\
261 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
265 # Also for updating/adding missing files
267 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
268 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
269 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
270 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
272 TRANSLATION_DIRS = web texidocs
273 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
275 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
278 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
279 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
282 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
284 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
285 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
286 -I $(top-src-dir)/Documentation/snippets \
287 -I $(top-build-dir)/Documentation/out-www \
288 -I $(top-build-dir)/Documentation/out
290 else # ISOLANG is empty
292 DOCUMENTS_INCLUDES:=-I . \
293 -I $(top-build-dir)/Documentation/out-www \
294 -I $(top-src-dir)/Documentation/snippets \
295 -I $(top-build-dir)/Documentation/snippets/out-www \
296 -I $(top-build-dir)/Documentation/out
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