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-notation
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
99 $(outdir)/web/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
100 $(outdir)/web/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
102 #$(outdir)/web/index.html:
103 # $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) --output $(outdir)/ $(outdir)/web.texi
106 ### bad hack for badly-integrated roadmap.
108 cp $(top-src-dir)/ROADMAP $(outdir)
109 $(outdir)/contributor.texi: $(outdir)/ROADMAP
115 default: local-txt-doc
117 local-help: extra-local-help
121 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
122 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
123 info update info pages\n\
124 xml update Docbook xml documentation\n\
126 Translations specific targets (see TRANSLATION for details):\n\
127 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
128 (if \'LL exists, update missing file)\n\
129 po-update update and replace PO files for documentation with msgmerged versions\n\
130 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
131 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
132 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
133 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
134 docs in English (use with caution)\n\
136 LL refers to the desired locale (most often only the ISO 639 language code).\n"
139 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
140 @echo export PYTHONPATH=$(PYTHONPATH)
142 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
146 rm -f $(INFO_IMAGES_DIR)
151 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
153 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
160 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
161 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
163 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
165 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
166 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
169 ## Extra images dependencies
170 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
173 $(MAKE) -C pictures WWW-1
174 ln -sf ../pictures/$(outdir) $@
176 $(outdir)/web.texi: $(outdir)/examples
179 $(MAKE) -C web/examples
180 ln -sf ../web/examples/$(outdir) $@
183 # Ugh, using '%' twice not possible
184 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
186 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
188 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
190 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
192 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
194 $(foreach manual, $(MANUAL_SUBDIRS),\
195 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
206 ln -sf $(depth)/.. $(@)
209 ## Snippets rules idiosyncrases
210 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
211 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
213 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
215 $(outdir)/%.bib: %.bib
218 ## notation.texi deps
219 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
220 $(MAKE) -C $(top-src-dir)/mf
222 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
224 ## Rules for the automatically generated documentation
225 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
226 cd $(outdir) && $(BISON) -v $<
227 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
229 # There used to be a dependency on a dummy target, to force a rebuild
230 # of internals every time. however, this triggers
231 # compilation during install, which is a bad thing (tm).
233 $(outdir)/internals.texi: $(LILYPOND_BINARY)
234 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
237 ###############################################
238 # Documentation and translations maintenance #
239 ###############################################
243 all-translations-update: po-update translation-status
244 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
247 CHECK_TRANSLATION_FLAGS = --no-color
252 mkdir -p $(ISOLANG)/$(DIR)
253 cp fr/GNUmakefile $(ISOLANG)
254 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
255 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
256 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
257 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
258 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
259 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
261 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
262 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
263 test -e $(ISOLANG)/$(DIR)/$$i\
264 || test -e $(ISOLANG)/$$i\
265 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
269 # Also for updating/adding missing files
271 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
272 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
273 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
274 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
276 TRANSLATION_DIRS = web texidocs
277 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
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