1EXTRA_DIST =
2sphinxbuilddir = $(builddir)/_build
3abs_sphinxbuilddir = $(abs_builddir)/_build
4
5if GENERATE_DOCS
6
7sphinxopts =
8sphinxopts += -v
9sphinxopts += -E
10sphinxopts += -a
11sphinxopts += -W
12sphinxopts += -j 2
13sphinxopts += -c "${abs_srcdir}"
14
15static_sources =
16include static/static_sources.mk
17
18EXTRA_DIST += static/static_sources.mk
19
20# ARM
21rst_arm_sources =
22rst_arm_sources += index.rst
23rst_arm_sources += manpages.rst
24rst_arm_sources += umls.rst
25include arm/rst_arm_sources.mk
26
27EXTRA_DIST += arm/rst_arm_sources.mk
28
29main_sources = $(rst_arm_sources) conf.py $(static_sources)
30
31# mans
32rst_man_sources =
33include man/rst_man_sources.mk
34
35EXTRA_DIST += man/rst_man_sources.mk
36
37rst_arm_sources += grammar/grammar.rst
38rst_arm_sources += grammar/grammar-ca-parser.rst
39rst_arm_sources += grammar/grammar-d2-parser.rst
40rst_arm_sources += grammar/grammar-dhcp4-parser.rst
41rst_arm_sources += grammar/grammar-dhcp6-parser.rst
42rst_arm_sources += grammar/grammar-netconf-parser.rst
43
44man8s =
45include man/man8s.mk
46
47EXTRA_DIST += man/man8s.mk
48
49man_sources = $(rst_man_sources) conf.py
50
51EXTRA_DIST += $(main_sources) $(man_sources) mes2doc.py api2doc.py $(man8s)
52
53# list of messages files that are used to generate kea-messages.rst and then kea-messages.pdf
54mes_files =
55include $(srcdir)/mes_files.mk
56
57EXTRA_DIST += mes_files.mk
58
59# list of api files that are used to generate api.rst
60api_files =
61include $(top_srcdir)/src/share/api/api_files.mk
62
63if HAVE_PDFLATEX
64all: html mans pdf text
65else
66all: html mans text
67endif
68
69# build the list of message files
70mes-files.txt: mes_files.mk
71	@sed 's;mes_files .*)/;;' $< > $@
72
73# this rule is only used for development purposes and is not used in official
74# build process as kea-messages.rst is always generated via sphinx's conf.py
75$(srcdir)/kea-messages.rst: $(mes_files) mes2doc.py
76	$(PYTHON) $(srcdir)/mes2doc.py -o $@ $(mes_files)
77
78# build the list of api files
79api-files.txt: $(top_srcdir)/src/share/api/api_files.mk
80	@sed 's;api_files .*)/;;' $< > $@
81
82# some tools do not use this makefile but still need generate files.
83EXTRA_DIST += mes-files.txt api-files.txt
84
85# this rule is only used for development purposes and is not used in official
86# build process as api.rst is always generated via sphinx's conf.py
87$(srcdir)/api.rst: $(api_files) api-files.txt api2doc.py
88	$(PYTHON) $(srcdir)/api2doc.py -o $@ $(api_files)
89
90$(srcdir)/arm/platforms.rst:
91	rm -f $(srcdir)/arm/platforms.rst
92	cp $(srcdir)/../../platforms.rst $(srcdir)/arm/platforms.rst
93
94# UML files
95
96if HAVE_PLANTUML
97.uml.png:
98	@PLANTUML@ $<
99
100.uml.svg:
101	@PLANTUML@ -svg $<
102endif
103
104EXTRA_DIST += uml/appendRequestedOptions.png
105EXTRA_DIST += uml/appendRequestedOptions.svg
106EXTRA_DIST += uml/appendRequestedOptions.uml
107EXTRA_DIST += uml/appendRequestedVendorOptions.png
108EXTRA_DIST += uml/appendRequestedVendorOptions.svg
109EXTRA_DIST += uml/appendRequestedVendorOptions.uml
110EXTRA_DIST += uml/assign-lease4.png
111EXTRA_DIST += uml/assign-lease4.svg
112EXTRA_DIST += uml/assign-lease4.uml
113EXTRA_DIST += uml/buildCfgOptionList.png
114EXTRA_DIST += uml/buildCfgOptionList.svg
115EXTRA_DIST += uml/buildCfgOptionList.uml
116EXTRA_DIST += uml/currentHost4.png
117EXTRA_DIST += uml/currentHost4.svg
118EXTRA_DIST += uml/currentHost4.uml
119EXTRA_DIST += uml/lease-states.png
120EXTRA_DIST += uml/lease-states.svg
121EXTRA_DIST += uml/lease-states.uml
122EXTRA_DIST += uml/main-loop.png
123EXTRA_DIST += uml/main-loop.svg
124EXTRA_DIST += uml/main-loop.uml
125EXTRA_DIST += uml/packet4.png
126EXTRA_DIST += uml/packet4.svg
127EXTRA_DIST += uml/packet4.uml
128EXTRA_DIST += uml/request4-lease.png
129EXTRA_DIST += uml/request4-lease.svg
130EXTRA_DIST += uml/request4-lease.uml
131EXTRA_DIST += uml/request4.png
132EXTRA_DIST += uml/request4.svg
133EXTRA_DIST += uml/request4.uml
134EXTRA_DIST += uml/requestLease4.png
135EXTRA_DIST += uml/requestLease4.svg
136EXTRA_DIST += uml/requestLease4.uml
137EXTRA_DIST += uml/select4.png
138EXTRA_DIST += uml/select4.svg
139EXTRA_DIST += uml/select4.uml
140EXTRA_DIST += uml/tkey.png
141EXTRA_DIST += uml/tkey.svg
142EXTRA_DIST += uml/tkey.uml
143EXTRA_DIST += uml/update.png
144EXTRA_DIST += uml/update.svg
145EXTRA_DIST += uml/update.uml
146
147PDFLATEX_AND_OPTS=$(PDFLATEX) -interaction nonstopmode
148
149pdf: $(main_sources) api-files.txt mes-files.txt $(srcdir)/arm/platforms.rst
150	$(SPHINXBUILD) -M latex $(srcdir) $(sphinxbuilddir) $(sphinxopts)
151	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-arm.tex
152	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-arm.tex
153	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-arm.tex
154	-cd $(abs_sphinxbuilddir)/latex && makeindex -s python.ist kea-arm.idx
155	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-arm.tex
156	cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-arm.tex
157	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-messages.tex
158	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-messages.tex
159	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-messages.tex
160	-cd $(abs_sphinxbuilddir)/latex && makeindex -s python.ist kea-messages.idx
161	-cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-messages.tex
162	cd $(abs_sphinxbuilddir)/latex && $(PDFLATEX_AND_OPTS) kea-messages.tex
163
164html: $(main_sources) api-files.txt mes-files.txt $(srcdir)/arm/platforms.rst
165	$(SPHINXBUILD) -M html $(srcdir) $(sphinxbuilddir) $(sphinxopts)
166
167# This target is not used anywhere, but people who prefer single page docs
168# can do make -C doc/sphinx singlehtml and then enjoy their docs being
169# generated in doc/sphinx/_build/singlehtml
170singlehtml: $(main_sources) api-files.txt mes-files.txt $(srcdir)/arm/platforms.rst
171	$(SPHINXBUILD) -M singlehtml $(srcdir) $(sphinxbuilddir) $(sphinxopts)
172
173text: $(main_sources) api-files.txt mes-files.txt $(srcdir)/arm/platforms.rst
174	$(SPHINXBUILD) -M text $(srcdir) $(sphinxbuilddir) $(sphinxopts)
175
176$(man8s): mans
177
178mans: $(man_sources) api-files.txt mes-files.txt
179	$(SPHINXBUILD) -M man $(srcdir) $(sphinxbuilddir) $(sphinxopts)
180
181clean-local:
182	rm -rf $(sphinxbuilddir)
183	rm -f $(srcdir)/mes-files.txt $(srcdir)/api-files.txt
184	rm -f $(srcdir)/kea-messages.rst $(srcdir)/api.rst
185	rm -f $(srcdir)/arm/platforms.rst
186
187.PHONY: all pdf html mans
188
189endif
190
191# install and uninstall can occur with GENERATE_DOCS and without it
192# so we want to install all when GENERATE_DOCS is and
193# just mans when GENERATE_DOCS is not used, and when man files exists (e.g release tarball)
194install-data-local:
195	mkdir -p $(DESTDIR)$(docdir)
196if GENERATE_DOCS
197	cp -r $(sphinxbuilddir)/html $(DESTDIR)$(docdir)
198if HAVE_PDFLATEX
199	${INSTALL_DATA} $(sphinxbuilddir)/latex/kea-arm.pdf $(DESTDIR)$(docdir)
200	${INSTALL_DATA} $(sphinxbuilddir)/latex/kea-messages.pdf $(DESTDIR)$(docdir)
201endif
202	${MKDIR_P} ${DESTDIR}${mandir}/man8
203	${INSTALL_DATA} $(man8s) ${DESTDIR}${mandir}/man8/
204else
205if INSTALL_MANS
206	${MKDIR_P} ${DESTDIR}${mandir}/man8
207	${INSTALL_DATA} $(sphinxbuilddir)/man/*.8 ${DESTDIR}${mandir}/man8/
208endif
209endif
210
211uninstall-local:
212	rm -rf $(DESTDIR)$(docdir)
213
214# There are sometimes conflicts when more then one sphinx-build is run at a time.
215# This target blocks running anything in parallel in this Makefile,
216# all is run serially.
217
218.NOTPARALLEL:
219