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