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