]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
65ecd60a29e52b6b71a6d0d29e17df3c51c7afa1
[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 contributor essay learning notation
13 SUBDIRS = $(MANUALS_SUBDIRS) snippets bibliography pictures misc po $(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 LATEX_FILES =$(call src-wildcard,*.latex)
30 IMAGES=$(call src-wildcard,*.png)
31 EPS_ILLUSTRATIONS=context-example.eps
32
33 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
34 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
35
36 ### Out files
37
38 # Dependencies
39 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
40
41 OUT_PDF_IMAGES = $(IMAGES:%.png=$(outdir)/%.pdf)
42 OUT_PDF_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf)
43 OUT_PNG_IMAGES = $(OUT_PDF_IMAGES:%.pdf=%.png)
44
45 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
46 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
47
48 # Main manuals
49 TEXINFO_MANUALS = internals\
50  $(TELY_FILES:%.tely=%)\
51  $(TEXI_FILES:%.texi=%)
52
53 ## CHAIN_RULE hack: keep the following line *before* including
54 # stepmake.make, so the Internals Reference is built before the
55 # Notation Reference, thus providing automatically generated sections
56 # of the NR
57 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
58
59 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
60
61 UNSPLITTED_HTML_MANUALS = changes
62 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
63  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
64
65 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
66  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
67 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
68
69 # Symlinks to refer to external source documents from split and non-split HTML
70 source-links = $(outdir)/source\
71  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
72
73 # Other out files
74
75 HTML_PAGE_NAMES= index translations devel
76 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
77 OUT_CSS_FILES = $(CSS_FILES:%.css=$(outdir)/%.css)
78
79 MAIN_INFO_DOC = lilypond-notation
80 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
81  lilypond-essay lilypond-learning lilypond-notation music-glossary
82 ifeq ($(out),www)
83 INFO_DOCS += lilypond-snippets 
84 endif
85 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
86
87 ifeq ($(out),www)
88 INFO_IMAGES_DIR = lilypond
89 DEST_INFO_IMAGES_SUBDIR = Documentation/
90 endif
91
92 include $(depth)/make/stepmake.make
93
94 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
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: $(TEXINFO_MANUALS:%=$(outdir)/%.texi) $(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 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
144 txt-to-html:
145         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
146         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
147
148
149 $(outdir)/%.css: %.css
150         ln -f $< $@
151
152 ## Extra images dependencies
153 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
154 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
155 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
156 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
157
158 # Ugh, using '%' twice not possible
159 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
160         mkdir -p $(dir $@)
161         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
162
163 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
164         mkdir -p $(dir $@)
165         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
166
167 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
168
169 $(foreach manual, $(MANUAL_SUBDIRS),\
170 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
171
172 $(outdir)/%.png: %.png
173         convert -depth 8 -geometry 50x50% $< $@
174
175 $(outdir)/%.png: %.eps
176         gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
177
178 $(outdir)/%.pdf: %.png
179         convert -depth 8 $< $@
180
181 $(outdir)/%.pdf: %.eps
182         gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
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:
238         @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
239         then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
240         exit 3 ; \
241         fi
242         mkdir -p $(ISOLANG)/learning
243         cp fr/GNUmakefile $(ISOLANG)
244         cp fr/learning/GNUmakefile $(ISOLANG)/learning
245         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
246         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
247         mv $(outdir)/*.*tely $(ISOLANG)/learning
248         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
249         cp po/lilypond-doc.pot po/$(ISOLANG).po
250         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
251
252 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
253   $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
254   $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
255
256 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
257 skeleton-update:
258         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
259         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
260
261 snippet-update:
262         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
263
264 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
265 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
266 -I $(top-src-dir)/Documentation/snippets \
267 -I $(top-build-dir)/Documentation/out-www
268
269 else # ISOLANG is empty
270
271 DOCUMENTS_INCLUDES:=-I . \
272 -I $(top-build-dir)/Documentation/out-www \
273 -I $(top-src-dir)/Documentation/snippets \
274 -I $(top-build-dir)/Documentation/snippets/out-www
275
276 endif # ISOLANG
277
278 check-xrefs:
279         $(auxscript-dir)/check_texi_refs.py --batch \
280         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
281
282 fix-xrefs:
283         $(auxscript-dir)/check_texi_refs.py --auto-fix \
284         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
285
286 check-translation:
287         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
288
289 update-translation:
290         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
291
292 translation-status:
293         make -C po out=www messages
294         $(auxscript-dir)/translations-status.py
295
296 .SECONDARY: