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
98 $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
101 website: $(outdir)/web.texi $(XREF_MAPS_DIR)/web.xref-map $(outdir)/version.itexi $(outdir)/pictures/
102 mkdir -p $(outdir)/website/
103 $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) -D web_version \
104 --output=$(outdir)/website/ $(outdir)/web.texi
105 cp $(top-src-dir)/Documentation/css/*.css $(outdir)/website/
106 cd $(outdir)/website && ln -sf ../../pictures/$(outdir) pictures
107 cd $(outdir)/website && ln -sf ../../web/examples/$(outdir) examples
111 ### bad hack for badly-integrated roadmap.
113 cp $(top-src-dir)/ROADMAP $(outdir)
114 $(outdir)/contributor.texi: $(outdir)/ROADMAP
120 default: local-txt-doc
122 local-help: extra-local-help
126 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
127 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
128 info update info pages\n\
129 xml update Docbook xml documentation\n\
131 Translations specific targets (see TRANSLATION for details):\n\
132 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
133 (if \'LL exists, update missing file)\n\
134 po-update update and replace PO files for documentation with msgmerged versions\n\
135 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
136 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
137 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
138 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
139 docs in English (use with caution)\n\
141 LL refers to the desired locale (most often only the ISO 639 language code).\n"
144 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
145 @echo export PYTHONPATH=$(PYTHONPATH)
147 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
151 rm -f $(INFO_IMAGES_DIR)
156 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
158 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
165 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
166 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
168 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
170 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
171 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
174 ## Extra images dependencies
175 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
178 $(MAKE) -C pictures WWW-1
179 ln -sf ../pictures/$(outdir) $@
181 $(outdir)/web.texi: $(outdir)/examples
184 $(MAKE) -C web/examples
185 ln -sf ../web/examples/$(outdir) $@
188 # Ugh, using '%' twice not possible
189 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
191 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
193 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
195 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
197 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
199 $(foreach manual, $(MANUAL_SUBDIRS),\
200 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
211 ln -sf $(depth)/.. $(@)
214 ## Snippets rules idiosyncrases
215 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
216 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
218 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
220 $(outdir)/%.bib: %.bib
223 ## notation.texi deps
224 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
225 $(MAKE) -C $(top-src-dir)/mf
227 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
229 ## Rules for the automatically generated documentation
230 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
231 cd $(outdir) && $(BISON) -v $<
232 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
234 # There used to be a dependency on a dummy target, to force a rebuild
235 # of internals every time. however, this triggers
236 # compilation during install, which is a bad thing (tm).
238 $(outdir)/internals.texi: $(LILYPOND_BINARY)
239 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
242 ###############################################
243 # Documentation and translations maintenance #
244 ###############################################
248 all-translations-update: po-update translation-status
249 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
252 CHECK_TRANSLATION_FLAGS = --no-color
257 mkdir -p $(ISOLANG)/$(DIR)
258 cp fr/GNUmakefile $(ISOLANG)
259 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
260 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
261 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
262 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
263 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
264 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
266 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
267 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
268 test -e $(ISOLANG)/$(DIR)/$$i\
269 || test -e $(ISOLANG)/$$i\
270 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
274 # Also for updating/adding missing files
276 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
277 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
278 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
279 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
281 TRANSLATION_DIRS = web texidocs
282 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
284 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
287 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
288 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
291 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
293 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
294 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
295 -I $(top-src-dir)/Documentation/snippets \
296 -I $(top-build-dir)/Documentation/out-www \
297 -I $(top-build-dir)/Documentation/out
299 else # ISOLANG is empty
301 DOCUMENTS_INCLUDES:=-I . \
302 -I $(top-build-dir)/Documentation/out-www \
303 -I $(top-src-dir)/Documentation/snippets \
304 -I $(top-build-dir)/Documentation/snippets/out-www \
305 -I $(top-build-dir)/Documentation/out
310 $(auxscript-dir)/check_texi_refs.py --batch \
311 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
314 $(auxscript-dir)/check_texi_refs.py --auto-fix \
315 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
318 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
321 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
324 make -C po out=www messages
325 $(auxscript-dir)/translations-status.py