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