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