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) \
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)
59 UNSPLITTED_HTML_MANUALS = changes
60 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
61 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
63 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
64 $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
65 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
67 # Symlinks to refer to external source documents from split and non-split HTML
68 source-links = $(outdir)/source\
69 $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
73 HTML_PAGE_NAMES= index translations devel
74 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
76 MAIN_INFO_DOC = lilypond-notation
77 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
78 lilypond-essay lilypond-learning lilypond-notation music-glossary lilypond
80 INFO_DOCS += lilypond-snippets
82 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
85 INFO_IMAGES_DIR = lilypond
86 DEST_INFO_IMAGES_SUBDIR = Documentation/
89 include $(depth)/make/stepmake.make
91 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
93 ### Web site idiosyncrases
95 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
96 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
101 default: local-txt-doc
103 local-help: extra-local-help
107 check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
108 fix-xrefs [ISOLANG=LL] interactively fix Texinfo cross-references (use with caution)\n\
109 info update info pages\n\
110 xml update Docbook xml documentation\n\
112 Translations specific targets (see TRANSLATION for details):\n\
113 new-lang ISOLANG=LL create and initialize subdirectory \'LL' for language \'LL\n\
114 po-update update and replace PO files for documentation with msgmerged versions\n\
115 check-translation ISOLANG=LL show changes in English docs since last translation update\n\
116 update-translation ISOLANG=LL call $$$$EDITOR to help updating the translation\n\
117 skeleton-update ISOLANG=LL update Texinfo skeleton files\n\
118 snippet-update ISOLANG=LL update ly snippets in Texinfo translation according to\n\
119 docs in English (use with caution)\n\
121 LL refers to the desired locale (most often only the ISO 639 language code).\n"
124 @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
125 @echo export PYTHONPATH=$(PYTHONPATH)
127 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
131 rm -f $(INFO_IMAGES_DIR)
136 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
138 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
145 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
146 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
148 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
149 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
151 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
153 $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
154 $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
157 ## Extra images dependencies
158 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
161 $(MAKE) -C pictures WWW-1
162 ln -sf ../pictures/$(outdir) $@
164 $(outdir)/general.texi: $(outdir)/examples
167 $(MAKE) -C general/examples
168 # FIXME: who is replacing src="examples --> src="../examples" ?
169 # [ugh, why do most scripts not even say they run anymore?]
170 ln -sf general/examples $@
173 # Ugh, using '%' twice not possible
174 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
176 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
178 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
180 $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
182 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
184 $(foreach manual, $(MANUAL_SUBDIRS),\
185 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
196 ln -sf $(depth)/.. $(@)
199 ## Snippets rules idiosyncrases
200 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
201 xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
203 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
205 $(outdir)/%.bib: %.bib
208 ## notation.texi deps
209 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
210 $(MAKE) -C $(top-src-dir)/mf
212 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
214 ## Rules for the automatically generated documentation
215 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
216 cd $(outdir) && $(BISON) -v $<
217 $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
219 # There used to be a dependency on a dummy target, to force a rebuild
220 # of internals every time. however, this triggers
221 # compilation during install, which is a bad thing (tm).
223 $(outdir)/internals.texi: $(LILYPOND_BINARY)
224 cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
227 ###############################################
228 # Documentation and translations maintenance #
229 ###############################################
233 all-translations-update: po-update translation-status
234 $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
237 CHECK_TRANSLATION_FLAGS = --no-color
242 mkdir -p $(ISOLANG)/$(DIR)
243 cp fr/GNUmakefile $(ISOLANG)
244 cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
245 sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
246 rm -f $(outdir)/*.*tely $(outdir)/*.*texi
247 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
248 for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
249 test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
251 rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
252 for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
253 test -e $(ISOLANG)/$(DIR)/$$i\
254 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
258 # Also for updating/adding missing files
259 $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
260 $(foreach i, $(EXTRA_TRANSLATION_FILES), \
261 (test -e $(ISOLANG)/$(i) \
262 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
263 msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
264 test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
265 @echo "*** Please add a language definition for $(ISOLANG) in python/langdefs.py ***"
267 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
268 TRANSLATION_DIRS = application general learning notation texidocs
269 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
270 EXTRA_TRANSLATION_FILES =\
275 translations.html.in\
276 translations.template.html.in\
280 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
283 $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
284 $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
287 $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
289 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
290 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
291 -I $(top-src-dir)/Documentation/snippets \
292 -I $(top-build-dir)/Documentation/out-www
294 else # ISOLANG is empty
296 DOCUMENTS_INCLUDES:=-I . \
297 -I $(top-build-dir)/Documentation/out-www \
298 -I $(top-src-dir)/Documentation/snippets \
299 -I $(top-build-dir)/Documentation/snippets/out-www
304 $(auxscript-dir)/check_texi_refs.py --batch \
305 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
308 $(auxscript-dir)/check_texi_refs.py --auto-fix \
309 $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
312 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
315 ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
318 make -C po out=www messages
319 $(auxscript-dir)/translations-status.py