]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Docs: update check_translation script
[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 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 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
54
55 UNSPLITTED_HTML_MANUALS = changes
56 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
57 $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),, $(manual)))
58
59 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
60  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
61 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
62
63 # Other out files
64 HTML_PAGE_NAMES= index translations devel
65 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
66 OUT_CSS_FILES = $(CSS_FILES:%.css=$(outdir)/%.css)
67
68 MAIN_INFO_DOC = lilypond-notation
69 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
70  lilypond-learning lilypond-notation music-glossary
71 ifeq ($(out),www)
72 INFO_DOCS += lilypond-snippets 
73 endif
74 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
75
76 ifeq ($(out),www)
77 INFO_IMAGES_DIR = lilypond
78 DEST_INFO_IMAGES_SUBDIR = Documentation/
79 endif
80
81 include $(depth)/make/stepmake.make
82
83 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
84
85 ###########
86 ### Targets
87
88 default: local-doc
89
90 local-help: extra-local-help
91
92 extra-local-help:
93         @echo -e "\
94   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
95   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
96   info        update info pages\n\
97   xml         update Docbook xml documentation\n\
98 \n\
99 Translations specific targets (see TRANSLATION for details):\n\
100   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
101   po-update            update and replace PO files for documentation with msgmerged versions\n\
102   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
103   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
104   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
105   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
106                               docs in English (use with caution)\n\
107 \n\
108 LL refers to the desired locale (most often only the ISO 639 language code).\n"
109
110 info: $(INFO_FILES)
111         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
112         @echo export PYTHONPATH=$(PYTHONPATH)
113
114 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
115
116
117 local-clean:
118         rm -f $(INFO_IMAGES_DIR)
119
120 ### Web targets
121
122 ifeq ($(out),www)
123 local-WWW-1: $(TEXINFO_MANUALS:%=$(outdir)/%.texi) $(PDF_FILES) info
124
125 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
126 endif
127
128
129 #########
130 ### Rules
131
132 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
133 txt-to-html:
134         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
135         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
136
137
138 $(OUT_HTML_FILES): $(OUT_CSS_FILES)
139
140 $(outdir)/%.css: %.css
141         ln -f $< $@
142
143 ## Extra images dependencies
144 $(outdir)/learning/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
145 $(outdir)/notation/index.html: $(OUT_PNG_IMAGES) $(OUT_EPS_IMAGES)
146 $(outdir)/learning-big-page.html: $(OUT_PNG_IMAGES)
147 $(outdir)/notation-big-page.html: $(OUT_PNG_IMAGES)
148
149 # Ugh, using '%' twice not possible
150 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
151         mkdir -p $(dir $@)
152         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
153
154 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
155         mkdir -p $(dir $@)
156         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
157
158 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
159
160 $(foreach manual, $(MANUAL_SUBDIRS),\
161 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
162
163 $(outdir)/%.png: %.png
164         convert -depth 8 -geometry 50x50% $< $@
165
166 $(outdir)/%.png: %.eps
167         gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
168
169 $(outdir)/%.pdf: %.png
170         convert -depth 8 $< $@
171
172 $(outdir)/%.pdf: %.eps
173         gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
174
175
176 # Symlinks to refer to external source documents from split and non-split HTML
177 source-links = $(outdir)/source $(outdir)/notation/source $(outdir)/music-glossary/source \
178  $(outdir)/application/source $(outdir)/learning/source $(outdir)/internals/source \
179  $(outdir)/snippets/source
180
181 $(outdir)/source:
182         @rm -f $(@)
183         ln -sf $(depth) $(@)
184
185 $(outdir)/%/source:
186         @rm -f $(@)
187         mkdir -p $(dir $@)
188         ln -sf $(depth)/.. $(@)
189
190
191 ## Snippets rules idiosyncrases
192 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
193         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
194
195 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
196
197 $(outdir)/%.bib: %.bib
198         ln -f $< $@
199
200 ## notation.texi deps
201 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
202         $(MAKE) -C $(top-src-dir)/mf
203
204 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
205
206 ## Rules for the automatically generated documentation
207 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
208         cd $(outdir) && $(BISON) -v $<
209         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
210
211 # There used to be a dependency on a dummy target, to force a rebuild
212 # of internals every time.  however, this triggers
213 # compilation during install, which is a bad thing (tm).
214
215 $(outdir)/internals.texi: $(LILYPOND_BINARY)
216         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
217
218
219 ###############################################
220 #  Documentation and translations maintenance #
221 ###############################################
222 po-update:
223         make -C po po-update
224
225 all-translations-update: po-update translation-status
226         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
227
228 ifneq ($(NO_COLOR),)
229 CHECK_TRANSLATION_FLAGS = --no-color
230 endif
231
232 ifneq ($(ISOLANG),)
233 new-lang:
234         @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
235         then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
236         exit 3 ; \
237         fi
238         mkdir -p $(ISOLANG)/learning
239         cp fr/GNUmakefile $(ISOLANG)
240         cp fr/learning/GNUmakefile $(ISOLANG)/learning
241         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/learning/GNUmakefile
242         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext ../learning.tely
243         mv $(outdir)/*.*tely $(ISOLANG)/learning
244         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
245         cp po/lilypond-doc.pot po/$(ISOLANG).po
246         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
247
248 CHECKED_FILES = $(ISOLANG)/index.html.in $(foreach i,learning notation application, \
249   $(shell find $(ISOLANG)/$(manual) -name '*.*te??' -not -wholename '*out-www*')) \
250   $(shell find $(ISOLANG)/texidocs/ -name '*.texidoc')
251
252 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
253 skeleton-update:
254         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
255         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
256
257 snippet-update:
258         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
259
260 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
261 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
262 -I $(top-src-dir)/Documentation/snippets \
263 -I $(top-build-dir)/Documentation/out-www
264
265 else # ISOLANG is empty
266
267 DOCUMENTS_INCLUDES:=-I . \
268 -I $(top-build-dir)/Documentation/out-www \
269 -I $(top-src-dir)/Documentation/snippets \
270 -I $(top-build-dir)/Documentation/snippets/out-www
271
272 endif # ISOLANG
273
274 check-xrefs:
275         $(auxscript-dir)/check_texi_refs.py --batch \
276         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
277
278 fix-xrefs:
279         $(auxscript-dir)/check_texi_refs.py --auto-fix \
280         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
281
282 check-translation:
283         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
284
285 update-translation:
286         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(CHECKED_FILES)
287
288 translation-status:
289         make -C po out=www messages
290         $(auxscript-dir)/translations-status.py
291
292 .SECONDARY: