]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Doc: new website is the main doc page now.
[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 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
30 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
31 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
32
33 EXTRA_DIST_FILES = $(call src-wildcard,*.init) search-box.html
34
35 ### Out files
36
37 # Dependencies
38 GENERATED_ITELY_FILES = $(IN_ITELY_FILES:snippets/%-intro.itely=$(outdir)/%.itely)
39
40 XREF_MAPS_FILES += $(XREF_MAPS_DIR)/internals.xref-map
41 OMF_FILES += $(outdir)/internals.html.omf $(outdir)/internals.pdf.omf
42
43 # Main manuals
44 TEXINFO_MANUALS = internals\
45  $(TELY_FILES:%.tely=%)\
46  $(TEXI_FILES:%.texi=%)
47 OUT_TEXINFO_MANUALS = $(TEXINFO_MANUALS:%=$(outdir)/%.texi)
48
49 ## CHAIN_RULE hack: keep the following line *before* including
50 # stepmake.make, so the Internals Reference is built before the
51 # Notation Reference, thus providing automatically generated sections
52 # of the NR
53 TEXI_FILES_FROM_TELY = $(outdir)/internals.texi
54
55 PDF_FILES = $(TEXINFO_MANUALS:%=$(outdir)/%.pdf)
56
57 UNSPLITTED_HTML_MANUALS = changes
58 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
59  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
60
61 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
62  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
63 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
64
65 # Symlinks to refer to external source documents from split and non-split HTML
66 source-links = $(outdir)/source\
67  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
68
69 # Other out files
70
71 HTML_PAGE_NAMES= translations devel
72 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
73
74 MAIN_INFO_DOC = lilypond-notation
75 INFO_DOCS = lilypond-usage lilypond-changes lilypond-contributor lilypond-internals \
76  lilypond-essay lilypond-learning lilypond-notation music-glossary \
77  lilypond-general
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 OUT_HTML_FILES += $(outdir)/index.html
98 $(outdir)/index.html: $(outdir)/general/index.html
99         mv $(outdir)/general/* $(outdir)/
100
101 ###########
102 ### Targets
103
104 default: local-txt-doc
105
106 local-help: extra-local-help
107
108 extra-local-help:
109         @echo -e "\
110   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
111   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
112   info        update info pages\n\
113   xml         update Docbook xml documentation\n\
114 \n\
115 Translations specific targets (see TRANSLATION for details):\n\
116   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
117   po-update            update and replace PO files for documentation with msgmerged versions\n\
118   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
119   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
120   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
121   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
122                               docs in English (use with caution)\n\
123 \n\
124 LL refers to the desired locale (most often only the ISO 639 language code).\n"
125
126 info: $(INFO_FILES)
127         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
128         @echo export PYTHONPATH=$(PYTHONPATH)
129
130 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
131
132
133 local-clean:
134         rm -f $(INFO_IMAGES_DIR)
135
136 ### Web targets
137
138 ifeq ($(out),www)
139 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
140
141 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
142 endif
143
144
145 #########
146 ### Rules
147
148 $(outdir)/lilypond-%.info: $(outdir)/%.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         ln -sf ../general/examples/$(outdir) $@
169 endif
170
171 # Ugh, using '%' twice not possible
172 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
173         mkdir -p $(dir $@)
174         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
175
176 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
177         mkdir -p $(dir $@)
178         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
179
180 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
181
182 $(foreach manual, $(MANUAL_SUBDIRS),\
183 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
184
185
186
187 $(outdir)/source:
188         @rm -f $(@)
189         ln -sf $(depth) $(@)
190
191 $(outdir)/%/source:
192         @rm -f $(@)
193         mkdir -p $(dir $@)
194         ln -sf $(depth)/.. $(@)
195
196
197 ## Snippets rules idiosyncrases
198 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
199         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
200
201 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
202
203 $(outdir)/%.bib: %.bib
204         ln -f $< $@
205
206 ## notation.texi deps
207 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
208         $(MAKE) -C $(top-src-dir)/mf
209
210 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
211
212 ## Rules for the automatically generated documentation
213 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
214         cd $(outdir) && $(BISON) -v $<
215         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
216
217 # There used to be a dependency on a dummy target, to force a rebuild
218 # of internals every time.  however, this triggers
219 # compilation during install, which is a bad thing (tm).
220
221 $(outdir)/internals.texi: $(LILYPOND_BINARY)
222         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
223
224
225 ###############################################
226 #  Documentation and translations maintenance #
227 ###############################################
228 po-update:
229         make -C po po-update
230
231 all-translations-update: po-update translation-status
232         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
233
234 ifneq ($(NO_COLOR),)
235 CHECK_TRANSLATION_FLAGS = --no-color
236 endif
237
238 ifneq ($(ISOLANG),)
239 new-lang-dir:
240         mkdir -p $(ISOLANG)/$(DIR)
241         cp fr/GNUmakefile $(ISOLANG)
242         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
243         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
244         rm -f $(outdir)/*.*tely $(outdir)/*.*texi
245         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
246         for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
247             test -e $(ISOLANG)/$$i || mv $(outdir)/$$i $(ISOLANG)/$$i;\
248         done
249         rm -f $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi
250         for i in $$(cd $(outdir) && ls -1 *.*tely *.*texi); do\
251             test -e $(ISOLANG)/$(DIR)/$$i\
252                 || mv $(outdir)/$$i $(ISOLANG)/$(DIR)/$$i;\
253         done
254
255 new-lang:
256 # Also for updating/adding missing files
257         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
258         $(foreach i, $(EXTRA_TRANSLATION_FILES), \
259             (test -e $(ISOLANG)/$(i) \
260                 || cp fr/$(i) $(ISOLANG)/$(i)) && ) true
261         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
262         test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
263         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
264
265 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
266 TRANSLATION_DIRS = general learning notation texidocs usage
267 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
268 EXTRA_TRANSLATION_FILES =\
269  dedication.itely\
270  common-macros.itexi\
271  macros.itexi\
272  translations.html.in\
273  translations.template.html.in\
274 #
275
276
277 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
278 skeleton-update:
279         mkdir -p $(ISOLANG)
280         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
281         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
282
283 snippet-update:
284         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
285
286 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
287 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
288 -I $(top-src-dir)/Documentation/snippets \
289 -I $(top-build-dir)/Documentation/out-www
290
291 else # ISOLANG is empty
292
293 DOCUMENTS_INCLUDES:=-I . \
294 -I $(top-build-dir)/Documentation/out-www \
295 -I $(top-src-dir)/Documentation/snippets \
296 -I $(top-build-dir)/Documentation/snippets/out-www
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: