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