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-web
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
98 $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
101 website: $(outdir)/web.texi
102 mkdir -p $(outdir)/upload/
103 $(TEXI2HTML) $(TEXI2HTML_SPLIT) $(TEXI2HTML_FLAGS) -D web_version \
104 --output=$(outdir)/upload/ $(outdir)/web.texi
105 cp $(top-src-dir)/Documentation/css/*.css $(outdir)/upload/
106 #cd out-website && ln -sf ../$(outdir)/pictures pictures
110 ### bad hack for badly-integrated roadmap.
112 cp $(top-src-dir)/ROADMAP $(outdir)
113 $(outdir)/contributor.texi: $(outdir)/ROADMAP
119 default: local-txt-doc
121 local-help: extra-local-help
125 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
126 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
127 info update info pages\n\
128 xml update Docbook xml documentation\n\
130 Translations specific targets (see TRANSLATION for details):\n\
131 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
132 (if \'LL exists, update missing file)\n\
133 po-update update and replace PO files for documentation with msgmerged versions\n\
134 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
135 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
136 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
137 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
138 docs in English (use with caution)\n\
140 LL refers to the desired locale (most often only the ISO 639 language code).\n"
143 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
144 @echo export PYTHONPATH=$(PYTHONPATH)
146 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
150 rm -f $(INFO_IMAGES_DIR)
155 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
157 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
164 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
165 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
167 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
169 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
170 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
173 ## Extra images dependencies
174 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
177 $(MAKE) -C pictures WWW-1
178 ln -sf ../pictures/$(outdir) $@
180 $(outdir)/web.texi: $(outdir)/examples
183 $(MAKE) -C web/examples
184 ln -sf ../web/examples/$(outdir) $@
187 # Ugh, using '%' twice not possible
188 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
190 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
192 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
194 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
196 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
198 $(foreach manual, $(MANUAL_SUBDIRS),\
199 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
210 ln -sf $(depth)/.. $(@)
213 ## Snippets rules idiosyncrases
214 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
215 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
217 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
219 $(outdir)/%.bib: %.bib
222 ## notation.texi deps
223 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
224 $(MAKE) -C $(top-src-dir)/mf
226 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
228 ## Rules for the automatically generated documentation
229 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
230 cd $(outdir) && $(BISON) -v $<
231 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
233 # There used to be a dependency on a dummy target, to force a rebuild
234 # of internals every time. however, this triggers
235 # compilation during install, which is a bad thing (tm).
237 $(outdir)/internals.texi: $(LILYPOND_BINARY)
238 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
241 ###############################################
242 # Documentation and translations maintenance #
243 ###############################################
247 all-translations-update: po-update translation-status
248 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
251 CHECK_TRANSLATION_FLAGS = --no-color
256 mkdir -p $(ISOLANG)/$(DIR)
257 cp fr/GNUmakefile $(ISOLANG)
258 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
259 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
260 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
261 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
262 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
263 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
265 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
266 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
267 test -e $(ISOLANG)/$(DIR)/$$i\
268 || test -e $(ISOLANG)/$$i\
269 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
273 # Also for updating/adding missing files
275 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
276 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
277 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
278 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
280 TRANSLATION_DIRS = web texidocs
281 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
283 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
286 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
287 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
290 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
292 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
293 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
294 -I $(top-src-dir)/Documentation/snippets \
295 -I $(top-build-dir)/Documentation/out-www \
296 -I $(top-build-dir)/Documentation/out
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 \
304 -I $(top-build-dir)/Documentation/out
309 $(auxscript-dir)/check_texi_refs.py --batch \
310 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
313 $(auxscript-dir)/check_texi_refs.py --auto-fix \
314 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
317 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
320 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
323 make -C po out=www messages
324 $(auxscript-dir)/translations-status.py