3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = application contributor essay general learning notation
13 SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css $(LANGS)
14 STEPMAKE_TEMPLATES = documentation texinfo tex omf
15 LOCALSTEPMAKE_TEMPLATES = lilypond ly
19 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
22 -I $(top-build-dir)/Documentation/$(outconfbase)
23 $(outdir)/snippets-big-page.html: TEXI2HTML_FLAGS += -D short_toc
24 $(outdir)/snippets/index..html: TEXI2HTML_FLAGS += -D short_toc
26 ### Extra source files
28 README_TOP_FILES= DEDICATION THANKS
29 LATEX_FILES =$(call src-wildcard,*.latex)
31 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
32 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
34 EXTRA_DIST_FILES = $(call src-wildcard,*.init) $(LATEX_FILES)
39 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
41 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
42 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
45 TEXINFO_MANUALS = internals\
46 $(TELY_FILES:%.tely=%)\
47 $(TEXI_FILES:%.texi=%)
48 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
50 ## CHAIN_RULE hack: keep the following line *before* including
51 # stepmake.make, so the Internals Reference is built before the
52 # Notation Reference, thus providing automatically generated sections
54 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
56 PDF_FILES = $(subst $(outdir)/general.pdf,,$(TEXINFO_MANUALS:%=$(outdir)/%.pdf))
58 UNSPLITTED_HTML_MANUALS = changes
59 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
60 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
62 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
63 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
64 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
66 # Symlinks to refer to external source documents from split and non-split HTML
67 source-links = $(outdir)/source\
68 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
72 HTML_PAGE_NAMES= index translations devel
73 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
75 MAIN_INFO_DOC = lilypond-notation
76 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
77 lilypond-essay lilypond-learning lilypond-notation music-glossary lilypond
79 INFO_DOCS += lilypond-snippets
81 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
84 INFO_IMAGES_DIR = lilypond
85 DEST_INFO_IMAGES_SUBDIR = Documentation/
88 include $(depth)/make/stepmake.make
90 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
92 ### Web site idiosyncrases
94 OUT_HTML_FILES := $(subst $(outdir)/general-big-page.html,,$(OUT_HTML_FILES))
96 $(outdir)/general/index.html:\
97 TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
98 $(outdir)/general/index.html:\
99 TEXI2HTML_SPLIT := $(WEB_TEXI2HTML_SPLIT)
104 default: local-txt-doc
106 local-help: extra-local-help
110 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
111 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
112 info update info pages\n\
113 xml update Docbook xml documentation\n\
115 Translations specific targets (see TRANSLATION for details):\n\
116 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
117 po-update update and replace PO files for documentation with msgmerged versions\n\
118 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
119 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
120 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
121 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
122 docs in English (use with caution)\n\
124 LL refers to the desired locale (most often only the ISO 639 language code).\n"
127 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
128 @echo export PYTHONPATH=$(PYTHONPATH)
130 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
134 rm -f $(INFO_IMAGES_DIR)
139 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
141 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
148 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
149 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
151 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
152 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
154 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
156 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
157 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
160 ## Extra images dependencies
161 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
164 $(MAKE) -C pictures WWW-1
165 ln -sf ../pictures/$(outdir) $@
168 # Ugh, using '%' twice not possible
169 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
171 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
173 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
175 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
177 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
179 $(foreach manual, $(MANUAL_SUBDIRS),\
180 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
191 ln -sf $(depth)/.. $(@)
194 ## Snippets rules idiosyncrases
195 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
196 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
198 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
200 $(outdir)/%.bib: %.bib
203 ## notation.texi deps
204 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
205 $(MAKE) -C $(top-src-dir)/mf
207 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
209 ## Rules for the automatically generated documentation
210 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
211 cd $(outdir) && $(BISON) -v $<
212 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
214 # There used to be a dependency on a dummy target, to force a rebuild
215 # of internals every time. however, this triggers
216 # compilation during install, which is a bad thing (tm).
218 $(outdir)/internals.texi: $(LILYPOND_BINARY)
219 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
222 ###############################################
223 # Documentation and translations maintenance #
224 ###############################################
228 all-translations-update: po-update translation-status
229 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
232 CHECK_TRANSLATION_FLAGS = --no-color
237 mkdir -p $(ISOLANG)/$(DIR)
238 cp fr/GNUmakefile $(ISOLANG)
239 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
240 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
242 # Law of conservation of badness in action :-)
243 cd $(ISOLANG)/$(DIR) && ../../$(auxscript-dir)/texi-langutils.py -l $(ISOLANG) -o ../../$(outdir)/doc.pot --skeleton --gettext $$(ls -1 ../../$(DIR).tely ../../$(DIR).texi)
244 # gets written to wrong directory; texi-langutils.py outdir/output is a mess
245 mv $(ISOLANG)/$(DIR)/$(DIR).* $(ISOLANG) || :
247 rm -f $(ISOLANG)/node_list $(ISOLANG)/*/node_list
249 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
250 mv $$(ls $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi) $(ISOLANG) || :
251 mv $$(ls $(outdir)/*.*tely $(outdir)/*.*texi) $(ISOLANG)/$(DIR) ||:
255 # FIXME: allow this target to update a language too
256 # do not blindly overwrite, use test -e and only create missing files
257 # for inspiration, see [old] lilypond/web GNUmakefile's target new:
258 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
259 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
262 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
263 cd fr && cp $(EXTRA_TRANSLATION_FILES) ../$(ISOLANG)
264 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
265 cp po/lilypond-doc.pot po/$(ISOLANG).po
266 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
268 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
269 TRANSLATION_DIRS = application general learning notation texidocs
270 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
271 EXTRA_TRANSLATION_FILES =\
276 translations.html.in\
277 translations.template.html.in\
281 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
284 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
285 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
288 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
290 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
291 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
292 -I $(top-src-dir)/Documentation/snippets \
293 -I $(top-build-dir)/Documentation/out-www
295 else # ISOLANG is empty
297 DOCUMENTS_INCLUDES:=-I . \
298 -I $(top-build-dir)/Documentation/out-www \
299 -I $(top-src-dir)/Documentation/snippets \
300 -I $(top-build-dir)/Documentation/snippets/out-www
305 $(auxscript-dir)/check_texi_refs.py --batch \
306 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
309 $(auxscript-dir)/check_texi_refs.py --auto-fix \
310 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
313 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
316 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
319 make -C po out=www messages
320 $(auxscript-dir)/translations-status.py