VirtualBox

source: vbox/trunk/doc/manual/Makefile.kmk@ 68829

Last change on this file since 68829 was 68829, checked in by vboxsync, 7 years ago

manual: Added some mumblings about the VISO files and a dump of the RTIsoMaker options.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 51.7 KB
Line 
1# $Id: Makefile.kmk 68829 2017-09-22 14:18:44Z vboxsync $
2## @file
3# Sub-Makefile for the VirtualBox User Manual, SDK reference and other manuals.
4#
5
6#
7# Copyright (C) 2006-2016 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17
18#
19# This slightly messy makefile transforms the DocBook XML source for the
20# user manual into presentation output. We support two targets:
21#
22# -- UserManual.pdf, generated by LaTex
23#
24# -- VirtualBox.chm
25#
26# Both files end up in PATH_STAGE_BIN.
27#
28# Both targets indirectly depend on the XML files in this directory;
29# "indirectly" because we first copy them to PATH_TARGET and hack them
30# up a bit for variable substitution and such (see below).
31# The toolchains are roughly like this:
32#
33# -- PDF file via Apache FOP: pre-process the XML files in PATH_TARGET,
34# then create a .FO file (another XML format for "formatted objects")
35# via xsltproc, then feed the .FO file to Apache FOP to create the PDF.
36#
37# -- PDF file via LaTeX: pre-process the XML files in PATH_TARGET, then
38# run our custom "dblatex" perl script on UserManual.xml, which parses
39# the XML (using the Perl SAX parsers) and dumps a matching latex file
40# to UserManual.tex. This is then regularly processed by pdflatex to
41# generate PDF.
42#
43# -- CHM file: again, pre-process the XML files in PATH_TARGET, then use
44# xsltproc to create a .HHP file for the Microsoft Help Compiler, then
45# feed that file to it.
46#
47
48SUB_DEPTH = ../..
49include $(KBUILD_PATH)/subheader.kmk
50
51
52#
53# Globals
54#
55
56# Error out if someone tries to override old globals.
57ifdef HTMLHELPOPTS
58 $(error HTMLHELPOPTS was renamed to VBOX_HTMLHELP_OPTS!)
59endif
60ifdef DOCBOOKPATH
61 $(error DOCBOOKPATH was renamed to VBOX_PATH_DOCBOOK!)
62endif
63ifdef DOCBOOKPATH
64 $(error DOCBOOKPATH was renamed to VBOX_PATH_DOCBOOK!)
65endif
66ifdef XML_CATALOG
67 $(error XML_CATALOG was renamed to VBOX_XML_CATALOG!)
68endif
69ifdef XML_CATALOG_DOCBOOK
70 $(error XML_CATALOG_DOCBOOK was renamed to VBOX_XML_CATALOG_DOCBOOK!)
71endif
72ifdef VBOXMANAGEPATH
73 $(error VBOXMANAGEPATH was renamed to VBOXMANAGEHELP_PATH!)
74endif
75ifdef PDFLATEX_INTERACTION
76 $(error PDFLATEX_INTERACTION was renamed to VBOX_PDFLATEX_INTERACTION!)
77endif
78ifdef PDFLATEX
79 $(error PDFLATEX was renamed to VBOX_PDFLATEX_CMD!)
80endif
81ifdef HHC
82 $(error HHC was renamed to VBOX_HHC!)
83endif
84
85# Source and output locations.
86VBOX_PATH_MANUAL_SRC := $(PATH_SUB_CURRENT)
87VBOX_PATH_MANUAL_OUTBASE := $(PATH_TARGET)/manual
88
89# tool locations
90ifndef VBOX_OSE
91 # use docbook from our tools directory
92 VBOX_PATH_DOCBOOK ?= $(PATH_DEVTOOLS)/common/DocBook/v1.69.1
93 VBOX_PATH_DOCBOOK_DTD ?= $(PATH_DEVTOOLS)/common/docbook-xml/v4.3
94 VBOX_XML_CATALOG ?= $(VBOX_PATH_MANUAL_OUTBASE)/catalog
95 VBOX_XML_CATALOG_DOCBOOK ?= $(VBOX_PATH_MANUAL_OUTBASE)/docbook
96else
97 # use docbook of the build host
98 VBOX_PATH_DOCBOOK ?= http://docbook.sourceforge.net/release/xsl/current/
99endif
100
101# xsltproc with the catalog trick if applicable.
102ifdef VBOX_XML_CATALOG
103 VBOX_XSLTPROC_WITH_CAT = $(REDIRECT) -E "XML_CATALOG_FILES=$(VBOX_XML_CATALOG)" $1 -- \
104 $(VBOX_XSLTPROC) --nonet --xinclude $(VBOX_XSLTPROC_OPTS)
105 VBOX_XMLLINT_WITH_CAT = $(REDIRECT) -E "XML_CATALOG_FILES=$(VBOX_XML_CATALOG)" -- \
106 $(VBOX_XMLLINT) --nonet --xinclude --noout $(VBOX_XMLLINT_OPTS)
107else
108 VBOX_XSLTPROC_WITH_CAT = $(if $(1), $(REDIRECT) $1 --,) $(VBOX_XSLTPROC) --nonet --xinclude $(VBOX_XSLTPROC_OPTS)
109 VBOX_XMLLINT_WITH_CAT = $(VBOX_XMLLINT) --nonet --xinclude --noout $(VBOX_XMLLINT_OPTS)
110endif
111
112VBOXMANAGEHELP_PATH ?= $(PATH_STAGE_BIN)/VBoxManageHelp$(SUFF_EXE)
113
114 # VBOX_PDFLATEX_INTERACTION = errorstopmode - Use this when you wants to figure out build failures
115 # without catting the log a million times.
116VBOX_PDFLATEX_INTERACTION ?= batchmode
117ifeq ($(KBUILD_HOST),win)
118 ifndef VBOX_PDFLATEX
119 VBOX_PDFLATEX := $(firstword $(rsort $(wildcard $(PATH_DEVTOOLS)/win.x86/miktex-portable/*/miktex/bin/pdflatex.exe)))
120 ifneq ($(VBOX_PDFLATEX),)
121 VBOX_PDFLATEX_CMD = $(VBOX_PDFLATEX) -halt-on-error -interaction $(VBOX_PDFLATEX_INTERACTION)
122 endif
123 endif
124 ifndef VBOX_PDFLATEX
125 # Tell MiKTeX to automatically download packages if system wide install.
126 VBOX_PDFLATEX := pdflatex
127 VBOX_PDFLATEX_CMD = $(VBOX_PDFLATEX) -halt-on-error -interaction $(VBOX_PDFLATEX_INTERACTION) --enable-installer
128 endif
129else
130 VBOX_PDFLATEX ?= pdflatex
131 VBOX_PDFLATEX_HALT = $(shell ( $(VBOX_PDFLATEX) -version | head -1 | grep 141592 > /dev/null ) && echo -halt-on-error )
132 VBOX_PDFLATEX_CMD = pdflatex $(VBOX_PDFLATEX_HALT) -interaction $(VBOX_PDFLATEX_INTERACTION)
133endif
134
135# Windows HTML Help Workshop compiler (stupid thing always returns an error!)
136VBOX_HHC = -$(EXEC_X86_WIN32) $(VBOX_PATH_HTML_HELP_WORKSHOP)/hhc.exe
137
138
139# Additional xsltproc options when generating
140VBOX_HTMLHELP_OPTS ?=
141
142# SDK related globals.
143VBOX_MANUAL_APIREF_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef_apiref.xml
144VBOX_DOC_XIDL_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
145VBOX_DOC_XIDL_SRC_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.xidl.tmp
146
147##
148# Non-pattern-rule approach to editing XSLT files.
149# $(evalcall2 def_vbox_replace_paths_in_xslt)
150# @param 1 The XSLT source file (relative to Makefile dir).
151# @param 2 Optional output subdirectory (leading slash).
152define def_vbox_replace_paths_in_xslt
153OTHER_CLEAN += $$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1)
154$$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1): $$(VBOX_PATH_MANUAL_SRC)/$1 | $$$$(dir $$$$@)
155 $$(call MSG_L1,Pre-processing $$(<) to $$(@))
156 $$(QUIET)$$(SED) \
157 -e 's|@VBOX_PATH_DOCBOOK@|$$(VBOX_PATH_DOCBOOK)|g' \
158 -e 's|@VBOX_PATH_MANUAL_SRC@|$$(VBOX_PATH_MANUAL_SRC)|g' \
159 -e 's|@VBOX_PATH_MANUAL_OUTBASE@|$$(VBOX_PATH_MANUAL_OUTBASE)|g' \
160 -e 's|@VBOX_PATH_MANUAL_OUT_LANG@|$$(VBOX_PATH_MANUAL_OUTBASE)$2|g' \
161 --output "$$(@)" $$<
162endef
163
164##
165# Non-pattern-rule approach to editing XML files.
166# $(evalcall2 def_vbox_replace_stuff_in_xml)
167# @param 1 The XSLT source file (relative to Makefile dir).
168# @param 2 Optional output subdirectory (leading slash).
169#
170define def_vbox_replace_stuff_in_xml
171OTHER_CLEAN += $$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1)
172$$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1): $$(VBOX_PATH_MANUAL_SRC)/$1 $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
173 $$(call MSG_L1,Pre-processing $$(<) to $$(@))
174 $$(QUIET)$$(SED) \
175 -e 's|@VBOX_PATH_DOCBOOK@|$$(VBOX_PATH_DOCBOOK)|g' \
176 -e 's|@VBOX_PATH_MANUAL_SRC@|$$(VBOX_PATH_MANUAL_SRC)|g' \
177 -e 's|@VBOX_PATH_MANUAL_OUTBASE@|$$(VBOX_PATH_MANUAL_OUTBASE)|g' \
178 -e 's|@VBOX_PATH_MANUAL_OUT_LANG@|$$(VBOX_PATH_MANUAL_OUTBASE)$2|g' \
179 \
180 -e 's/@VBOX_VERSION_MAJOR@/$$(VBOX_VERSION_MAJOR)/g' \
181 -e 's/@VBOX_VERSION_MINOR@/$$(VBOX_VERSION_MINOR)/g' \
182 -e 's/@VBOX_VERSION_BUILD@/$$(VBOX_VERSION_BUILD)/g' \
183 -e 's/@VBOX_VERSION_STRING@/$$(VBOX_VERSION_STRING)/g' \
184 -e 's/@VBOX_VENDOR@/$$(VBOX_VENDOR)/g' \
185 -e 's/@VBOX_PRODUCT@/$$(VBOX_PRODUCT)/g' \
186 -e 's/@VBOX_C_YEAR@/$$(VBOX_C_YEAR)/g' \
187 \
188 --output "$$(@)" $$<
189endef
190
191## List of refentry files (manpages).
192VBOX_MANUAL_XML_REFENTRY_FILES = \
193 man_VBoxManage-debugvm.xml \
194 man_VBoxManage-extpack.xml \
195 man_VBoxManage-unattended.xml
196
197
198#
199# Targets
200#
201
202BLDDIRS += $(VBOX_PATH_MANUAL_OUTBASE) $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/, $(VBOX_MANUAL_LANGUAGES))
203
204
205if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
206 if defined(VBOX_ONLY_SDK) || defined(VBOX_WITH_DOCS_SDKREF)
207 INSTALLS += VBox-docs-sdkref
208 endif
209
210 ifdef VBOX_WITH_DOCS_CHM
211 INSTALLS += VBox-docs-usermanual-chm
212 VBOX_PATH_BIN_CHM = $(PATH_STAGE_BIN)/VirtualBox.chm
213 else # Do not build chm.
214 VBOX_PATH_BIN_CHM =
215 endif
216
217 ifndef VBOX_ONLY_SDK
218 VBOX_MANUAL_PACK += \
219 $(PATH_STAGE_BIN)/UserManual.pdf \
220 $(VBOX_PATH_BIN_CHM)
221 INSTALLS += VBox-docs-usermanual
222
223 ifdef VBOX_WITH_DOCS_TRANSLATIONS
224 INSTALLS += VBox-docs-usermanual-l10n
225 VBOX_MANUAL_PACK += \
226 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf)
227 ifdef VBOX_WITH_DOCS_CHM
228 INSTALLS += VBox-docs-usermanual-l10n-chm
229 VBOX_MANUAL_PACK += \
230 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm)
231 endif
232 endif
233 endif # !VBOX_ONLY_SDK
234
235 ifdef VBOX_WITH_DOCS_ACCESSIBILITY
236 INSTALLS += VBox-docs-accessibility
237 INSTALLS += VBox-docs-accessibility-html
238 endif
239
240 ifdef VBOX_ONLY_DOCS
241 PACKING += $(PATH_STAGE_BIN)/VBoxDocumentation.zip
242 endif
243
244 ifdef VBOX_WITH_DOCS_TRANSLATIONS
245 VBOX_MANUAL_LANGUAGES += $(VBOX_MANUAL_ADD_LANGUAGES)
246 endif
247
248 VBOX_MANUAL_XML_CHANGELOG = \
249 user_ChangeLogImpl.xml
250
251 VBOX_MANUAL_XML_FILES = \
252 UserManual.xml \
253 user_AdvancedTopics.xml \
254 user_BasicConcepts.xml \
255 user_Glossary.xml \
256 user_Frontends.xml \
257 user_Installation.xml \
258 user_GuestAdditions.xml \
259 user_Introduction.xml \
260 user_KnownIssues.xml \
261 user_PrivacyPolicy.xml \
262 user_Security.xml \
263 user_Technical.xml \
264 user_ThirdParty.xml \
265 user_Troubleshooting.xml \
266 user_VBoxManage.xml \
267 user_VirtualBoxAPI.xml \
268 user_Storage.xml \
269 user_Networking.xml
270
271 VBOX_MANUAL_XML_FILES_INCL_CHANGELOG = $(VBOX_MANUAL_XML_FILES) \
272 user_ChangeLog.xml
273
274 VBOX_SDKREF_XML_FILES = \
275 SDKRef.xml
276
277 VBOX_ACCESSIBILITY_XML_FILES = \
278 Accessibility.xml
279
280 # Wildcard the images path for every supported language
281 $(foreach f,$(VBOX_MANUAL_LANGUAGES), \
282 $(eval VBOX_MANUAL_PNG_FILES_$$(f) := $$(patsubst $$(VBOX_PATH_MANUAL_SRC)/$$(f)/%,%,$$(wildcard $$(VBOX_PATH_MANUAL_SRC)/$$(f)/images/*.png))))
283
284 VBOX_MANUAL_TEX_UNICODE_FILES = \
285 $(wildcard $(VBOX_PATH_MANUAL_SRC)/texfiles/unicode/*)
286
287 VBOX_MANUAL_LATEX_FILES_TARGET = \
288 $(addprefix UserManual.,aux log out toc tex)
289
290 VBOX_SDKREF_LATEX_FILES_TARGET = \
291 $(addprefix SDKRef.,aux log out toc tex)
292
293 VBOX_ACCESSIBILITY_LATEX_FILES_TARGET = \
294 $(addprefix Accessibility.,aux log out toc tex)
295
296 BLDDIRS += \
297 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/,\
298 $(addsuffix /images, $(VBOX_MANUAL_LANGUAGES)) \
299 $(addsuffix /html-single, $(VBOX_MANUAL_LANGUAGES)) \
300 $(addsuffix /html-chunks, $(VBOX_MANUAL_LANGUAGES)) \
301 $(addsuffix /HTMLHelp, $(VBOX_MANUAL_LANGUAGES)) \
302 $(addsuffix /HTMLHelp/images, $(VBOX_MANUAL_LANGUAGES)) \
303 )
304
305 # Explicit cleaning has some overlap with default cleaning rules, since this
306 # Makefile is using very complex conditionals for selectively creating
307 # specific files, and not everyone remembers to use the same with "kmk clean".
308 OTHER_CLEAN += \
309 $(VBOX_XML_CATALOG) \
310 $(VBOX_XML_CATALOG_DOCBOOK) \
311 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/, \
312 $(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG) \
313 $(VBOX_MANUAL_XML_REFENTRY_FILES) \
314 $(addprefix user_,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
315 $(patsubst man_%,%.1,$(basename $(VBOX_MANUAL_XML_REFENTRY_FILES))) \
316 $(VBOX_MANUAL_LATEX_FILES_TARGET) \
317 $(VBOX_MANUAL_PNG_FILES_$(lang)) \
318 $(notdir $(VBOX_MANUAL_TEX_UNICODE_FILES)) \
319 $(addprefix HTMLHelp/,$(VBOX_MANUAL_PNG_FILES_$(lang))) \
320 html-single/UserManual.html \
321 $(addprefix HTMLHelp/, index.html go01.html) \
322 $(addprefix html-chunks/, index.html go01.html) \
323 $(foreach n,01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 \
324 ,html-chunks/ch$(n).html \
325 html-chunks/re$(n).html \
326 HTMLHelp/ch$(n).html \
327 HTMLHelp/re$(n).html \
328 $(foreach d2,0 1 2 3 4 5 6 7 8 9,$(foreach d1,0 1 2 3 4 5 6 7 8 9,HTMLHelp/ch$(n)s$(d2)$(d1).html)) ) \
329 $(foreach n,a b c \
330 ,html-chunks/ap$(n).html \
331 HTMLHelp/ap$(n).html \
332 $(foreach s,01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20,HTMLHelp/ap$(n)s$(s).html) ) \
333 HTMLHelp/toc.hhc \
334 HTMLHelp/htmlhelp.hhp \
335 titlepage-htmlhelp.xsl \
336 UserManual.pdf \
337 VirtualBox.chm \
338 ChangeLog.html \
339 validatemanual.run \
340 )) \
341 $(VBOX_PATH_MANUAL_OUTBASE)/$(VBOX_MANUAL_XML_CHANGELOG) \
342 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/overview_,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
343 $(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml \
344 $(VBOX_PATH_MANUAL_OUTBASE)/user_AdvancedTopics_VISO_Options.xml \
345 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf) \
346 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm) \
347 $(PATH_STAGE_BIN)/UserManual.pdf \
348 $(PATH_STAGE_BIN)/VirtualBox.chm \
349 \
350 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/, \
351 $(VBOX_SDKREF_XML_FILES) \
352 $(VBOX_SDKREF_LATEX_FILES_TARGET) \
353 SDKRef.pdf \
354 ) \
355 $(PATH_STAGE_BIN)/sdk/docs/SDKRef.pdf \
356 \
357 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/, \
358 $(VBOX_ACCESSIBILITY_XML_FILES) \
359 $(VBOX_ACCESSIBILITY_LATEX_FILES_TARGET) \
360 html-single/Accessibility.html \
361 Accessibility.pdf \
362 ) \
363 $(PATH_STAGE_BIN)/Accessibility.html \
364 $(PATH_STAGE_BIN)/Accessibility.pdf \
365 \
366 $(VBOX_DOC_XIDL_SRC_TMP) \
367 $(VBOX_MANUAL_APIREF_TMP)
368
369endif # if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
370
371#
372# target for installing UserManual.pdf
373#
374VBox-docs-usermanual_INST = $(INST_BIN)
375VBox-docs-usermanual_MODE = a+r,u+w
376VBox-docs-usermanual_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.pdf
377
378#
379# target for installing translated UserManual_*.pdf
380#
381VBox-docs-usermanual-l10n_INST = $(INST_BIN)
382VBox-docs-usermanual-l10n_MODE = a+r,u+w
383VBox-docs-usermanual-l10n_SOURCES = $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$(f)/UserManual.pdf=>UserManual_$(f).pdf)
384
385#
386# target for installing VirtualBox.chm
387#
388VBox-docs-usermanual-chm_INST = $(INST_BIN)
389VBox-docs-usermanual-chm_MODE = a+r,u+w
390VBox-docs-usermanual-chm_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.chm
391
392#
393# target for installing translated VirtualBox_*.chm
394#
395VBox-docs-usermanual-l10n-chm_INST = $(INST_BIN)
396VBox-docs-usermanual-l10n-chm_MODE = a+r,u+w
397VBox-docs-usermanual-l10n-chm_SOURCES = $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$(f)/VirtualBox.chm=>VirtualBox_$(f).chm)
398
399#
400# target for installing SDKRef.pdf
401#
402VBox-docs-sdkref_INST = $(INST_SDK)docs/
403VBox-docs-sdkref_MODE = a+r,u+w
404VBox-docs-sdkref_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.pdf
405
406#
407# target for installing Accessibility.pdf
408#
409VBox-docs-accessibility_INST = $(INST_BIN)
410VBox-docs-accessibility_MODE = a+r,u+w
411VBox-docs-accessibility_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.pdf
412
413#
414# target for installing Accessibility.html
415#
416VBox-docs-accessibility-html_INST = $(INST_BIN)
417VBox-docs-accessibility-html_MODE = a+r,u+w
418VBox-docs-accessibility-html_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html
419
420
421#
422# To avoid network I/O for fetching DTDs, we generate catalogs mapping the public
423# entity IDs to local files. (Obviously, only done when we have local files.)
424#
425ifdef VBOX_XML_CATALOG
426# Create a catalog file for xsltproc that points to docbook catalog.
427$(VBOX_XML_CATALOG): $(MAKEFILE_CURRENT) | $$(dir $$@)
428 $(call MSG_L1,Creating catalog $@)
429 $(QUIET)$(RM) -f $@.tmp $@
430 $(QUIET)$(APPEND) $@.tmp '<?xml version="1.0"?>'
431 $(QUIET)$(APPEND) $@.tmp '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">'
432 $(QUIET)$(APPEND) $@.tmp '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">'
433 $(QUIET)$(APPEND) $@.tmp ' <delegatePublic publicIdStartString="-//OASIS/ENTITIES DocBook XML" catalog="file:///$(VBOX_XML_CATALOG_DOCBOOK)"/>'
434 $(QUIET)$(APPEND) $@.tmp ' <delegatePublic publicIdStartString="-//OASIS/DTD DocBook XML" catalog="file:///$(VBOX_XML_CATALOG_DOCBOOK)"/>'
435 $(QUIET)$(APPEND) $@.tmp ' <delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/" catalog="file:///$(VBOX_XML_CATALOG_DOCBOOK)"/>'
436 $(QUIET)$(APPEND) $@.tmp ' <delegateURI uriStartString="http://www.oasis-open.org/docbook/" catalog="file:///$(VBOX_XML_CATALOG_DOCBOOK)"/>'
437 $(QUIET)$(APPEND) $@.tmp '</catalog>'
438 $(QUIET)$(MV) -f $@.tmp $@
439
440# Create a docbook catalog file for xsltproc that points to the local docbook files.
441$(VBOX_XML_CATALOG_DOCBOOK): $(MAKEFILE_CURRENT) | $$(dir $$@)
442 $(call MSG_L1,Creating catalog $@)
443 $(QUIET)$(RM) -f $@.tmp $@
444 $(QUIET)$(APPEND) $@.tmp '<?xml version="1.0"?>'
445 $(QUIET)$(APPEND) $@.tmp '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">'
446 $(QUIET)$(APPEND) $@.tmp '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">'
447 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ELEMENTS DocBook XML Information Pool V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbpoolx.mod"/>'
448 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd"/>'
449 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML V4.4//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd"/>'
450 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Character Entities V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbcentx.mod"/>'
451 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Notations V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbnotnx.mod"/>'
452 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Additional General Entities V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbgenent.mod"/>'
453 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbhierx.mod"/>'
454 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/soextblx.dtd"/>'
455 $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML CALS Table Model V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/calstblx.dtd"/>'
456 $(QUIET)$(APPEND) $@.tmp ' <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>'
457 $(QUIET)$(APPEND) $@.tmp ' <rewriteURI uriStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>'
458 $(QUIET)$(APPEND) $@.tmp ' <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>'
459 $(QUIET)$(APPEND) $@.tmp ' <rewriteURI uriStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>'
460 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsa.ent"/>'
461 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsb.ent"/>'
462 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsc.ent"/>'
463 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsn.ent"/>'
464 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amso.ent"/>'
465 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsr.ent"/>'
466 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Box and Line Drawing//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-box.ent"/>'
467 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Russian Cyrillic//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-cyr1.ent"/>'
468 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-cyr2.ent"/>'
469 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-dia.ent"/>'
470 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Greek Letters//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-grk1.ent"/>'
471 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Monotoniko Greek//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-grk2.ent"/>'
472 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Greek Symbols//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-grk3.ent"/>'
473 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-grk4.ent"/>'
474 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-lat1.ent"/>'
475 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Latin 2//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-lat2.ent"/>'
476 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-num.ent"/>'
477 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Publishing//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-pub.ent"/>'
478 $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES General Technical//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-tech.ent"/>'
479 $(QUIET)$(APPEND) $@.tmp '</catalog>'
480 $(QUIET)$(MV) -f $@.tmp $@
481endif
482
483
484if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
485
486
487##########################################################################################
488#
489# Rules: Preprocess DocBook XML files
490# (preliminary step for both CHM and PDF generation)
491#
492##########################################################################################
493
494#
495# The following rules for $(VBOX_PATH_MANUAL_OUTBASE)/*.xml process the XML files
496# in doc/manual to allow for some magic variable replacements. The PDF and CHM
497# targets do not depend on the XML files in doc/manual, but those in
498# $(VBOX_PATH_MANUAL_OUTBASE) instead, which we copy there from here, after that magic
499# processing.
500#
501# So, before copying, the following steps are performed:
502#
503# -- $VBOX_VERSION_* strings are replaced with the actual current VBox version.
504# -- $VBOX_MANAGE_OUTPUT (in VBoxManage.xml) is replaced with the current
505# output of the actual VBoxManage program, to save us from having to
506# update the manual all the time.
507#
508
509# Only one changelog for all languages
510# $(VBOX_PATH_MANUAL_OUTBASE)/$(VBOX_MANUAL_XML_CHANGELOG): $(VBOX_PATH_MANUAL_SRC)/$(VBOX_MANUAL_XML_CHANGELOG) | $$(dir $$@)
511# $(QUIET)$(INSTALL) -m 0644 $< $@
512
513# Manual dependency on user_ChangeLogImpl.xml
514$(foreach lang,$(VBOX_MANUAL_LANGUAGES) \
515,$(eval $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/user_ChangeLog.xml: $(VBOX_PATH_MANUAL_SRC)/user_ChangeLogImpl.xml))
516
517# Manual dependency for user_VBoxManage.xml.
518$(foreach lang,$(VBOX_MANUAL_LANGUAGES), \
519$(eval $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/user_VBoxManage.xml: $(VBOX_PATH_MANUAL_SRC)/$(lang)/user_VBoxManage.xml \
520 $$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/user_,$$(filter man_VBoxManage%,$$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
521 $$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/overview_,$$(filter man_VBoxManage%,$$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
522 $(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml \
523 $(VBOX_PATH_MANUAL_OUTBASE)/user_AdvancedTopics_VISO_Options.xml ))
524
525# Intermediate step to do some variable replacement in the document.
526$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG) \
527,$(evalcall2 def_vbox_replace_stuff_in_xml,/$(lang)/$(file),/$(lang))))
528
529##
530# Morph man pages into manual sections.
531# $(evalcall2 def_vbox_refentry_to_user_sect1)
532# @param 1 The XSLT source file (relative to Makefile dir).
533# @param 2 Optional output subdirectory.
534define def_vbox_refentry_to_user_sect1
535$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/user_$(2): \
536 $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2) \
537 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl \
538 $$(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) \
539 $$(VBOX_VERSION_STAMP) | $$(dir $$@)
540 $$(call MSG_TOOL,xsltproc $$(notdir $$(filter %.xsl,$$^)),,$$(filter %.xml,$$^),$$@)
541 $$(QUIET)$$(RM) -f "$$@"
542 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl $$<
543endef
544$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
545, $(evalcall2 def_vbox_refentry_to_user_sect1,$(lang),$(file))))
546
547
548# Generates the VBoxManage command overview include file (shared between
549# languages) from the refsynopsisdiv section of the man pages.
550$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/overview_,$(VBOX_MANUAL_XML_REFENTRY_FILES)): \
551 $(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-overview.xsl \
552 $$(patsubst overview_%,$$(VBOX_PATH_MANUAL_SRC)/en_US/%,$$(notdir $$@)) \
553 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) \
554 | $$(dir $$@)
555 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
556 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --output "$@" $< $(filter %.xml,$^)
557
558$(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml: $(VBOXMANAGEHELP_PATH) $(MAKEFILE_CURRENT) | $$(dir $$@)
559 $(call MSG_GENERATE,,$@,)
560 $(QUIET)$(RM) -f $@ $@.dumpopts
561 $(QUIET)$(APPEND) -tn "$@" \
562 '<?xml version="1.0" encoding="UTF-8"?>' \
563 '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">' \
564 '<sect1> <!-- this will be skipped via xpointer in the include. --> '
565 $(QUIET)$(REDIRECT) -wo $@.dumpopts -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
566 $(if $(eq $(KBUILD_TARGET),darwin), -E 'DYLD_FALLBACK_LIBRARY_PATH=$(dir $(LIB_RUNTIME))') \
567 -- \
568 $(VBOXMANAGEHELP_PATH) --dumpopts
569 $(QUIET)$(SED) \
570 -e ':a' \
571 -e 'N' \
572 -e '$(DOLLAR)!ba' \
573 -e 's/</\&lt\;/g' \
574 -e 's/>/\&gt\;/g' \
575 -e 's/\n*$(DOLLAR)/<\/screen>/' \
576 -e 's/^/<screen>/' \
577 --append $@ $@.dumpopts
578 $(QUIET)$(RM) -f $@.dumpopts
579 $(QUIET)$(APPEND) -n "$@" \
580 ' <remark role="VBoxManage-overview">' \
581 $(foreach refentry, $(filter man_VBoxManage%,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
582 , ' <xi:include href="overview_$(refentry)" xpointer="element(/1)" xmlns:xi="http://www.w3.org/2001/XInclude" />') \
583 ' </remark>' \
584 '</sect1>'
585
586# Generate the VISO option listing.
587$(VBOX_PATH_MANUAL_OUTBASE)/user_AdvancedTopics_VISO_Options.xml: $(VBOX_RTISOMAKER) $(MAKEFILE_CURRENT) | $$(dir $$@)
588 $(call MSG_GENERATE,,$@,)
589 $(QUIET)$(RM) -f $@ $@.dumpopts
590 $(QUIET)$(APPEND) -tn "$@" \
591 '<?xml version="1.0" encoding="UTF-8"?>' \
592 '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">' \
593 '<sect1> <!-- this will be skipped via xpointer in the include. --> '
594 $(QUIET)$(REDIRECT) -wo $@.dumpopts -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
595 -- $(VBOX_RTISOMAKER) --help
596 $(QUIET)$(SED) \
597 -e ':a' \
598 -e 'N' \
599 -e '$(DOLLAR)!ba' \
600 -e 's/bldRTIsoMaker/RTIsoMaker/' \
601 -e 's/&/\&amp\;/g' \
602 -e 's/</\&lt\;/g' \
603 -e 's/>/\&gt\;/g' \
604 -e 's/\n*$(DOLLAR)/<\/screen>/' \
605 -e 's/^/<screen>/' \
606 --append $@ $@.dumpopts
607 $(QUIET)$(RM) -f $@.dumpopts
608 $(QUIET)$(APPEND) -n "$@" \
609 '</sect1>'
610
611
612
613
614##########################################################################################
615#
616# Shared rules for PDF generation
617#
618##########################################################################################
619
620ifndef VBOX_OSE
621# copy ucs.sty and related files
622$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/ucs.sty):
623 $(call MSG_L1,Copying unicode support for LaTeX)
624 $(QUIET)$(INSTALL_STAGING) -m0644 -- $(VBOX_MANUAL_TEX_UNICODE_FILES) "$(@D)"
625endif
626
627# copy the PNG files.
628# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
629define def_vbox_cp_images_pdf
630local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
631$(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
632 $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
633 $$(call MSG_L1,Copying temporary $$< => $$@)
634 $$(QUIET)$$(INSTALL_STAGING) -m0644 -- '$$<' '$$(@D)'
635endef
636
637$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_cp_images_pdf))
638
639
640##########################################################################################
641#
642# UserManual.pdf
643#
644##########################################################################################
645
646$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/UserManual.pdf): \
647 $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.pdf : \
648 $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.tex \
649 $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/%/ucs.sty) \
650 $(foreach f,$(VBOX_MANUAL_LANGUAGES),\
651 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_MANUAL_PNG_FILES_$(f)))) | $$(dir $$@)
652# PDF generation via Latex: generate the .tex file
653 $(call MSG_L1,pdflatex $< (four passes) -> $@)
654 $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(VBOX_PDFLATEX_CMD) UserManual.tex
655 $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(VBOX_PDFLATEX_CMD) UserManual.tex
656 $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(VBOX_PDFLATEX_CMD) UserManual.tex
657 $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(VBOX_PDFLATEX_CMD) UserManual.tex
658 $(QUIET)$(SED) -ne '/Warning: Hyper reference/p' $(basename $<).log
659 $(QUIET)$(SED) -n \
660 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
661 $(basename $@).log
662 $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
663
664# generate temporary LaTeX source from processed XML
665$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/UserManual.tex): \
666 $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.tex : \
667 $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.xml \
668 $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
669 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/%/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
670 $(if $(and $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_DOCBOOK_DTD)),$(VBOX_PATH_MANUAL_OUTBASE)/%/validatemanual.run,) \
671 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(MAKEFILE_CURRENT)
672 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
673 $(QUIET)$(RM) -f $(addprefix $(@D)/,$(VBOX_MANUAL_LATEX_FILES_TARGET))
674# generate TeX source from processed docbook and store it in UserManual.tex.tmp;
675# pass current language to xsltproc in TARGETLANG variable (extract it from the
676# current directory, should become "de_DE" or the like)
677 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG $(notdir $(@D)) \
678 -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
679# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
680# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
681 $(QUIET)$(SED) \
682 -e 's|^\\QUOTE{}|\\OQ{}|g' \
683 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
684 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
685 --output $@ $@.tmp
686 $(QUIET)$(RM) -f $@.tmp
687
688# Useful aliases
689usermanual UserManual.pdf:: $(PATH_STAGE_BIN)/UserManual.pdf
690
691debug-usermanual:
692 $(MAKE) --pretty-command-printing -j1 VBOX_PDFLATEX_INTERACTION=errorstopmode $(PATH_STAGE_BIN)/UserManual.pdf
693
694#
695# Generate rules for validating the UserManual.xml. These are invoked
696# automatically at build time, but can also be manually invoked via the
697# 'validatemanual' and 'validatemanual_<lang>' aliases.
698#
699define def_vbox_validate_xml
700validatemanual_$(lang):: $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/validatemanual.run
701$$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/validatemanual.run: \
702 $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/UserManual.xml \
703 $$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/,$$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
704 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(MAKEFILE_CURRENT) | $$$$(dir $$$$@)
705 $$(call MSG_L1,Validating $$<)
706 $$(QUIET)$$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $$<
707 $$(QUIET)$$(APPEND) -t "$$@" "done"
708endef
709$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_validate_xml))
710validatemanual:: $(foreach lang,$(VBOX_MANUAL_LANGUAGES),validatemanual_$(lang))
711
712
713
714#
715# SDKRef.pdf
716#
717
718# Replace <tt> tags in VirtualBox.xidl.
719$(VBOX_DOC_XIDL_SRC_TMP): $(VBOX_DOC_XIDL_SRC) $(MAKEFILE_CURRENT) | $$(dir $$@)
720 $(call MSG_L1,Generating $@)
721 $(QUIET)$(SED) -e 's|@a \+\(\w\+\)|<tt>\1</tt>|g' \
722 -e 's|@c \+\(\w\+\)|<tt>\1</tt>|g' \
723 --output $@ $<
724
725# Generate SDKRef_apiref.xml as a docbook file excerpt that will be referenced from the SDKRef.xml.
726$(VBOX_MANUAL_APIREF_TMP): $(VBOX_PATH_MANUAL_SRC)/xidl2docbook.xsl $(VBOX_DOC_XIDL_SRC_TMP)
727 $(call MSG_L1,Generating $@)
728 $(QUIET)$(VBOX_XSLTPROC) $(VBOX_XSLTPROC_OPTS) --xinclude --nonet -o $@ $< $(VBOX_DOC_XIDL_SRC_TMP)
729
730$(evalcall2 def_vbox_replace_stuff_in_xml,/en_US/SDKRef.xml,/en_US)
731$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.xml: $(VBOX_MANUAL_APIREF_TMP)
732
733# Turn SDKRef.xml into latex.
734$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex: \
735 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_SDKREF_XML_FILES)) \
736 $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
737 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(MAKEFILE_CURRENT) | $$(dir $$@)
738 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
739 $(QUIET)$(RM) -f $(addprefix $(@D/),$(VBOX_SDKREF_LATEX_FILES_TARGET))
740## check it for validity first.
741#if defined(VBOX_HAVE_XMLLINT) && defined(VBOX_PATH_DOCBOOK_DTD)
742# $(QUIET)$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $<
743#endif
744# generate TeX source from processed docbook and store it in SDKRef.tex.tmp
745 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG en_US \
746 -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
747# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
748# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
749 $(QUIET)$(SED) \
750 -e 's|^\\QUOTE{}|\\OQ{}|g' \
751 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
752 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
753 --output $@ $@.tmp
754 $(QUIET)$(RM) -f $@.tmp
755
756# Turn SDKRef.tex into a PDF.
757$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.pdf: \
758 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex \
759 $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ucs.sty) \
760 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) | $$(dir $$@)
761 $(call MSG_L1,pdflatex $< (three passes))
762 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
763 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
764 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
765 $(QUIET)$(SED) -ne '/Warning: Hyper reference/p' $(basename $<).log
766 $(QUIET)$(SED) -n \
767 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
768 $(basename $<).log
769 $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
770
771
772# Handy aliases.
773validate-sdkref:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.xml
774sdkref:: $(VBOX_PATH_SDK)/docs/SDKRef.pdf
775
776
777
778#
779# Accessibility.pdf
780#
781
782$(evalcall2 def_vbox_replace_stuff_in_xml,/en_US/Accessibility.xml,/en_US)
783
784# Turn Accessibility.xml into latex.
785$(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.tex: \
786 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_ACCESSIBILITY_XML_FILES)) \
787 $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
788 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(MAKEFILE_CURRENT) | $$(dir $$@)
789 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
790 $(QUIET)$(RM) -f $(addprefix $(@D/),$(VBOX_ACCESSIBILITY_LATEX_FILES_TARGET))
791# check it for validity first.
792if defined(VBOX_HAVE_XMLLINT) && defined(VBOX_PATH_DOCBOOK_DTD)
793 $(QUIET)$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $<
794endif
795# generate TeX source from processed docbook and store it in Accessibility.tex.tmp
796 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG en_US \
797 -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
798# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
799# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
800 $(QUIET)$(SED) \
801 -e 's|^\\QUOTE{}|\\OQ{}|g' \
802 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
803 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
804 --output $@ $@.tmp
805 $(QUIET)$(RM) -f $@.tmp
806
807# Turn Accessibility.tex into a PDF.
808$(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.pdf: \
809 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.tex \
810 $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ucs.sty) \
811 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) | $$(dir $$@)
812 $(call MSG_L1,pdflatex $< (three passes))
813 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
814 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
815 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
816 $(QUIET)$(SED) -ne '/Warning: Hyper reference/p' $(basename $<).log
817 $(QUIET)$(SED) -n \
818 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
819 $(basename $<).log
820 $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
821
822$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html: \
823 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
824 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_ACCESSIBILITY_XML_FILES)) \
825 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) \
826 | $$(dir $$@)
827 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
828 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
829 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html \
830 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
831 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.xml
832
833# Handy aliases.
834validate-accessibility:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.xml
835accessibility:: $(PATH_STAGE_BIN)/Accessibility.pdf
836accessibility-html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html
837
838
839ifdef VBOX_WITH_DOCS_CHM
840 #
841 # VirtualBox.chm
842 #
843 # We first generate a .hhp help source file from the preprocessed
844 # DocBook XML files, as defined above, then feed that into the
845 # Microsoft Help Compiler.
846 #
847 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-htmlhelp-formatcfg.xsl,/$(lang)))
848
849 # Manual formatcfg dependencies for the above.
850 $(foreach lang,$(VBOX_MANUAL_LANGUAGES), $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/docbook-htmlhelp-formatcfg.xsl): \
851 $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl \
852 $(VBOX_PATH_MANUAL_SRC)/common-html-formatcfg.xsl
853
854 $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/VirtualBox.chm): \
855 $(VBOX_PATH_MANUAL_OUTBASE)/%/VirtualBox.chm: \
856 $(VBOX_PATH_MANUAL_OUTBASE)/%/HTMLHelp/htmlhelp.hhp \
857 $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/,$(VBOX_MANUAL_PNG_FILES_$(f))))
858 $(call MSG_L1,hhc $<,=> $@)
859 $(QUIET)$(RM) -f $@
860 $(QUIET)$(VBOX_HHC) $(subst /,\\,$<)
861 $(call MSG_L1,Fresh CHM is now at $@)
862
863 # Prepare the XSL file for our title page, htmlhelp variant.
864 $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/titlepage-htmlhelp.xsl): \
865 $(VBOX_PATH_MANUAL_SRC)/titlepage-htmlhelp.xml $(MAKEFILE_CURRENT) | $$(dir $$@)
866 $(call MSG_L1,xsltproc $<)
867 $(QUIET)$(RM) -f $@.tmp $@
868 $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet -o $@.tmp $(VBOX_PATH_DOCBOOK)/template/titlepage.xsl $<
869 $(QUIET)$(MV) -f $@.tmp $@
870
871 $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/htmlhelp.hhp): \
872 $(VBOX_PATH_MANUAL_OUTBASE)/%/HTMLHelp/htmlhelp.hhp: \
873 $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.xml \
874 $(VBOX_PATH_MANUAL_OUTBASE)/%/docbook-htmlhelp-formatcfg.xsl \
875 $(VBOX_PATH_MANUAL_OUTBASE)/%/titlepage-htmlhelp.xsl \
876 $(VBOX_PATH_MANUAL_OUTBASE)/%/validatemanual.run \
877 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/%/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
878 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK)
879 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
880 $(QUIET)$(RM) -f $@
881 $(QUIET)$(MKDIR) -p $(@D)
882 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --output $(@D)/ \
883 --stringparam htmlhelp.chm \
884 $(subst /,\\,$(@D)/../VirtualBox.chm) \
885 $(HTMLHELPOPTS) $(@D)/../docbook-htmlhelp-formatcfg.xsl \
886 $<
887
888 # copy the PNG files.
889 # Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
890 define def_vbox_cp_images_html
891 local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/HTMLHelp
892 $$(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
893 $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
894 $$(call MSG_L1,Copying temporary $$< => $$@)
895 $$(QUIET)$$(CP) -f $$< $$@
896 endef
897
898 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(eval $(def_vbox_cp_images_html)))
899
900 # Packing the docs into a zip file
901 $(PATH_STAGE_BIN)/VBoxDocumentation.zip: $(VBOX_MANUAL_PACK)
902 $(call MSG_L1,Packing documentation $@)
903 $(QUIET)$(RM) -f $@
904 $(QUIET)$(REDIRECT) -C $(PATH_STAGE_BIN) -- $(VBOX_ZIP) -9 $@ $(notdir $^)
905
906endif # VBOX_WITH_DOCS_CHM
907
908
909##########################################################################################
910#
911# UserManual.html
912#
913##########################################################################################
914$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-one-page-formatcfg.xsl,/en_US)
915$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-chunks-formatcfg.xsl,/en_US)
916
917# Manual formatcfg dependencies.
918$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
919$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl: \
920 $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl \
921 $(VBOX_PATH_MANUAL_SRC)/common-html-formatcfg.xsl
922
923$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html: \
924 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
925 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
926 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) \
927 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatemanual.run,) \
928 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) \
929 | $$(dir $$@)
930 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
931 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
932 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
933 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
934 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml
935
936$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html: \
937 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl \
938 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
939 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) \
940 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatemanual.run,) \
941 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) \
942 | $$(dir $$@)
943 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
944 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
945 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html \
946 --stringparam chunk.section.depth 0 \
947 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl \
948 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml
949
950$(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip: \
951 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
952 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html
953 $(call MSG_L1,Packing documentation $@)
954 $(QUIET)$(RM) -f $@
955 $(QUIET)$(REDIRECT) -C $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ -- $(VBOX_ZIP) \
956 -9 -r $@ html-single html-chunks $(VBOX_MANUAL_PNG_FILES_en_US)
957
958html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html
959html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html
960html-zip:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip
961
962
963#
964# ChangeLog.html
965#
966# This XSLT rule depends on $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml, which is build by the complex rule
967# $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/user_ChangeLog.xml): ...
968# much further above. That rule takes en_US/user_ChangeLog.xml and replaces $VIRTUALBOX_CHANGELOG_IMPL
969# with the actual change log contained in user_ChangeLogImpl.xml
970#
971$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-changelog-formatcfg.xsl,/en_US)
972$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html: \
973 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-changelog-formatcfg.xsl \
974 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml \
975 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) | $$(dir $$@)
976 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
977 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --output "$@" "$<" $(filter %.xml,$^)
978 $(call MSG_L1,Fresh ChangeLog.html is now at $@)
979
980cl-html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html
981
982
983
984endif # if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
985
986
987#
988# VBoxManage man pages (parts also required by VBoxManage built-in help).
989#
990$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-refentry-to-manpage.xsl,)
991
992##
993# Emits rules for preprocessing refentry sources (applying remarks element),
994# and for producing the actual man pages.
995# $(evalcall2 def_vbox_refentry_to_manpage)
996# @param 1 The language
997# @param 2 The file name (no path).
998define def_vbox_refentry_to_manpage
999$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(2): \
1000 $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2) \
1001 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage-preprocessing.xsl \
1002 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) \
1003 $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
1004 $$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
1005 $$(QUIET)$$(RM) -f "$$@"
1006 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ \
1007 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage-preprocessing.xsl $$<
1008if defined(VBOX_HAVE_XMLLINT) && "$(USER)" == "bird" # Effing stuff happends on build servers, probably kmk related...
1009 $$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $$@
1010endif
1011
1012$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(patsubst man_%,%.1,$(basename $(2))): \
1013 $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(2) \
1014 $$(VBOX_PATH_MANUAL_OUTBASE)/docbook-refentry-to-manpage.xsl \
1015 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) \
1016 $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
1017 $$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
1018 $$(QUIET)$$(RM) -f "$$@"
1019 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_OUTBASE)/docbook-refentry-to-manpage.xsl $$<
1020endef
1021$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
1022, $(evalcall2 def_vbox_refentry_to_manpage,$(lang),$(file))))
1023
1024
1025# Handy aliases.
1026validate-manpages:: $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_REFENTRY_FILES))
1027man-experiment:: $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
1028 ,$$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/$(patsubst man_%,%.1,$(basename $(file)))))
1029
1030
1031#
1032# VBoxManage built-in help.
1033#
1034# Note! Generating the stuff here is a bit annoying, but currently the most
1035# practical way I can come up with.
1036#
1037OTHERS += \
1038 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp \
1039 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h
1040OTHER_CLEAN += \
1041 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp \
1042 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp.ts \
1043 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h \
1044 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h.ts
1045help-experiment:: \
1046 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp \
1047 $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h
1048
1049$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-refentry-to-C-help.xsl,)
1050$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-refentry-to-H-help.xsl,)
1051
1052$(VBOX_PATH_MANUAL_OUTBASE)/docbook-refentry-to-C-help.xsl: $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl # manual dependency.
1053
1054$(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp.ts \
1055+| $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.cpp: \
1056 $(VBOX_PATH_MANUAL_OUTBASE)/docbook-refentry-to-C-help.xsl \
1057 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(filter man_VBoxManage-%,$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
1058 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(MAKEFILE) | $$(dir $$@)
1059 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(filter %.xml,$^),$(patsubst %.ts,%,$@))
1060 $(QUIET)$(APPEND) -tn "$@" \
1061 '/* Autogenerated by $<, do not edit! */' \
1062 '' \
1063 '#include <iprt/types.h>' \
1064 '#include "VBoxManageBuiltInHelp.h"' \
1065 ''
1066 $(foreach refentry,$(filter %.xml,$^) \
1067 ,$(NLTAB)$(QUIET)$(call VBOX_XSLTPROC_WITH_CAT, -a+to "$@") $< $(refentry))
1068 $(QUIET)$(APPEND) -n "$@" \
1069 '' \
1070 'PCREFENTRY g_apHelpEntries[] = ' \
1071 '{'
1072 $(foreach refentry,$(filter %.xml,$^) \
1073 ,$(NLTAB)$(QUIET)$(APPEND) -n "$@" \
1074 ' &g_$(subst -,_,$(tolower $(patsubst man_%,%,$(notdir $(basename $(refentry)))))), ')
1075 $(QUIET)$(APPEND) -n "$@" \
1076 '};' \
1077 'const uint32_t g_cHelpEntries = RT_ELEMENTS(g_apHelpEntries);' \
1078 ''
1079 $(QUIET)$(CP) --changed -- "$@" "$(patsubst %.ts,%,$@)"
1080# The above APPEND stuff trigger some kind of problem on some boxes when not split up...
1081# update: Fixed in SVN (strcpy -> memmove in new_job(), job.c - r2591). Just need to rebuild all platforms.
1082
1083$(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h.ts \
1084+| $(VBOX_PATH_MANUAL_OUTBASE)/VBoxManageBuiltInHelp.h: \
1085 $(VBOX_PATH_MANUAL_OUTBASE)/docbook-refentry-to-H-help.xsl \
1086 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(filter man_VBoxManage-%,$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
1087 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(MAKEFILE) | $$(dir $$@)
1088 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(filter %.xml,$^),$(patsubst %.ts,%,$@))
1089 $(QUIET)$(APPEND) -tn "$@" \
1090 '/* Autogenerated by $<, do not edit! */' \
1091 '' \
1092 '#ifndef ___VBoxManageBuiltInHelp_h___' \
1093 '#define ___VBoxManageBuiltInHelp_h___' \
1094 '' \
1095 '#include <VBox/refentry.h>' \
1096 '' \
1097 'RT_C_DECLS_BEGIN' \
1098 '' \
1099 'typedef enum HELP_CMD_VBOXMANAGE' \
1100 '{' \
1101 ' HELP_CMD_VBOXMANAGE_INVALID = 0,'
1102 $(foreach refentry,$(filter %.xml,$^) \
1103 ,$(NLTAB)$(QUIET)$(call VBOX_XSLTPROC_WITH_CAT, -a+to "$@") \
1104 --stringparam 'g_sMode' 'cmd' $< $(refentry))
1105 $(QUIET)$(APPEND) -n "$@" \
1106 ' HELP_CMD_VBOXMANAGE_END' \
1107 '} HELP_CMD_VBOXMANAGE;'
1108 $(foreach refentry,$(filter %.xml,$^) \
1109 ,$(NLTAB)$(QUIET)$(call VBOX_XSLTPROC_WITH_CAT, -a+to "$@") \
1110 --stringparam 'g_sMode' 'subcmd' $< $(refentry))
1111 $(QUIET)$(APPEND) -n "$@" \
1112 '' \
1113 'extern PCREFENTRY g_apHelpEntries[];' \
1114 'extern const uint32_t g_cHelpEntries;' \
1115 '' \
1116 'RT_C_DECLS_END' \
1117 '' \
1118 '#endif' \
1119 ''
1120 $(QUIET)$(CP) --changed -- "$@" "$(patsubst %.ts,%,$@)"
1121
1122
1123include $(FILE_KBUILD_SUB_FOOTER)
1124
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette