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 topdocs $(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 = $(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 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
95 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
100 default: local-txt-doc
102 local-help: extra-local-help
106 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
107 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
108 info update info pages\n\
109 xml update Docbook xml documentation\n\
111 Translations specific targets (see TRANSLATION for details):\n\
112 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
113 po-update update and replace PO files for documentation with msgmerged versions\n\
114 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
115 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
116 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
117 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
118 docs in English (use with caution)\n\
120 LL refers to the desired locale (most often only the ISO 639 language code).\n"
123 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
124 @echo export PYTHONPATH=$(PYTHONPATH)
126 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
130 rm -f $(INFO_IMAGES_DIR)
135 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
137 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
144 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
145 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
147 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
148 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
150 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
152 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
153 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
156 ## Extra images dependencies
157 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
160 $(MAKE) -C pictures WWW-1
161 ln -sf ../pictures/$(outdir) $@
163 $(outdir)/general.texi: $(outdir)/examples
166 $(MAKE) -C general/examples
167 # FIXME: who is replacing src="examples --> src="../examples" ?
168 # [ugh, why do most scripts not even say they run anymore?]
169 ln -sf general/examples $@
172 # Ugh, using '%' twice not possible
173 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
175 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
177 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
179 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
181 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
183 $(foreach manual, $(MANUAL_SUBDIRS),\
184 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
195 ln -sf $(depth)/.. $(@)
198 ## Snippets rules idiosyncrases
199 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
200 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
202 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
204 $(outdir)/%.bib: %.bib
207 ## notation.texi deps
208 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
209 $(MAKE) -C $(top-src-dir)/mf
211 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
213 ## Rules for the automatically generated documentation
214 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
215 cd $(outdir) && $(BISON) -v $<
216 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
218 # There used to be a dependency on a dummy target, to force a rebuild
219 # of internals every time. however, this triggers
220 # compilation during install, which is a bad thing (tm).
222 $(outdir)/internals.texi: $(LILYPOND_BINARY)
223 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
226 ###############################################
227 # Documentation and translations maintenance #
228 ###############################################
232 all-translations-update: po-update translation-status
233 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
236 CHECK_TRANSLATION_FLAGS = --no-color
241 mkdir -p $(ISOLANG)/$(DIR)
242 cp fr/GNUmakefile $(ISOLANG)
243 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
244 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
245 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
246 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
247 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
248 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
250 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
251 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
252 test -e $(ISOLANG)/$(DIR)/$$i\
253 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
257 # Also for updating/adding missing files
258 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
259 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
260 (test -e $(ISOLANG)/$(i) \
261 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
262 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
263 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
264 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
266 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
267 TRANSLATION_DIRS = application general learning notation texidocs
268 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
269 EXTRA_TRANSLATION_FILES =\
274 translations.html.in\
275 translations.template.html.in\
279 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
282 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
283 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
286 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
288 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
289 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
290 -I $(top-src-dir)/Documentation/snippets \
291 -I $(top-build-dir)/Documentation/out-www
293 else # ISOLANG is empty
295 DOCUMENTS_INCLUDES:=-I . \
296 -I $(top-build-dir)/Documentation/out-www \
297 -I $(top-src-dir)/Documentation/snippets \
298 -I $(top-build-dir)/Documentation/snippets/out-www
303 $(auxscript-dir)/check_texi_refs.py --batch \
304 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
307 $(auxscript-dir)/check_texi_refs.py --auto-fix \
308 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
311 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
317 make -C po out=www messages
318 $(auxscript-dir)/translations-status.py