]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into...
[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
94 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
95 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
96
97 ###########
98 ### Targets
99
100 default: local-txt-doc
101
102 local-help: extra-local-help
103
104 extra-local-help:
105         @echo -e "\
106   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
107   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
108   info        update info pages\n\
109   xml         update Docbook xml documentation\n\
110 \n\
111 Translations specific targets (see TRANSLATION for details):\n\
112   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
113   po-update            update and replace PO files for documentation with msgmerged versions\n\
114   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
115   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
116   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
117   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
118                               docs in English (use with caution)\n\
119 \n\
120 LL refers to the desired locale (most often only the ISO 639 language code).\n"
121
122 info: $(INFO_FILES)
123         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
124         @echo export PYTHONPATH=$(PYTHONPATH)
125
126 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
127
128
129 local-clean:
130         rm -f $(INFO_IMAGES_DIR)
131
132 ### Web targets
133
134 ifeq ($(out),www)
135 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
136
137 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
138 endif
139
140
141 #########
142 ### Rules
143
144 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
145         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
146
147 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
148         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
149
150 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
151 txt-to-html:
152         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
153         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
154
155 ifeq ($(out),www)
156 ## Extra images dependencies
157 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
158
159 $(outdir)/pictures:
160         $(MAKE) -C pictures WWW-1
161         ln -sf ../pictures/$(outdir) $@
162
163 $(outdir)/general.texi: $(outdir)/examples
164
165 $(outdir)/examples:
166         $(MAKE) -C general/examples
167 # FIXME: who is replacing src="examples --> src="../examples" ?
168 # [ugh, why do most scripts not even say they run anymore?]
169         ln -sf general/examples $@
170 endif
171
172 # Ugh, using '%' twice not possible
173 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
174         mkdir -p $(dir $@)
175         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
176
177 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
178         mkdir -p $(dir $@)
179         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
180
181 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
182
183 $(foreach manual, $(MANUAL_SUBDIRS),\
184 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
185
186
187
188 $(outdir)/source:
189         @rm -f $(@)
190         ln -sf $(depth) $(@)
191
192 $(outdir)/%/source:
193         @rm -f $(@)
194         mkdir -p $(dir $@)
195         ln -sf $(depth)/.. $(@)
196
197
198 ## Snippets rules idiosyncrases
199 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
200         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
201
202 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
203
204 $(outdir)/%.bib: %.bib
205         ln -f $< $@
206
207 ## notation.texi deps
208 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
209         $(MAKE) -C $(top-src-dir)/mf
210
211 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
212
213 ## Rules for the automatically generated documentation
214 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
215         cd $(outdir) && $(BISON) -v $<
216         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
217
218 # There used to be a dependency on a dummy target, to force a rebuild
219 # of internals every time.  however, this triggers
220 # compilation during install, which is a bad thing (tm).
221
222 $(outdir)/internals.texi: $(LILYPOND_BINARY)
223         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
224
225
226 ###############################################
227 #  Documentation and translations maintenance #
228 ###############################################
229 po-update:
230         make -C po po-update
231
232 all-translations-update: po-update translation-status
233         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
234
235 ifneq ($(NO_COLOR),)
236 CHECK_TRANSLATION_FLAGS = --no-color
237 endif
238
239 ifneq ($(ISOLANG),)
240 new-lang-dir:
241         mkdir -p $(ISOLANG)/$(DIR)
242         cp fr/GNUmakefile $(ISOLANG)
243         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
244         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
245         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
246         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
247         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
248             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
249         done
250         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
251         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
252             test -e $(ISOLANG)/$(DIR)/$$i\
253                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
254         done
255
256 new-lang:
257 # Also for updating/adding missing files
258         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
259         $(foreach i, $(EXTRA_TRANSLATION_FILES), \
260             (test -e $(ISOLANG)/$(i) \
261                 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
262         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
263         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
264         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
265
266 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
267 TRANSLATION_DIRS = application general learning notation texidocs
268 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
269 EXTRA_TRANSLATION_FILES =\
270  dedication.itely\
271  index.html.in\
272  common-macros.itexi\
273  macros.itexi\
274  translations.html.in\
275  translations.template.html.in\
276 #
277
278
279 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
280 skeleton-update:
281         mkdir -p $(ISOLANG)
282         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
283         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
284
285 snippet-update:
286         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
287
288 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
289 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
290 -I $(top-src-dir)/Documentation/snippets \
291 -I $(top-build-dir)/Documentation/out-www
292
293 else # ISOLANG is empty
294
295 DOCUMENTS_INCLUDES:=-I . \
296 -I $(top-build-dir)/Documentation/out-www \
297 -I $(top-src-dir)/Documentation/snippets \
298 -I $(top-build-dir)/Documentation/snippets/out-www
299
300 endif # ISOLANG
301
302 check-xrefs:
303         $(auxscript-dir)/check_texi_refs.py --batch \
304         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
305
306 fix-xrefs:
307         $(auxscript-dir)/check_texi_refs.py --auto-fix \
308         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
309
310 check-translation:
311         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
312
313 update-translation:
314         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
315
316 translation-status:
317         make -C po out=www messages
318         $(auxscript-dir)/translations-status.py
319
320 .SECONDARY: