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