1#
2# %CopyrightBegin%
3#
4# Copyright Ericsson AB 1999-2020. All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10#     http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#
18# %CopyrightEnd%
19#
20#
21include $(ERL_TOP)/make/target.mk
22include $(ERL_TOP)/make/$(TARGET)/otp.mk
23
24# ----------------------------------------------------
25# Application version
26# ----------------------------------------------------
27include $(ERL_TOP)/erts/vsn.mk
28
29APPLICATION=otp-system-documentation
30
31# ----------------------------------------------------
32# Release directory specification
33# ----------------------------------------------------
34RELSYSDIR = "$(RELEASE_PATH)/doc"
35
36GIF_FILES =
37
38INFO_FILES = ../../../README.md ../../COPYRIGHT PR.template
39
40TOPDOCDIR=.
41
42include ../general_info/xmlfiles.mk
43include ../installation_guide/xmlfiles.mk
44include ../system_principles/xmlfiles.mk
45include ../embedded/xmlfiles.mk
46include ../getting_started/xmlfiles.mk
47include ../reference_manual/xmlfiles.mk
48include ../programming_examples/xmlfiles.mk
49include ../efficiency_guide/xmlfiles.mk
50include ../tutorial/xmlfiles.mk
51include ../design_principles/xmlfiles.mk
52include ../oam/xmlfiles.mk
53
54BOOK_FILES = book.xml
55
56XML_FILES = \
57	$(BOOK_FILES)
58
59XML_GUIDE_FILES = \
60	$(GENERAL_INFO_CHAPTER_FILES:%=general_info/%) \
61	$(GENERAL_INFO_CHAPTER_GEN_FILES:%=general_info/%) \
62	$(INST_GUIDE_CHAPTER_FILES:%=installation_guide/%) \
63	$(INST_GUIDE_CHAPTER_GEN_FILES:%=installation_guide/%) \
64	$(SYSTEM_PRINCIPLES_CHAPTER_FILES:%=system_principles/%) \
65	$(SYSTEM_PRINCIPLES_CHAPTER_GEN_FILES:%=system_principles/%) \
66	$(EMBEDDED_CHAPTER_FILES:%=embedded/%) \
67	$(EMBEDDED_CHAPTER_GEN_FILES:%=embedded/%) \
68	$(GETTING_STARTED_CHAPTER_FILES:%=getting_started/%) \
69	$(GETTING_STARTED_CHAPTER_GEN_FILES:%=getting_started/%) \
70	$(REF_MAN_CHAPTER_FILES:%=reference_manual/%) \
71	$(REF_MAN_CHAPTER_GEN_FILES:%=reference_manual/%) \
72	$(PROG_EX_CHAPTER_FILES:%=programming_examples/%) \
73	$(PROG_EX_CHAPTER_GEN_FILES:%=programming_examples/%) \
74	$(EFF_GUIDE_CHAPTER_FILES:%=efficiency_guide/%) \
75	$(EFF_GUIDE_CHAPTER_GEN_FILES:%=efficiency_guide/%) \
76	$(TUTORIAL_CHAPTER_FILES:%=tutorial/%) \
77	$(TUTORIAL_CHAPTER_GEN_FILES:%=tutorial/%) \
78	$(DESIGN_PRINCIPLES_CHAPTER_FILES:%=design_principles/%) \
79	$(DESIGN_PRINCIPLES_CHAPTER_GEN_FILES:%=design_principles/%) \
80	$(OAM_CHAPTER_FILES:%=oam/%) \
81	$(OAM_CHAPTER_GEN_FILES:%=oam/%)
82
83XML_GEN_FILES = \
84	$(XML_GUIDE_FILES:%=$(XMLDIR)/%) \
85	$(XMLDIR)/general_info/part.xml \
86	$(XMLDIR)/installation_guide/part.xml \
87	$(XMLDIR)/system_principles/part.xml \
88	$(XMLDIR)/embedded/part.xml \
89	$(XMLDIR)/getting_started/part.xml \
90	$(XMLDIR)/reference_manual/part.xml \
91	$(XMLDIR)/programming_examples/part.xml \
92	$(XMLDIR)/efficiency_guide/part.xml \
93	$(XMLDIR)/tutorial/part.xml \
94	$(XMLDIR)/design_principles/part.xml \
95	$(XMLDIR)/oam/part.xml
96
97
98XMLLINT_SRCDIRS= $(XMLDIR)/general_info:$(XMLDIR)/installation_guide:$(XMLDIR)/system_principles:$(XMLDIR)/embedded:$(XMLDIR)/getting_started:$(XMLDIR)/reference_manual:$(XMLDIR)/programming_examples:$(XMLDIR)/efficiency_guide:$(XMLDIR)/tutorial:$(XMLDIR)/design_principles:$(XMLDIR)/oam
99HTMLDIR= ../html
100PDFREFDIR= pdf
101
102TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
103TOPDOC=true
104
105ifdef RELEASE_PATH
106INST_TYPE=rel
107INST_TYPE_SRC_DIR=$(RELEASE_PATH)
108# We build to the 'temporary' dir in order to be able to install
109# results using INSTALL_DATA (in order to get correct access
110# rights on installed files)
111INST_TYPE_DEST_DIR=$(RELSYSDIR)/temporary
112INST_TYPE_DEST_DIR_DEP=$(INST_TYPE_DEST_DIR)
113INST_TYPE_JS_DEST_DIR=$(INST_TYPE_DEST_DIR)
114INST_TYPE_VSN_FILE=$(INST_TYPE_DEST_DIR)/OTP_VERSION
115else
116INST_TYPE=src
117INST_TYPE_SRC_DIR=$(ERL_TOP)
118INST_TYPE_DEST_DIR=$(HTMLDIR)
119INST_TYPE_DEST_DIR_DEP=
120INST_TYPE_JS_DEST_DIR=$(INST_TYPE_DEST_DIR)/js
121INST_TYPE_VSN_FILE=$(ERL_TOP)/OTP_VERSION
122endif
123
124#--------------------------------------------------------------------------
125# We generate the index page from the installed system. This make
126# it important that this is done last. The file index.html.src
127# is used as a template for the resulting page.
128
129EBIN = ebin
130
131INDEX_SCRIPT = $(EBIN)/erl_html_tools.$(EMULATOR)
132INDEX_SRC = src/erl_html_tools.erl
133
134INDEX_HTML=$(INST_TYPE_DEST_DIR)/index.html
135APPLICATIONS_HTML=$(INST_TYPE_DEST_DIR)/applications.html
136INDEX_FILES = $(INDEX_HTML) $(APPLICATIONS_HTML)
137
138JAVASCRIPT = $(INST_TYPE_JS_DEST_DIR)/erlresolvelinks.js
139JAVASCRIPT_BUILD_SCRIPT = $(EBIN)/erlresolvelinks.$(EMULATOR)
140JAVASCRIPT_BUILD_SCRIPT_SRC = src/erlresolvelinks.erl
141
142MAN_INDEX_SCRIPT = $(EBIN)/otp_man_index.$(EMULATOR)
143MAN_INDEX_SRC = src/otp_man_index.erl
144MAN_INDEX = $(INST_TYPE_DEST_DIR)/man_index.html
145
146GLOSSARY  = $(HTMLDIR)/glossary.html
147GLOSSARY_SRC = $(ERL_TOP)/system/internal_tools/doctools/src/glossary.erl
148GLOSSARY_SCRIPT = $(EBIN)/glossary.$(EMULATOR)
149
150TEMPLATES = \
151	templates/index.html.src \
152	templates/applications.html.src
153
154#--------------------------------------------------------------------------
155
156$(INDEX_SCRIPT): $(INDEX_SRC)
157	$(ERLC) -o$(EBIN) +warn_unused_vars $<
158
159$(INST_TYPE_DEST_DIR)/OTP_VERSION: $(INST_TYPE_DEST_DIR_DEP)
160	if test -f "$(RELEASE_PATH)/releases/$(SYSTEM_VSN)/OTP_VERSION"; then \
161		$(CP) "$(RELEASE_PATH)/releases/$(SYSTEM_VSN)/OTP_VERSION" $@; \
162	else \
163		$(CP) $(ERL_TOP)/OTP_VERSION $@; \
164	fi
165
166# We don't list toc_*.html as targets because we don't know
167$(INDEX_HTML) + $(APPLICATIONS_HTML): $(INST_TYPE_DEST_DIR_DEP) $(INDEX_SCRIPT) $(TEMPLATES) $(INST_TYPE_VSN_FILE)
168	echo "Generating index $@"
169	$(ERL) -noshell -pa $(EBIN) -s erl_html_tools top_index $(INST_TYPE) \
170		$(INST_TYPE_SRC_DIR) $(INST_TYPE_DEST_DIR) \
171		`cat "$(INST_TYPE_VSN_FILE)"` -s erlang halt
172
173
174#--------------------------------------------------------------------------
175
176$(JAVASCRIPT_BUILD_SCRIPT): $(JAVASCRIPT_BUILD_SCRIPT_SRC)
177	$(ERLC) -o$(EBIN) +warn_unused_vars $<
178
179$(JAVASCRIPT): $(INST_TYPE_DEST_DIR_DEP) $(JAVASCRIPT_BUILD_SCRIPT)
180	erl -noshell -pa $(EBIN) -run erlresolvelinks make $(ERL_TOP) \
181		$(INST_TYPE_SRC_DIR) $(INST_TYPE_JS_DEST_DIR) -s erlang halt
182
183#--------------------------------------------------------------------------
184
185$(MAN_INDEX_SCRIPT): $(MAN_INDEX_SRC)
186	$(ERLC) -o$(EBIN) +warn_unused_vars $<
187
188$(MAN_INDEX): $(INST_TYPE_DEST_DIR_DEP) $(MAN_INDEX_SCRIPT)
189	$(ERL) -noshell -pa $(EBIN) -s otp_man_index gen $(INST_TYPE) \
190		$(INST_TYPE_SRC_DIR) $@ -s erlang halt
191
192#--------------------------------------------------------------------------
193
194$(HTMLDIR)/highlights.html:  highlights.xml
195	date=`date +"%B %e, %Y"`; \
196	$(XSLTPROC) --output $(@) \
197		--stringparam docgen "$(DOCGEN)" \
198		--stringparam topdocdir "$(TOPDOCDIR)" \
199		--stringparam pdfdir "$(PDFREFDIR)"  \
200		--stringparam gendate "$$date" \
201		--stringparam appname "$(APPLICATION)" \
202		--stringparam appver "$(VSN)" \
203		--stringparam stylesheet "$(CSS_FILE)" \
204		--stringparam winprefix "$(WINPREFIX)" \
205		--stringparam logo "$(HTMLLOGO_FILE)" \
206		-path  $(DOCGEN)/priv/dtd \
207		-path  $(DOCGEN)/priv/dtd_html_entities \
208		$(DOCGEN)/priv/xsl/db_html.xsl $<
209
210
211$(HTMLDIR)/incompatible.html:  incompatible.xml
212	date=`date +"%B %e, %Y"`; \
213	$(XSLTPROC) --output $(@) --stringparam docgen "$(DOCGEN)" \
214		--stringparam topdocdir "$(TOPDOCDIR)" \
215		--stringparam pdfdir "$(PDFREFDIR)"  \
216		--stringparam gendate "$$date" \
217		--stringparam appname "$(APPLICATION)" \
218		--stringparam appver "$(VSN)" \
219		--stringparam stylesheet "$(CSS_FILE)" \
220		--stringparam winprefix "$(WINPREFIX)" \
221		--stringparam logo "$(HTMLLOGO_FILE)" \
222		-path  $(DOCGEN)/priv/dtd \
223		-path  $(DOCGEN)/priv/dtd_html_entities \
224		$(DOCGEN)/priv/xsl/db_html.xsl $<
225
226#--------------------------------------------------------------------------
227
228$(GLOSSARY_SCRIPT): $(GLOSSARY_SRC)
229	$(ERLC) -o$(EBIN) $(GLOSSARY_SRC)
230
231$(GLOSSARY): $(GLOSSARY_SCRIPT)
232	$(ERL) -noshell -pa $(EBIN) \
233		-s glossary make ../definitions/term.defs -s erlang halt > \
234		$(GLOSSARY)
235
236#--------------------------------------------------------------------------
237
238PR.template: PR.template.src $(ERL_TOP)/make/$(TARGET)/otp.mk
239	sed -e 's;%VSN%;$(VSN);' \
240	    -e 's;%SYSTEM_VSN%;$(SYSTEM_VSN);' \
241	    $< > $@
242
243# ----------------------------------------------------
244# FLAGS
245# ----------------------------------------------------
246XML_FLAGS +=
247DVIPS_FLAGS +=
248
249# ----------------------------------------------------
250# Targets
251# ----------------------------------------------------
252
253DOC_TARGETS?=pdf html man
254
255docs: $(DOC_TARGETS) $(INFO_FILES)
256
257local_docs: PDFREFDIR=../pdf
258
259$(TOP_PDF_FILE): $(XML_FILES)
260
261pdf: $(TOP_PDF_FILE)
262
263html: $(INDEX_FILES) $(JAVASCRIPT)
264
265man: $(MAN_INDEX)
266
267debug opt:
268
269clean:
270	$(RM) ../html/js/*.js
271	$(RM) PR.template
272	$(RM) $(XMLDIR)/*.xml
273	$(RM) $(INDEX_FILES) $(MAN_INDEX)
274	$(RM) $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
275	$(RM) $(INDEX_SCRIPT) $(GLOSSARY_SCRIPT) $(JAVASCRIPT_BUILD_SCRIPT)
276	$(RM) erl_crash.dump errs core *~
277
278# ----------------------------------------------------
279# Release Target
280# ----------------------------------------------------
281include $(ERL_TOP)/make/otp_release_targets.mk
282
283$(RELSYSDIR)/temporary:
284	$(INSTALL_DIR) $(RELSYSDIR)/temporary
285
286$(RELSYSDIR)/docbuild:
287	$(INSTALL_DIR)  $(RELSYSDIR)/docbuild
288
289release_man_spec: man $(RELSYSDIR)/docbuild
290	$(INSTALL_DATA) $(MAN_INDEX) $(RELSYSDIR)
291	$(INSTALL_DATA) $(MAN_INDEX_SRC) $(MAN_INDEX_SCRIPT) $(RELSYSDIR)/docbuild
292
293release_html_spec: html $(RELSYSDIR)/docbuild
294	$(INSTALL_DIR)  $(RELSYSDIR)/js
295	$(INSTALL_DATA) $(JAVASCRIPT) $(RELSYSDIR)/js
296	$(INSTALL_DATA) $(INDEX_FILES) $(RELSYSDIR)
297	$(INSTALL_DATA) $(INDEX_SCRIPT) $(JAVASCRIPT_BUILD_SCRIPT) \
298		$(INDEX_SRC) $(JAVASCRIPT_BUILD_SCRIPT_SRC) \
299		$(TEMPLATES) $(RELSYSDIR)/docbuild
300
301release_pdf_spec: pdf
302	$(INSTALL_DIR)  $(RELSYSDIR)/pdf
303	$(INSTALL_DATA)  \
304		$(TOP_PDF_FILE) $(RELSYSDIR)/pdf
305
306release_docs_spec: $(DOC_TARGETS:%=release_%_spec) $(INFO_FILES)
307	$(INSTALL_DATA) $(INFO_FILES) "$(RELEASE_PATH)"
308	$(RM) -r $(RELSYSDIR)/temporary
309
310release_spec:
311