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