3 ########################
4 # Documentation build #
5 ########################
11 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
12 MANUALS_SUBDIRS = application automated-engraving 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)/essay/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT) -D=shallow_toc
97 $(outdir)/essay/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
99 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
100 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
105 default: local-txt-doc
107 local-help: extra-local-help
111 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
112 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
113 info update info pages\n\
114 xml update Docbook xml documentation\n\
116 Translations specific targets (see TRANSLATION for details):\n\
117 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
118 po-update update and replace PO files for documentation with msgmerged versions\n\
119 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
120 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
121 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
122 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
123 docs in English (use with caution)\n\
125 LL refers to the desired locale (most often only the ISO 639 language code).\n"
128 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
129 @echo export PYTHONPATH=$(PYTHONPATH)
131 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
135 rm -f $(INFO_IMAGES_DIR)
140 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
142 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
149 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
150 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
152 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
153 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
155 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
157 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
158 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
161 ## Extra images dependencies
162 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
165 $(MAKE) -C pictures WWW-1
166 ln -sf ../pictures/$(outdir) $@
168 $(outdir)/general.texi: $(outdir)/examples
171 $(MAKE) -C general/examples
172 # FIXME: who is replacing src="examples --> src="../examples" ?
173 # [ugh, why do most scripts not even say they run anymore?]
174 ln -sf general/examples $@
177 # Ugh, using '%' twice not possible
178 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
180 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
182 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
184 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
186 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
188 $(foreach manual, $(MANUAL_SUBDIRS),\
189 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
200 ln -sf $(depth)/.. $(@)
203 ## Snippets rules idiosyncrases
204 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
205 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
207 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
209 $(outdir)/%.bib: %.bib
212 ## notation.texi deps
213 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
214 $(MAKE) -C $(top-src-dir)/mf
216 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
218 ## Rules for the automatically generated documentation
219 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
220 cd $(outdir) && $(BISON) -v $<
221 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
223 # There used to be a dependency on a dummy target, to force a rebuild
224 # of internals every time. however, this triggers
225 # compilation during install, which is a bad thing (tm).
227 $(outdir)/internals.texi: $(LILYPOND_BINARY)
228 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
231 ###############################################
232 # Documentation and translations maintenance #
233 ###############################################
237 all-translations-update: po-update translation-status
238 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
241 CHECK_TRANSLATION_FLAGS = --no-color
246 mkdir -p $(ISOLANG)/$(DIR)
247 cp fr/GNUmakefile $(ISOLANG)
248 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
249 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
250 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
251 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
252 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
253 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
255 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
256 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
257 test -e $(ISOLANG)/$(DIR)/$$i\
258 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
262 # Also for updating/adding missing files
263 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
264 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
265 (test -e $(ISOLANG)/$(i) \
266 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
267 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
268 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
269 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
271 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
272 TRANSLATION_DIRS = application general learning notation texidocs
273 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
274 EXTRA_TRANSLATION_FILES =\
279 translations.html.in\
280 translations.template.html.in\
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
298 else # ISOLANG is empty
300 DOCUMENTS_INCLUDES:=-I . \
301 -I $(top-build-dir)/Documentation/out-www \
302 -I $(top-src-dir)/Documentation/snippets \
303 -I $(top-build-dir)/Documentation/snippets/out-www
308 $(auxscript-dir)/check_texi_refs.py --batch \
309 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
312 $(auxscript-dir)/check_texi_refs.py --auto-fix \
313 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
316 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
319 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
322 make -C po out=www messages
323 $(auxscript-dir)/translations-status.py