VirtualBox

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

Last change on this file since 85704 was 85654, checked in by vboxsync, 4 years ago

*.kmk: PATH_DEVTOOLS* -> KBUILD_DEVTOOLS*.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 37.2 KB
Line 
1# $Id: Makefile.kmk 85654 2020-08-09 14:12:34Z vboxsync $
2## @file
3# Sub-Makefile for the VirtualBox User Manual, SDK reference and other manuals.
4#
5
6#
7# Copyright (C) 2006-2020 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
51ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
52 include $(PATH_SUB_CURRENT)/Config.kmk
53endif
54
55
56#
57# Globals
58#
59
60# Error out if someone tries to override old globals.
61ifdef HTMLHELPOPTS
62 $(error HTMLHELPOPTS was renamed to VBOX_HTMLHELP_OPTS!)
63endif
64ifdef DOCBOOKPATH
65 $(error DOCBOOKPATH was renamed to VBOX_PATH_DOCBOOK!)
66endif
67ifdef DOCBOOKPATH
68 $(error DOCBOOKPATH was renamed to VBOX_PATH_DOCBOOK!)
69endif
70ifdef XML_CATALOG
71 $(error XML_CATALOG was renamed to VBOX_XML_CATALOG!)
72endif
73ifdef XML_CATALOG_DOCBOOK
74 $(error XML_CATALOG_DOCBOOK was renamed to VBOX_XML_CATALOG_DOCBOOK!)
75endif
76ifdef VBOXMANAGEPATH
77 $(error VBOXMANAGEPATH was renamed to VBOXMANAGEHELP_PATH!)
78endif
79ifdef PDFLATEX_INTERACTION
80 $(error PDFLATEX_INTERACTION was renamed to VBOX_PDFLATEX_INTERACTION!)
81endif
82ifdef PDFLATEX
83 $(error PDFLATEX was renamed to VBOX_PDFLATEX_CMD!)
84endif
85ifdef HHC
86 $(error HHC was renamed to VBOX_HHC!)
87endif
88
89
90
91VBOXMANAGEHELP_PATH ?= $(PATH_STAGE_BIN)/VBoxManageHelp$(SUFF_EXE)
92
93 # VBOX_PDFLATEX_INTERACTION = errorstopmode - Use this when you wants to figure out build failures
94 # without catting the log a million times.
95VBOX_PDFLATEX_INTERACTION ?= batchmode
96ifeq ($(KBUILD_HOST),win)
97 ifndef VBOX_PDFLATEX
98 VBOX_PDFLATEX := $(firstword $(rsort $(wildcard $(KBUILD_DEVTOOLS)/win.x86/miktex-portable/*/miktex/bin/pdflatex.exe)))
99 ifneq ($(VBOX_PDFLATEX),)
100 VBOX_PDFLATEX_CMD = $(VBOX_PDFLATEX) -halt-on-error -interaction $(VBOX_PDFLATEX_INTERACTION)
101 endif
102 endif
103 ifndef VBOX_PDFLATEX
104 # Tell MiKTeX to automatically download packages if system wide install.
105 VBOX_PDFLATEX := pdflatex
106 VBOX_PDFLATEX_CMD = $(VBOX_PDFLATEX) -halt-on-error -interaction $(VBOX_PDFLATEX_INTERACTION) --enable-installer
107 endif
108else
109 VBOX_PDFLATEX ?= pdflatex
110 VBOX_PDFLATEX_HALT = $(shell ( $(VBOX_PDFLATEX) -version | head -1 | grep 141592 > /dev/null ) && echo -halt-on-error )
111 VBOX_PDFLATEX_CMD = pdflatex $(VBOX_PDFLATEX_HALT) -interaction $(VBOX_PDFLATEX_INTERACTION)
112endif
113
114# Windows HTML Help Workshop compiler (stupid thing always returns an error!)
115VBOX_HHC = -$(EXEC_X86_WIN32) $(VBOX_PATH_HTML_HELP_WORKSHOP)/hhc.exe
116
117
118# Additional xsltproc options when generating
119VBOX_HTMLHELP_OPTS ?=
120
121# SDK related globals.
122VBOX_MANUAL_APIREF_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef_apiref.xml
123VBOX_DOC_XIDL_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
124VBOX_DOC_XIDL_SRC_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.xidl.tmp
125
126
127#
128# Targets
129#
130
131BLDDIRS += $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/, $(VBOX_MANUAL_LANGUAGES))
132
133if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
134 if defined(VBOX_ONLY_SDK) || defined(VBOX_WITH_DOCS_SDKREF)
135 INSTALLS += VBox-docs-sdkref
136 endif
137
138 ifdef VBOX_WITH_DOCS_HTML
139 INSTALLS += VBox-docs-usermanual-html
140 VBOX_PATH_BIN_HTML = $(PATH_STAGE_BIN)/UserManual-html.zip
141 else # Do not build html.
142 VBOX_PATH_BIN_HTML =
143 endif
144
145 ifdef VBOX_WITH_DOCS_CHM
146 INSTALLS += VBox-docs-usermanual-chm
147 VBOX_PATH_BIN_CHM = $(PATH_STAGE_BIN)/VirtualBox.chm
148 else # Do not build chm.
149 VBOX_PATH_BIN_CHM =
150 endif
151
152 ifndef VBOX_ONLY_SDK
153 VBOX_MANUAL_PACK += \
154 $(PATH_STAGE_BIN)/UserManual.pdf \
155 $(VBOX_PATH_BIN_HTML) \
156 $(VBOX_PATH_BIN_CHM)
157 INSTALLS += VBox-docs-usermanual
158
159 ifdef VBOX_WITH_DOCS_TRANSLATIONS
160 INSTALLS += VBox-docs-usermanual-l10n
161 VBOX_MANUAL_PACK += \
162 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf)
163 ifdef VBOX_WITH_DOCS_CHM
164 INSTALLS += VBox-docs-usermanual-l10n-chm
165 VBOX_MANUAL_PACK += \
166 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm)
167 endif
168 endif
169 endif # !VBOX_ONLY_SDK
170
171 ifdef VBOX_WITH_DOCS_ACCESSIBILITY
172 INSTALLS += VBox-docs-accessibility
173 INSTALLS += VBox-docs-accessibility-html
174 endif
175
176 ifdef VBOX_ONLY_DOCS
177 PACKING += $(PATH_STAGE_BIN)/VBoxDocumentation.zip
178 endif
179
180 ifdef VBOX_WITH_DOCS_TRANSLATIONS
181 VBOX_MANUAL_LANGUAGES += $(VBOX_MANUAL_ADD_LANGUAGES)
182 endif
183
184$(foreach lang,$(VBOX_MANUAL_LANGUAGES), \
185 $(eval VBOX_MANUAL_XML_FILES_GENERATED_$$(lang) := \
186 $$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/$$(lang)/user_,$$(filter man_VBoxManage%,$$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
187 $$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/overview_,$$(filter man_VBoxManage%,$$(VBOX_MANUAL_XML_REFENTRY_FILES))) \
188 $$(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml \
189 $$(VBOX_PATH_MANUAL_OUTBASE)/$$(lang)/user_man_VBoxHeadless.xml \
190 $$(VBOX_PATH_MANUAL_OUTBASE)/$$(lang)/user_man_vboximg-mount.xml \
191 $$(VBOX_PATH_MANUAL_OUTBASE)/$$(lang)/user_isomakercmd-man.xml))
192
193 VBOX_SDKREF_XML_FILES = \
194 SDKRef.xml
195
196 VBOX_ACCESSIBILITY_XML_FILES = \
197 Accessibility.xml
198
199 # Wildcard the images path for every supported language
200 $(foreach f,$(VBOX_MANUAL_LANGUAGES), \
201 $(eval VBOX_MANUAL_PNG_FILES_$$(f) := $$(patsubst $$(VBOX_PATH_MANUAL_SRC)/$$(f)/%,%,$$(wildcard $$(VBOX_PATH_MANUAL_SRC)/$$(f)/images/*.png))))
202
203 VBOX_MANUAL_TEX_UNICODE_FILES = \
204 $(wildcard $(VBOX_PATH_MANUAL_SRC)/texfiles/unicode/*)
205
206 VBOX_MANUAL_LATEX_FILES_TARGET = \
207 $(addprefix UserManual.,aux log out toc tex)
208
209 VBOX_SDKREF_LATEX_FILES_TARGET = \
210 $(addprefix SDKRef.,aux log out toc tex)
211
212 VBOX_ACCESSIBILITY_LATEX_FILES_TARGET = \
213 $(addprefix Accessibility.,aux log out toc tex)
214
215 BLDDIRS += \
216 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/,\
217 $(addsuffix /images, $(VBOX_MANUAL_LANGUAGES)) \
218 $(addsuffix /html-single, $(VBOX_MANUAL_LANGUAGES)) \
219 $(addsuffix /html-chunks, $(VBOX_MANUAL_LANGUAGES)) \
220 $(addsuffix /HTMLHelp, $(VBOX_MANUAL_LANGUAGES)) \
221 $(addsuffix /HTMLHelp/images, $(VBOX_MANUAL_LANGUAGES)) \
222 )
223
224 # Explicit cleaning has some overlap with default cleaning rules, since this
225 # Makefile is using very complex conditionals for selectively creating
226 # specific files, and not everyone remembers to use the same with "kmk clean".
227 OTHER_CLEAN += \
228 $(VBOX_XML_CATALOG) \
229 $(VBOX_XML_CATALOG_DOCBOOK) \
230 $(VBOX_XML_CATALOG_MANUAL) \
231 $(VBOX_XML_ENTITIES) \
232 $(VBOX_XML_XREF_TO_TEXT) \
233 $(VBOX_XML_XREF_TO_TEXT).cat \
234 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/, \
235 $(addprefix user_,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
236 $(VBOX_MANUAL_XML_REFENTRY_FILES) \
237 $(patsubst man_%,%.1,$(basename $(VBOX_MANUAL_XML_REFENTRY_FILES))) \
238 man_VBoxHeadless.xml \
239 user_man_VBoxHeadless.xml \
240 man_vboximg-mount.xml \
241 user_man_vboximg-mount.xml \
242 isomakercmd-man.xml \
243 user_isomakercmd-man.xml \
244 $(VBOX_MANUAL_LATEX_FILES_TARGET) \
245 $(VBOX_MANUAL_PNG_FILES_$(lang)) \
246 $(notdir $(VBOX_MANUAL_TEX_UNICODE_FILES)) \
247 $(addprefix HTMLHelp/,$(VBOX_MANUAL_PNG_FILES_$(lang))) \
248 html-single/UserManual.html \
249 $(addprefix HTMLHelp/, index.html go01.html) \
250 $(addprefix html-chunks/, index.html go01.html) \
251 $(foreach n,01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 \
252 ,html-chunks/ch$(n).html \
253 html-chunks/re$(n).html \
254 HTMLHelp/ch$(n).html \
255 HTMLHelp/re$(n).html \
256 $(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)) ) \
257 $(foreach n,a b c \
258 ,html-chunks/ap$(n).html \
259 HTMLHelp/ap$(n).html \
260 $(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) ) \
261 $(foreach n,01 02 03 04 05 \
262 ,html-chunks/pr$(n).html \
263 HTMLHelp/pr$(n).html \
264 $(foreach s,01 02 03 04 05 06 07 08,HTMLHelp/pr$(n)s$(s).html) ) \
265 HTMLHelp/toc.hhc \
266 HTMLHelp/htmlhelp.hhp \
267 UserManual.pdf \
268 VirtualBox.chm \
269 ChangeLog.html \
270 validatemanual.run \
271 validateaccessibility.run \
272 validatesdkref.run \
273 )) \
274 $(VBOX_PATH_MANUAL_OUTBASE)/titlepage-htmlhelp.xsl \
275 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/overview_,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
276 $(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml \
277 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf) \
278 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm) \
279 $(PATH_STAGE_BIN)/UserManual.pdf \
280 $(PATH_STAGE_BIN)/VirtualBox.chm \
281 \
282 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/, \
283 $(VBOX_SDKREF_LATEX_FILES_TARGET) \
284 SDKRef.pdf \
285 ) \
286 $(PATH_STAGE_BIN)/sdk/docs/SDKRef.pdf \
287 \
288 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/, \
289 $(VBOX_ACCESSIBILITY_LATEX_FILES_TARGET) \
290 html-single/Accessibility.html \
291 Accessibility.pdf \
292 ) \
293 $(PATH_STAGE_BIN)/Accessibility.html \
294 $(PATH_STAGE_BIN)/Accessibility.pdf \
295 \
296 $(VBOX_DOC_XIDL_SRC_TMP) \
297 $(VBOX_MANUAL_APIREF_TMP)
298
299endif # if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
300
301#
302# target for installing UserManual.pdf
303#
304VBox-docs-usermanual_INST = $(INST_BIN)
305VBox-docs-usermanual_MODE = a+r,u+w
306VBox-docs-usermanual_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.pdf
307
308#
309# target for installing translated UserManual_*.pdf
310#
311VBox-docs-usermanual-l10n_INST = $(INST_BIN)
312VBox-docs-usermanual-l10n_MODE = a+r,u+w
313VBox-docs-usermanual-l10n_SOURCES = $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$(f)/UserManual.pdf=>UserManual_$(f).pdf)
314
315#
316# target for installing the chunked HTML docs
317#
318VBox-docs-usermanual-html_INST = $(INST_BIN)
319VBox-docs-usermanual-html_MODE = a+r,u+w
320VBox-docs-usermanual-html_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip=>UserManual-html.zip
321
322#
323# target for installing VirtualBox.chm
324#
325VBox-docs-usermanual-chm_INST = $(INST_BIN)
326VBox-docs-usermanual-chm_MODE = a+r,u+w
327VBox-docs-usermanual-chm_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.chm
328
329#
330# target for installing translated VirtualBox_*.chm
331#
332VBox-docs-usermanual-l10n-chm_INST = $(INST_BIN)
333VBox-docs-usermanual-l10n-chm_MODE = a+r,u+w
334VBox-docs-usermanual-l10n-chm_SOURCES = $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$(f)/VirtualBox.chm=>VirtualBox_$(f).chm)
335
336#
337# target for installing SDKRef.pdf
338#
339VBox-docs-sdkref_INST = $(INST_SDK)docs/
340VBox-docs-sdkref_MODE = a+r,u+w
341VBox-docs-sdkref_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.pdf
342
343#
344# target for installing Accessibility.pdf
345#
346VBox-docs-accessibility_INST = $(INST_BIN)
347VBox-docs-accessibility_MODE = a+r,u+w
348VBox-docs-accessibility_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.pdf
349
350#
351# target for installing Accessibility.html
352#
353VBox-docs-accessibility-html_INST = $(INST_BIN)
354VBox-docs-accessibility-html_MODE = a+r,u+w
355VBox-docs-accessibility-html_SOURCES = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html
356
357
358
359if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
360
361##
362# Morph man pages into manual sections.
363# $(evalcall2 def_vbox_refentry_to_user_sect1)
364# @param 1 Language.
365# @param 2 the refentry xml base file name.
366# @param 3 the full refentry xml file path.
367define def_vbox_refentry_to_user_sect1
368$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/user_$(2): $(3) \
369 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl \
370 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
371 $$(VBOX_XML_ENTITIES) $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
372 $$(call MSG_TOOL,xsltproc $$(notdir $$(filter %.xsl,$$^)),,$$(filter %.xml,$$^),$$@)
373 $$(QUIET)$$(RM) -f "$$@"
374 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl $$<
375endef
376$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
377man_VBoxHeadless.xml \
378man_vboximg-mount.xml \
379, $(evalcall2 def_vbox_refentry_to_user_sect1,$(lang),$(file),$(VBOX_PATH_MANUAL_SRC)/$(lang)/$(file))))
380$(foreach lang,$(VBOX_MANUAL_LANGUAGES) \
381,$(evalcall2 def_vbox_refentry_to_user_sect1,$(lang),isomakercmd-man.xml,$(PATH_ROOT)/src/VBox/Runtime/common/fs/isomakercmd-man.xml))
382
383
384# Generates the VBoxManage command overview include file (shared between
385# languages) from the refsynopsisdiv section of the man pages.
386$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/overview_,$(VBOX_MANUAL_XML_REFENTRY_FILES)): \
387 $(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-overview.xsl \
388 $$(patsubst overview_%,$$(VBOX_PATH_MANUAL_SRC)/en_US/%,$$(notdir $$@)) \
389 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
390 $(VBOX_XML_ENTITIES) | $$(dir $$@)
391 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
392 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --output "$@" $< $(filter %.xml,$^)
393
394$(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml: $(VBOXMANAGEHELP_PATH) $(MAKEFILE_CURRENT) | $$(dir $$@)
395 $(call MSG_GENERATE,,$@,)
396 $(QUIET)$(RM) -f $@ $@.dumpopts
397 $(QUIET)$(APPEND) -tn "$@" \
398 '<?xml version="1.0" encoding="UTF-8"?>' \
399 '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">' \
400 '<sect1> <!-- this will be skipped via xpointer in the include. --> '
401 $(QUIET)$(REDIRECT) -wo $@.dumpopts -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
402 $(if $(eq $(KBUILD_TARGET),darwin), -E 'DYLD_FALLBACK_LIBRARY_PATH=$(dir $(LIB_RUNTIME))') \
403 -- \
404 $(VBOXMANAGEHELP_PATH) --dumpopts
405 $(QUIET)$(SED) \
406 -e ':a' \
407 -e 'N' \
408 -e '$(DOLLAR)!ba' \
409 -e 's/</\&lt\;/g' \
410 -e 's/>/\&gt\;/g' \
411 -e 's/\n*$(DOLLAR)/<\/screen>/' \
412 -e 's/^/<screen>/' \
413 --append $@ $@.dumpopts
414 $(QUIET)$(RM) -f $@.dumpopts
415 $(QUIET)$(APPEND) -n "$@" \
416 ' <remark role="VBoxManage-overview">' \
417 $(foreach refentry, $(filter man_VBoxManage%,$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
418 , ' <xi:include href="overview_$(refentry)" xpointer="element(/1)" xmlns:xi="http://www.w3.org/2001/XInclude" />') \
419 ' </remark>' \
420 '</sect1>'
421
422
423
424
425##########################################################################################
426#
427# Shared rules for PDF generation
428#
429##########################################################################################
430
431ifndef VBOX_OSE
432# copy ucs.sty and related files
433$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/ucs.sty):
434 $(call MSG_L1,Copying unicode support for LaTeX)
435 $(QUIET)$(INSTALL_STAGING) -m0644 -- $(VBOX_MANUAL_TEX_UNICODE_FILES) "$(@D)"
436endif
437
438# copy the PNG files.
439# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
440define def_vbox_cp_images_pdf
441local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
442$(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
443 $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
444 $$(call MSG_L1,Copying temporary $$< => $$@)
445 $$(QUIET)$$(INSTALL_STAGING) -m0644 -- '$$<' '$$(@D)'
446endef
447$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_cp_images_pdf))
448
449
450##########################################################################################
451#
452# UserManual.pdf
453#
454##########################################################################################
455
456
457# Generate PDF from LaTeX
458# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
459define def_vbox_usermanual_tex_to_pdf
460local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
461$$(out_dir)/UserManual.pdf: \
462 $$(out_dir)/UserManual.tex \
463 $$(if $$(VBOX_OSE),,$$(out_dir)/ucs.sty) \
464 $$(addprefix $$(out_dir)/,$$(VBOX_MANUAL_PNG_FILES_$(lang))) | $$$$(dir $$$$@)
465# PDF generation via Latex: generate the .tex file
466 $$(call MSG_L1,pdflatex $$< (four passes) -> $$@)
467 $$(QUIET)$$(REDIRECT) -w+ti /dev/null -C $$(@D) -- $$(VBOX_PDFLATEX_CMD) UserManual.tex
468 $$(QUIET)$$(REDIRECT) -w+ti /dev/null -C $$(@D) -- $$(VBOX_PDFLATEX_CMD) UserManual.tex
469 $$(QUIET)$$(REDIRECT) -w+ti /dev/null -C $$(@D) -- $$(VBOX_PDFLATEX_CMD) UserManual.tex
470 $$(QUIET)$$(REDIRECT) -w+ti /dev/null -C $$(@D) -- $$(VBOX_PDFLATEX_CMD) UserManual.tex
471 $$(QUIET)$$(SED) -ne '/Warning: Hyper reference/p' $$(basename $$<).log
472 $$(QUIET)$$(SED) -n \
473 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
474 $$(basename $$@).log
475 $$(call MSG_L1,Fresh LaTeX-generated PDF is now at $$@)
476endef
477$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_usermanual_tex_to_pdf))
478
479# Generate LaTeX from XML
480# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
481define def_vbox_usermanual_xml_to_tex
482local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
483$$(out_dir)/UserManual.tex: \
484 $$(addprefix $$(VBOX_PATH_MANUAL_SRC)/$(lang)/,$$(VBOX_MANUAL_XML_FILES)) \
485 $$(VBOX_MANUAL_XML_FILES_COMMON) \
486 $$(VBOX_MANUAL_XML_FILES_GENERATED_$(lang)) \
487 $$(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
488 $$(if $$(VBOX_HAVE_XMLLINT),$$(out_dir)/validatemanual.run,) \
489 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
490 $$(VBOX_XML_ENTITIES) $$(MAKEFILE_CURRENT) | $$$$(dir $$$$@)
491 $$(call MSG_TOOL,xsltproc $$(notdir $$(filter %.xsl,$$^)),,$$(firstword $$(filter %.xml,$$^)),$$@)
492 $$(QUIET)$$(RM) -f $$(addprefix $$(@D)/,$$(VBOX_MANUAL_LATEX_FILES_TARGET))
493# generate TeX source from processed docbook and store it in UserManual.tex.tmp;
494# pass current language to xsltproc in TARGETLANG variable
495 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG $(lang) \
496 -o $$@.tmp $$(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $$<
497# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
498# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
499 $$(QUIET)$$(SED) \
500 -e 's|^\\QUOTE{}|\\OQ{}|g' \
501 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
502 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
503 --output $$@ $$@.tmp
504 $$(QUIET)$$(RM) -f $$@.tmp
505endef
506$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_usermanual_xml_to_tex))
507
508# Useful aliases
509usermanual UserManual.pdf:: $(PATH_STAGE_BIN)/UserManual.pdf
510
511debug-usermanual:
512 $(MAKE) --pretty-command-printing -j1 VBOX_PDFLATEX_INTERACTION=errorstopmode $(PATH_STAGE_BIN)/UserManual.pdf
513
514#
515# Generate rules for validating the UserManual.xml. These are invoked
516# automatically at build time, but can also be manually invoked via the
517# 'validatemanual' and 'validatemanual_<lang>' aliases.
518#
519define def_vbox_validate_xml
520validatemanual_$(lang):: $$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/validatemanual.run
521$$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/validatemanual.run: \
522 $$(addprefix $$(VBOX_PATH_MANUAL_SRC)/$(lang)/,$$(VBOX_MANUAL_XML_FILES)) \
523 $$(VBOX_MANUAL_XML_FILES_COMMON) \
524 $$(VBOX_MANUAL_XML_FILES_GENERATED_$(lang)) \
525 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
526 $$(VBOX_XML_ENTITIES) $$(MAKEFILE_CURRENT) | $$$$(dir $$$$@)
527 $$(call MSG_L1,Validating $$<)
528 $$(QUIET)$$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $$<
529 $$(QUIET)$$(APPEND) -t "$$@" "done"
530endef
531$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_validate_xml))
532
533
534# Handy aliases.
535validatemanual:: $(foreach lang,$(VBOX_MANUAL_LANGUAGES),validatemanual_$(lang))
536
537
538
539#
540# SDKRef.pdf
541#
542
543# Replace <tt> tags in VirtualBox.xidl.
544$(VBOX_DOC_XIDL_SRC_TMP): $(VBOX_DOC_XIDL_SRC) $(MAKEFILE_CURRENT) | $$(dir $$@)
545 $(call MSG_L1,Generating $@)
546 $(QUIET)$(SED) -e 's|@a \+\(\w\+\)|<tt>\1</tt>|g' \
547 -e 's|@c \+\(\w\+\)|<tt>\1</tt>|g' \
548 --output $@ $<
549
550# Generate SDKRef_apiref.xml as a docbook file excerpt that will be referenced from the SDKRef.xml.
551$(VBOX_MANUAL_APIREF_TMP): $(VBOX_PATH_MANUAL_SRC)/xidl2docbook.xsl $(VBOX_DOC_XIDL_SRC_TMP)
552 $(call MSG_L1,Generating $@)
553 $(QUIET)$(VBOX_XSLTPROC) $(VBOX_XSLTPROC_OPTS) --xinclude --nonet -o $@ $< $(VBOX_DOC_XIDL_SRC_TMP)
554
555# Turn SDKRef.xml into LaTeX.
556$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex: \
557 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_SDKREF_XML_FILES)) \
558 $(VBOX_MANUAL_APIREF_TMP) \
559 $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
560 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatesdkref.run,) \
561 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
562 $(VBOX_XML_ENTITIES) $(MAKEFILE_CURRENT) | $$(dir $$@)
563 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
564 $(QUIET)$(RM) -f $(addprefix $(@D/),$(VBOX_SDKREF_LATEX_FILES_TARGET))
565# generate TeX source from processed docbook and store it in SDKRef.tex.tmp
566 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG en_US \
567 -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
568# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
569# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
570 $(QUIET)$(SED) \
571 -e 's|^\\QUOTE{}|\\OQ{}|g' \
572 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
573 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
574 --output $@ $@.tmp
575 $(QUIET)$(RM) -f $@.tmp
576
577# Turn SDKRef.tex into a PDF.
578$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.pdf: \
579 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex \
580 $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ucs.sty) \
581 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) | $$(dir $$@)
582 $(call MSG_L1,pdflatex $< (three passes))
583 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
584 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
585 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) SDKRef.tex
586 $(QUIET)$(SED) -ne '/Warning: Hyper reference/p' $(basename $<).log
587 $(QUIET)$(SED) -n \
588 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
589 $(basename $<).log
590 $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
591
592# Validating SDKRef.xml. It is invoked automatically at build time,
593# but can also be manually invoked via the 'validate-sdkref' alias.
594$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatesdkref.run: \
595 $(VBOX_PATH_MANUAL_SRC)/en_US/SDKRef.xml \
596 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_SDKREF_XML_FILES)) \
597 $(VBOX_MANUAL_APIREF_TMP) \
598 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
599 $(VBOX_XML_ENTITIES) $(MAKEFILE_CURRENT) | $$(dir $$@)
600 $(call MSG_L1,Validating $<)
601 $(QUIET)$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $<
602 $(QUIET)$(APPEND) -t "$@" "done"
603
604
605# Handy aliases.
606validate-sdkref:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatesdkref.run
607sdkref:: $(PATH_STAGE_BIN)/sdk/docs/SDKRef.pdf
608
609
610
611#
612# Accessibility.pdf
613#
614
615# Turn Accessibility.xml into LaTeX.
616$(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.tex: \
617 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_ACCESSIBILITY_XML_FILES)) \
618 $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
619 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validateaccessibility.run,) \
620 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
621 $(VBOX_XML_ENTITIES) $(MAKEFILE_CURRENT) | $$(dir $$@)
622 $(call MSG_TOOL,xsltproc $(notdir $(filter %.xsl,$^)),,$(firstword $(filter %.xml,$^)),$@)
623 $(QUIET)$(RM) -f $(addprefix $(@D/),$(VBOX_ACCESSIBILITY_LATEX_FILES_TARGET))
624# generate TeX source from processed docbook and store it in Accessibility.tex.tmp
625 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --stringparam TARGETLANG en_US \
626 -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
627# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
628# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
629 $(QUIET)$(SED) \
630 -e 's|^\\QUOTE{}|\\OQ{}|g' \
631 -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
632 -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
633 --output $@ $@.tmp
634 $(QUIET)$(RM) -f $@.tmp
635
636# Turn Accessibility.tex into a PDF.
637$(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.pdf: \
638 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/Accessibility.tex \
639 $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ucs.sty) \
640 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) | $$(dir $$@)
641 $(call MSG_L1,pdflatex $< (three passes))
642 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
643 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
644 $(QUIET)$(REDIRECT) -C $(<D) -- $(VBOX_PDFLATEX_CMD) Accessibility.tex
645 $(QUIET)$(SED) -ne '/Warning: Hyper reference/p' $(basename $<).log
646 $(QUIET)$(SED) -n \
647 -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
648 $(basename $<).log
649 $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
650
651$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html: \
652 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_ACCESSIBILITY_XML_FILES)) \
653 $(VBOX_DOCBOOK_HTML_ONE_PAGE_FORMATCFG) \
654 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
655 $(VBOX_XML_ENTITIES) | $$(dir $$@)
656 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
657 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
658 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html \
659 $(VBOX_PATH_MANUAL_SRC)/docbook-html-one-page-formatcfg.xsl \
660 $<
661
662# Validating Accessibility.xml. It is invoked automatically at build time,
663# but can also be manually invoked via the 'validate-accessibility' alias.
664$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validateaccessibility.run: \
665 $(VBOX_PATH_MANUAL_SRC)/en_US/Accessibility.xml \
666 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_ACCESSIBILITY_XML_FILES)) \
667 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
668 $(VBOX_XML_ENTITIES) $(MAKEFILE_CURRENT) | $$(dir $$@)
669 $(call MSG_L1,Validating $<)
670 $(QUIET)$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $<
671 $(QUIET)$(APPEND) -t "$@" "done"
672
673
674# Handy aliases.
675validate-accessibility:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/validateaccessibility.run
676accessibility:: $(PATH_STAGE_BIN)/Accessibility.pdf
677accessibility-html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/Accessibility.html
678
679
680
681ifdef VBOX_WITH_DOCS_CHM
682 #
683 # VirtualBox.chm
684 #
685 # We first generate a .hhp help source file from the preprocessed
686 # DocBook XML files, as defined above, then feed that into the
687 # Microsoft Help Compiler.
688 #
689 VBOX_DOCBOOK_HTMLHELP_FORMATCFG = \
690 $(VBOX_PATH_MANUAL_SRC)/docbook-htmlhelp-formatcfg.xsl \
691 $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl \
692 $(VBOX_PATH_MANUAL_SRC)/common-html-formatcfg.xsl
693
694 # Prepare the XSL file for our title page, htmlhelp variant.
695 $(VBOX_PATH_MANUAL_OUTBASE)/titlepage-htmlhelp.xsl: \
696 $(VBOX_PATH_MANUAL_SRC)/titlepage-htmlhelp.xml $(MAKEFILE_CURRENT) | $$(dir $$@)
697 $(call MSG_L1,xsltproc $<)
698 $(QUIET)$(RM) -f $@.tmp $@
699 $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet -o $@.tmp $(VBOX_PATH_DOCBOOK)/template/titlepage.xsl $<
700 $(QUIET)$(MV) -f $@.tmp $@
701
702 # Generate CHM from HHP
703 # Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
704 define def_vbox_usermanual_hhp_to_chm
705 local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
706 $$(out_dir)/VirtualBox.chm: \
707 $$(out_dir)/HTMLHelp/htmlhelp.hhp \
708 $$(addprefix $$(out_dir)/HTMLHelp/,$$(VBOX_MANUAL_PNG_FILES_$(lang))) \
709 | $$$$(dir $$$$@)
710 $$(call MSG_L1,hhc $$<,=> $$@)
711 $$(QUIET)$$(RM) -f $$@
712 $$(QUIET)$$(VBOX_HHC) $$(subst /,\\,$$<)
713 $$(call MSG_L1,Fresh CHM is now at $$@)
714 endef
715 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_usermanual_hhp_to_chm))
716
717 # Generate HHP from XML
718 # Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
719 define def_vbox_usermanual_xml_to_hhp
720 local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
721 $$(out_dir)/HTMLHelp/htmlhelp.hhp: \
722 $$(addprefix $$(VBOX_PATH_MANUAL_SRC)/$(lang)/,$$(VBOX_MANUAL_XML_FILES)) \
723 $$(VBOX_MANUAL_XML_FILES_COMMON) \
724 $$(VBOX_MANUAL_XML_FILES_GENERATED_$(lang)) \
725 $$(VBOX_DOCBOOK_HTMLHELP_FORMATCFG) \
726 $$(VBOX_PATH_MANUAL_OUTBASE)/titlepage-htmlhelp.xsl \
727 $$(if $$(VBOX_HAVE_XMLLINT),$$(out_dir)/validatemanual.run,) \
728 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
729 $$(VBOX_XML_ENTITIES) | $$$$(dir $$$$@)
730 $$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
731 $$(QUIET)$$(RM) -f $$@
732 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$(@D)/ \
733 --stringparam htmlhelp.chm \
734 $$(subst /,\\,$$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/VirtualBox.chm) \
735 $$(HTMLHELPOPTS) $$(VBOX_PATH_MANUAL_SRC)/docbook-htmlhelp-formatcfg.xsl \
736 $$<
737 endef
738 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_usermanual_xml_to_hhp))
739
740 # copy the PNG files.
741 # Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
742 define def_vbox_cp_images_htmlhelp
743 local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/HTMLHelp
744 $(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
745 $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
746 $$(call MSG_L1,Copying temporary $$< => $$@)
747 $$(QUIET)$$(INSTALL_STAGING) -m0644 -- '$$<' '$$(@D)'
748 endef
749 $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(eval $(def_vbox_cp_images_htmlhelp)))
750
751endif # VBOX_WITH_DOCS_CHM
752
753
754# Packing the docs into a zip file
755$(PATH_STAGE_BIN)/VBoxDocumentation.zip: $(VBOX_MANUAL_PACK)
756 $(call MSG_L1,Packing documentation $@)
757 $(QUIET)$(RM) -f $@
758 $(QUIET)$(REDIRECT) -C $(PATH_STAGE_BIN) -- $(VBOX_ZIP) -9 $@ $(notdir $^)
759
760
761##########################################################################################
762#
763# UserManual.html
764#
765##########################################################################################
766VBOX_DOCBOOK_HTML_ONE_PAGE_FORMATCFG = \
767 $(VBOX_PATH_MANUAL_SRC)/docbook-html-one-page-formatcfg.xsl \
768 $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl \
769 $(VBOX_PATH_MANUAL_SRC)/common-html-formatcfg.xsl
770
771$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html: \
772 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_MANUAL_XML_FILES)) \
773 $(VBOX_MANUAL_XML_FILES_COMMON) \
774 $(VBOX_MANUAL_XML_FILES_GENERATED_en_US) \
775 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) \
776 $(VBOX_DOCBOOK_HTML_ONE_PAGE_FORMATCFG) \
777 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatemanual.run,) \
778 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
779 $(VBOX_XML_ENTITIES) | $$(dir $$@)
780 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
781 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
782 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
783 $(VBOX_PATH_MANUAL_SRC)/docbook-html-one-page-formatcfg.xsl \
784 $<
785
786VBOX_DOCBOOK_HTML_CHUNKS_FORMATCFG = \
787 $(VBOX_PATH_MANUAL_SRC)/docbook-html-chunks-formatcfg.xsl \
788 $(VBOX_PATH_MANUAL_SRC)/common-formatcfg.xsl \
789 $(VBOX_PATH_MANUAL_SRC)/common-html-formatcfg.xsl
790
791$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html: \
792 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_MANUAL_XML_FILES)) \
793 $(VBOX_MANUAL_XML_FILES_COMMON) \
794 $(VBOX_MANUAL_XML_FILES_GENERATED_en_US) \
795 $(VBOX_DOCBOOK_HTML_CHUNKS_FORMATCFG) \
796 $(addprefix $(VBOX_PATH_MANUAL_SRC)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) \
797 $(if $(VBOX_HAVE_XMLLINT),$(VBOX_PATH_MANUAL_OUTBASE)/en_US/validatemanual.run,) \
798 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
799 $(VBOX_XML_ENTITIES) | $$(dir $$@)
800 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
801 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) \
802 --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html \
803 --stringparam chunk.section.depth 0 \
804 $(VBOX_PATH_MANUAL_SRC)/docbook-html-chunks-formatcfg.xsl \
805 $<
806
807$(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip: \
808 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
809 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html \
810 $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US))
811 $(call MSG_L1,Packing documentation $@)
812 $(QUIET)$(RM) -f $@
813 $(QUIET)$(REDIRECT) -C $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ -- $(VBOX_ZIP) \
814 -9 -r $@ html-single html-chunks $(VBOX_MANUAL_PNG_FILES_en_US)
815
816html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html
817html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html
818html-zip:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip
819
820
821#
822# ChangeLog.html
823#
824# This XSLT rule formats en_US/user_ChangeLog.xml (which includes the actual change log
825# contained in user_ChangeLogImpl.xml) as a standalone HTML file.
826#
827$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html: \
828 $(VBOX_PATH_MANUAL_SRC)/en_US/docbook-changelog-formatcfg.xsl \
829 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml \
830 $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_MANUAL) \
831 $(VBOX_XML_ENTITIES) | $$(dir $$@)
832 $(call MSG_TOOL,xsltproc $(notdir $(firstword $(filter %.xsl,$^))),,$(firstword $(filter %.xml,$^)),$@)
833 $(QUIET)$(call VBOX_XSLTPROC_WITH_CAT) --output "$@" "$<" $(filter %.xml,$^)
834 $(call MSG_L1,Fresh ChangeLog.html is now at $@)
835
836cl-html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html
837
838
839
840endif # if defined(VBOX_WITH_DOCS) && (!defined(VBOX_ONLY_BUILD) || defined(VBOX_ONLY_DOCS) || defined(VBOX_ONLY_SDK))
841
842
843#
844# VBoxManage man pages (parts also required by VBoxManage built-in help).
845#
846
847##
848# Emits rules for preprocessing refentry sources (applying remarks element),
849# and for producing the actual man pages.
850# $(evalcall2 def_vbox_refentry_to_manpage)
851# @param 1 The language
852# @param 2 The file name (no path).
853define def_vbox_refentry_to_manpage
854$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(2): \
855 $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2) \
856 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage-preprocessing.xsl \
857 $$(VBOX_XML_XREF_TO_TEXT) \
858 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
859 $$(VBOX_XML_ENTITIES) $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
860 $$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
861 $$(QUIET)$$(RM) -f "$$@"
862 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ \
863 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage-preprocessing.xsl $$<
864 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@.tmp $$(VBOX_XML_XREF_TO_TEXT) $$@
865 $$(QUIET)$$(MV) -f -- "$$@.tmp" "$$@"
866if defined(VBOX_HAVE_XMLLINT)
867 $$(VBOX_XMLLINT_WITH_CAT) --dtdvalid $$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd $$@
868endif
869
870$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(patsubst man_%,%.1,$(basename $(2))): \
871 $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$(2) \
872 $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage.xsl \
873 $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
874 $$(VBOX_XML_ENTITIES) $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
875 $$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
876 $$(QUIET)$$(RM) -f "$$@"
877 $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage.xsl $$<
878endef
879$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
880, $(evalcall2 def_vbox_refentry_to_manpage,$(lang),$(file))))
881
882
883# Handy aliases.
884validate-manpages:: $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_REFENTRY_FILES))
885man-experiment:: $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(foreach file,$(VBOX_MANUAL_XML_REFENTRY_FILES) \
886 ,$$(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/$(patsubst man_%,%.1,$(basename $(file)))))
887
888#
889# Manually updating the DHCP option list taken from VirtualBox.xidl
890#
891dhcpoptions: $(PATH_ROOT)/doc/manual/en_US/man_VBoxManage-dhcpserver-dhcpoptions.xsl \
892 $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
893 $(call VBOX_XSLTPROC) --output "$(PATH_ROOT)/doc/manual/en_US/man_VBoxManage-dhcpserver-dhcpoptions.xml" $+
894
895
896include $(FILE_KBUILD_SUB_FOOTER)
897
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