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