]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Doc: move latex examples into application.
[lilypond.git] / Documentation / GNUmakefile
1 depth = ..
2
3 ########################
4 #  Documentation build #
5 ########################
6
7 #############
8 ### Variables
9
10 NAME = documentation
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
16
17 ### Extra flags
18
19 LILYPOND_BOOK_FLAGS = --extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
20 TEXI2PDF_FLAGS = \
21   -I $(outdir) \
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
25
26 ### Extra source files
27
28 README_TOP_FILES= DEDICATION THANKS
29
30 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
31 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
32
33 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
34
35 ### Out files
36
37 # Dependencies
38 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
39
40 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
41 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
42
43 # Main manuals
44 TEXINFO_MANUALS = internals\
45  $(TELY_FILES:%.tely=%)\
46  $(TEXI_FILES:%.texi=%)
47 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
48
49 ## CHAIN_RULE hack: keep the following line *before* including
50 # stepmake.make, so the Internals Reference is built before the
51 # Notation Reference, thus providing automatically generated sections
52 # of the NR
53 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
54
55 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
56
57 UNSPLITTED_HTML_MANUALS = changes
58 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
59  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
60
61 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
62  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
63 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
64
65 # Symlinks to refer to external source documents from split and non-split HTML
66 source-links = $(outdir)/source\
67  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
68
69 # Other out files
70
71 HTML_PAGE_NAMES= index translations devel
72 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
73
74 MAIN_INFO_DOC = lilypond-notation
75 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
76  lilypond-essay lilypond-learning lilypond-notation music-glossary lilypond
77 ifeq ($(out),www)
78 INFO_DOCS += lilypond-snippets 
79 endif
80 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
81
82 ifeq ($(out),www)
83 INFO_IMAGES_DIR = lilypond
84 DEST_INFO_IMAGES_SUBDIR = Documentation/
85 endif
86
87 include $(depth)/make/stepmake.make
88
89 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
90
91 ### Web site idiosyncrases
92
93 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
94 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
95
96 ###########
97 ### Targets
98
99 default: local-txt-doc
100
101 local-help: extra-local-help
102
103 extra-local-help:
104         @echo -e "\
105   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
106   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
107   info        update info pages\n\
108   xml         update Docbook xml documentation\n\
109 \n\
110 Translations specific targets (see TRANSLATION for details):\n\
111   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
112   po-update            update and replace PO files for documentation with msgmerged versions\n\
113   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
114   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
115   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
116   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
117                               docs in English (use with caution)\n\
118 \n\
119 LL refers to the desired locale (most often only the ISO 639 language code).\n"
120
121 info: $(INFO_FILES)
122         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
123         @echo export PYTHONPATH=$(PYTHONPATH)
124
125 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
126
127
128 local-clean:
129         rm -f $(INFO_IMAGES_DIR)
130
131 ### Web targets
132
133 ifeq ($(out),www)
134 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
135
136 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
137 endif
138
139
140 #########
141 ### Rules
142
143 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
144         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
145
146 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
147         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
148
149 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
150 txt-to-html:
151         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
152         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
153
154 ifeq ($(out),www)
155 ## Extra images dependencies
156 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
157
158 $(outdir)/pictures:
159         $(MAKE) -C pictures WWW-1
160         ln -sf ../pictures/$(outdir) $@
161
162 $(outdir)/general.texi: $(outdir)/examples
163
164 $(outdir)/examples:
165         $(MAKE) -C general/examples
166         ln -sf ../general/examples/$(outdir) $@
167 endif
168
169 # Ugh, using '%' twice not possible
170 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
171         mkdir -p $(dir $@)
172         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
173
174 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
175         mkdir -p $(dir $@)
176         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
177
178 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
179
180 $(foreach manual, $(MANUAL_SUBDIRS),\
181 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
182
183
184
185 $(outdir)/source:
186         @rm -f $(@)
187         ln -sf $(depth) $(@)
188
189 $(outdir)/%/source:
190         @rm -f $(@)
191         mkdir -p $(dir $@)
192         ln -sf $(depth)/.. $(@)
193
194
195 ## Snippets rules idiosyncrases
196 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
197         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
198
199 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
200
201 $(outdir)/%.bib: %.bib
202         ln -f $< $@
203
204 ## notation.texi deps
205 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
206         $(MAKE) -C $(top-src-dir)/mf
207
208 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
209
210 ## Rules for the automatically generated documentation
211 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
212         cd $(outdir) && $(BISON) -v $<
213         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
214
215 # There used to be a dependency on a dummy target, to force a rebuild
216 # of internals every time.  however, this triggers
217 # compilation during install, which is a bad thing (tm).
218
219 $(outdir)/internals.texi: $(LILYPOND_BINARY)
220         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
221
222
223 ###############################################
224 #  Documentation and translations maintenance #
225 ###############################################
226 po-update:
227         make -C po po-update
228
229 all-translations-update: po-update translation-status
230         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
231
232 ifneq ($(NO_COLOR),)
233 CHECK_TRANSLATION_FLAGS = --no-color
234 endif
235
236 ifneq ($(ISOLANG),)
237 new-lang-dir:
238         mkdir -p $(ISOLANG)/$(DIR)
239         cp fr/GNUmakefile $(ISOLANG)
240         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
241         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
242         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
243         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
244         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
245             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
246         done
247         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
248         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
249             test -e $(ISOLANG)/$(DIR)/$$i\
250                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
251         done
252
253 new-lang:
254 # Also for updating/adding missing files
255         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
256         $(foreach i, $(EXTRA_TRANSLATION_FILES), \
257             (test -e $(ISOLANG)/$(i) \
258                 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
259         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
260         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
261         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
262
263 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
264 TRANSLATION_DIRS = application general learning notation texidocs
265 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
266 EXTRA_TRANSLATION_FILES =\
267  dedication.itely\
268  index.html.in\
269  common-macros.itexi\
270  macros.itexi\
271  translations.html.in\
272  translations.template.html.in\
273 #
274
275
276 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
277 skeleton-update:
278         mkdir -p $(ISOLANG)
279         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
280         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
281
282 snippet-update:
283         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
284
285 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
286 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
287 -I $(top-src-dir)/Documentation/snippets \
288 -I $(top-build-dir)/Documentation/out-www
289
290 else # ISOLANG is empty
291
292 DOCUMENTS_INCLUDES:=-I . \
293 -I $(top-build-dir)/Documentation/out-www \
294 -I $(top-src-dir)/Documentation/snippets \
295 -I $(top-build-dir)/Documentation/snippets/out-www
296
297 endif # ISOLANG
298
299 check-xrefs:
300         $(auxscript-dir)/check_texi_refs.py --batch \
301         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
302
303 fix-xrefs:
304         $(auxscript-dir)/check_texi_refs.py --auto-fix \
305         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
306
307 check-translation:
308         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
309
310 update-translation:
311         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312
313 translation-status:
314         make -C po out=www messages
315         $(auxscript-dir)/translations-status.py
316
317 .SECONDARY: