]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
Fix image paths in Texinfo docs build outside the source tree
[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 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 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   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 UNSPLITTED_HTML_MANUALS = changes
60 SPLITTED_HTML_MANUALS = $(foreach manual, $(TEXINFO_MANUALS),\
61  $(if $(findstring $(manual), $(UNSPLITTED_HTML_MANUALS)),,$(manual)))
62
63 OUT_HTML_FILES = $(UNSPLITTED_HTML_MANUALS:%=$(outdir)/%.html)\
64  $(SPLITTED_HTML_MANUALS:%=$(outdir)/%-big-page.html)
65 DEEP_HTML_FILES = $(SPLITTED_HTML_MANUALS:%=$(outdir)/%/index.html)
66
67 # Symlinks to refer to external source documents from split and non-split HTML
68 source-links = $(outdir)/source\
69  $(foreach manual, $(SPLITTED_HTML_MANUALS), $(outdir)/$(manual)/source)
70
71 # Other out files
72
73 HTML_PAGE_NAMES= index translations devel
74 OUT_HTML_FILES += $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
75
76 MAIN_INFO_DOC = lilypond-notation
77 INFO_DOCS = lilypond-application lilypond-changes lilypond-contributor lilypond-internals \
78  lilypond-essay lilypond-learning lilypond-notation music-glossary lilypond
79 ifeq ($(out),www)
80 INFO_DOCS += lilypond-snippets 
81 endif
82 INFO_FILES = $(INFO_DOCS:%=$(outdir)/%.info)
83
84 ifeq ($(out),www)
85 INFO_IMAGES_DIR = lilypond
86 DEST_INFO_IMAGES_SUBDIR = Documentation/
87 endif
88
89 include $(depth)/make/stepmake.make
90
91 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
92
93 ### Web site idiosyncrases
94
95 $(outdir)/general/index.html: TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
96 $(outdir)/general/index.html: TEXI2HTML_SPLIT = $(WEB_TEXI2HTML_SPLIT)
97
98 ###########
99 ### Targets
100
101 default: local-txt-doc
102
103 local-help: extra-local-help
104
105 extra-local-help:
106         @echo -e "\
107   check-xrefs [ISOLANG=LL] validate Texinfo cross-references\n\
108   fix-xrefs [ISOLANG=LL]   interactively fix Texinfo cross-references (use with caution)\n\
109   info        update info pages\n\
110   xml         update Docbook xml documentation\n\
111 \n\
112 Translations specific targets (see TRANSLATION for details):\n\
113   new-lang ISOLANG=LL  create and initialize subdirectory \'LL' for language \'LL\n\
114   po-update            update and replace PO files for documentation with msgmerged versions\n\
115   check-translation ISOLANG=LL   show changes in English docs since last translation update\n\
116   update-translation ISOLANG=LL  call $$$$EDITOR to help updating the translation\n\
117   skeleton-update ISOLANG=LL     update Texinfo skeleton files\n\
118   snippet-update ISOLANG=LL      update ly snippets in Texinfo translation according to\n\
119                               docs in English (use with caution)\n\
120 \n\
121 LL refers to the desired locale (most often only the ISO 639 language code).\n"
122
123 info: $(INFO_FILES)
124         @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
125         @echo export PYTHONPATH=$(PYTHONPATH)
126
127 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
128
129
130 local-clean:
131         rm -f $(INFO_IMAGES_DIR)
132
133 ### Web targets
134
135 ifeq ($(out),www)
136 local-WWW-1: $(OUT_TEXINFO_MANUALS) $(PDF_FILES) info
137
138 local-WWW-2: txt-to-html $(OUT_HTML_FILES) $(DEEP_HTML_FILES) $(source-links) $(OMF_FILES)
139 endif
140
141
142 #########
143 ### Rules
144
145 $(outdir)/lilypond-%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
146         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
147
148 $(outdir)/lilypond.info: $(src-dir)/general.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 = application general learning notation texidocs
267 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
268 EXTRA_TRANSLATION_FILES =\
269  dedication.itely\
270  index.html.in\
271  common-macros.itexi\
272  macros.itexi\
273  translations.html.in\
274  translations.template.html.in\
275 #
276
277
278 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
279 skeleton-update:
280         mkdir -p $(ISOLANG)
281         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
282         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
283
284 snippet-update:
285         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
286
287 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
288 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
289 -I $(top-src-dir)/Documentation/snippets \
290 -I $(top-build-dir)/Documentation/out-www
291
292 else # ISOLANG is empty
293
294 DOCUMENTS_INCLUDES:=-I . \
295 -I $(top-build-dir)/Documentation/out-www \
296 -I $(top-src-dir)/Documentation/snippets \
297 -I $(top-build-dir)/Documentation/snippets/out-www
298
299 endif # ISOLANG
300
301 check-xrefs:
302         $(auxscript-dir)/check_texi_refs.py --batch \
303         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
304
305 fix-xrefs:
306         $(auxscript-dir)/check_texi_refs.py --auto-fix \
307         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
308
309 check-translation:
310         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
311
312 update-translation:
313         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314
315 translation-status:
316         make -C po out=www messages
317         $(auxscript-dir)/translations-status.py
318
319 .SECONDARY: