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 ## Different init file and CSS
97 $(outdir)/general/index.html: \
98 TEXI2HTML_INIT = --init-file=$(top-src-dir)/Documentation/web-texi2html.init
103 default: local-txt-doc
105 local-help: extra-local-help
109 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
110 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
111 info update info pages\n\
112 xml update Docbook xml documentation\n\
114 Translations specific targets (see TRANSLATION for details):\n\
115 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
116 po-update update and replace PO files for documentation with msgmerged versions\n\
117 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
118 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
119 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
120 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
121 docs in English (use with caution)\n\
123 LL refers to the desired locale (most often only the ISO 639 language code).\n"
126 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
127 @echo export PYTHONPATH=$(PYTHONPATH)
129 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
133 rm -f $(INFO_IMAGES_DIR)
138 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
140 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
147 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
149 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
150 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
153 ## Extra images dependencies
154 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
157 $(MAKE) -C pictures WWW-1
158 ln -sf ../pictures/$(outdir) $@
161 # Ugh, using '%' twice not possible
162 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
164 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
166 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
168 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
170 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
172 $(foreach manual, $(MANUAL_SUBDIRS),\
173 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
184 ln -sf $(depth)/.. $(@)
187 ## Snippets rules idiosyncrases
188 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
189 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
191 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
193 $(outdir)/%.bib: %.bib
196 ## notation.texi deps
197 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
198 $(MAKE) -C $(top-src-dir)/mf
200 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
202 ## Rules for the automatically generated documentation
203 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
204 cd $(outdir) && $(BISON) -v $<
205 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
207 # There used to be a dependency on a dummy target, to force a rebuild
208 # of internals every time. however, this triggers
209 # compilation during install, which is a bad thing (tm).
211 $(outdir)/internals.texi: $(LILYPOND_BINARY)
212 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
215 ###############################################
216 # Documentation and translations maintenance #
217 ###############################################
221 all-translations-update: po-update translation-status
222 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
225 CHECK_TRANSLATION_FLAGS = --no-color
230 @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
231 then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
234 mkdir -p $(ISOLANG)/learning
235 cp fr/GNUmakefile $(ISOLANG)
236 cp fr/learning/GNUmakefile $(ISOLANG)/learning
237 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
238 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
239 mv $(outdir)/*.*tely $(ISOLANG)/learning
240 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
241 cp po/lilypond-doc.pot po/$(ISOLANG).po
242 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
244 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
245 $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
246 $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
248 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
250 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
251 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
254 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
256 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
257 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
258 -I $(top-src-dir)/Documentation/snippets \
259 -I $(top-build-dir)/Documentation/out-www
261 else # ISOLANG is empty
263 DOCUMENTS_INCLUDES:=-I . \
264 -I $(top-build-dir)/Documentation/out-www \
265 -I $(top-src-dir)/Documentation/snippets \
266 -I $(top-build-dir)/Documentation/snippets/out-www
271 $(auxscript-dir)/check_texi_refs.py --batch \
272 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
275 $(auxscript-dir)/check_texi_refs.py --auto-fix \
276 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
279 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
282 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
285 make -C po out=www messages
286 $(auxscript-dir)/translations-status.py