Merge upstream git test library
[stgit.git] / Documentation / Makefile
blobe0e0200fd66232fd841488c41d8ebaf859c3e742
1 # Guard against environment variables
2 MAN1_TXT =
3 MAN5_TXT =
4 MAN7_TXT =
5 TECH_DOCS =
6 ARTICLES =
7 SP_ARTICLES =
8 OBSOLETE_HTML =
10 STGIT_ALL_PY = $(shell find ../stgit -name '*.py')
11 STG_COMMANDS = $(shell $(PYTHON) ../build.py --commands)
12 STG_COMMANDS_TXT = $(patsubst %,stg-%.txt,$(STG_COMMANDS))
13 STGIT_VERSION = $(shell $(PYTHON) ../build.py --stgit-version)
15 MAN1_TXT += stg.txt
16 MAN1_TXT += $(STG_COMMANDS_TXT)
18 ifdef MAN_FILTER
19 MAN_TXT = $(filter $(MAN_FILTER),$(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT))
20 else
21 MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)
22 MAN_FILTER = $(MAN_TXT)
23 endif
25 MAN_XML = $(patsubst %.txt,%.xml,$(MAN_TXT))
26 MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT))
28 DOC_HTML=$(patsubst %.txt,%.html,$(MAN1_TXT))
30 ARTICLES_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
31 HTML_FILTER ?= $(ARTICLES_HTML) $(OBSOLETE_HTML)
32 DOC_HTML = $(MAN_HTML) $(filter $(HTML_FILTER),$(ARTICLES_HTML) $(OBSOLETE_HTML))
34 DOC_MAN1 = $(patsubst %.txt,%.1,$(filter $(MAN_FILTER),$(MAN1_TXT)))
35 DOC_MAN5 = $(patsubst %.txt,%.5,$(filter $(MAN_FILTER),$(MAN5_TXT)))
36 DOC_MAN7 = $(patsubst %.txt,%.7,$(filter $(MAN_FILTER),$(MAN7_TXT)))
38 prefix ?= $(HOME)/.local
39 bindir ?= $(prefix)/bin
40 htmldir ?= $(prefix)/share/doc/stgit
41 infodir ?= $(prefix)/share/info
42 pdfdir ?= $(prefix)/share/doc/stgit
43 mandir ?= $(prefix)/share/man
44 man1dir = $(mandir)/man1
45 man5dir = $(mandir)/man5
46 man7dir = $(mandir)/man7
47 # DESTDIR =
49 ASCIIDOC = asciidoc
50 ASCIIDOC_EXTRA =
51 ASCIIDOC_HTML ?= xhtml11
52 ASCIIDOC_DOCBOOK = docbook
53 ASCIIDOC_CONF = -f asciidoc.conf
54 ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
55 -amanversion=$(STGIT_VERSION) \
56 -amanmanual='StGit Manual' -amansource='StGit'
57 TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
58 TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
59 MANPAGE_XSL = manpage-normal.xsl
60 XMLTO = xmlto
61 XMLTO_EXTRA =
62 INSTALL ?= install
63 RM ?= rm -f
65 MAKEINFO = makeinfo
66 INSTALL_INFO = install-info
67 DOCBOOK2X_TEXI = docbook2x-texi
68 DBLATEX = dblatex
69 ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex
70 DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty
71 ifndef PERL_PATH
72 PERL_PATH = /usr/bin/perl
73 endif
75 ifndef NO_MAN_BOLD_LITERAL
76 XMLTO_EXTRA += -m manpage-bold-literal.xsl
77 endif
79 # Newer DocBook stylesheet emits warning cruft in the output when
80 # this is not set, and if set it shows an absolute link. Older
81 # stylesheets simply ignore this parameter.
83 # Distros may want to use MAN_BASE_URL=file:///path/to/git/docs/
84 # or similar.
85 ifndef MAN_BASE_URL
86 MAN_BASE_URL = file://$(htmldir)/
87 endif
88 XMLTO_EXTRA += -m manpage-base-url.xsl
90 # If your target system uses GNU groff, it may try to render
91 # apostrophes as a "pretty" apostrophe using unicode. This breaks
92 # cut&paste, so you should set GNU_ROFF to force them to be ASCII
93 # apostrophes. Unfortunately does not work with non-GNU roff.
94 ifdef GNU_ROFF
95 XMLTO_EXTRA += -m manpage-quote-apos.xsl
96 endif
98 ifdef USE_ASCIIDOCTOR
99 ASCIIDOC = asciidoctor
100 ASCIIDOC_CONF =
101 ASCIIDOC_HTML = xhtml5
102 ASCIIDOC_DOCBOOK = docbook5
103 ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
104 ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
105 ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
106 DBLATEX_COMMON =
107 XMLTO_EXTRA += --skip-validation
108 XMLTO_EXTRA += -x manpage.xsl
109 endif
111 SHELL_PATH ?= $(SHELL)
112 # Shell quote;
113 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
114 # ' <-- help syntax highlighters back into good state
116 QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
117 QUIET_SUBDIR1 =
119 ifneq ($(findstring $(MAKEFLAGS),w),w)
120 PRINT_DIR = --no-print-directory
121 else # "make -w"
122 NO_SUBDIR = :
123 endif
125 ifneq ($(findstring $(MAKEFLAGS),s),s)
126 ifndef V
127 QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@;
128 QUIET_XMLTO = @echo ' ' XMLTO $@;
129 QUIET_DB2TEXI = @echo ' ' DB2TEXI $@;
130 QUIET_MAKEINFO = @echo ' ' MAKEINFO $@;
131 QUIET_DBLATEX = @echo ' ' DBLATEX $@;
132 QUIET_XSLTPROC = @echo ' ' XSLTPROC $@;
133 QUIET_GEN = @echo ' ' GEN $@;
134 QUIET_LINT = @echo ' ' LINT $@;
135 QUIET_STDERR = 2> /dev/null
136 QUIET_SUBDIR0 = +@subdir=
137 QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
138 $(MAKE) $(PRINT_DIR) -C $$subdir
139 export V
140 endif
141 endif
143 all: html man
145 html: $(DOC_HTML)
147 man: man1 man5 man7
148 man1: $(DOC_MAN1)
149 man5: $(DOC_MAN5)
150 man7: $(DOC_MAN7)
152 info: stgitman.info
154 install: install-man
156 install-man: man
157 $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
158 $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir)
160 install-info: info
161 $(INSTALL) -d -m 755 $(DESTDIR)$(infodir)
162 $(INSTALL) -m 644 stgitman.info $(DESTDIR)$(infodir)
163 if test -r $(DESTDIR)$(infodir)/dir; then \
164 $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) stgitman.info ;\
165 else \
166 echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \
169 install-html: html
170 $(INSTALL) -d -m 755 $(DESTDIR)$(htmldir)
171 $(INSTALL) -m 644 $(DOC_HTML) $(DESTDIR)$(htmldir)
173 $(DOC_HTML) $(DOC_MAN1): asciidoc.conf
176 # Determine "include::" file references in asciidoc files.
178 doc.dep : $(wildcard *.txt) build-docdep.perl
179 $(QUIET_GEN)$(RM) $@+ $@ && \
180 $(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
181 mv $@+ $@
183 -include doc.dep
185 HTML-ASCIIDOCFLAGS: FORCE
186 @FLAGS='$(subst ','\'',$(TXT_TO_HTML))'; \
187 if test x"$$FLAGS" != x"`cat HTML-ASCIIDOCFLAGS 2>/dev/null`"; then \
188 echo >&2 " * new HTML-ASCIIDOCFLAGS"; \
189 echo "$$FLAGS" >HTML-ASCIIDOCFLAGS; \
192 XML-ASCIIDOCFLAGS: FORCE
193 @FLAGS='$(subst ','\'',$(TXT_TO_XML))'; \
194 if test x"$$FLAGS" != x"`cat XML-ASCIIDOCFLAGS 2>/dev/null`"; then \
195 echo >&2 " * new XML-ASCIIDOCFLAGS"; \
196 echo "$$FLAGS" >XML-ASCIIDOCFLAGS; \
199 clean:
200 $(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
201 $(RM) *.texi *.texi+ *.texi++ stgitman.info
202 $(RM) *.pdf
203 $(RM) doc.dep
204 $(RM) manpage-base-url.xsl
205 $(RM) *-ASCIIDOCFLAGS
206 $(RM) $(STG_COMMANDS_TXT) command-list.txt
208 $(MAN_HTML): %.html : %.txt asciidoc.conf asciidoctor-extensions.rb HTML-ASCIIDOCFLAGS
209 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
210 $(TXT_TO_HTML) -d manpage -o $@+ $< && \
211 mv $@+ $@
213 $(OBSOLETE_HTML): %.html : %.txto asciidoc.conf asciidoctor-extensions.rb HTML-ASCIIDOCFLAGS
214 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
215 $(TXT_TO_HTML) -o $@+ $< && \
216 mv $@+ $@
218 manpage-base-url.xsl: manpage-base-url.xsl.in
219 $(QUIET_GEN)sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@
221 %.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl)
222 $(QUIET_XMLTO)$(RM) $@ && \
223 $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
225 %.xml : %.txt asciidoc.conf asciidoctor-extensions.rb XML-ASCIIDOCFLAGS
226 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
227 $(TXT_TO_XML) -d manpage -o $@+ $< && \
228 mv $@+ $@
230 stgitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
231 $(QUIET_DB2TEXI)$(RM) $@+ $@ && \
232 ($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \
233 $(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \
234 rm $(xml)+ &&) true) > $@++ && \
235 $(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
236 rm $@++ && \
237 mv $@+ $@
239 stgitman.info: stgitman.texi
240 $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi
242 $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
243 $(QUIET_DB2TEXI)$(RM) $@+ $@ && \
244 $(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \
245 mv $@+ $@
247 $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt HTML-ASCIIDOCFLAGS
248 $(QUIET_ASCIIDOC)$(TXT_TO_HTML) -a toc $*.txt
250 print-man1:
251 @for i in $(MAN1_TXT); do echo $$i; done
253 .PHONY: FORCE
255 $(STG_COMMANDS_TXT): $(STGIT_ALL_PY)
256 $(QUIET_GEN)$(PYTHON) ../build.py --asciidoc $(basename $(subst stg-,,$@)) > $@
258 command-list.txt: $(STGIT_ALL_PY)
259 $(QUIET_GEN)$(PYTHON) ../build.py --cmd-list > $@
261 build-txt: command-list.txt FORCE