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