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)
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-notation
80 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
81 lilypond-essay lilypond-learning lilypond-notation music-glossary \
82 lilypond-general 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 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
100 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
102 #$(outdir)/general/index.html:
103 # $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output $(outdir)/ $(outdir)/general.texi
108 default: local-txt-doc
110 local-help: extra-local-help
114 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
115 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
116 info update info pages\n\
117 xml update Docbook xml documentation\n\
119 Translations specific targets (see TRANSLATION for details):\n\
120 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
121 (if \'LL exists, update missing file)\n\
122 po-update update and replace PO files for documentation with msgmerged versions\n\
123 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
124 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
125 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
126 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
127 docs in English (use with caution)\n\
129 LL refers to the desired locale (most often only the ISO 639 language code).\n"
132 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
133 @echo export PYTHONPATH=$(PYTHONPATH)
135 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
139 rm -f $(INFO_IMAGES_DIR)
144 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
146 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
153 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
154 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
156 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
158 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
159 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
162 ## Extra images dependencies
163 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
166 $(MAKE) -C pictures WWW-1
167 ln -sf ../pictures/$(outdir) $@
169 $(outdir)/general.texi: $(outdir)/examples
172 $(MAKE) -C general/examples
173 ln -sf ../general/examples/$(outdir) $@
176 # Ugh, using '%' twice not possible
177 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
179 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
181 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
183 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
185 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
187 $(foreach manual, $(MANUAL_SUBDIRS),\
188 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
199 ln -sf $(depth)/.. $(@)
202 ## Snippets rules idiosyncrases
203 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
204 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
206 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
208 $(outdir)/%.bib: %.bib
211 ## notation.texi deps
212 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
213 $(MAKE) -C $(top-src-dir)/mf
215 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
217 ## Rules for the automatically generated documentation
218 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
219 cd $(outdir) && $(BISON) -v $<
220 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
222 # There used to be a dependency on a dummy target, to force a rebuild
223 # of internals every time. however, this triggers
224 # compilation during install, which is a bad thing (tm).
226 $(outdir)/internals.texi: $(LILYPOND_BINARY)
227 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
230 ###############################################
231 # Documentation and translations maintenance #
232 ###############################################
236 all-translations-update: po-update translation-status
237 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
240 CHECK_TRANSLATION_FLAGS = --no-color
245 mkdir -p $(ISOLANG)/$(DIR)
246 cp fr/GNUmakefile $(ISOLANG)
247 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
248 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
249 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
250 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
251 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
252 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
254 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
255 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
256 test -e $(ISOLANG)/$(DIR)/$$i\
257 || test -e $(ISOLANG)/$$i\
258 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
262 # Also for updating/adding missing files
264 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
265 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
266 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
267 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
269 TRANSLATION_DIRS = general texidocs
270 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
272 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
275 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
276 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
279 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
281 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
282 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
283 -I $(top-src-dir)/Documentation/snippets \
284 -I $(top-build-dir)/Documentation/out-www
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
296 $(auxscript-dir)/check_texi_refs.py --batch \
297 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
300 $(auxscript-dir)/check_texi_refs.py --auto-fix \
301 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
304 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
307 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
310 make -C po out=www messages
311 $(auxscript-dir)/translations-status.py