]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/GNUmakefile
WEB: Integration of new web site [general.texi].
[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 $(outdir)/general/index.html:\
97         TEXI2HTML_INIT = $(WEB_TEXI2HTML_INIT)
98 $(outdir)/general/index.html:\
99         TEXI2HTML_SPLIT := $(WEB_TEXI2HTML_SPLIT)
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 $(outdir)/lilypond.info: $(src-dir)/general.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi
152         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$@ $<
153
154 # cd $(outdir) rule gets bit hairy for --srcdir configure builds
155 txt-to-html:
156         $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
157         $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
158
159 ifeq ($(out),www)
160 ## Extra images dependencies
161 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
162
163 $(outdir)/pictures:
164         $(MAKE) -C pictures WWW-1
165         ln -sf ../pictures/$(outdir) $@
166 endif
167
168 # Ugh, using '%' twice not possible
169 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
170         mkdir -p $(dir $@)
171         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
172
173 $(outdir)/internals/internals.xml: $(outdir)/internals.texi
174         mkdir -p $(dir $@)
175         $(MAKEINFO) -I$(src-dir) -I$(outdir) --output=$(dir $@) --docbook $<
176
177 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
178
179 $(foreach manual, $(MANUAL_SUBDIRS),\
180 $(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
181
182
183
184 $(outdir)/source:
185         @rm -f $(@)
186         ln -sf $(depth) $(@)
187
188 $(outdir)/%/source:
189         @rm -f $(@)
190         mkdir -p $(dir $@)
191         ln -sf $(depth)/.. $(@)
192
193
194 ## Snippets rules idiosyncrases
195 $(outdir)/%.itely: snippets/%-intro.itely snippets/%.snippet-list
196         xargs $(LYS_TO_TELY) -f doctitle,texidoc,verbatim --name=$@ --template=$< < $(filter %.snippet-list, $^)
197
198 $(outdir)/snippets.texi: $(GENERATED_ITELY_FILES) $(SNIPPET_LY_FILES)
199
200 $(outdir)/%.bib: %.bib
201         ln -f $< $@
202
203 ## notation.texi deps
204 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
205         $(MAKE) -C $(top-src-dir)/mf
206
207 $(outdir)/notation.texi: $(outdir)/ly-grammar.txt
208
209 ## Rules for the automatically generated documentation
210 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
211         cd $(outdir) && $(BISON) -v $<
212         $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
213
214 # There used to be a dependency on a dummy target, to force a rebuild
215 # of internals every time.  however, this triggers
216 # compilation during install, which is a bad thing (tm).
217
218 $(outdir)/internals.texi: $(LILYPOND_BINARY)
219         cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
220
221
222 ###############################################
223 #  Documentation and translations maintenance #
224 ###############################################
225 po-update:
226         make -C po po-update
227
228 all-translations-update: po-update translation-status
229         $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
230
231 ifneq ($(NO_COLOR),)
232 CHECK_TRANSLATION_FLAGS = --no-color
233 endif
234
235 ifneq ($(ISOLANG),)
236 new-lang-dir:
237         mkdir -p $(ISOLANG)/$(DIR)
238         cp fr/GNUmakefile $(ISOLANG)
239         cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
240         sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
241 ifeq (ugh,urgh)
242 # Law of conservation of badness in action :-)
243         cd $(ISOLANG)/$(DIR) && ../../$(auxscript-dir)/texi-langutils.py -l $(ISOLANG) -o ../../$(outdir)/doc.pot --skeleton --gettext $$(ls -1 ../../$(DIR).tely ../../$(DIR).texi)
244 # gets written to wrong directory; texi-langutils.py outdir/output is a mess
245         mv $(ISOLANG)/$(DIR)/$(DIR).* $(ISOLANG) || : 
246 # cleanup cruft
247         rm -f $(ISOLANG)/node_list $(ISOLANG)/*/node_list
248 else
249         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
250         mv $$(ls $(outdir)/$(DIR).tely $(outdir)/$(DIR).texi) $(ISOLANG) || :
251         mv $$(ls $(outdir)/*.*tely $(outdir)/*.*texi) $(ISOLANG)/$(DIR) ||: 
252 endif
253
254 new-lang:
255 # FIXME: allow this target to update a language too
256 #        do not blindly overwrite, use test -e and only create missing files
257 #        for inspiration, see [old] lilypond/web GNUmakefile's target new:
258         @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
259         then echo "Error: $(ISOLANG) directory already exists. Exiting." ; \
260         exit 3 ; \
261         fi
262         $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
263         cd fr && cp $(EXTRA_TRANSLATION_FILES) ../$(ISOLANG)
264         msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
265         cp po/lilypond-doc.pot po/$(ISOLANG).po
266         @echo "***  Please add a language definition for $(ISOLANG) in python/langdefs.py  ***"
267
268 #TRANSLATION_DIRS = $(shell git ls-files $(ISOLANG) | $(PYTHON) $(buildscript-dir)/pytt.py '/[^/]*$$' / | sort -u )
269 TRANSLATION_DIRS = application general learning notation texidocs
270 TRANSLATION_FILES = $(shell git ls-files $(ISOLANG) | grep -v GNUmakefile)
271 EXTRA_TRANSLATION_FILES =\
272  dedication.itely\
273  index.html.in\
274  common-macros.itexi\
275  macros.itexi\
276  translations.html.in\
277  translations.template.html.in\
278 #
279
280
281 TELY_FILES = $(call src-wildcard,$(ISOLANG)/*.tely)
282 skeleton-update:
283         mkdir -p $(ISOLANG)
284         $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) --skeleton $(TELY_FILES:$(ISOLANG)/%.tely=../%.tely)
285         $(auxscript-dir)/texi-skeleton-update.py $(ISOLANG) $(outdir)
286
287 snippet-update:
288         $(auxscript-dir)/update-snippets.py user $(ISOLANG) '*.itely'
289
290 DOCUMENTS_INCLUDES:=-I $(ISOLANG) \
291 -I $(top-build-dir)/Documentation/$(ISOLANG)/out-www \
292 -I $(top-src-dir)/Documentation/snippets \
293 -I $(top-build-dir)/Documentation/out-www
294
295 else # ISOLANG is empty
296
297 DOCUMENTS_INCLUDES:=-I . \
298 -I $(top-build-dir)/Documentation/out-www \
299 -I $(top-src-dir)/Documentation/snippets \
300 -I $(top-build-dir)/Documentation/snippets/out-www
301
302 endif # ISOLANG
303
304 check-xrefs:
305         $(auxscript-dir)/check_texi_refs.py --batch \
306         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
307
308 fix-xrefs:
309         $(auxscript-dir)/check_texi_refs.py --auto-fix \
310         $(DOCUMENTS_INCLUDES) $(auxpython-dir)/manuals_definitions.py
311
312 check-translation:
313         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
314
315 update-translation:
316         ISOLANG=$(ISOLANG) $(auxscript-dir)/check_translation.py --update $(CHECK_TRANSLATION_FLAGS) $(TRANSLATION_FILES)
317
318 translation-status:
319         make -C po out=www messages
320         $(auxscript-dir)/translations-status.py
321
322 .SECONDARY: