1
0
Fork 0

Merging upstream version 7.1.8-dfsg.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
Daniel Baumann 2025-06-24 20:41:59 +02:00
parent 16b3acce71
commit 2b3ba1f3e4
Signed by: daniel.baumann
GPG key ID: BCC918A2ABD66424
18435 changed files with 2498176 additions and 1746677 deletions

View file

@ -10,7 +10,7 @@
#
#
# Copyright (C) 2010-2023 Oracle and/or its affiliates.
# Copyright (C) 2010-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.

File diff suppressed because it is too large Load diff

View file

@ -248,6 +248,8 @@ ALIASES += udf260{2}="<a href=\"http://www.osta.org/specs/pdf/udf260.pdf#page=\2
ALIASES += ecma{3}="<a href=\"https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-\1.pdf#page=\3\">ECMA-\1:\2</a>"
# ECMA-167 spec reference - 1=part 2=section, 3=page
ALIASES += ecma167{3}="\ecma{167,Part\1/\2,\3}"
# ACPI spec reference - 1=chapter, 2=section
ALIASES += acpi65{2}="<a href=\"https://uefi.org/specs/ACPI/6.5/\1.html#\2\">ACPI-6.5:\2</a>"
# Internal: 1=doc number; 2=file base name; 3=revision (077); 4=page; 5=doc name; 6=section/table/figure; 7=title
ALIASES += sdm{7}="<a href=\"https://www.intel.com/content/dam/develop/public/us/en/documents/\1-\2.pdf#page=\4\">\5:\6 \"\7\"</a>"
@ -282,6 +284,7 @@ ALIASES += opflmodify="EFLAGS Modified: "
ALIASES += opflundef="EFLAGS Undefined: "
ALIASES += opflset="EFLAGS Set: "
ALIASES += opflclear="EFLAGS Cleared: "
ALIASES += opflclass="EFLAGS Behaviour Class: "
ALIASES += ophints="Hints, Flags, ++: "
ALIASES += opdisenum="Disassembler Enum: "
ALIASES += opmincpu="Minimum CPU: "
@ -608,6 +611,7 @@ PREDEFINED = \
\
"RT_IPRT_FORMAT_ATTR(a,b)=" \
"RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a,b)=" \
"RT_IPRT_CALLREQ_ATTR(a,b,c)=" \
RT_NOTHROW_PROTO= \
RT_NOTHROW_DEF= \
RT_NO_THROW_PROTO= \
@ -621,8 +625,9 @@ PREDEFINED = \
PREDEFINED += \
DECL_NOTHROW(a_RetType)=a_RetType \
"DECLINLINE(type)=inline type" \
DECL_INLINE_THROW(type)=DECLINLINE(type) \
DECL_FORCE_INLINE(type)=DECLINLINE(type) \
"DECL_INLINE_THROW(type)=inline type" \
"DECL_FORCE_INLINE(type)=inline type" \
"DECL_FORCE_INLINE_THROW(type)=inline type" \
DECL_NO_INLINE(type)=type \
DECL_NO_RETURN(type)=type \
DECLCALLBACK(type)=type \

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2006-2023 Oracle and/or its affiliates.
# Copyright (C) 2006-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2006-2023 Oracle and/or its affiliates.
# Copyright (C) 2006-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
@ -129,9 +129,11 @@ if !defined(VBOX_ONLY_ADDITIONS) \
ifndef TOOL_$(VBOX_VCC_TOOL)
include $(KBUILD_PATH)/tools/$(VBOX_VCC_TOOL).kmk
endif
ifneq ($(KBUILD_TARGET_ARCH),arm64)
ifndef TOOL_$(VBOX_VCC_TOOL_STEM)X86
include $(KBUILD_PATH)/tools/$(VBOX_VCC_TOOL_STEM)X86.kmk
endif
endif
ifdef PATH_TOOL_$(VBOX_VCC_TOOL_STEM)_REDIST
InstallExternalLibs_SOURCES += \
$(foreachfile redistdll, $(qaddprefix ,$(requote unq,$(PATH_TOOL_$(VBOX_VCC_TOOL)_REDIST_CRT)/), \
@ -225,119 +227,97 @@ if !defined(VBOX_ONLY_ADDITIONS) \
# https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
# the Info.plist file goes into Resources.
#
if defined(VBOX_WITH_QTGUI) && !defined(VBOX_ONLY_SDK)
ifeq ($(KBUILD_TARGET),darwin)
ifdef VBOX_WITH_QT6
if defined(VBOX_WITH_QTGUI) && !defined(VBOX_ONLY_SDK) && "$(KBUILD_TARGET)" == "darwin"
include $(KBUILD_PATH)/units/qt6.kmk
VBOX_QT_FWRK_VER = A
VBOX_QT_PATH = $(PATH_SDK_QT6)
VBOX_QT_PATH_LIB = $(PATH_SDK_QT6_LIB)
else
include $(KBUILD_PATH)/units/qt5.kmk
VBOX_QT_FWRK_VER = 5
VBOX_QT_PATH = $(PATH_SDK_QT5)
VBOX_QT_PATH_LIB = $(PATH_SDK_QT5_LIB)
endif
INSTALLS += qt5-bin
qt5-bin_INST = $(INST_VIRTUALBOX)Contents/
qt5-bin_EXEC_SOURCES = $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(VBOX_QT_PATH_LIB)/$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/$(qtmod)=>Frameworks/$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/$(qtmod))
qt5-bin_SOURCES = $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(VBOX_QT_PATH_LIB)/$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/Resources/Info.plist=>Frameworks/$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/Resources/Info.plist)
INSTALLS += qt-bin
qt-bin_INST = $(INST_VIRTUALBOX)Contents/
qt-bin_EXEC_SOURCES = $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(PATH_SDK_QT6_LIB)/$(qtmod).framework/Versions/A/$(qtmod)=>Frameworks/$(qtmod).framework/Versions/A/$(qtmod))
qt-bin_SOURCES = $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(PATH_SDK_QT6_LIB)/$(qtmod).framework/Versions/A/Resources/Info.plist=>Frameworks/$(qtmod).framework/Versions/A/Resources/Info.plist)
ifdef VBOX_WITH_QT_DSYMS
qt5-bin_SOURCES += $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(VBOX_QT_PATH_LIB)/$(qtmod).framework.dSYM/Contents/Info.plist=>Frameworks/$(qtmod).framework.dSYM/Contents/Info.plist \
$(VBOX_QT_PATH_LIB)/$(qtmod).framework.dSYM/Contents/Resources/DWARF/$(qtmod)=>Frameworks/$(qtmod).framework.dSYM/Contents/Resources/DWARF/$(qtmod))
qt-bin_SOURCES += $(foreach qtmod,$(VBOX_QT_MOD_NAMES), \
$(PATH_SDK_QT6_LIB)/$(qtmod).framework.dSYM/Contents/Info.plist=>Frameworks/$(qtmod).framework.dSYM/Contents/Info.plist \
$(PATH_SDK_QT6_LIB)/$(qtmod).framework.dSYM/Contents/Resources/DWARF/$(qtmod)=>Frameworks/$(qtmod).framework.dSYM/Contents/Resources/DWARF/$(qtmod))
endif
qt5-bin_EXEC_SOURCES += \
$(VBOX_QT_PATH)/plugins/platforms/libqcocoa$(SUFF_DLL)=>plugins/platforms/libqcocoa$(SUFF_DLL) \
$(VBOX_QT_PATH)/plugins/platforms/libqminimal$(SUFF_DLL)=>plugins/platforms/libqminimal$(SUFF_DLL) \
$(VBOX_QT_PATH)/plugins/platforms/libqoffscreen$(SUFF_DLL)=>plugins/platforms/libqoffscreen$(SUFF_DLL) \
$(VBOX_QT_PATH)/plugins/sqldrivers/libqsqlite$(SUFF_DLL)=>plugins/sqldrivers/libqsqlite$(SUFF_DLL) \
$(VBOX_QT_PATH)/plugins/styles/libqmacstyle$(SUFF_DLL)=>plugins/styles/libqmacstyle$(SUFF_DLL)
qt-bin_EXEC_SOURCES += \
$(PATH_SDK_QT6)/plugins/platforms/libqcocoa$(SUFF_DLL)=>plugins/platforms/libqcocoa$(SUFF_DLL) \
$(PATH_SDK_QT6)/plugins/platforms/libqminimal$(SUFF_DLL)=>plugins/platforms/libqminimal$(SUFF_DLL) \
$(PATH_SDK_QT6)/plugins/platforms/libqoffscreen$(SUFF_DLL)=>plugins/platforms/libqoffscreen$(SUFF_DLL) \
$(PATH_SDK_QT6)/plugins/sqldrivers/libqsqlite$(SUFF_DLL)=>plugins/sqldrivers/libqsqlite$(SUFF_DLL) \
$(PATH_SDK_QT6)/plugins/styles/libqmacstyle$(SUFF_DLL)=>plugins/styles/libqmacstyle$(SUFF_DLL)
ifdef VBOX_WITH_QT_DSYMS
qt5-bin_SOURCES += $(foreach qtplat, libqcocoa libqminimal libqoffscreen, \
$(VBOX_QT_PATH)/plugins/platforms/$(qtplat)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/platforms/$(qtplat)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(VBOX_QT_PATH)/plugins/platforms/$(qtplat)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtplat)$(SUFF_DLL)=>plugins/platforms/$(qtplat)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtplat)$(SUFF_DLL))
qt5-bin_SOURCES += $(foreach qtsqldrv, libqsqlite, \
$(VBOX_QT_PATH)/plugins/sqldrivers/$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/sqldrivers/$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(VBOX_QT_PATH)/plugins/sqldrivers/$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtsqldrv)$(SUFF_DLL)=>plugins/sqldrivers/$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtsqldrv)$(SUFF_DLL))
qt5-bin_SOURCES += $(foreach qtstyl, libqmacstyle, \
$(VBOX_QT_PATH)/plugins/styles/$(qtstyl)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/styles/$(qtstyl)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(VBOX_QT_PATH)/plugins/styles/$(qtstyl)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtstyl)$(SUFF_DLL)=>plugins/styles/$(qtstyl)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtstyl)$(SUFF_DLL))
qt-bin_SOURCES += $(foreach qtplat, qcocoa qminimal qoffscreen, \
$(PATH_SDK_QT6)/plugins/platforms/lib$(qtplat)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/platforms/lib$(qtplat)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(PATH_SDK_QT6)/plugins/platforms/lib$(qtplat)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtplat)=>plugins/platforms/lib$(qtplat)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtplat))
qt-bin_SOURCES += $(foreach qtsqldrv, qsqlite, \
$(PATH_SDK_QT6)/plugins/sqldrivers/lib$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/sqldrivers/lib$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(PATH_SDK_QT6)/plugins/sqldrivers/lib$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtsqldrv)=>plugins/sqldrivers/lib$(qtsqldrv)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtsqldrv))
qt-bin_SOURCES += $(foreach qtstyl, qmacstyle, \
$(PATH_SDK_QT6)/plugins/styles/lib$(qtstyl)$(SUFF_DLL).dSYM/Contents/Info.plist=>plugins/styles/lib$(qtstyl)$(SUFF_DLL).dSYM/Contents/Info.plist \
$(PATH_SDK_QT6)/plugins/styles/lib$(qtstyl)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtstyl)=>plugins/styles/lib$(qtstyl)$(SUFF_DLL).dSYM/Contents/Resources/DWARF/$(qtstyl))
endif
qt5-bin_SYMLINKS = $(foreach qtmod, $(VBOX_QT_MOD_NAMES), \
Frameworks/$(qtmod).framework/Versions/Current=>$(VBOX_QT_FWRK_VER) \
Frameworks/$(qtmod).framework/$(qtmod)=>Versions/$(VBOX_QT_FWRK_VER)/$(qtmod) \
Frameworks/$(qtmod).framework/Resources=>Versions/$(VBOX_QT_FWRK_VER)/Resources)
qt5-bin_INSTALLER = $(INSTALL) $(if $(uid),-o $(uid)) $(if $(gid),-g $(gid)) $(if $(mode),-m $(mode)) $(4) -- \
"$(1)" "$(2)" $(if-expr "$(source_type_prefix)" == "EXEC_" \
qt-bin_SYMLINKS = $(foreach qtmod, $(VBOX_QT_MOD_NAMES), \
Frameworks/$(qtmod).framework/Versions/Current=>A \
Frameworks/$(qtmod).framework/$(qtmod)=>Versions/A/$(qtmod) \
Frameworks/$(qtmod).framework/Resources=>Versions/A/Resources)
qt-bin_INSTALLER = $(INSTALL) $(if $(uid),-o $(uid)) $(if $(gid),-g $(gid)) $(if $(mode),-m $(mode)) $(4) -- "$(1)" "$(2)" \
$(if-expr "$(source_type_prefix)" == "EXEC_" \
,$(NLTAB)install_name_tool \
$(if-expr "$(suffix $2)" == "", -id "$(if $(VBOX_WITH_HARDENING),/Applications/VirtualBox.app/Contents/Framework,@rpath)/$(notdir $(2)).framework/Version/$(VBOX_QT_FWRK_VER)/$(notdir $(2))",) \
$(if-expr "$(suffix $2)" == "", -id "$(if $(VBOX_WITH_HARDENING),/Applications/VirtualBox.app/Contents/Framework,@rpath)/$(notdir $(2)).framework/Version/A/$(notdir $(2))",) \
$(foreach qtmod, $(VBOX_QT_MOD_NAMES), \
$(foreach prefix, @executable_path/../Frameworks/ $(VBOX_PATH_QT)/Frameworks/ $(VBOX_QT_PATH)/, \
-change "$(prefix)$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/$(qtmod)" \
"$(if $(VBOX_WITH_HARDENING),/Applications/VirtualBox.app/Contents/Frameworks,@rpath)/$(qtmod).framework/Versions/$(VBOX_QT_FWRK_VER)/$(qtmod)" ) ) \
$(foreach prefix, @executable_path/../Frameworks/ $(PATH_SDK_QT6)/Frameworks/ $(PATH_SDK_QT6)/, \
-change "$(prefix)$(qtmod).framework/Versions/A/$(qtmod)" \
"$(if $(VBOX_WITH_HARDENING),/Applications/VirtualBox.app/Contents/Frameworks,@rpath)/$(qtmod).framework/Versions/A/$(qtmod)") ) \
"$(2)",) # HACK ALERT! Using $(source_type_prefix) to detect EXEC_SOURCES.
else # win x11
if1of ($(KBUILD_TARGET), linux solaris)
if !defined(VBOX_ONLY_BUILD) && defined(VBOX_WITH_QTGUI)
ifneq ($(VBOX_GCC_VERSION_CXX),)
if $(VBOX_GCC_VERSION_CXX) < 40400
$(error gcc >= 4.4 required when compiling against Qt5!)
endif
endif
endif
endif
if defined(VBOX_WITH_ORACLE_QT) || defined(VBOX_WITH_QT_PAYLOAD)
include $(KBUILD_PATH)/units/qt5.kmk
else if defined(VBOX_WITH_QTGUI) && !defined(VBOX_ONLY_SDK) && (defined(VBOX_WITH_ORACLE_QT) || defined(VBOX_WITH_QT_PAYLOAD))
# win x11
include $(KBUILD_PATH)/units/qt6.kmk
INSTALLS += qt-bin
qt-bin_MODE := 755
qt-bin_INST = $(INST_BIN)
ifeq ($(KBUILD_TARGET),win)
INSTALLS += qt5-bin
qt5-bin_MODE = 755
qt5-bin_INST = $(INST_BIN)
qt5-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/bin/$(qtmod)$(SUFF_DLL)))
qt5-bin_SOURCES += \
$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/plugins/platforms/qwindows$(SUFF_DLL))=>platforms/qwindows$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/plugins/platforms/qminimal$(SUFF_DLL))=>platforms/qminimal$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/plugins/platforms/qoffscreen$(SUFF_DLL))=>platforms/qoffscreen$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/plugins/sqldrivers/qsqlite$(SUFF_DLL))=>sqldrivers/qsqlite$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt5-bin,$(PATH_SDK_QT5)/plugins/styles/qwindowsvistastyle$(SUFF_DLL))=>styles/qwindowsvistastyle$(SUFF_DLL)
qt-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/bin/$(qtmod)$(SUFF_DLL)))
qt-bin_SOURCES += \
$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/plugins/platforms/qwindows$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL))=>platforms/qwindows$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/plugins/platforms/qminimal$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL))=>platforms/qminimal$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/plugins/platforms/qoffscreen$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL))=>platforms/qoffscreen$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/plugins/sqldrivers/qsqlite$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL))=>sqldrivers/qsqlite$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL) \
$(call VBOX_RE_SIGN_DLL_FN,qt-bin,$(PATH_SDK_QT6)/plugins/styles/qwindowsvistastyle$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL))=>styles/qwindowsvistastyle$(VBOX_QT_POSTFIX)$(VBOX_QT_DBG)$(SUFF_DLL)
ifdef VBOX_WITH_QT_PDBS
qt5-bin_SOURCES += \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(wildcard $(PATH_SDK_QT5)/qt*/$(VBOX_PATH_QT_LIB)/$(qtmod).pdb))
endif # VBOX_WITH_QT_PDBS
qt-bin_SOURCES += $(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(wildcard $(PATH_SDK_QT6)/qt*/$(VBOX_PATH_QT_LIB)/$(qtmod).pdb))
endif
else # x11
INSTALLS += qt5-bin
qt5-bin_MODE = 755
qt5-bin_INST = $(INST_BIN)
VBOX_QT_VERSION := 6.5.3
VBOX_QT_VERSION_MAJOR := 6
ifdef VBOX_WITH_HARDENING
# The wildcards are necessary to install the libs instead of the symlinks
qt5-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(wildcard $(VBOX_PATH_QT_LIB)/lib$(qtmod).so.*.*.*[0-9])=>lib$(qtmod).so.5) \
qt-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(wildcard $(VBOX_PATH_QT_LIB)/lib$(qtmod).so.*.*.*[0-9])=>lib$(qtmod).so.$(VBOX_QT_VERSION_MAJOR)) \
$(foreach lib,$(VBOX_QT_PLUGINS),$(VBOX_PATH_QT)/$(lib)=>$(lib))
else # !VBOX_WITH_HARDENING
# For non-hardened builds we need to remove the RUNPATH. This stuff is
# ugly but we need to prevent kBuild from hard-linking otherwise we
# (indirectly) change the binaries in tools
ifneq ($(KBUILD_TARGET),solaris)
QT5_VERSION = 5.15.2
else
QT5_VERSION = 5.15.2
endif
qt5-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(qt5-bin_0_OUTDIR)/lib$(qtmod).so.$(QT5_VERSION)=>lib$(qtmod).so.5) \
$(foreach lib,$(VBOX_QT_PLUGINS),$(qt5-bin_0_OUTDIR)/$(lib)=>$(lib))
qt-bin_SOURCES = \
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$(qt-bin_0_OUTDIR)/lib$(qtmod).so.$(VBOX_QT_VERSION)=>lib$(qtmod).so.$(VBOX_QT_VERSION_MAJOR)) \
$(foreach lib,$(VBOX_QT_PLUGINS),$(qt-bin_0_OUTDIR)/$(lib)=>$(lib))
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$$(qt5-bin_0_OUTDIR)/lib$(qtmod).so.$(QT5_VERSION)): \
$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT_LIB)/% | $$(qt5-bin_0_OUTDIR)/
$(foreach qtmod,$(VBOX_QT_MOD_NAMES),$$(qt-bin_0_OUTDIR)/lib$(qtmod).so.$(VBOX_QT_VERSION)): \
$$(qt-bin_0_OUTDIR)/% : $(VBOX_PATH_QT_LIB)/% | $$(qt-bin_0_OUTDIR)/
$(call MSG_INST_FILE,$^,$@)
$(QUIET)$(CP) $^ $@
$(QUIET)chrpath --replace "\$$ORIGIN" $@
ifn1of ($(KBUILD_TARGET), solaris linux)
$(foreach lib,$(VBOX_QT_PLUGINS),$$(qt5-bin_0_OUTDIR)/$(lib)): \
$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT)/% | $$(qt5-bin_0_OUTDIR)/
$(foreach lib,$(VBOX_QT_PLUGINS),$$(qt-bin_0_OUTDIR)/$(lib)): $$(qt-bin_0_OUTDIR)/% : \
$(VBOX_PATH_QT)/% | $$(qt-bin_0_OUTDIR)/
$(call MSG_INST_FILE,$^,$@)
$(QUIET)$(MKDIR) -p $(@D)
$(QUIET)$(CP) $^ $@
@ -347,8 +327,8 @@ if !defined(VBOX_ONLY_ADDITIONS) \
# @todo For solaris and some linuxes dlopen fails to navigate executable rpath to dependent libraries,
# so add explicit rpath for libqxcb.so, find better solution later.
if1of ($(KBUILD_TARGET), solaris linux)
$(foreach lib,$(VBOX_QT_PLUGINS),$$(qt5-bin_0_OUTDIR)/$(lib)): \
$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT)/% | $$(qt5-bin_0_OUTDIR)/
$(foreach lib,$(VBOX_QT_PLUGINS),$$(qt-bin_0_OUTDIR)/$(lib)): $$(qt-bin_0_OUTDIR)/% : \
$(VBOX_PATH_QT)/% | $$(qt-bin_0_OUTDIR)/
$(call MSG_INST_FILE,$^,$@)
$(QUIET)$(MKDIR) -p $(@D)
$(QUIET)$(CP) $^ $@
@ -357,8 +337,6 @@ if !defined(VBOX_ONLY_ADDITIONS) \
endif # !VBOX_WITH_HARDENING
endif # x11
endif # VBOX_WITH_ORACLE_QT || VBOX_WITH_QT_PAYLOAD
endif # win x11
endif # defined(VBOX_WITH_QTGUI) && !defined(VBOX_ONLY_SDK)
@ -407,11 +385,9 @@ if !defined(VBOX_ONLY_ADDITIONS) \
buildserver-docs_MODE = 0644
buildserver-docs_SOURCES = \
$(addprefix $(PATH_TARGET)/, \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),VirtualBox.chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),UserManual.qch UserManual.qhc,) \
UserManual.pdf \
$(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES), \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),VirtualBox_$(f).chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),UserManual_$(f).qch UserManual_$(f).qhc,) \
UserManual_$(f).pdf))
buildserver-docs_CLEANS = \
@ -426,22 +402,18 @@ if !defined(VBOX_ONLY_ADDITIONS) \
UserManual_$(f).pdf))
$$(buildserver-docs_0_OUTDIR)/unpacked.ts +| \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),$(PATH_TARGET)/VirtualBox.chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),$(PATH_TARGET)/UserManual.qch $(PATH_TARGET)/UserManual.qhc,) \
$(PATH_TARGET)/UserManual.pdf \
$(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES), \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),$(PATH_TARGET)/VirtualBox_$(f).chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),$(PATH_TARGET)/UserManual_$(f).qch $(PATH_TARGET)/UserManual_$(f).qhc,) \
$(PATH_TARGET)/UserManual_$(f).pdf): \
$$(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip
$(call MSG_L1,Unpacking documentation)
$(QUIET)$(TOOL_ZIP_UNPACK) $(TOOL_ZIP_UNPACKFLAGS) -o $< -d $(PATH_TARGET)
$(TOUCH) -c -- \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),$(PATH_TARGET)/VirtualBox.chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),$(PATH_TARGET)/UserManual.qch $(PATH_TARGET)/UserManual.qhc,) \
$(PATH_TARGET)/UserManual.pdf \
$(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES), \
$(if-expr defined(VBOX_WITH_DOCS_CHM_PACKING),$(PATH_TARGET)/VirtualBox_$(f).chm,) \
$(if-expr defined(VBOX_WITH_DOCS_QHELP_PACKING),$(PATH_TARGET)/UserManual_$(f).qch $(PATH_TARGET)/UserManual_$(f).qhc,) \
$(PATH_TARGET)/UserManual_$(f).pdf)
$(APPEND) -t $@ "done"
@ -477,30 +449,30 @@ if !defined(VBOX_ONLY_ADDITIONS) \
$(buildserver-efifw_0_OUTDIR)/VBoxEFI64.fd \
$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip \
$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip.tmp \
$(foreach arch, amd64 x86, $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$$(buildserver-efifw_0_OUTDIR)/$(arch)/$(mod).pdb))
$(foreach arch, amd64 x86, $(foreach mod,$(VBOX_EFI_MODULES_FLAT_X86),$$(buildserver-efifw_0_OUTDIR)/$(arch)/$(mod).pdb))
INSTALLS += buildserver-efifw-dbg-amd64
buildserver-efifw-dbg-amd64_INST = $(INST_VBOXDBG_SYMS)amd64/
buildserver-efifw-dbg-amd64_MODE = 0644
buildserver-efifw-dbg-amd64_SOURCES = \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(buildserver-efifw_0_OUTDIR)/amd64/$(mod).pdb)
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_X86),$(buildserver-efifw_0_OUTDIR)/amd64/$(mod).pdb)
INSTALLS += buildserver-efifw-dbg-x86
buildserver-efifw-dbg-x86_INST = $(INST_VBOXDBG_SYMS)x86/
buildserver-efifw-dbg-x86_MODE = 0644
buildserver-efifw-dbg-x86_SOURCES = \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(buildserver-efifw_0_OUTDIR)/x86/$(mod).pdb)
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_X86),$(buildserver-efifw_0_OUTDIR)/x86/$(mod).pdb)
$$(buildserver-efifw_0_OUTDIR)/unpacked.ts \
+| $$(buildserver-efifw_0_OUTDIR)/VBoxEFI32.fd \
$$(buildserver-efifw_0_OUTDIR)/VBoxEFI64.fd \
$(foreach arch, amd64 x86, $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$$(buildserver-efifw_0_OUTDIR)/$(arch)/$(mod).pdb)): \
$(foreach arch, amd64 x86, $(foreach mod,$(VBOX_EFI_MODULES_FLAT_X86),$$(buildserver-efifw_0_OUTDIR)/$(arch)/$(mod).pdb)): \
$$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip
$(call MSG_L1,Unpacking EFI firmware)
$(QUIET)$(TOOL_ZIP_UNPACK) $(TOOL_ZIP_UNPACKFLAGS) -o $< -d $(buildserver-efifw_0_OUTDIR)
$(foreach arch, amd64 x86, \
$(NLTAB) $(QUIET)$(TEST) '!' -d $(dir $@)/$(arch) -- $(MKDIR_EXT) -- $(dir $@)/$(arch) \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT) \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_X86) \
,$(NLTAB) $(QUIET)$(TEST) '!' -f $(dir $@)/$(arch)/$(mod).pdb -- $(APPEND_EXT) $(dir $@)/$(arch)/$(mod).pdb ))
$(TOUCH) -c -- $(buildserver-efifw_0_OUTDIR)/VBoxEFI32.fd \
$(buildserver-efifw_0_OUTDIR)/VBoxEFI64.fd
@ -512,6 +484,58 @@ if !defined(VBOX_ONLY_ADDITIONS) \
$(SHELL) $(KBUILD_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch --filename "$@.tmp" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
$(MV) -f -- "$@.tmp" "$@"
ifdef VBOX_WITH_VIRT_ARMV8
#
# The ARMv8 EFI images
#
INSTALLS += buildserver-efifw-armv8
buildserver-efifw-armv8_INST = $(INST_BIN)
buildserver-efifw-armv8_MODE = 0644
buildserver-efifw-armv8_SOURCES = \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch32.fd \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch64.fd
buildserver-efifw-armv8_CLEANS = \
$(buildserver-efifw-armv8_0_OUTDIR)/unpacked.ts \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch32.fd \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch64.fd \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEfiFirmware-armv8.zip \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEfiFirmware-armv8.zip.tmp \
$(foreach arch, aarch64 aarch32, $(foreach mod,$(VBOX_EFI_MODULES_FLAT_ARM),$$(buildserver-efifw-armv8_0_OUTDIR)/$(arch)/$(mod).pdb))
INSTALLS += buildserver-efifw-dbg-aarch64
buildserver-efifw-dbg-aarch64_INST = $(INST_VBOXDBG_SYMS)aarch64/
buildserver-efifw-dbg-aarch64_MODE = 0644
buildserver-efifw-dbg-aarch64_SOURCES = \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_ARM),$(buildserver-efifw-armv8_0_OUTDIR)/aarch64/$(mod).pdb)
INSTALLS += buildserver-efifw-dbg-aarch32
buildserver-efifw-dbg-aarch32_INST = $(INST_VBOXDBG_SYMS)aarch32/
buildserver-efifw-dbg-aarch32_MODE = 0644
buildserver-efifw-dbg-aarch32_SOURCES = \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_ARM),$(buildserver-efifw-armv8_0_OUTDIR)/aarch32/$(mod).pdb)
$$(buildserver-efifw-armv8_0_OUTDIR)/unpacked.ts \
+| $$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch32.fd \
$$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch64.fd \
$(foreach arch, aarch64 aarch32, $(foreach mod,$(VBOX_EFI_MODULES_FLAT_ARM),$$(buildserver-efifw-armv8_0_OUTDIR)/$(arch)/$(mod).pdb)): \
$$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEfiFirmware-armv8.zip
$(call MSG_L1,Unpacking EFI ARMv8 firmware)
$(QUIET)$(TOOL_ZIP_UNPACK) $(TOOL_ZIP_UNPACKFLAGS) -o $< -d $(buildserver-efifw-armv8_0_OUTDIR)
$(foreach arch, aarch64 aarch32, \
$(NLTAB) $(QUIET)$(TEST) '!' -d $(dir $@)/$(arch) -- $(MKDIR_EXT) -- $(dir $@)/$(arch) \
$(foreach mod,$(VBOX_EFI_MODULES_FLAT_ARM) \
,$(NLTAB) $(QUIET)$(TEST) '!' -f $(dir $@)/$(arch)/$(mod).pdb -- $(APPEND_EXT) $(dir $@)/$(arch)/$(mod).pdb ))
$(TOUCH) -c -- $(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch32.fd \
$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEFIAArch64.fd
$(APPEND) -t $@ "done"
$$(buildserver-efifw-armv8_0_OUTDIR)/VBoxEfiFirmware-armv8.zip: \
$(VBOX_SVN_REV_KMK) $(KBUILD_DEVTOOLS)/bin/efi_firmware.sh | $$(dir $$@)
$(RM) -f -- "$@" "$@.tmp"
$(SHELL) $(KBUILD_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch-armv8 --filename "$@.tmp" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
$(MV) -f -- "$@.tmp" "$@"
endif
else # !VBOX_WITH_EFIFW_FROM_BUILD_SERVER
#
# Or from the local copy (no debug).
@ -522,6 +546,11 @@ if !defined(VBOX_ONLY_ADDITIONS) \
local-efifw_SOURCES = \
$(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd=>VBoxEFI32.fd \
$(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd=>VBoxEFI64.fd
ifdef VBOX_WITH_VIRT_ARMV8
local-efifw_SOURCES += \
$(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFIAArch32.fd=>VBoxEFIAArch32.fd \
$(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFIAArch64.fd=>VBoxEFIAArch64.fd
endif
endif # !VBOX_WITH_EFIFW_FROM_BUILD_SERVER
endif # VBOX_WITH_EFI && !VBOX_ONLY_SDK
@ -537,12 +566,12 @@ if !defined(VBOX_ONLY_ADDITIONS) \
buildserver-extpacks_INST = $(INST_DIST)
buildserver-extpacks_MODE = 0644
buildserver-extpacks_SOURCES = \
$(buildserver-extpacks_0_OUTDIR)/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack
$(buildserver-extpacks_0_OUTDIR)/$(VBOX_PUEL_MANGLED_NAME).vbox-extpack
buildserver-extpacks_CLEANS = \
$(buildserver-extpacks_0_OUTDIR)/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack \
$(buildserver-extpacks_0_OUTDIR)/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack.tmp
$(buildserver-extpacks_0_OUTDIR)/$(VBOX_PUEL_MANGLED_NAME).vbox-extpack \
$(buildserver-extpacks_0_OUTDIR)/$(VBOX_PUEL_MANGLED_NAME).vbox-extpack.tmp
$$(buildserver-extpacks_0_OUTDIR)/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack: \
$$(buildserver-extpacks_0_OUTDIR)/$(VBOX_PUEL_MANGLED_NAME).vbox-extpack: \
$(VBOX_SVN_REV_KMK) $(KBUILD_DEVTOOLS)/bin/extpacks.sh | $$(dir $$@)
$(RM) -f -- "$@.tmp" "$@"
$(SHELL) $(KBUILD_DEVTOOLS)/bin/extpacks.sh --cmd fetch --filename "$@.tmp" --vbox-version "$(VBOX_VERSION_STRING_NO_PUB)" \
@ -930,7 +959,7 @@ VBOX_CORE_DOXYFILE_INPUT_FIRST = \
$(PATH_ROOT)/include/VBox/vmm/cpumdis.h \
$(PATH_ROOT)/include/VBox/dbggui.h \
$(PATH_ROOT)/include/VBox/dis.h \
$(PATH_ROOT)/include/VBox/disopcode.h \
$(PATH_ROOT)/include/VBox/disopcode-x86-amd64.h \
$(PATH_ROOT)/include/VBox/intnet.h \
$(PATH_ROOT)/include/VBox/settings.h \
$(PATH_ROOT)/include/VBox/pci.h \
@ -1139,6 +1168,7 @@ VBOX_RSYNC_IN_FN = $(if-expr "$(3)" != "nossh",$(VBOX_RSYNC),$(VBOX_RSYNC_NOSSH)
# VM IP addresses.
#
VBOX_BLD_VM_LNX_IP := 192.168.27.2
VBOX_BLD_VM_LNX_ARM64_IP := 192.168.27.26
VBOX_BLD_VM_OS2_IP := 192.168.27.3
VBOX_BLD_VM_SOLARIS_IP := 192.168.27.4
VBOX_BLD_VM_DARWIN_X86_IP := 192.168.27.5
@ -1184,6 +1214,9 @@ additions-fetch:
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin VBOX_ONLY_ADDITIONS=1 #VBOX_DEF_MACOSX_VERSION_MIN=10.5
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux VBOX_ONLY_ADDITIONS=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux VBOX_ONLY_ADDITIONS=1
ifdef VBOX_WITH_LNX_ARM64_ADDITIONS
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=arm64 KBUILD_TARGET=linux VBOX_ONLY_ADDITIONS=1
endif
ifdef VBOX_WITH_OS2_ADD_BUILD
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 VBOX_ONLY_ADDITIONS=1
endif
@ -1205,14 +1238,16 @@ additions-build: \
additions-build-os2.x86 \
additions-build-linux \
additions-build-darwin.x86 \
additions-build-darwin.amd64
additions-build-darwin.amd64 \
$(if $(VBOX_WITH_LNX_ARM64_ADDITIONS), additions-build-linux.arm64,)
additions-build-rsync-into-vms: \
additions-build-solaris.rsync-into-vm \
additions-build-os2.rsync-into-vm \
additions-build-darwin.x86.rsync-into-vm \
additions-build-darwin.amd64.rsync-into-vm \
additions-build-linux.rsync-into-vm
additions-build-linux.rsync-into-vm \
$(if $(VBOX_WITH_LNX_ARM64_ADDITIONS), additions-build-linux.arm64.rsync-into-vm,)
$(call MSG_L1,Rsynced the sources + tools into the VMs.)
.NOTPARALLEL: additions-build-rsync-into-vms
.PHONY: additions-build-rsync-into-vms
@ -1224,26 +1259,21 @@ VBOX_ADDITIONS_BUILD.amd64 = VBOX_ONLY_ADDITIONS=1 VBOX_WITHOUT_ADDITIONS_ISO=1
VBOX_ADDITIONS_BUILD.x86 = VBOX_ONLY_ADDITIONS=1 VBOX_WITHOUT_ADDITIONS_ISO=1 \
KBUILD_TYPE=$(KBUILD_TYPE) KBUILD_TARGET_ARCH=x86 VBOX_SVN_REV=$(VBOX_SVN_REV)
ifdef VBOX_WITH_LNX_ARM64_ADDITIONS
VBOX_ADDITIONS_BUILD.arm64 = VBOX_ONLY_ADDITIONS=1 VBOX_WITHOUT_ADDITIONS_ISO=1 \
KBUILD_TYPE=$(KBUILD_TYPE) KBUILD_TARGET_ARCH=arm64 VBOX_SVN_REV=$(VBOX_SVN_REV)
endif
# Automatically determine the additions build subdir name. Used for figuring
# out directory names inside the additions building VMs.
VBOX_ADDITIONS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
# When building in parallel on a Windows host, make sure we finish the host
# bit before kicking off any UNIX guest or we'll run into file sharing issues.
ifeq ($(KBUILD_TARGET),win)
VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST = #additions-build-win.x86 additions-build-win.amd64
else
VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST =
endif
# ASSUMES the 32-bit edition has been built already. Also for serializing VM access.
ifeq ($(KBUILD_TARGET),win)
additions-build-win.amd64-just-build:
additions-build-win.amd64:
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) all $(VBOX_ADD_HOST_BUILD_TWEAK)
additions-build-win.amd64: additions-build-win.x86 additions-build-win.amd64-just-build
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) packing
else
additions-build-win.amd64: additions-build-win.x86
additions-build-win.amd64:
$(call VBOX_BLD_VM_MSG_BEGIN,Windows/amd64 additions build+pack)
$(TIME) -- $(VBOX_SSH) vbox@$(VBOX_BLD_VM_WIN_AMD64_IP) ' cd e:/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_ADDITIONS_BUILD.amd64) all packing '
$(call VBOX_BLD_VM_MSG_END__,Windows/amd64 additions build+pack)
@ -1348,6 +1378,12 @@ ifeq ($(KBUILD_TARGET),linux)
additions-build-linux: additions-build-linux.x86 additions-build-linux.amd64
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.x86) all $(VBOX_ADD_HOST_BUILD_TWEAK)
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.x86) packing VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE=1
ifdef VBOX_WITH_LNX_ARM64_ADDITIONS
additions-build-linux.arm64:
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.arm64) all $(VBOX_ADD_HOST_BUILD_TWEAK)
+ $(TIME) -- $(KMK) $(VBOX_ADDITIONS_BUILD.arm64) packing
endif
else
additions-build-linux.rsync-into-vm:
$(TIME) -- $(call VBOX_RSYNC_IN_FN,linux,*) \
@ -1419,6 +1455,64 @@ else
.PHONY: additions-build-linux.rsync-into-vm additions-build-linux.rsync-out-of-vm additions-build-linux.build-it
additions-build-linux: additions-build-linux.rsync-out-of-vm
#
# Preliminary arm64 Linux guest additions build.
#
ifdef VBOX_WITH_LNX_ARM64_ADDITIONS
additions-build-linux.arm64.rsync-into-vm:
$(TIME) -- $(call VBOX_RSYNC_IN_FN,linux,*) \
'--exclude=src/VBox/Additions/WINNT/**' \
'--include=src/VBox/Devices/' \
'--include=src/VBox/Devices/Audio/' \
'--include=src/VBox/Devices/Audio/**' \
'--include=src/VBox/Devices/build/' \
'--include=src/VBox/Devices/build/**' \
'--exclude=src/VBox/Devices/**' \
'--exclude=src/VBox/Debugger/**' \
'--exclude=src/VBox/ExtPacks/**' \
'--exclude=src/VBox/Frontends/**' \
'--exclude=src/VBox/HostService/**' \
'--exclude=src/VBox/ImageMounter/**' \
'--exclude=src/VBox/NetworkServices/**' \
'--exclude=src/VBox/RDP/**' \
'--exclude=src/VBox/Storage/**' \
'--include=src/VBox/ValidationKit/' \
'--include=src/VBox/ValidationKit/Config.kmk' \
'--include=src/VBox/ValidationKit/utils/' \
'--include=src/VBox/ValidationKit/utils/audio/' \
'--include=src/VBox/ValidationKit/utils/audio/**' \
'--exclude=src/VBox/ValidationKit/**' \
'--exclude=src/VBox/VMM/**' \
'--exclude=src/libs/dxvk-native-**' \
'--exclude=src/libs/curl-**' \
'--exclude=src/libs/libjpeg-turbo-**' \
'--exclude=src/libs/libogg-**' \
'--exclude=src/libs/libpng-**' \
'--exclude=src/libs/libssh-**' \
'--exclude=src/libs/libtpms-**' \
'--exclude=src/libs/libvorbis-**' \
'--exclude=src/libs/libvpx-**' \
'--exclude=src/libs/libxml-**' \
'--exclude=src/libs/softfloat-**' \
'--exclude=src/libs/TestFloat-**' \
'--exclude=src/libs/xpcom18a4/**' \
'--exclude=src/apps/**' \
. $(VBOX_BLD_VM_LNX_ARM64_IP):/home/vbox/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME)
additions-build-linux.arm64.build-it: additions-build-linux.arm64.rsync-into-vm
$(call VBOX_BLD_VM_MSG_BEGIN,Linux/arm64 additions build+pack)
$(TIME) -- $(VBOX_SSH) vbox@$(VBOX_BLD_VM_LNX_ARM64_IP) 'cd /home/vbox/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.arm64) VBOX_WITH_WARNINGS_AS_ERRORS= VBOX_WITHOUT_LINUX_TEST_BUILDS=1 VBOX_WITH_LNX_ARM64_ADDITIONS=1 all packing'
$(call VBOX_BLD_VM_MSG_END__,Linux/arm64 additions build+pack)
additions-build-linux.arm64.rsync-out-of-vm: additions-build-linux.arm64.build-it
$(TIME) -- $(VBOX_RSYNC) -a --delete $(VBOX_BLD_VM_LNX_ARM64_IP):/home/vbox/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME)/out/linux.arm64 out/
.NOTPARALLEL: additions-build-linux.arm64.rsync-into-vm
.PHONY: additions-build-linux.arm64.rsync-into-vm additions-build-linux.arm64.rsync-out-of-vm additions-build-linux.arm64.build-it
additions-build-linux.arm64: additions-build-linux.arm64.rsync-out-of-vm
endif
endif
# Darwin
@ -1545,7 +1639,9 @@ additions-packing:
VBOX_WITH_ADDITIONS_ISO.freebsd.x86= \
VBOX_WITH_ADDITIONS_ISO.linux.amd64= \
VBOX_WITH_ADDITIONS_ISO.linux.x86=1 \
VBOX_WITH_ADDITIONS_ISO.linux.arm64=1 \
VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE=1 \
$(if $(VBOX_WITH_LNX_ARM64_ADDITIONS), VBOX_WITH_LNX_ARM64_ADDITIONS=1,) \
VBOX_WITH_ADDITIONS_ISO.os2.x86=1 \
VBOX_WITH_ADDITIONS_ISO.solaris.amd64=1 \
VBOX_WITH_ADDITIONS_ISO.solaris.x86=1 \
@ -1565,6 +1661,7 @@ additions-packing:
additions-build-linux.amd64 \
additions-build-linux.x86 \
additions-build-linux.x86.combined \
$(if $(VBOX_WITH_LNX_ARM64_ADDITIONS), additions-build-linux.arm64,) \
additions-build-darwin \
additions-build-darwin.x86 \
additions-build-darwin.amd64 \
@ -1808,10 +1905,12 @@ validationkit-fetch:
+ $(KMK) -C tools fetch VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=arm64 KBUILD_TARGET=darwin VBOX_ONLY_VALIDATIONKIT=1
# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd VBOX_ONLY_VALIDATIONKIT=1
# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=arm64 KBUILD_TARGET=linux VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris VBOX_ONLY_VALIDATIONKIT=1
+ $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris VBOX_ONLY_VALIDATIONKIT=1
@ -1827,15 +1926,18 @@ validationkit-build: \
validationkit-build-win.amd64 \
validationkit-build-os2.x86 \
validationkit-build-linux \
validationkit-build-linux.arm64 \
validationkit-build-freebsd.amd64 \
validationkit-build-freebsd.x86 \
validationkit-build-darwin.amd64 \
validationkit-build-darwin.x86
validationkit-build-darwin.x86 \
validationkit-build-darwin.arm64
validationkit-build-rsync-into-vms: \
validationkit-build-solaris.rsync-into-vm \
validationkit-build-os2.rsync-into-vm \
validationkit-build-linux.rsync-into-vm
validationkit-build-linux.rsync-into-vm \
validationkit-build-linux.arm64.rsync-into-vm
$(call MSG_L1,Rsynced the sources + tools into the VMs.)
.NOTPARALLEL: validationkit-build-rsync-into-vms
.PHONY: validationkit-build-rsync-into-vms
@ -1847,6 +1949,9 @@ VBOX_VALIDATIONKIT_BUILD.amd64 = VBOX_ONLY_VALIDATIONKIT=1 \
VBOX_VALIDATIONKIT_BUILD.x86 = VBOX_ONLY_VALIDATIONKIT=1 \
KBUILD_TYPE=$(KBUILD_TYPE) KBUILD_TARGET_ARCH=x86 VBOX_SVN_REV=$(VBOX_SVN_REV)
VBOX_VALIDATIONKIT_BUILD.arm64 = VBOX_ONLY_VALIDATIONKIT=1 \
KBUILD_TYPE=$(KBUILD_TYPE) KBUILD_TARGET_ARCH=arm64 VBOX_SVN_REV=$(VBOX_SVN_REV)
# Automatically determine the Validation Kit build subdir name. Used for figuring
# out directory names inside the test suite building VMs.
VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
@ -1979,6 +2084,40 @@ else
.PHONY: validationkit-build-linux.rsync-out-of-vm validationkit-build-linux.rsync-into-vm validationkit-build-linux.build-it
validationkit-build-linux: validationkit-build-linux.rsync-out-of-vm
#
# ValidationKit build for Linux ARM.
#
validationkit-build-linux.arm64.rsync-into-vm: $(VBOX_VALIDATIONKIT_BUILD_WIN_HOST_FIRST)
$(TIME) -- $(call VBOX_RSYNC_IN_FN,linux,*) \
'--exclude=src/VBox/Additions/**' \
'--exclude=src/VBox/Debugger/**' \
'--exclude=src/VBox/Frontends/**' \
'--exclude=src/VBox/GuestHost/**' \
'--exclude=src/VBox/HostServices/**' \
'--exclude=src/VBox/ImageMounter/**' \
'--include=src/VBox/Main/' \
'--include=src/VBox/Main/idl**' \
'--exclude=src/VBox/Main/**' \
'--exclude=src/VBox/NetworkServices/**' \
'--exclude=src/VBox/RDP/**' \
'--exclude=src/VBox/Storage/**' \
'--exclude=src/VBox/VMM/**' \
'--exclude=src/app/**' \
. $(VBOX_BLD_VM_LNX_ARM64_IP):/home/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME)
validationkit-build-linux.arm64.build-it: validationkit-build-linux.arm64.rsync-into-vm
$(call VBOX_BLD_VM_MSG_BEGIN,Linux/arm64 Validation Kit)
$(TIME) -- $(VBOX_SSH) vbox@$(VBOX_BLD_VM_LNX_ARM64_IP) 'cd /home/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_VALIDATIONKIT_BUILD.arm64) all '
$(call VBOX_BLD_VM_MSG_END__,Linux/arm64 Validation Kit)
validationkit-build-linux.arm64.rsync-out-of-vm: validationkit-build-linux.arm64.build-it
$(TIME) -- $(VBOX_RSYNC) -a --delete $(VBOX_BLD_VM_LNX_ARM64_IP):/home/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME)/out/linux.arm64 out/
.PHONY: validationkit-build-linux.arm64.rsync-out-of-vm validationkit-build-linux.arm64.rsync-into-vm validationkit-build-linux.arm64.build-it
validationkit-build-linux.arm64: validationkit-build-linux.arm64.rsync-out-of-vm
endif
validationkit-build-freebsd.amd64: $(VBOX_VALIDATIONKIT_BUILD_WIN_HOST_FIRST)
@ -2021,15 +2160,28 @@ else
$(call VBOX_BLD_VM_MSG_END__,Darwin/x86 Validation Kit)
endif
validationkit-build-darwin.arm64: $(VBOX_VALIDATIONKIT_BUILD_WIN_HOST_FIRST)
ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.arm64)
+ $(TIME) -- $(KMK) $(VBOX_VALIDATIONKIT_BUILD.arm64) all $(VBOX_VALIDATIONKIT_HOST_BUILD_TWEAK)
else
$(call VBOX_BLD_VM_MSG_BEGIN,Darwin/arm64 Validation Kit)
$(TIME) -- $(call VBOX_RSYNC_IN_FN,darwin,arm64) . $(VBOX_BLD_VM_DARWIN_ARM64_IP):/Users/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME)
$(TIME) -- $(VBOX_SSH) vbox@$(VBOX_BLD_VM_DARWIN_ARM64_IP) 'PATH=$$PATH:/opt/local/bin; cd /Users/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME) && KBUILD_HOST_ARCH=arm64 tools/env.sh --no-wine kmk $(VBOX_VALIDATIONKIT_BUILD.arm64) all '
$(TIME) -- $(VBOX_RSYNC) -am -v --delete $(VBOX_BLD_VM_DARWIN_ARM64_IP):/Users/vbox/tinderbox/$(VBOX_VALIDATIONKIT_BUILD_SUBDIRNAME)/out/darwin.arm64 out/
$(call VBOX_BLD_VM_MSG_END__,Darwin/arm64 Validation Kit)
endif
validationkit-packing:
+ $(KMK) VBOX_ONLY_VALIDATIONKIT=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.darwin.amd64=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.darwin.x86=2 \
VBOX_WITH_VALIDATIONKIT_PACKING.darwin.arm64=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.freebsd.amd64= \
VBOX_WITH_VALIDATIONKIT_PACKING.freebsd.x86= \
VBOX_WITH_VALIDATIONKIT_PACKING.linux.amd64=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.linux.x86=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.linux.arm64=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.os2.x86=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.solaris.amd64=1 \
VBOX_WITH_VALIDATIONKIT_PACKING.solaris.x86=1 \
@ -2048,10 +2200,12 @@ validationkit-packing:
validationkit-build-linux \
validationkit-build-linux.amd64 \
validationkit-build-linux.x86 \
validationkit-build-linux.arm64 \
validationkit-build-freebsd.amd64 \
validationkit-build-freebsd.x86 \
validationkit-build-darwin.amd64 \
validationkit-build-darwin.x86 \
validationkit-build-darwin.arm64 \
validationkit-packing
@ -2059,13 +2213,13 @@ validationkit-packing:
# Build the EFI firmware, all of it.
#
efi-fetch:
+ $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1
+ $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1 VBOX_ONLY_EFI=1
efi-build: $(VBOX_VERSION_HEADER)
+ $(KMK) -C src/VBox/Devices/EFI/Firmware$(VBOX_EFI_FIRMWARE_SUFFIX)
efi-packing:
+ $(KMK) -C src/VBox/Devices/EFI/Firmware$(VBOX_EFI_FIRMWARE_SUFFIX) $(PATH_STAGE)/VBoxEfiFirmware.zip
+ $(KMK) -C src/VBox/Devices/EFI/Firmware$(VBOX_EFI_FIRMWARE_SUFFIX) $(PATH_STAGE)/VBoxEfiFirmware.zip $(if $(VBOX_WITH_VIRT_ARMV8),$(PATH_STAGE)/VBoxEfiFirmware-armv8.zip,)
@ -2126,7 +2280,6 @@ else
'--exclude=src/VBox/HostServices/**' \
'--exclude=src/VBox/ImageMounter/**' \
'--exclude=src/VBox/NetworkServices/**' \
'--exclude=src/VBox/Runtime/**' \
'--exclude=src/VBox/Storage/**' \
'--exclude=src/VBox/VMM/**' \
'--include=src/libs/' \
@ -2305,3 +2458,38 @@ quick: \
$(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB) && "$(KBUILD_TARGET)" == "win",VBoxProxyStub,) \
$(if-expr defined(VBOX_WITH_SDS),VBoxSDS,) \
$(if-expr defined(VBOX_WITH_QTGUI),VirtualBox,)
#
# Runs the analysis with parfait
#
# @todo A lot of stuff doesn't compile with parfait under
# Windows yet due to insufficient MSVC emulation.
# Thatswhy the build is just ignoring errors and we let
# parfait work on whats there, even if incomplete.
# See @bugref{3409} for updates.
#
run-parfait:
ifdef VBOX_WITH_PARFAIT
ifeq ($(KBUILD_TARGET),win)
- $(REDIRECT) -E "PARFAIT_DUMP_PATH=$(PATH_OUT)" -- $(TIME) -- $(KMK) all -k
else
+ $(REDIRECT) -E "PARFAIT_DUMP_PATH=$(PATH_OUT)" -- $(TIME) -- $(KMK) all
endif
- $(REDIRECT) -E "PARFAIT_DUMP_PATH=$(PATH_OUT)" -- $(TIME) -- $(VBOX_PARFAIT) \
$(if-expr defined(VBOX_PARFAIT_SERVER),-s $(VBOX_PARFAIT_SERVER),) \
$(VBOX_PARFAIT_OPTS) \
$(if-expr defined(VBOX_PARFAIT_SERVER_BASELINE),-b $(VBOX_PARFAIT_SERVER_BASELINE),-b $(PATH_ROOT)/tools/parfait-vbox-baseline.conf) \
-j $(if-expr $(KMK_OPTS_JOBS) > 0, $(KMK_OPTS_JOBS), 1) \
-o $(PATH_OUT)/report.txt \
-g $(PATH_OUT)/html \
-c $(PATH_ROOT)/tools/parfait-vbox.conf \
--exclude-from=$(PATH_ROOT)/tools/parfait-vbox-exclude.conf \
--mrr-include-flagged=all --mrr-exclude-flagged=false,wontfix \
-z $(PATH_ROOT) \
-r $(VBOX_SVN_REV) \
$(PATH_OUT)/obj
else
$(ECHO) This target requires VBOX_WITH_PARFAIT to be set.
exit 1
endif

View file

@ -6,7 +6,7 @@
#
#
# Copyright (C) 2017-2023 Oracle and/or its affiliates.
# Copyright (C) 2017-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
@ -30,11 +30,11 @@
# Major version.
VBOX_VERSION_MAJOR = 7
# Minor version.
VBOX_VERSION_MINOR = 0
VBOX_VERSION_MINOR = 1
# This is the current build number. It should be increased every time we publish a
# new build. The define is available in every source file. Only even build numbers
# will be published, odd numbers are set during development.
VBOX_VERSION_BUILD = 26
VBOX_VERSION_BUILD = 8
# This can be overridden in LocalConfig.kmk or elsewhere.
# For the convention, see checks near the end of Config.kmk.
VBOX_BUILD_PUBLISHER =
@ -44,15 +44,5 @@ VBOX_VERSION_PRERELEASE =
# our numbering does not say this is a release build, by setting this non-empty.
VBOX_RELEASE_EXACT_MATCH =
# darwin.arm64 will remain BETA for quite a while.
if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.arm64)
if $(VBOX_VERSION_BUILD) % 2 == 0
ifeq ($(VBOX_VERSION_PRERELEASE),)
VBOX_RELEASE_EXACT_MATCH := 1
endif
endif
VBOX_VERSION_PRERELEASE := BETA4
endif
# Fallback revision when there is no other source. See Config.kmk.
VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 168464 $ )
VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 168469 $ )

234
configure vendored
View file

@ -3,7 +3,7 @@
# libraries VBox OSE depends on.
#
# Copyright (C) 2006-2023 Oracle and/or its affiliates.
# Copyright (C) 2006-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
@ -91,7 +91,7 @@ WITH_PYTHON=1
WITH_JAVA=1
WITH_VMMRAW=1
WITH_LIBIDL=1
WITH_QT5=1
WITH_QT6=1
WITH_SDL=1
WITH_SDL_TTF=1
WITH_X11=1
@ -117,7 +117,11 @@ BUILD_LIBCURL=
BUILD_LIBSSL=
BUILD_LIBVPX=
BUILD_LIBTPMS=
BUILD_LIBLZMA=
if [ "$OS" = "darwin" ]; then # Do not use the /opt/local version of this! We end up using the wrong iconv.h then.
BUILD_LIBLZMA=1
else
BUILD_LIBLZMA=
fi
PASSIVE_MESA=0
CC="gcc"
CC32=""
@ -168,10 +172,10 @@ INCVPX=""
LIBVPX="-lvpx"
PKGCONFIG="`which_wrapper pkg-config`"
PYTHONDIR="/usr /usr/local"
QT5DIR="/usr/lib/qt5 /usr/share/qt5 /usr/lib64/qt5 /usr /usr/local"
QT5DIR_PKGCONFIG=1
QT5MAJ=5
QT5MIN=9
QT6DIR="/usr/lib/qt6 /usr/share/qt6 /usr/lib64/qt6 /usr /usr/local"
QT6DIR_PKGCONFIG=1
QT6MAJ=6
QT6MIN=3
KBUILDDIR="`cd \`dirname $0\`; pwd`/kBuild"
DEVDIR="`cd \`dirname $0\`; pwd`/tools"
if [ -d "/lib/modules/`uname -r`/build" ]; then
@ -1538,20 +1542,20 @@ EOF
#
# Check for the Qt5 library, needed by the VirtualBox frontend
# Check for the Qt6 library, needed by the VirtualBox frontend
#
# Currently not fatal.
#
check_qt5()
check_qt6()
{
foundqt5=
test_header Qt5
foundqt6=
test_header Qt6
cat > $ODIR.tmp_src.cc << EOF
#include <QtGlobal>
extern "C" int main(void)
{
EOF
echo "#if QT_VERSION >= $(($QT5MAJ*65536+$QT5MIN*256))" >> $ODIR.tmp_src.cc
echo "#if QT_VERSION >= $(($QT6MAJ*65536+$QT6MIN*256))" >> $ODIR.tmp_src.cc
cat >> $ODIR.tmp_src.cc << EOF
return 0;
#else
@ -1571,48 +1575,53 @@ EOF
fi
done
# Now try the user provided directory and some of the standard directories.
QT_TRIES="$QT5DIR /System/Library /Library"
QT_TRIES="$QT6DIR /System/Library /Library"
for t in $QT_TRIES; do
if [ -f "$t/Frameworks/QtCore.framework/QtCore" -o -f "$t/clang_64/lib/QtCore.framework/QtCore" ]; then
PATH_SDK_QT5="$t"
foundqt5=1
if [ -f "$t/Frameworks/QtCore.framework/QtCore" -o -f "$t/clang_64/lib/QtCore.framework/QtCore" -o -f "$t/lib/QtCore.framework/QtCore" ]; then
PATH_SDK_QT6="$t"
foundqt6=1
break
fi
done
# Add the necessary params for building the test application
if [ -n "$PATH_SDK_QT5" ]; then
if [ -f "$t/clang_64/lib/QtCore.framework/QtCore" ]; then
INCQT5=-I$PATH_SDK_QT5/clang_64/lib/QtCore.framework/Headers
LIBQT5=-F$PATH_SDK_QT5/clang_64/lib
SDKQT5=$PATH_SDK_QT5/clang_64
if [ -n "$PATH_SDK_QT6" ]; then
if [ -f "$t/lib/QtCore.framework/QtCore" ]; then
INCQT6=-I$PATH_SDK_QT6/lib/QtCore.framework/Headers
LIBQT6=-F$PATH_SDK_QT6/lib
SDKQT6=$PATH_SDK_QT6
elif [ -f "$t/clang_64/lib/QtCore.framework/QtCore" ]; then
INCQT6=-I$PATH_SDK_QT6/clang_64/lib/QtCore.framework/Headers
LIBQT6=-F$PATH_SDK_QT6/clang_64/lib
SDKQT6=$PATH_SDK_QT6/clang_64
else
INCQT5=-I$PATH_SDK_QT5/Frameworks/QtCore.framework/Headers
LIBQT5=-F$PATH_SDK_QT5/Frameworks
SDKQT5=$PATH_SDK_QT5
INCQT6=-I$PATH_SDK_QT6/Frameworks/QtCore.framework/Headers
LIBQT6=-F$PATH_SDK_QT6/Frameworks
SDKQT6=$PATH_SDK_QT6
fi
FLGQT5="-framework QtCore -std=c++11 -Wl,-rpath,`L_to_PATH "$LIBQT5"`"
FLGQT6="-framework QtCore -std=c++17 -Wl,-rpath,`L_to_PATH "$LIBQT6"`"
else
log_failure "Qt5 framework not found (can be disabled using --disable-qt)"
log_failure "Qt6 framework not found (can be disabled using --disable-qt)"
fail
fi
else # !darwin
if [ $QT5DIR_PKGCONFIG -eq 1 ]; then
if [ $QT6DIR_PKGCONFIG -eq 1 ]; then
# Default is to use pkg-config:
if which_wrapper pkg-config > /dev/null; then
qt5_ver=`pkg-config Qt5Core --modversion 2>> $LOG`
qt6_ver=`pkg-config Qt6Core --modversion 2>> $LOG`
if [ $? -eq 0 ]; then
echo "(Qt5 from pkg-config)" >> $LOG
FLGQT5=`pkg-config Qt5Core --cflags`
# gcc 4.8 is able to compile with C++11 (see also VBOX_GCC_std in Config.kmk)
[ $(($cc_maj * 100 + $cc_min)) -ge 408 ] && FLGQT5="$FLGQT5 -std=c++11"
INCQT5=`strip_I "$FLGQT5"`
LIBDIR5=`pkg-config Qt5Core --variable=libdir`
LIBQT5=`pkg-config Qt5Core Qt5Gui --libs`
LIBQT5="-L$LIBDIR5 $LIBQT5"
TOOLQT5=`pkg-config Qt5Core --variable=prefix`
TOOLQT5BIN=`pkg-config Qt5Core --variable=host_bins`
if test_compile "$LIBQT5 $LIBPTHREAD $FLGQT5" qt5 qt5 nofatal; then
test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal && foundqt5=3 # pkg-config
echo "(Qt6 from pkg-config)" >> $LOG
FLGQT6=`pkg-config Qt6Core --cflags`
# gcc 8.0 is able to compile with C++17 (see also VBOX_GCC_std in Config.kmk)
[ $(($cc_maj * 100 + $cc_min)) -ge 408 ] && FLGQT6="$FLGQT6 -std=c++17"
INCQT6=`strip_I "$FLGQT6"`
LIBDIR5=`pkg-config Qt6Core --variable=libdir`
LIBQT6=`pkg-config Qt6Core Qt6Gui --libs`
LIBQT6="-L$LIBDIR5 $LIBQT6"
TOOLQT6=`pkg-config Qt6Core --variable=prefix`
TOOLQT6BIN=`pkg-config Qt6Core --variable=bindir`
TOOLQT6LIBEXEC=`pkg-config Qt6Core --variable=libexecdir`
if test_compile "$LIBQT6 $LIBPTHREAD $FLGQT6" qt6 qt6 nofatal; then
test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal && foundqt6=3 # pkg-config
fi
fi
else
@ -1620,30 +1629,30 @@ EOF
fail
fi
fi
if [ -z "$foundqt5" ]; then
# Do it the old way (e.g. user has specified QT5DIR):
for q in $QT5DIR "$DEVDIR/linux.$TARGET_MACHINE"/qt/v5.*; do
echo "(Qt5 from '$q')" >> $LOG
INCQT5="$q/include $q/include/QtCore"
FLGQT5="-DQT_SHARED -std=c++11"
I_INCQT5=`prefix_I "$INCQT5"`
LIBQT5="-L$q/lib -lQt5CoreVBox -lQt5GuiVBox"
TOOLQT5="$q"
if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal &&
test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal; then
foundqt5=2 # internal
if [ -z "$foundqt6" ]; then
# Do it the old way (e.g. user has specified QT6DIR):
for q in $QT6DIR "$DEVDIR/linux.$TARGET_MACHINE"/qt/v6.*; do
echo "(Qt6 from '$q')" >> $LOG
INCQT6="$q/include $q/include/QtCore"
FLGQT6="-DQT_SHARED -std=c++17"
I_INCQT6=`prefix_I "$INCQT6"`
LIBQT6="-L$q/lib -lQt6CoreVBox -lQt6GuiVBox"
TOOLQT6="$q"
if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal &&
test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal; then
foundqt6=2 # internal
break;
fi
LIBQT5="-L$q/lib -lQt5Core -lQt5Gui"
if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal &&
test_execute_path "`L_to_PATH "$LIBQT5"`" nofatal; then
foundqt5=1 # no pkg-config, Qt directory
LIBQT6="-L$q/lib -lQt6Core -lQt6Gui"
if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal &&
test_execute_path "`L_to_PATH "$LIBQT6"`" nofatal; then
foundqt6=1 # no pkg-config, Qt directory
break;
fi
done
fi
fi
if [ -n "$foundqt5" ]; then
if [ -n "$foundqt6" ]; then
# We decided which version of Qt to use, now enforce the version requirement:
cat > $ODIR.tmp_src.cc << EOF
#include <cstdio>
@ -1652,76 +1661,81 @@ extern "C" int main(void)
{
printf("found version %s", QT_VERSION_STR);
EOF
echo "#if QT_VERSION >= $(($QT5MAJ*65536+$QT5MIN*256))" >> $ODIR.tmp_src.cc
echo "#if QT_VERSION >= $(($QT6MAJ*65536+$QT6MIN*256))" >> $ODIR.tmp_src.cc
cat >> $ODIR.tmp_src.cc << EOF
printf(", OK.\n");
return 0;
#else
EOF
echo " printf(\", expected version $QT5MAJ.$QT5MIN or higher\\\\n\");" >> $ODIR.tmp_src.cc
echo " printf(\", expected version $QT6MAJ.$QT6MIN or higher\\\\n\");" >> $ODIR.tmp_src.cc
cat >> $ODIR.tmp_src.cc << EOF
return 1;
#endif
}
EOF
[ -n "$INCQT5" ] && I_INCQT5=`prefix_I "$INCQT5"`
if test_compile "$LIBQT5 $LIBPTHREAD $I_INCQT5 $FLGQT5" qt5 qt5 nofatal; then
if test_execute_path "`L_to_PATH "$LIBQT5"`"; then
[ -n "$INCQT6" ] && I_INCQT6=`prefix_I "$INCQT6"`
if test_compile "$LIBQT6 $LIBPTHREAD $I_INCQT6 $FLGQT6" qt6 qt6 nofatal; then
if test_execute_path "`L_to_PATH "$LIBQT6"`"; then
if [ "$OS" = "darwin" ]; then
# Successful build & run the test application so add the necessary
# params to AutoConfig.kmk:
cnf_append "PATH_SDK_QT5_INC" "`L_to_PATH "$LIBQT5"`"
cnf_append "PATH_SDK_QT5_LIB" "`L_to_PATH "$LIBQT5"`"
cnf_append "PATH_SDK_QT5" "$SDKQT5"
cnf_append "PATH_SDK_QT6_INC" "`L_to_PATH "$LIBQT6"`"
cnf_append "PATH_SDK_QT6_LIB" "`L_to_PATH "$LIBQT6"`"
cnf_append "PATH_SDK_QT6" "$SDKQT6"
# Check for the moc tool in the Qt directory found & some standard
# directories.
for q in $PATH_SDK_QT5 $PATH_SDK_QT5/clang_64 /usr /Developer/Tools/Qt; do
if which_wrapper "$q/bin/moc" > /dev/null; then
cnf_append "PATH_TOOL_QT5_BIN" "$q/bin"
for q in $PATH_SDK_QT6 $PATH_SDK_QT6/clang_64 /usr /Developer/Tools/Qt; do
if which_wrapper "$q/bin/lrelease" > /dev/null; then
cnf_append "PATH_TOOL_QT6_BIN" "$q/bin"
fi
if which_wrapper "$q/libexec/moc" > /dev/null; then
cnf_append "PATH_TOOL_QT6_LIBEXEC" "$q/libexec"
fi
done
else
# Strip .../QtCore as we add components ourself:
INCQT5=`echo "$INCQT5"|$KBUILD_SED 's|\([^ ]*\)/QtCore|\1|g; s| $||g'`
INCQT6=`echo "$INCQT6"|$KBUILD_SED 's|\([^ ]*\)/QtCore|\1|g; s| $||g'`
# store only the first path, remove all other paths
# most likely pkg-config gave us -I/usr/include/qt5 -I/usr/include/qt5/QtCore
INCQT5=`echo "$INCQT5"|$KBUILD_SED 's|\([^ ]*\) .*|\1|'`
cnf_append "VBOX_PATH_QT_LIB" "`strip_L "$LIBQT5"`"
cnf_append "PATH_SDK_QT5_INC" "$INCQT5"
# most likely pkg-config gave us -I/usr/include/qt6 -I/usr/include/qt6/QtCore
INCQT6=`echo "$INCQT6"|$KBUILD_SED 's|\([^ ]*\) .*|\1|'`
cnf_append "VBOX_PATH_QT_LIB" "`strip_L "$LIBQT6"`"
cnf_append "PATH_SDK_QT6_INC" "$INCQT6"
# This is not quite right since the qt libpath does not have to be first...
cnf_append "PATH_SDK_QT5_LIB" '$'"(firstword `strip_L "$LIBQT5"`)"
if [ "$foundqt5" = "2" ]; then
cnf_append "PATH_SDK_QT6_LIB" '$'"(firstword `strip_L "$LIBQT6"`)"
if [ "$foundqt6" = "2" ]; then
cnf_append "VBOX_WITH_ORACLE_QT" "1"
fi
if [ "$foundqt5" != "3" ]; then
TOOLQT5BIN="$TOOLQT5/bin"
if [ "$foundqt6" != "3" ]; then
TOOLQT6BIN="$TOOLQT6/bin"
TOOLQT6LIBEXEC="$TOOLQT6/libexec"
fi
test_header "Qt5 devtools"
test_header "Qt6 devtools"
# Try it with a suffix, some platforms use that
if which_wrapper "$TOOLQT5BIN/moc-qt5" > /dev/null; then
QT5BINSUFF="-qt5"
if which_wrapper "$TOOLQT6LIBEXEC/moc-qt6" > /dev/null; then
QT6BINSUFF="-qt6"
else
QT5BINSUFF=""
QT6BINSUFF=""
fi
moc_ver=`$TOOLQT5BIN/moc$QT5BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
moc_ver=`$TOOLQT6LIBEXEC/moc$QT6BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
if [ $? -ne 0 ]; then
log_failure "moc$QT5BINSUFF not working"
log_failure "moc$QT6BINSUFF not working"
fail
else
log_success "found version $moc_ver"
cnf_append "VBOX_PATH_QT" "$TOOLQT5"
cnf_append "PATH_SDK_QT5" "$TOOLQT5"
cnf_append "PATH_TOOL_QT5_BIN" "$TOOLQT5BIN"
[ -n "$QT5BINSUFF" ] && cnf_append "TOOL_QT5_BIN_SUFF" "$QT5BINSUFF"
cnf_append "VBOX_PATH_QT" "$TOOLQT6"
cnf_append "PATH_SDK_QT6" "$TOOLQT6"
cnf_append "PATH_TOOL_QT6_BIN" "$TOOLQT6BIN"
cnf_append "PATH_TOOL_QT6_LIBEXEC" "$TOOLQT6LIBEXEC"
[ -n "$QT6BINSUFF" ] && cnf_append "TOOL_QT6_BIN_SUFF" "$QT6BINSUFF"
fi
fi
fi
else
log_failure "qt5 not working"
log_failure "qt6 not working"
fail
fi
else
log_failure "qt5 not found"
log_failure "qt6 not found"
fail
fi
}
@ -2365,6 +2379,18 @@ check_darwinversion()
test_header "Darwin version"
darwin_ver=`uname -r`
case "$darwin_ver" in
24\.*)
darwin_ver="15.0" # Sequoia
;;
23\.*)
darwin_ver="14.0" # Sonoma
;;
22\.*)
darwin_ver="13.0" # Ventura
;;
21\.*)
darwin_ver="12.0" # Monterey
;;
20\.*)
darwin_ver="11.0" # Big Sur
;;
@ -2505,13 +2531,13 @@ EOF
[ $WITH_JAVA -eq 1 ] && echo " --disable-java disable java bindings"
[ $WITH_VMMRAW -eq 1 ] && echo " --disable-vmmraw disable VMM raw mode (VT-x/AMD-V mandatory!)"
[ $WITH_SDL_TTF -eq 1 ] && echo " --disable-sdl-ttf disable SDL_ttf detection"
[ $WITH_QT5 -eq 1 ] && echo " --disable-qt disable Qt detection"
[ $WITH_QT6 -eq 1 ] && echo " --disable-qt disable Qt detection"
[ $WITH_ALSA -eq 1 ] && echo " --disable-alsa disable the ALSA sound backend"
[ $WITH_PULSE -eq 1 ] && echo " --disable-pulse disable the PulseAudio backend"
[ $WITH_DBUS -eq 1 ] && echo " --disable-dbus don't use DBus and hal for hardware detection"
[ $WITH_KMODS -eq 1 ] && echo " --disable-kmods don't build Linux kernel modules (host and guest)"
[ $WITH_OPENGL -eq 1 ] && echo " --disable-opengl disable OpenGL support (2D & 3D)"
[ $WITH_QT5 -eq 0 ] && echo " --enable-qt5 enable Qt5 detection"
[ $WITH_QT6 -eq 0 ] && echo " --enable-qt6 enable Qt6 detection"
[ $OSE -eq 1 ] && echo " --enable-vnc enable the VNC server"
[ $OSE -eq 0 ] && echo " --disable-extpack don't build the extpack"
[ $WITH_DOCS -eq 1 ] && echo " --disable-docs don't build the documentation"
@ -2550,7 +2576,7 @@ EOF
[ "$OS" = "darwin" ] && echo " contains OS X 10.6 SDK (required for Mountain Lion and newer hosts"
[ "$OS" = "darwin" ] && echo " only, ignored for the rest)"
[ "$OS" = "linux" ] && echo " --with-linux=DIR Linux kernel source directory [$LINUX]"
[ $WITH_QT5 -eq 1 ] && echo " --with-qt-dir=DIR directory for Qt headers/libraries [pkgconfig]"
[ $WITH_QT6 -eq 1 ] && echo " --with-qt-dir=DIR directory for Qt headers/libraries [pkgconfig]"
cat << EOF
--with-gsoap-dir=PATH directory for gSOAP compiler/headers/libraries
(soapcpp2 and wsdl2h, soapstd2.h, libgsoap++.a/so)
@ -2649,14 +2675,14 @@ for option in "$@"; do
fi
;;
--with-qt-dir=*)
[ $WITH_QT5 -eq 1 ] && QT5DIR=`echo $option | cut -d'=' -f2`
[ $WITH_QT5 -eq 1 ] && QT5DIR_PKGCONFIG=0
[ $WITH_QT6 -eq 1 ] && QT6DIR=`echo $option | cut -d'=' -f2`
[ $WITH_QT6 -eq 1 ] && QT6DIR_PKGCONFIG=0
;;
--with-qt5-minor=*)
QT5MIN=`echo $option | cut -d'=' -f2`
--with-qt6-minor=*)
QT6MIN=`echo $option | cut -d'=' -f2`
;;
--with-qt5-major=*)
QT5MAJ=`echo $option | cut -d'=' -f2`
--with-qt6-major=*)
QT6MAJ=`echo $option | cut -d'=' -f2`
;;
--with-openssl-dir=*)
OPENSSLDIR=`echo $option | cut -d'=' -f2`
@ -2710,10 +2736,10 @@ for option in "$@"; do
[ $WITH_SDL_TTF -eq 1 ] && WITH_SDL_TTF=0
;;
--disable-qt)
[ $WITH_QT5 -eq 1 ] && WITH_QT5=0
[ $WITH_QT6 -eq 1 ] && WITH_QT6=0
;;
--enable-qt5)
[ $WITH_QT5 -eq 0 ] && WITH_QT5=1
--enable-qt6)
[ $WITH_QT6 -eq 0 ] && WITH_QT6=1
;;
--passive-mesa)
PASSIVE_MESA=1
@ -2810,7 +2836,7 @@ for option in "$@"; do
WITH_SDL_TTF=0
WITH_X11=0
WITH_OPENGL=0
WITH_QT5=0
WITH_QT6=0
;;
--ose)
OSE=2
@ -2962,7 +2988,7 @@ if [ $WITH_OPENGL -eq 0 ]; then
cnf_append "VBOX_GUI_USE_QGL" ""
fi
[ $WITH_XPCOM -eq 0 ] && cnf_append "VBOX_WITH_MAIN" ""
[ $WITH_QT5 -eq 0 ] && cnf_append "VBOX_WITH_QTGUI" ""
[ $WITH_QT6 -eq 0 ] && cnf_append "VBOX_WITH_QTGUI" ""
[ $WITH_SDL_TTF -eq 0 ] && cnf_append "VBOX_WITH_SECURELABEL" ""
[ $WITH_PYTHON -eq 0 ] && cnf_append "VBOX_WITH_PYTHON" ""
[ $WITH_JAVA -eq 0 ] && cnf_append "VBOX_WITH_JXPCOM" ""
@ -3023,7 +3049,7 @@ if [ $ONLY_ADDITIONS -eq 0 ]; then
[ $WITH_X11 -eq 1 ] && check_xinerama
[ $WITH_X11 -eq 1 ] && check_xrandr
[ $WITH_OPENGL -eq 1 ] && check_opengl
[ $WITH_QT5 -eq 1 ] && check_qt5
[ $WITH_QT6 -eq 1 ] && check_qt6
[ $WITH_PYTHON -eq 1 ] && check_python
[ $WITH_JAVA -eq 1 ] && check_java

View file

@ -9,7 +9,7 @@
'
'
' Copyright (C) 2006-2023 Oracle and/or its affiliates.
' Copyright (C) 2006-2024 Oracle and/or its affiliates.
'
' This file is part of VirtualBox base platform packages, as
' available from https://www.virtualbox.org.
@ -1756,44 +1756,34 @@ end function
''
' Checks for any Qt5 binaries.
' Checks for any Qt binaries.
'
sub CheckForQt(strOptQt5, strOptInfix)
dim strPathQt5, strInfixQt5, arrFolders, arrVccInfixes, strVccInfix, strPathDev
PrintHdr "Qt5"
sub CheckForQt(strOptQt, strOptInfix)
dim strPathQt, strInfixQt, arrFolders, arrVccInfixes, strVccInfix, strPathDev
PrintHdr "Qt"
'
' Try to find the Qt5 installation (user specified path with --with-qt5)
' Try to find the Qt installation (user specified path with --with-qt)
'
LogPrint "Checking for user specified path of Qt5 ... "
strPathQt5 = CheckForQt5Sub(UnixSlashes(strOptQt5), strOptInfix, strInfixQt5)
if strPathQt5 = "" and g_blnInternalFirst = true then strPathQt5 = CheckForQt5Internal(strOptInfix, strInfixQt5)
if strPathQt5 = "" then
LogPrint "Checking for user specified path of Qt ... "
strPathQt = CheckForQtSub(UnixSlashes(strOptQt), strOptInfix, strInfixQt)
if strPathQt = "" and g_blnInternalFirst = true then strPathQt = CheckForQtInternal(strOptInfix, strInfixQt)
if strPathQt = "" then
'
' Collect links from "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\UFH\SHC"
'
' Typical string list:
' C:\Users\someuser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Qt\5.x.y\MSVC 20zz (64-bit)\Qt 5.x.y (MSVC 20zz 64-bit).lnk
' C:\Users\someuser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Qt\6.x.y\MSVC 20zz (64-bit)\Qt 6.x.y (MSVC 20zz 64-bit).lnk
' C:\Windows\System32\cmd.exe
' /A /Q /K E:\qt\installed\5.x.y\msvc20zz_64\bin\qtenv2.bat
' /A /Q /K E:\qt\installed\6.x.y\msvc20zz_64\bin\qtenv2.bat
'
dim arrCandidates, strCandidate
arrCandidates = CollectFromProgramItemLinks(GetRef("Qt5ProgramItemCallback"), strPathQt5)
arrCandidates = CollectFromProgramItemLinks(GetRef("QtProgramItemCallback"), strPathQt)
LogPrint "Testing qtenv2.bat links (" & ArraySize(arrCandidates) & ") ..."
' VC infixes/subdir names to consider (ASSUMES 64bit)
if g_strVCCVersion = "VCC142" or g_strVCCVersion = "" then
arrVccInfixes = Array("msvc2019_64", "msvc2017_64", "msvc2015_64")
elseif g_strVCCVersion = "VCC141" then
arrVccInfixes = Array("msvc2017_64", "msvc2015_64", "msvc2019_64")
elseif g_strVCCVersion = "VCC140" then
arrVccInfixes = Array("msvc2015_64", "msvc2017_64", "msvc2019_64")
elseif g_strVCCVersion = "VCC120" then
arrVccInfixes = Array("msvc2013_64")
elseif g_strVCCVersion = "VCC110" then
arrVccInfixes = Array("msvc2012_64")
elseif g_strVCCVersion = "VCC100" then
arrVccInfixes = Array("msvc2010_64")
else
MsgFatal "Unexpected VC version: " & g_strVCCVersion
arrVccInfixes = Array()
@ -1801,48 +1791,48 @@ sub CheckForQt(strOptQt5, strOptInfix)
for each strVccInfix in arrVccInfixes
for each strCandidate in arrCandidates
if InStr(1, LCase(strCandidate), strVccInfix) > 0 then
strPathQt5 = CheckForQt5Sub(strCandidate, strOptInfix, strInfixQt5)
if strPathQt5 <> "" then exit for
strPathQt = CheckForQtSub(strCandidate, strOptInfix, strInfixQt)
if strPathQt <> "" then exit for
end if
next
if strPathQt5 <> "" then exit for
if strPathQt <> "" then exit for
next
end if
' Check the dev tools - prefer ones matching the compiler.
if strPathQt5 = "" and g_blnInternalFirst = false then strPathQt5 = CheckForQt5Internal(strOptInfix, strInfixQt5)
if strPathQt = "" and g_blnInternalFirst = false then strPathQt = CheckForQtInternal(strOptInfix, strInfixQt)
'
' Display the result and output the config.
'
if strPathQt5 <> "" then
PrintResult "Qt5", strPathQt5
PrintResultMsg "Qt5 infix", strInfixQt5
CfgPrintAssign "PATH_SDK_QT5", strPathQt5
CfgPrintAssign "PATH_TOOL_QT5", "$(PATH_SDK_QT5)"
CfgPrintAssign "VBOX_PATH_QT", "$(PATH_SDK_QT5)"
CfgPrintAssign "VBOX_QT_INFIX", strInfixQt5
if strPathQt <> "" then
PrintResult "Qt", strPathQt
PrintResultMsg "Qt infix", strInfixQt
CfgPrintAssign "PATH_SDK_QT6", strPathQt
CfgPrintAssign "PATH_TOOL_QT6", "$(PATH_SDK_QT6)"
CfgPrintAssign "VBOX_PATH_QT", "$(PATH_SDK_QT6)"
CfgPrintAssign "VBOX_QT_INFIX", strInfixQt
CfgPrintAssign "VBOX_WITH_QT_PAYLOAD", "1"
else
PrintResultMsg "Qt5", "not found"
PrintResultMsg "Qt", "not found"
CfgPrintAssign "VBOX_WITH_QTGUI", ""
end if
end sub
function CheckForQt5Internal(strOptInfix, ByRef strInfixQt5)
function CheckForQtInternal(strOptInfix, ByRef strInfixQt)
dim strPathDev, arrFolders, arrVccInfixes, strVccInfix, i
CheckForQt5Internal = ""
CheckForQtInternal = ""
for each strPathDev in g_arrPathDev
LogPrint "Testing tools dir (" & strPathDev & "/win." & g_strTargetArch & "/qt/v5*) ..."
arrFolders = GetSubdirsStartingWithVerSorted(strPathDev & "/win." & g_strTargetArch & "/qt", "v5")
LogPrint "Testing tools dir (" & strPathDev & "/win." & g_strTargetArch & "/qt/v6*) ..."
arrFolders = GetSubdirsStartingWithVerSorted(strPathDev & "/win." & g_strTargetArch & "/qt", "v6")
arrVccInfixes = Array(LCase(g_strVCCVersion), Left(LCase(g_strVCCVersion), Len(g_strVCCVersion) - 1), "")
for each strVccInfix in arrVccInfixes
for i = UBound(arrFolders) to LBound(arrFolders) step -1
if strVccInfix = "" or InStr(1, LCase(arrFolders(i)), strVccInfix) > 0 then
LogPrint "i="&i&" strVccInfix="&strVccInfix
strPathQt5 = CheckForQt5Sub(strPathDev & "/win." & g_strTargetArch & "/qt/" & arrFolders(i), strOptInfix, strInfixQt5)
if strPathQt5 <> "" then
CheckForQt5Internal = strPathQt5
strPathQt = CheckForQtSub(strPathDev & "/win." & g_strTargetArch & "/qt/" & arrFolders(i), strOptInfix, strInfixQt)
if strPathQt <> "" then
CheckForQtInternal = strPathQt
exit function
end if
end if
@ -1851,9 +1841,9 @@ LogPrint "i="&i&" strVccInfix="&strVccInfix
next
end function
function Qt5ProgramItemCallback(ByRef arrStrings, cStrings, ByRef strUnused)
function QtProgramItemCallback(ByRef arrStrings, cStrings, ByRef strUnused)
dim str, off
Qt5ProgramItemCallback = ""
QtProgramItemCallback = ""
if cStrings >= 3 then
str = Trim(arrStrings(UBound(arrStrings)))
if LCase(Right(str, Len("\bin\qtenv2.bat"))) = "\bin\qtenv2.bat" _
@ -1861,39 +1851,39 @@ function Qt5ProgramItemCallback(ByRef arrStrings, cStrings, ByRef strUnused)
and InStr(1, str, ":") > 0 _
then
off = InStr(1, str, ":") - 1
Qt5ProgramItemCallback = Mid(str, off, Len(str) - off - Len("\bin\qtenv2.bat") + 1)
QtProgramItemCallback = Mid(str, off, Len(str) - off - Len("\bin\qtenv2.bat") + 1)
end if
end if
end function
function CheckForQt5Sub(strPathQt5, strOptInfix, ByRef strInfixQt5)
CheckForQt5Sub = ""
if strPathQt5 <> "" then
LogPrint "Trying: strPathQt5=" & strPathQt5
function CheckForQtSub(strPathQt, strOptInfix, ByRef strInfixQt)
CheckForQtSub = ""
if strPathQt <> "" then
LogPrint "Trying: strPathQt=" & strPathQt
if LogFileExists(strPathQt5, "bin/moc.exe") _
and LogFileExists(strPathQt5, "bin/uic.exe") _
and LogFileExists(strPathQt5, "include/QtWidgets/qwidget.h") _
and LogFileExists(strPathQt5, "include/QtWidgets/QApplication") _
and LogFileExists(strPathQt5, "include/QtGui/QImage") _
and LogFileExists(strPathQt5, "include/QtNetwork/QHostAddress") _
if LogFileExists(strPathQt, "bin/moc.exe") _
and LogFileExists(strPathQt, "bin/uic.exe") _
and LogFileExists(strPathQt, "include/QtWidgets/qwidget.h") _
and LogFileExists(strPathQt, "include/QtWidgets/QApplication") _
and LogFileExists(strPathQt, "include/QtGui/QImage") _
and LogFileExists(strPathQt, "include/QtNetwork/QHostAddress") _
then
' Infix testing.
if LogFileExists(strPathQt5, "lib/Qt5Core.lib") _
and LogFileExists(strPathQt5, "lib/Qt5Network.lib") then
if LogFileExists(strPathQt, "lib/Qt6Core.lib") _
and LogFileExists(strPathQt, "lib/Qt6Network.lib") then
LogPrint "found it w/o infix"
strInfixQt5 = ""
CheckForQt5Sub = UnixSlashes(PathAbs(strPathQt5))
elseif LogFileExists(strPathQt5, "lib/Qt5Core" & strOptInfix & ".lib") _
and LogFileExists(strPathQt5, "lib/Qt5Network" & strOptInfix & ".lib") then
strInfixQt = ""
CheckForQtSub = UnixSlashes(PathAbs(strPathQt))
elseif LogFileExists(strPathQt, "lib/Qt6Core" & strOptInfix & ".lib") _
and LogFileExists(strPathQt, "lib/Qt6Network" & strOptInfix & ".lib") then
LogPrint "found it w/ infix: " & strOptInfix & " (option)"
strInfixQt5 = strOptInfix
CheckForQt5Sub = UnixSlashes(PathAbs(strPathQt5))
elseif LogFileExists(strPathQt5, "lib/Qt5CoreVBox.lib") _
and LogFileExists(strPathQt5, "lib/Qt5NetworkVBox.lib") then
strInfixQt = strOptInfix
CheckForQtSub = UnixSlashes(PathAbs(strPathQt))
elseif LogFileExists(strPathQt, "lib/Qt6CoreVBox.lib") _
and LogFileExists(strPathQt, "lib/Qt6NetworkVBox.lib") then
LogPrint "found it w/ infix: VBox"
strInfixQt5 = "VBox"
CheckForQt5Sub = UnixSlashes(PathAbs(strPathQt5))
strInfixQt = "VBox"
CheckForQtSub = UnixSlashes(PathAbs(strPathQt))
end if
end if
end if
@ -1970,7 +1960,7 @@ sub usage
Print "Locations:"
Print " --with-kBuild=PATH Where kBuild is to be found."
Print " --with-libSDL=PATH Where libSDL is to be found."
Print " --with-Qt5=PATH Where Qt5 is to be found (optional)."
Print " --with-Qt=PATH Where Qt is to be found (optional)."
Print " --with-DDK=PATH Where the WDK is to be found."
Print " --with-SDK=PATH Where the Windows SDK is to be found."
Print " --with-SDK10=PATH Where the Windows 10 SDK/WDK is to be found."
@ -2021,8 +2011,8 @@ function Main
strOptDDK = ""
strOptkBuild = ""
strOptlibSDL = ""
strOptQt5 = ""
strOptQt5Infix = ""
strOptQt = ""
strOptQtInfix = ""
strOptSDK10 = ""
strOptSDK10Version = ""
strOptVC = ""
@ -2069,10 +2059,10 @@ function Main
' ignore
case "--with-mingw-w64"
' ignore
case "--with-qt5"
strOptQt5 = strPath
case "--with-qt5-infix"
strOptQt5Infix = strPath
case "--with-qt"
strOptQt = strPath
case "--with-qt-infix"
strOptQtInfix = strPath
case "--with-sdk"
MsgWarning "Ignoring --with-sdk (the legacy Platform SDK is no longer required)."
case "--with-sdk10"
@ -2218,7 +2208,7 @@ function Main
' 32-bit Curl required as well
CheckForCurl strOptCurl32, True
end if
CheckForQt strOptQt5, strOptQt5Infix
CheckForQt strOptQt, strOptQtInfix
CheckForPython strOptPython
CfgPrintAssign "VBOX_WITH_LIBVPX", "" '' @todo look for libvpx 1.1.0+
CfgPrintAssign "VBOX_WITH_LIBOGG", "" '' @todo look for libogg 1.3.5+

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2010-2023 Oracle and/or its affiliates.
# Copyright (C) 2010-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.

View file

@ -4,7 +4,7 @@
*/
/*
* Copyright (C) 2006-2023 Oracle and/or its affiliates.
* Copyright (C) 2006-2024 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.
@ -181,6 +181,14 @@
* <li> Avoid throwing exceptions, always prefer returning statuses.
* Crappy exception handling is rewared by a glass of water in the face.
*
* <li> Always cast bitfields members to the desired type before using them in
* calculations as Visual C++ and g++/clang++ may use different types.
*
* It seems like Visual C++ will use the basetype of the field, while the
* other two will narrow the type down to the number of bits specified
* and then subject it to standard type promotion which typically ends up
* with signed int.
*
* </ul>
*
* (1) It is common practice on Unix to have a single symbol namespace for an
@ -809,7 +817,8 @@
* sometimes written 'a' in parts of the source code that does not use
* the array prefix.
*
* <li> The 'p' prefix means pointer. For instance 'pVM' is pointer to VM.
* <li> The 'p' prefix means pointer. For instance 'pVM' is pointer to VM,
* 'pidx' means pointer to an index and 'pv' is a generic void pointer.
*
* <li> The 'r' prefix means that something is passed by reference.
*

View file

@ -4,7 +4,7 @@
*/
/*
* Copyright (C) 2009-2023 Oracle and/or its affiliates.
* Copyright (C) 2009-2024 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.

View file

@ -4,7 +4,7 @@
*/
/*
* Copyright (C) 2006-2023 Oracle and/or its affiliates.
* Copyright (C) 2006-2024 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.

View file

@ -58,5 +58,5 @@ VBox checkouts.
-----
:Status: $Id: kBuild-tricks.txt $
:Copyright: Copyright (C) 2006-2022 Oracle Corporation.
:Copyright: Copyright (C) 2006-2024 Oracle Corporation.

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2010-2023 Oracle and/or its affiliates.
# Copyright (C) 2010-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
@ -28,6 +28,9 @@
/string.xsl: --external-copyright --no-convert-tabs
/titlepage-htmlhelp.xml: --external-copyright --no-convert-tabs
/testcase/*.xml: --external-copyright
*.dita: --treat-as xml --no-update-license --no-update-copyright-year --no-strip-trailing-blanks
*.ditamap: --treat-as xml --no-update-license --no-update-copyright-year --no-strip-trailing-blanks
--filter-out-dirs /texfiles/.

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2010-2023 Oracle and/or its affiliates.
# Copyright (C) 2010-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
@ -38,6 +38,15 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
# Globals.
#
# DITA stuff.
VBOX_DITA_OT_PATH ?= $(PATH_ROOT)/src/libs/dita-ot-1.8.5
ifneq ($(VBOX_DITA_OT_PATH),)
VBOX_DITA_OT_PATH := $(firstfile \
$(rversortfiles $(qwildcard ,$(KBUILD_DEVTOOLS)/common/dita-ot/v[4-9].*)) \
$(KBUILD_DEVTOOLS)/common/dita-ot/v4.0.2-r1)
endif
# Source location.
VBOX_PATH_MANUAL_SRC := $(PATH_ROOT)/doc/manual
# Output location.
@ -97,32 +106,6 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
man_VBoxManage-hostonlyif.xml \
man_VBoxManage-usbdevsource.xml
## List of user manual XML files.
VBOX_MANUAL_XML_FILES = \
UserManual.xml \
user_Preface.xml \
user_Introduction.xml \
user_Installation.xml \
user_BasicConcepts.xml \
user_GuestAdditions.xml \
user_Storage.xml \
user_Networking.xml \
user_Frontends.xml \
user_VBoxManage.xml \
user_AdvancedTopics.xml \
user_Technical.xml \
user_VirtualBoxAPI.xml \
user_Troubleshooting.xml \
user_Security.xml \
user_KnownIssues.xml \
user_ChangeLog.xml \
user_ThirdParty.xml \
user_PrivacyPolicy.xml \
user_Glossary.xml \
oracle-accessibility-ohc-en.xml \
oracle-diversity.xml \
oracle-support-en.xml
## List of user manual XML files common for all languages.
VBOX_MANUAL_XML_FILES_COMMON = \
$(VBOX_PATH_MANUAL_SRC)/user_ChangeLogImpl.xml
@ -133,14 +116,18 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
# use docbook from our tools directory
VBOX_PATH_DOCBOOK ?= $(KBUILD_DEVTOOLS)/common/DocBook/v1.69.1
VBOX_PATH_DOCBOOK_DTD ?= $(KBUILD_DEVTOOLS)/common/docbook-xml/v4.5
VBOX_PATH_DITA_DTD ?= $(VBOX_DITA_OT_PATH)/plugins/org.dita.specialization.dita11/dtd/
else
# use docbook of the build host
VBOX_PATH_DOCBOOK ?= /usr/share/xml/docbook/stylesheet/docbook-xsl
VBOX_PATH_DOCBOOK_DTD ?= /usr/share/xml/docbook/schema/dtd/4.5
VBOX_PATH_DITA_DTD ?= $(VBOX_DITA_OT_PATH)/plugins/org.dita.specialization.dita11/dtd/
endif
VBOX_XML_CATALOG ?= $(VBOX_PATH_MANUAL_OUTBASE)/vbox-doc.cat
VBOX_XML_CATALOG_DOCBOOK ?= $(VBOX_PATH_MANUAL_OUTBASE)/docbook.cat
VBOX_XML_CATALOG_DITA ?= $(VBOX_PATH_MANUAL_OUTBASE)/dita.cat
VBOX_XML_CATALOG_MANUAL ?= $(VBOX_PATH_MANUAL_OUTBASE)/manual.cat
VBOX_XML_ALL_CATALOGS_DEP ?= $(VBOX_XML_CATALOG) $(VBOX_XML_CATALOG_DOCBOOK) $(VBOX_XML_CATALOG_DITA) $(VBOX_XML_CATALOG_MANUAL)
VBOX_XML_ENTITIES ?= $(VBOX_PATH_MANUAL_OUTBASE)/all-entities.ent
# xsltproc with the catalog trick if applicable (set XML_DEBUG_CATALOG to
@ -156,6 +143,13 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
--path "$(VBOX_PATH_MANUAL_OUTBASE)"
VBOX_XMLLINT_WITH_CAT = $(VBOX_XMLLINT) --nonet --xinclude --noout $(VBOX_XMLLINT_OPTS) --path "$(VBOX_PATH_MANUAL_OUTBASE)"
endif
# Workaround for a security (?) fix in libxml (xsltproc doesn't have a way of setting the max amp level):
# utilitiesDomain.mod:135: parser error : Maximum entity amplification factor exceeded, see xmlCtxtSetMaxAmplification.
if $(firstword $(VBOX_XSLTPROC_LIBXML_VERSION) 0) >= 21206 ## @todo not sure which version introduced this issue.
VBOX_XSLTPROC_WORKAROUND := --novalid
else
VBOX_XSLTPROC_WORKAROUND :=
endif
# File name of the generated stylesheet for transforming xref elements into
@ -177,7 +171,7 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
$(3) \
$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manpage-preprocessing.xsl \
$(if $(4), $$(VBOX_PATH_MANUAL_OUTBASE)/$(5)/$$(VBOX_XML_XREF_TO_TEXT),) \
$$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
$$(VBOX_XML_ALL_CATALOGS_DEP) \
$$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
$$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(firstword $$(filter %.xml,$$^)),$$@)
$$(QUIET)$$(RM) -f "$$@"
@ -204,7 +198,7 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
$$(VBOX_DOCBOOK_REFENTRY_TO_C_HELP) \
$$(VBOX_DOCBOOK_REFENTRY_TO_H_HELP) \
$(2) \
$$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) $(MAKEFILE) | $$$$(dir $$$$@)
$$(VBOX_XML_ALL_CATALOGS_DEP) $(MAKEFILE) | $$$$(dir $$$$@)
$$(call MSG_TOOL,xsltproc $$(notdir $$(firstword $$(filter %.xsl,$$^))),,$$(filter %.xml,$$^),$$(patsubst %.ts,%,$$@))
$$(QUIET)$$(APPEND) -tn "$$@" \
'/* Autogenerated by $$(notdir $$(filter %.xsl,$$^)), do not edit! */' \
@ -263,6 +257,9 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
' <delegateSystem systemIdStartString="http://docbook.org/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \
' <delegateURI uriStartString="http://www.oasis-open.org/docbook/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \
' <delegateURI uriStartString="http://docbook.org/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \
' <delegatePublic publicIdStartString="-//OASIS/DTD DITA" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DITA)"/>' \
' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC)/en_US/dita/bookmap.dtd" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DITA)"/>' \
' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC)/en_US/dita/topics/topic.dtd" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DITA)"/>' \
' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \
' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_OUTBASE)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \
' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \
@ -311,6 +308,19 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
' <public publicId="ISO 8879:1986//ENTITIES General Technical//EN" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-tech.ent"/>' \
'</catalog>'
# Create a dita catalog file for xsltproc that points to the local dita files.
$(VBOX_XML_CATALOG_DITA): $(VBOX_PATH_MANUAL_SRC)/Config.kmk | $$(dir $$@)
$(call MSG_L1,Creating catalog $@)
$(QUIET)$(APPEND) -tn "$@" \
'<?xml version="1.0"?>' \
'<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">' \
'<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \
' <public publicId="-//OASIS//DTD DITA BookMap//EN" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_DITA_DTD)/bookmap.dtd"/>' \
' <public publicId="-//OASIS//DTD DITA Topic//EN" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_DITA_DTD)/topic.dtd"/>' \
' <system systemId="$(VBOX_PATH_MANUAL_SRC)/en_US/dita/bookmap.dtd" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_DITA_DTD)/bookmap.dtd"/>' \
' <system systemId="$(VBOX_PATH_MANUAL_SRC)/en_US/dita/topics/topic.dtd" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_DITA_DTD)/topic.dtd"/>' \
'</catalog>'
# Create a docbook catalog file for xsltproc that points to the local manual files in non-default locations
$(VBOX_XML_CATALOG_MANUAL): $(VBOX_PATH_MANUAL_SRC)/Config.kmk | $$(dir $$@)
$(call MSG_L1,Creating catalog $@)
@ -343,7 +353,8 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
$(QUIET)$(APPEND) -tn "$@" \
'<!-- Entities for product names -->' \
'<!ENTITY product-version "$(VBOX_VERSION_STRING)">' \
'<!ENTITY product-name "Oracle VM VirtualBox">' \
'<!ENTITY product-name "Oracle VirtualBox">' \
'<!ENTITY extpack-name "Oracle VirtualBox Extension Pack">' \
'<!ENTITY vbox-mgr "VirtualBox Manager">' \
'<!ENTITY oci "Oracle Cloud Infrastructure">' \
'' \
@ -354,7 +365,7 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
'<!ENTITY VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)" >' \
'<!ENTITY VBOX_VENDOR "$(VBOX_VENDOR)" >' \
'<!ENTITY VBOX_C_YEAR "$(VBOX_C_YEAR)" >' \
'<!ENTITY VBOX_PRODUCT '\''<trademark class="registered">Oracle</trademark> VM <trademark class="registered">VirtualBox</trademark>'\'' >' \
'<!ENTITY VBOX_PRODUCT '\''<trademark class="registered">Oracle</trademark> <trademark class="registered">VirtualBox</trademark>'\'' >' \
'' \
'<!-- Entities for Oracle Help Center -->' \
'<!ENTITY ohc-base-url "https://docs.oracle.com/en">' \
@ -363,14 +374,17 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
endif # VBOX_XML_ENTITIES
## Emit rules to produce stylesheet for translating cross references (xref)
## Emit rules to produce a stylesheet for translating cross references (xref)
# to user manual chapters and sections in the man pages and --help output.
#
# Note! This requires processing UserManual.xml as a single document in order
# to get the correct chapter and section numbering, so we use a catalog
# file to replace the generated XML documents it includes with a dummy
# one. This reduces the dependencies and recipies we require to build
# VBoxManage and the RTIsoMaker (w/ derivatives).
# Note! This is a bit hackish, as it only processes the checked in .dita files
# and not the processed result nor stuff we generated. Seems like all
# we generate is manpage related pages, so that's fine since these are
# all currently at the tail of one chapter in the manual.
#
# If it turns out we generate more stuff that this, we're in for lots of
# dependency fun with VBoxManage and the RTIsoMaker (+ derivatives).
#
# $(evalcall2 def_vbox_xref_to_text)
# @param 1 Language code.
define def_vbox_xref_to_text
@ -378,28 +392,48 @@ ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
+ $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$$(VBOX_XML_XREF_TO_TEXT).cat: \
$$(VBOX_PATH_MANUAL_SRC)/$(1)/docbook-refentry-link-replacement-xsl-gen.xsl \
$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-link-replacement-xsl-gen.xsl \
$$(addprefix $$(VBOX_PATH_MANUAL_SRC)/en_US/,$$(VBOX_MANUAL_XML_FILES)) \
$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita-refentry-link-replacement-xsl-gen.xsl \
$$(VBOX_PATH_MANUAL_SRC)/dita-refentry-link-replacement-xsl-gen.xsl \
$$(VBOX_PATH_MANUAL_SRC)/ditamap-to-single-xml.xsl \
$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/UserManual.ditamap \
$$(wildcard $$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/*.xml) \
$$(VBOX_MANUAL_XML_FILES_COMMON) \
$$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) $$(VBOX_XML_ENTITIES) \
$$(VBOX_XML_ALL_CATALOGS_DEP) $$(VBOX_XML_ENTITIES) \
| $$$$(dir $$$$@)
$$(call MSG_L1,Creating stylesheet $$@)
$$(QUIET)$$(APPEND) -nt "$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$$(VBOX_XML_XREF_TO_TEXT).cat" \
'<?xml version="1.0"?>' \
'<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">' \
'<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \
$$(foreach x, user_isomakercmd-man.xml \
$$(addprefix user_,$$(VBOX_MANUAL_XML_REFENTRY_FILES) man_VBoxHeadless.xml man_vboximg-mount.xml) \
$$(addprefix overview_,$$(VBOX_MANUAL_XML_REFENTRY_FILES)) \
,' <system systemId="$$(VBOX_PATH_MANUAL_SRC)/en_US/$$(x)" uri="file://$$(VBOX_FILE_URL_MAYBE_SLASH)$$(VBOX_PATH_MANUAL_SRC)/dummy-sect1.xml"/>' \$$(NLTAB)$$(TAB)) \
$$(foreach x, vboxmanage-cmd-overview.dita \
,' <system systemId="$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/topics/$$(x)" uri="file://$$(VBOX_FILE_URL_MAYBE_SLASH)$$(VBOX_PATH_MANUAL_SRC)/dummy-topic.dita"/>' \$$(NLTAB)$$(TAB)) \
' <nextCatalog catalog="file://$$(VBOX_FILE_URL_MAYBE_SLASH)$$(VBOX_XML_CATALOG)"/>' \
'</catalog>'
$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT,,$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$$(VBOX_XML_XREF_TO_TEXT).cat) \
--stringparam 'g_sMode' 'first' --output "$$@" "$$<" $$(filter %UserManual.xml,$$^)
--output "$$@.tmp.xml" "$$(VBOX_PATH_MANUAL_SRC)/ditamap-to-single-xml.xsl" $$(filter %.ditamap,$$^)
if 0 # Enable to see the full combined document.
$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT,,$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$$(VBOX_XML_XREF_TO_TEXT).cat) \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing/vbox-base" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing/vbox-ext" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics" \
--output "$$@.tmp2.xml" "$$(VBOX_PATH_MANUAL_SRC)/ditamap-to-single-xml.xsl" "$$@.tmp.xml"
endif
$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT,,$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/$$(VBOX_XML_XREF_TO_TEXT).cat) \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing/vbox-base" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing/vbox-ext" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics/licensing" \
--path "$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita/topics" \
--stringparam 'g_sMode' 'first' \
--output "$$@" \
"$$(VBOX_PATH_MANUAL_SRC)/$(1)/dita-refentry-link-replacement-xsl-gen.xsl" \
"$$@.tmp.xml"
# Using en-US version as section and chapter names until user manual is translated as well
$$(foreach x, $$(VBOX_MANUAL_XML_REFENTRY_FILES)\
,$$(NLTAB)$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT, -ato "$$@") --stringparam 'g_sMode' 'append' \
"$$<" "$$(VBOX_PATH_MANUAL_SRC)/en_US/$$(x)")
$$(QUIET)$$(APPEND) -n "$$@" '' '</xsl:stylesheet>'
$$(QUIET)$$(RM) -f -- "$$@.tmp.xml"
BLDDIRS += $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/
endef

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
UserManual qt help configuration file. XML to configure qt help project.
-->
<!--
Copyright (C) 2018-2023 Oracle and/or its affiliates.
Copyright (C) 2018-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -0,0 +1,150 @@
# -*- coding: utf-8 -*-
# $Id: add_file_to_id_only_references.py $
"""
Makes id-only reference in the given file into dita-compliant file#id
references, using the mapping database generated by build_id_to_file_mapping.py.
"""
__copyright__ = \
"""
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
"""
__version__ = "$Revision: 164827 $"
# Standard python imports.
import glob;
import os;
import re;
import sys;
g_oReHref = re.compile(r'\bhref=("[^">#./]+"|\'[^\'>#./]+\')');
def modifyDitaFile(dIdToFile, sContent):
"""
Modifies the href attributes in this file.
"""
sModified = '';
offPrev = 0;
for oMatch in g_oReHref.finditer(sContent):
sId = oMatch.group(1)[1:-1];
if sId in dIdToFile:
sModified += sContent[offPrev : oMatch.start(1)] + '"' + dIdToFile[sId] + '#' + sId + '"';
offPrev = oMatch.end(1);
if offPrev < len(sContent):
sModified += sContent[offPrev:];
return sModified;
def info(sMessage):
""" Info message. """
print('add_file_to_id_only_references.py: info: %s' % sMessage);
return 1;
def error(sMessage):
""" Reports an error. """
print('add_file_to_id_only_references.py: error: %s' % sMessage, file = sys.stderr);
return 1;
def syntax(sMessage):
""" Reports a syntax error. """
print('add_file_to_id_only_references.py: syntax error: %s' % sMessage, file = sys.stderr);
return 2;
def usage():
""" Reports usage. """
print('usage: add_file_to_id_only_references.py [--verbose|--quiet] --mapping-file <map.db> file1.dita [file2.dita [...]]');
return 0;
def main(asArgs):
"""
C-like main function.
"""
#
# Process arguments.
#
dIdToFile = None;
fEndOfArgs = False;
fVerbose = False;
iArg = 1;
while iArg < len(asArgs):
sArg = asArgs[iArg];
if sArg[0] == '-' and not fEndOfArgs:
# Options.
if sArg == '--':
fEndOfArgs = True;
elif sArg in ('--help', '-h', '-?'):
return usage();
elif sArg in ('--version', '-V' ):
print(__version__[__version__.find(':') + 2:-2]);
elif sArg in ('--quiet', '-q' ):
fVerbose = False;
elif sArg in ('--verbose', '-v' ):
fVerbose = True;
elif sArg in ('--mapping-file', '-m'):
iArg += 1;
if iArg >= len(asArgs):
return syntax('Expected filename following "--mapping-file"!');
# Load the database file.
sArg = asArgs[iArg];
try:
with open(sArg, 'r', encoding = 'utf-8') as oFile:
dIdToFile = {};
for sLine in oFile:
sId, sFile = sLine.split('=');
dIdToFile[sId.strip()] = sFile.strip();
except Exception as oXcpt: # pylint: disable=broad-exception-caught
return error('Failed to open and parse "%s": %s' % (sArg, oXcpt,));
if fVerbose:
info('Loaded %s IDs from "%s"' % (len(dIdToFile), sArg));
else:
return syntax('Unknown option: %s' % (sArg,));
else:
# File to modify.
if dIdToFile is None:
return syntax('A mapping database must be given before any other files!');
try:
with open(sArg, 'r', encoding = 'utf-8') as oFile:
sContent = oFile.read();
except Exception as oXcpt: # pylint: disable=broad-exception-caught
return error('Failed to open and read "%s": %s' % (sArg, oXcpt,));
sModified = modifyDitaFile(dIdToFile, sContent);
if sModified != sContent:
if fVerbose:
info('Writing out modified "%s"...' % (sArg,));
try:
with open(sArg, 'w', encoding = 'utf-8') as oFile:
oFile.write(sModified);
except Exception as oXcpt: # pylint: disable=broad-exception-caught
return error('Failed to open and write back "%s": %s' % (sArg, oXcpt,));
elif fVerbose:
info('No changes to "%s"...' % (sArg,));
iArg += 1;
return 0;
if __name__ == "__main__":
sys.exit(main(sys.argv));

View file

@ -0,0 +1,150 @@
# -*- coding: utf-8 -*-
# $Id: build_id_to_file_mapping.py $
"""
Scans the given files (globbed) for topic id and stores records the filename
in the output file.
This is used by add_file_to_id_only_references.py after converting man_V*.xml
refentry files to dita to correct links.
"""
__copyright__ = \
"""
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
"""
__version__ = "$Revision: 164827 $"
# Standard python imports.
import glob;
import os;
import re;
import sys;
g_oReDita = re.compile(r'<topic[^><]*\sid=("[^">]+"|\'[^\'>]+\')');
def scanDitaFileForIds(dIdToFile, sContent, sFile):
"""
Scans the given content of a .dita-file for topic IDs that can be referenced.
"""
for oMatch in g_oReDita.finditer(sContent):
sId = oMatch.group(1)[1:-1];
if sId:
dIdToFile[sId] = sFile;
g_oReRefentry = re.compile(r'<(refentry\b|refsect[12345]\b|cmdsynopsis\b)[^><]*\sid=("[^">]+"|\'[^\'>]+\')');
def scanDocbookRefentryForIds(dIdToFile, sContent, sFile):
"""
Scans the given content of a Docbook refentry file for topic IDs that can be referenced.
"""
for oMatch in g_oReRefentry.finditer(sContent):
sId = oMatch.group(2)[1:-1];
if sId:
#dIdToFile[sId] = sFile;
dIdToFile[sId] = '%s.dita' % (sId,);
def isDocbook(sContent):
"""
Check if the file is a Docbook one.
"""
return sContent.find('<refentry ') >= 0 and sContent.find('<refentryinfo>');
def error(sMessage):
""" Reports an error. """
print('build_id_to_file_mapping.py: error: %s' % sMessage, file = sys.stderr);
return 1;
def syntax(sMessage):
""" Reports a syntax error. """
print('build_id_to_file_mapping.py: syntax error: %s' % sMessage, file = sys.stderr);
return 2;
def usage():
""" Reports usage. """
print('usage: build_id_to_file_mapping.py --output <map.db> file1.dita docbook2.xml wild*card.* [...]');
return 0;
def main(asArgs):
"""
C-like main function.
"""
#
# Process arguments.
#
dIdToFile = {};
sOutput = None;
fEndOfArgs = False;
iArg = 1;
while iArg < len(asArgs):
sArg = asArgs[iArg];
if sArg[0] == '-' and not fEndOfArgs:
# Options.
if sArg == '--':
fEndOfArgs = True;
elif sArg in ('--help', '-h', '-?'):
return usage();
elif sArg in ('--version', '-V' ):
print(__version__[__version__.find(':') + 2:-2]);
elif sArg in ('--output', '-o'):
iArg += 1;
if iArg >= len(asArgs):
return syntax('Expected filename following "--output"!');
sOutput = asArgs[iArg];
else:
return syntax('Unknown option: %s' % (sArg,));
else:
# Input files.
if sArg[0] == '@':
with open(sArg[1:], 'r', encoding = 'utf-8') as oFile:
asFiles = oFile.read().split();
else:
asFiles = glob.glob(sArg);
if not asFiles:
return error('File not found: %s' % (sArg,));
for sFile in asFiles:
try:
with open(sFile, 'r', encoding = 'utf-8') as oFile:
sContent = oFile.read();
except Exception as oXcpt: # pylint: disable=broad-exception-caught
return error('Failed to open and read "%s": %s' % (sFile, oXcpt,));
if isDocbook(sContent):
scanDocbookRefentryForIds(dIdToFile, sContent, os.path.splitext(os.path.basename(sFile))[0] + '.dita');
else:
scanDitaFileForIds(dIdToFile, sContent, os.path.basename(sFile));
iArg += 1;
# Dump the dictionary.
asDict = sorted(['%s=%s' % (sKey, sValue) for sKey, sValue in dIdToFile.items()]);
if sOutput is not None:
try:
with open(sOutput, 'w', encoding = 'utf-8') as oFile:
oFile.write('\n'.join(asDict));
except Exception as oXcpt: # pylint: disable=broad-exception-caught
return error('Failed to open and write "%s": %s' % (sFile, oXcpt,));
else:
sys.stdout.write('\n'.join(asDict));
return 0;
if __name__ == "__main__":
sys.exit(main(sys.argv));

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -91,6 +91,7 @@
<xsl:variable name="arg.rep.norepeat.str"></xsl:variable>
<xsl:variable name="arg.rep.def.str"></xsl:variable>
<xsl:variable name="arg.or.sep"> | </xsl:variable>
<xsl:variable name="arg.or.sep.compact">|</xsl:variable>
<xsl:variable name="cmdsynopsis.hanging.indent">4pi</xsl:variable>
<!--
@ -105,65 +106,5 @@
</xsl:call-template>
</xsl:template>
<!--
refentry related layout tweaks.
Note! While we could save us all this work by using refsect1..3 and
refsynopsisdiv docbook-refentry-to-manual-sect1.xsl, we'd like to have
a valid XML document and thus do do some extra markup using the role
and condition attributes. We catch some of it here. But the XSLT
for specific targets (html, latex, etc) have a few more tweaks
related to this.
The @role has only one special trick 'not-in-toc' that excludes sections
like 'Synopsis' and 'Description' from the TOCs.
The @condition records the original refentry element name, i.e. it will
have values like refentry, refsynopsisdiv, refsect1, refsect2 and refsect3.
-->
<!-- This removes the not-in-toc bits from the toc. -->
<xsl:template match="sect2[@role = 'not-in-toc']" mode="toc" />
<xsl:template match="sect3[@role = 'not-in-toc']" mode="toc" />
<xsl:template match="sect4[@role = 'not-in-toc']" mode="toc" />
<xsl:template match="sect5[@role = 'not-in-toc']" mode="toc" />
<xsl:template match="section[@role = 'not-in-toc']" mode="toc" />
<xsl:template match="simplesect[@role = 'not-in-toc']" mode="toc" />
<!-- This removes unnecessary <dd><dl> stuff caused by the above. -->
<xsl:template match="sect1[sect2/@role = 'not-in-toc']" mode="toc">
<xsl:param name="toc-context" select="."/>
<xsl:call-template name="subtoc">
<xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect2[@role != 'not-in-toc'] | bridgehead[$bridgehead.in.toc != 0]"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect2[sect3/@role = 'not-in-toc']" mode="toc">
<xsl:param name="toc-context" select="."/>
<xsl:call-template name="subtoc">
<xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect3[@role != 'not-in-toc'] | bridgehead[$bridgehead.in.toc != 0]"/>
</xsl:call-template>
</xsl:template>
<!-- This make the refsect* and refsynopsisdiv unnumbered like the default refentry rendering. -->
<xsl:template match="sect2[@condition = 'refsynopsisdiv']
| sect2[starts-with(@condition, 'refsect')]
| sect3[starts-with(@condition, 'refsect')]
| sect4[starts-with(@condition, 'refsect')]
| sect5[starts-with(@condition, 'refsect')]
| section[starts-with(@condition, 'refsect')]
| simplesect[starts-with(@condition, 'refsect')]"
mode="object.title.template"
>
<xsl:call-template name="gentext.template">
<xsl:with-param name="context" select="'title-unnumbered'"/>
<xsl:with-param name="name">
<xsl:call-template name="xpath.location"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -121,62 +121,6 @@
</xsl:template>
<!-- This is for allow special CSS rules to apply to the refsect stuff. -->
<xsl:template match="sect2[ @role = 'not-in-toc']/title
| sect3[ @role = 'not-in-toc']/title
| sect4[ @role = 'not-in-toc']/title
| sect5[ @role = 'not-in-toc']/title
| section[ @role = 'not-in-toc']/title
| simplesect[@role = 'not-in-toc']/title
| sect1[ @condition = 'refentry']/title
| sect2[ @condition = 'refentry']/title
| sect1[ starts-with(@condition, 'refsect')]/title
| sect2[ starts-with(@condition, 'refsect')]/title
| sect3[ starts-with(@condition, 'refsect')]/title
| sect4[ starts-with(@condition, 'refsect')]/title
| sect5[ starts-with(@condition, 'refsect')]/title
| section[ starts-with(@condition, 'refsect')]/title
| simplesect[starts-with(@condition, 'refsect')]/title
" mode="titlepage.mode">
<xsl:element name="div">
<xsl:attribute name="class">
<xsl:value-of select="../@role"/>
<xsl:if test="../@role and ../@condition">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="../@condition"/>
</xsl:attribute>
<xsl:apply-imports/>
</xsl:element>
</xsl:template>
<xsl:template match="sect2[ @role = 'not-in-toc']
| sect3[ @role = 'not-in-toc']
| sect4[ @role = 'not-in-toc']
| sect5[ @role = 'not-in-toc']
| section[ @role = 'not-in-toc']
| simplesect[@role = 'not-in-toc']
| sect1[ @condition = 'refentry']
| sect2[ @condition = 'refentry']
| sect1[ starts-with(@condition, 'refsect')]
| sect2[ starts-with(@condition, 'refsect')]
| sect3[ starts-with(@condition, 'refsect')]
| sect4[ starts-with(@condition, 'refsect')]
| sect5[ starts-with(@condition, 'refsect')]
| section[ starts-with(@condition, 'refsect')]
| simplesect[starts-with(@condition, 'refsect')]" >
<xsl:element name="div">
<xsl:attribute name="class">
<xsl:value-of select="@role"/>
<xsl:if test="@role and @condition">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="@condition"/>
</xsl:attribute>
<xsl:apply-imports/>
</xsl:element>
</xsl:template>
<!-- To use CSS to correctly insert hanging indent when soft wrapping and
<sbr>'ing a synopsis, we must place each command in its own <p>. The default
is to must issue a <br /> before each <command>, except the first one.

View file

@ -0,0 +1,98 @@
#!/usr/bin/env kmk_ash
# $Id: dita-refentry-flat-to-single-topic.sh $
## @file
# Helper Script for splitting up a convert manpage into separate topic
# files (named by @id).
#
#
# Copyright (C) 2023-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, in version 3 of the
# License.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <https://www.gnu.org/licenses>.
#
# SPDX-License-Identifier: GPL-3.0-only
#
#
# This script is very internal, so we got the following fixed position parameters:
# 1: The input DITA file (output from docbook-refentry-to-manual-dita.xsl).
# 2: dita-refentry-flat-topic-ids.xsl
# 3: dita-refentry-flat-to-single-topic.xsl
# 4: The refentry.kmk file where the DITA file list will be appended.
# 5: Variable name to update in refentry.kmk.
# 6: The out directory.
# 7: '--'
# 8+: xsltproc invocation (sans output, input and xslt file).
#
if test $# -lt 8; then
echo "syntax error: too few arguments" 1>&2;
exit 2;
fi
MY_INPUT_FILE="$1"
MY_XSLT_TOPIC_IDS="$2"
MY_XSLT_TO_SINGLE_TOPIC="$3"
MY_GENERATED_KMK="$4"
MY_GENERATED_KMK_VARIABLE="$5"
MY_OUTPUT_DIR="$6"
if test "$7" != "--"; then
echo "syntax error: Expected '--' as the 7th parameter, got: $7" 1>&2;
exit 2;
fi
shift 7
if ! test -f "${MY_INPUT_FILE}"; then
echo "error: Input file does not exists or is not a regular file: ${MY_INPUT_FILE}" 1>&2;
exit 1;
fi
if ! test -f "${MY_XSLT_TOPIC_IDS}"; then
echo "error: The given dita-refentry-flat-topic-ids.xsl file does not exists or is not a regular file: ${MY_XSLT_TOPIC_IDS}" 1>&2;
exit 1;
fi
if ! test -f "${MY_XSLT_TO_SINGLE_TOPIC}"; then
echo "error: The given dita-refentry-flat-to-single-topic.xsl file does not exists or is not a regular file: ${MY_XSLT_TO_SINGLE_TOPIC}" 1>&2;
exit 1;
fi
if ! test -d "${MY_OUTPUT_DIR}"; then
echo "error: Destination directory does not exists or not a directory: ${MY_OUTPUT_DIR}" 1>&2;
exit 1;
fi
# Exit on failure.
set -e
#
# First get the ID list from it.
#
MY_TOPIC_IDS=$($* "${MY_XSLT_TOPIC_IDS}" "${MY_INPUT_FILE}")
echo "${MY_GENERATED_KMK_VARIABLE} += \\" > "${MY_GENERATED_KMK}"
#
# Extract each topic.
#
for MY_ID in ${MY_TOPIC_IDS};
do
$* \
--stringparam g_sMode topic \
--stringparam g_idTopic "${MY_ID}" \
--output "${MY_OUTPUT_DIR}/${MY_ID}.dita" "${MY_XSLT_TO_SINGLE_TOPIC}" "${MY_INPUT_FILE}"
echo " ${MY_OUTPUT_DIR}/${MY_ID}.dita \\" >> "${MY_GENERATED_KMK}"
done
echo "" >> "${MY_GENERATED_KMK}"
exit 0

View file

@ -0,0 +1,123 @@
<?xml version="1.0"?>
<!--
dita-refentry-flat-to-single-topic.xsl:
XSLT stylesheet for help converting a flat DITA manual page with nested
topic elements into individual topics and a map file for including them
in the right order.
-->
<!--
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="no"/>
<xsl:preserve-space elements="*"/>
<!-- xsl:strip-space elements="*"/ - never -->
<!-- Script parameters: -->
<xsl:param name="g_sMode" select="not-specified"/>
<xsl:param name="g_idTopic" select="not-specified"/>
<!--
Process root element according to g_sMode.
-->
<xsl:template match="/">
<xsl:choose>
<!-- map file -->
<xsl:when test="$g_sMode = 'map'">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"&gt;
</xsl:text>
<xsl:element name="map" >
<xsl:element name="title">
<xsl:value-of select="/topic/title"/>
</xsl:element>
<xsl:apply-templates mode="map"/>
</xsl:element>
</xsl:when>
<!-- topic extraction -->
<xsl:when test="$g_sMode = 'topic'">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd"&gt;
</xsl:text>
<xsl:apply-templates mode="topic" select="//topic[@id = $g_idTopic]"/>
</xsl:when>
<!-- Bad mode parameter: -->
<xsl:otherwise>
<xsl:message terminate="yes">Invalid g_sMode value!"</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
map: Default operation is to suppress all output, except for topic elements
which are transformed to topicref.
-->
<xsl:template match="node()|@*" mode="map">
<xsl:apply-templates mode="map"/>
</xsl:template>
<xsl:template match="topic" mode="map">
<xsl:element name="topicref">
<xsl:attribute name="href">
<xsl:value-of select="concat(@id,'.dita')"/>
</xsl:attribute>
<xsl:if test="count(./ancestor::*) != 0">
<xsl:attribute name="toc">no</xsl:attribute>
</xsl:if>
<xsl:apply-templates mode="map"/>
</xsl:element>
</xsl:template>
<!--
topic: Default action is to copy everything except non-matching topic elements
We suppress class, domains and xmlns attributes in a hackish way here,
because the xmlns:ditaarch stuff confuses 1.8.5 (making it hang)...
-->
<xsl:template match="node()" mode="topic">
<xsl:copy>
<xsl:apply-templates mode="topic" select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*" mode="topic">
<!-- xsl:message>dbg: @*: name()='<xsl:value-of select="name()"/></xsl:message -->
<xsl:if test="name() != 'class' and name() != 'ditaarch:DITAArchVersion' and name() != 'domains' ">
<xsl:copy/>
</xsl:if>
</xsl:template>
<xsl:template match="topic" mode="topic">
<xsl:if test="@id = $g_idTopic">
<xsl:element name="topic">
<xsl:apply-templates mode="topic" select="node()|@*"/>
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<!--
dita-refentry-flat-topic-ids.xsl:
XSLT stylesheet for extracting all the topic IDs from a DITA manual page.
-->
<!--
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="text" version="1.0" encoding="utf-8" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="//topic">
<xsl:if test="position() != 1"><xsl:text> </xsl:text></xsl:if>
<xsl:value-of select="@id"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,181 @@
<?xml version="1.0"?>
<!--
dita-refentry-link-replacement-xsl-gen.xsl:
XSLT stylesheet for generate a stylesheet that replaces links
to the user manual in the manpages.
-->
<!--
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="text" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="g_sMode" select="not-specified"/>
<!-- Translatable strings -->
<xsl:variable name="sChapter" select="'chapter'"/>
<xsl:variable name="sSection" select="'section'"/>
<xsl:variable name="sInChapter" select="'in chapter'"/>
<xsl:variable name="sPreface" select="'in the preface to the user manual'"/>
<xsl:variable name="sOfManual" select="'of the user manual'"/>
<xsl:variable name="sInManual" select="'in the user manual'"/>
<!-- Default operation is to suppress output -->
<xsl:template match="node()|@*">
<xsl:apply-templates/>
</xsl:template>
<!--
Output header and footer.
-->
<xsl:template match="/">
<xsl:if test="$g_sMode = 'first'">
<xsl:text>&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" &gt;
&lt;xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" /&gt;
&lt;xsl:template match="node()|@*"&gt;
&lt;xsl:copy&gt;
&lt;xsl:apply-templates select="node()|@*"/&gt;
&lt;/xsl:copy&gt;
&lt;/xsl:template&gt;
</xsl:text>
</xsl:if>
<xsl:apply-templates/>
<xsl:if test="$g_sMode = 'last'">
<xsl:text>
&lt;/xsl:stylesheet&gt;
</xsl:text>
</xsl:if>
</xsl:template>
<!--
Produce the transformation templates:
-->
<xsl:template match="chapter/topic[@id]/title">
<xsl:text>
&lt;xsl:template match="xref[@linkend='</xsl:text>
<xsl:value-of select="../@id"/><xsl:text>']"&gt;
&lt;xsl:text&gt;</xsl:text><xsl:value-of select="$sChapter"/><xsl:text> </xsl:text>
<xsl:value-of select="count(../preceding-sibling::chapter) + 1"/><xsl:text> &quot;</xsl:text>
<xsl:value-of select="normalize-space()"/>
<xsl:text>&quot; </xsl:text><xsl:value-of select="$sInManual"/><xsl:text>&lt;/xsl:text&gt;
&lt;/xsl:template&gt;
</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*/topicwrap/topic[@id]/title">
<xsl:variable name="iDepth" select="count(ancestor-or-self::topicwrap)" />
<xsl:text>&lt;xsl:template match="xref[@linkend='</xsl:text>
<xsl:value-of select="../@id"/><xsl:text>']"&gt;
&lt;xsl:text&gt;</xsl:text><xsl:value-of select="$sSection"/>
<xsl:text> &quot;</xsl:text>
<xsl:value-of select="normalize-space()"/><xsl:text>&quot; </xsl:text>
<!-- Currently DITA only does chapter numbering, which mean the poor buggers
need to do text searches for the (sub*)section titles. So we emit a
'in chapter xx of the user manual' to help out. -->
<xsl:choose>
<xsl:when test="ancestor-or-self::chapter">
<xsl:value-of select="$sInChapter"/><xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="$iDepth = 1">
<xsl:value-of select="count(../../preceding-sibling::chapter) + 1" />
</xsl:when>
<xsl:when test="$iDepth = 2">
<xsl:value-of select="count(../../../preceding-sibling::chapter) + 1" />
</xsl:when>
<xsl:when test="$iDepth = 3">
<xsl:value-of select="count(../../../../preceding-sibling::chapter) + 1" />
</xsl:when>
<xsl:when test="$iDepth = 4">
<xsl:value-of select="count(../../../../../preceding-sibling::chapter) + 1" />
</xsl:when>
<xsl:when test="$iDepth = 5">
<xsl:value-of select="count(../../../../../../preceding-sibling::chapter) + 1" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">Too deep topic nesting! <xsl:call-template name="get-node-path"/></xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
<xsl:value-of select="$sOfManual"/>
</xsl:when>
<xsl:when test="ancestor-or-self::prefacewrap">
<xsl:if test="$iDepth != 1">
<xsl:message terminate="yes">Too deep preface topic nesting! <xsl:call-template name="get-node-path"/></xsl:message>
</xsl:if>
<xsl:value-of select="$sPreface"/><xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">Unexpected topicwrap parent: <xsl:call-template name="get-node-path"/></xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:text>&lt;/xsl:text&gt;
&lt;/xsl:template&gt;
</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<!--
Debug/Diagnostics: Return the path to the specified node (by default the current).
-->
<xsl:template name="get-node-path">
<xsl:param name="Node" select="."/>
<xsl:for-each select="$Node">
<xsl:for-each select="ancestor-or-self::node()">
<xsl:choose>
<xsl:when test="name(.) = ''">
<xsl:text>text()</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('/', name(.))"/>
<xsl:choose>
<xsl:when test="@id">
<xsl:text>[@id=</xsl:text>
<xsl:value-of select="@id"/>
<xsl:text>]</xsl:text>
</xsl:when>
<xsl:when test="position() > 1">
<xsl:text>[</xsl:text><xsl:value-of select="position()"/><xsl:text>]</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,76 @@
<?xml version="1.0"?>
<!--
ditamap-to-single-xml.xsl:
XSLT stylesheet for generate a xml document that includes all the
topics references by a ditamap file (using xi:include). The product
is of course not a valid document, but should suffice for harvesting
information, like for the link replacements in the help text.
-->
<!--
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<!-- prefaceref -> prefacewrap -->
<xsl:template match="preface">
<prefacewrap>
<xi:include href="{./@href}" xmlns:xi="http://www.w3.org/2001/XInclude" xpointer="xpointer(/topic)" />
<xsl:apply-templates select="node()" />
</prefacewrap>
</xsl:template>
<!-- topicref -> topicwrap; but not man_xxxx (need converting) and glossentry-xxxx (not topics) references -->
<xsl:template match="topicref">
<xsl:if test=" not(contains(@href, 'man_'))
and not(contains(@href, '-man.'))
and not(contains(@href, 'glossentry-'))
and not(contains(@href, '.ditamap'))">
<topicwrap>
<xi:include href="{./@href}" xmlns:xi="http://www.w3.org/2001/XInclude" xpointer="xpointer(/topic)" />
<xsl:apply-templates select="node()" />
</topicwrap>
</xsl:if>
</xsl:template>
<!-- chapter/@href -> chapter + xi:include/@href (no wrapper) -->
<xsl:template match="chapter">
<xsl:copy>
<xi:include href="{./@href}" xmlns:xi="http://www.w3.org/2001/XInclude" xpointer="xpointer(/topic)" />
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
<!-- copy everything else -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -0,0 +1,99 @@
#!/usr/bin/env kmk_ash
# $Id: docbook-changelog-to-manual-dita.sh $
## @file
# Helper script for converting the changelog into a ditamap and a topic
# file per version.
#
#
# Copyright (C) 2023-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, in version 3 of the
# License.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <https://www.gnu.org/licenses>.
#
# SPDX-License-Identifier: GPL-3.0-only
#
#
# Globals.
#
MY_SED=kmk_sed
#
# This script is very internal, so we got the following fixed position parameters:
# 1: user_ChangeLogImpl.xml to use as input.
# 2: docbook-changelog-to-manual-dita.xsl
# 5: The out directory.
# 6: '--'
# 7+: xsltproc invocation (sans output, input and xslt file).
#
if test $# -lt 8; then
echo "syntax error: too few arguments" 1>&2;
exit 2;
fi
MY_INPUT_FILE="$1"
MY_XSLT="$2"
MY_GENERATED_KMK="$3"
MY_GENERATED_KMK_VARIABLE="$4"
MY_OUTPUT_DIR="$5"
if test "$6" != "--"; then
echo "syntax error: Expected '--' as the 6th parameter, got: $6" 1>&2;
exit 2;
fi
shift 6
if ! test -f "${MY_INPUT_FILE}"; then
echo "error: Input file does not exists or is not a regular file: ${MY_INPUT_FILE}" 1>&2;
exit 1;
fi
if ! test -f "${MY_XSLT}"; then
echo "error: The given dita-refentry-flat-topic-ids.xsl file does not exists or is not a regular file: ${MY_XSLT_TOPIC_IDS}" 1>&2;
exit 1;
fi
if ! test -d "${MY_OUTPUT_DIR}"; then
echo "error: Destination directory does not exists or not a directory: ${MY_OUTPUT_DIR}" 1>&2;
exit 1;
fi
# Exit on failure.
set -e
#
# First get the ID list from it.
# We drop the first line with the <?xml ... ?> stuff.
#
MY_TOPIC_IDS=$($* --stringparam g_sMode ids "${MY_XSLT}" "${MY_INPUT_FILE}" | ${MY_SED} -e 1d)
echo "${MY_GENERATED_KMK_VARIABLE} += \\" > "${MY_GENERATED_KMK}"
#
# Extract each topic.
#
for MY_ID in ${MY_TOPIC_IDS};
do
$* \
--stringparam g_sMode topic \
--stringparam g_idTopic "${MY_ID}" \
--output "${MY_OUTPUT_DIR}/${MY_ID}.dita" "${MY_XSLT}" "${MY_INPUT_FILE}"
echo " ${MY_OUTPUT_DIR}/${MY_ID}.dita \\" >> "${MY_GENERATED_KMK}"
done
#
# Now for the ditamap file.
#
$* --stringparam g_sMode map --output "${MY_OUTPUT_DIR}/changelog-versions.ditamap" "${MY_XSLT}" "${MY_INPUT_FILE}"
echo "" >> "${MY_GENERATED_KMK}"
exit 0

View file

@ -0,0 +1,246 @@
<?xml version="1.0"?>
<!--
docbook-changelog-to-manual-dita.xsl:
XSLT stylesheet for converting the change log from DocBook to Dita.
-->
<!--
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://xsltsl.org/string"
>
<xsl:import href="string.xsl"/>
<xsl:import href="common-formatcfg.xsl"/>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- - - - - - - - - - - - - - - - - - - - - - -
parameters
- - - - - - - - - - - - - - - - - - - - - - -->
<!-- What to do: 'map' for producing a ditamap with all the version,
or 'topic' for producing a single topic (version). -->
<xsl:param name="g_sMode">not specified</xsl:param>
<!-- The id of the topic to convert in 'topic' mode. -->
<xsl:param name="g_idTopic">not specified</xsl:param>
<!-- - - - - - - - - - - - - - - - - - - - - - -
base operation is to fail on nodes w/o explicit matching.
- - - - - - - - - - - - - - - - - - - - - - -->
<xsl:template match="*">
<xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>unhandled element</xsl:message>
</xsl:template>
<!-- - - - - - - - - - - - - - - - - - - - - - -
Match the root element (chapter) and prodcess it's sect1 entries according to the mode.
- - - - - - - - - - - - - - - - - - - - - - -->
<xsl:template match="/chapter">
<xsl:choose>
<!-- map: Generate a ditamap for all the versions. -->
<xsl:when test="$g_sMode = 'map'">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"&gt;
</xsl:text>
<xsl:element name="map" >
<xsl:element name="title"><xsl:text>Change Log</xsl:text></xsl:element>
<xsl:for-each select="./sect1">
<xsl:element name="topicref">
<xsl:attribute name="href">
<xsl:call-template name="changelog-title-to-filename"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:when>
<!-- topic: Translate a topic (version) to DITA. -->
<xsl:when test="$g_sMode = 'topic'">
<xsl:for-each select="./sect1">
<xsl:variable name="sId">
<xsl:call-template name="changelog-title-to-id"/>
</xsl:variable>
<xsl:if test="$sId = $g_idTopic">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd"&gt;
</xsl:text>
<xsl:element name="topic">
<xsl:attribute name="id">
<xsl:value-of select="$sId" />
</xsl:attribute>
<xsl:element name="title">
<xsl:value-of select="title/text()"/>
</xsl:element>
<xsl:element name="body">
<xsl:apply-templates mode="topic" select="*"/>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:when>
<!-- ids: List of IDs (text, not xml - ugly). -->
<xsl:when test="$g_sMode = 'ids'">
<xsl:for-each select="./sect1">
<xsl:variable name="sId">
<xsl:call-template name="changelog-title-to-id"/>
</xsl:variable>
<xsl:value-of disable-output-escaping='yes' select="concat($sId, '&#x0a;')"/>
</xsl:for-each>
</xsl:when>
<!-- Otherwise: bad input -->
<xsl:otherwise>
<xsl:message terminate="yes">Unknown g_sMode value: '<xsl:value-of select="$g_sMode"/></xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- - - - - - - - - - - - - - - - - - - - - - -
Section translation to topic.
- - - - - - - - - - - - - - - - - - - - - - -->
<xsl:template mode="topic" match="sect1/title">
<xsl:if test="*">
<xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Unexpected title child elements!</xsl:message>
</xsl:if>
<!-- already generated, so we only need to assert sanity and skip it. -->
</xsl:template>
<xsl:template mode="topic" match="para">
<xsl:element name="p">
<xsl:apply-templates mode="topic" select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template mode="topic" match="para/text()">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template mode="topic" match="itemizedlist">
<xsl:element name="ul">
<xsl:apply-templates mode="topic" select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template mode="topic" match="listitem">
<xsl:element name="li">
<xsl:apply-templates mode="topic" select="node()|@*"/>
</xsl:element>
</xsl:template>
<!-- - - - - - - - - - - - - - - - - - - - - - -
Helper functions.
- - - - - - - - - - - - - - - - - - - - - - -->
<!-- Extracts the version part of a changelog section title. -->
<xsl:template name="get-version-from-changelog-title">
<xsl:param name="sTitle" select="./title/text()"/>
<xsl:variable name="sAfterVersion" select="normalize-space(substring-after($sTitle, 'Version '))"/>
<xsl:variable name="sVersion" select="substring-before($sAfterVersion, ' (')"/>
<xsl:if test="$sVersion = ''">
<xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Unable to extract version from section title!</xsl:message>
</xsl:if>
<xsl:value-of select="$sVersion"/>
</xsl:template>
<!-- Outputs an id for a changelog section based on the title. -->
<xsl:template name="changelog-title-to-id">
<xsl:param name="sTitle" select="./title/text()"/>
<xsl:text>changelog-version-</xsl:text>
<xsl:variable name="sVersion">
<xsl:call-template name="get-version-from-changelog-title">
<xsl:with-param name="sTitle" select="$sTitle"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="translate($sVersion, '.', '_')"/>
</xsl:template>
<!-- Outputs a filename for a changelog section based on the title. -->
<xsl:template name="changelog-title-to-filename">
<xsl:param name="sTitle" select="./title/text()"/>
<xsl:call-template name="changelog-title-to-id">
<xsl:with-param name="sTitle" select="$sTitle"/>
</xsl:call-template>
<xsl:text>.dita</xsl:text>
</xsl:template>
<!--
Debug/Diagnostics: Return the path to the specified node (by default the current).
-->
<xsl:template name="get-node-path">
<xsl:param name="Node" select="."/>
<xsl:for-each select="$Node">
<xsl:for-each select="ancestor-or-self::node()">
<xsl:choose>
<xsl:when test="name(.) = ''">
<xsl:value-of select="concat('/text(',')')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('/', name(.))"/>
<xsl:choose>
<xsl:when test="@id">
<xsl:text>[@id=</xsl:text>
<xsl:value-of select="@id"/>
<xsl:text>]</xsl:text>
</xsl:when>
<xsl:otherwise>
<!-- Use generate-id() to find the current node position among its siblings. -->
<xsl:variable name="id" select="generate-id(.)"/>
<xsl:for-each select="../node()">
<xsl:if test="generate-id(.) = $id">
<xsl:text>[</xsl:text><xsl:value-of select="position()"/><xsl:text>]</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<!--
Debug/Diagnostics: Return error message prefix.
-->
<xsl:template name="error-prefix">
<xsl:param name="Node" select="."/>
<xsl:text>error: </xsl:text>
<xsl:call-template name="get-node-path">
<xsl:with-param name="Node" select="$Node"/>
</xsl:call-template>
<xsl:text>: </xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -5,7 +5,7 @@
to the user manual in the manpages.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -39,11 +39,11 @@
<!-- Translatable strings -->
<xsl:variable name="sChapter" select="'chapter'"/>
<xsl:variable name="sSection" select="'section'"/>
<xsl:variable name="sOfManual" select="'of the user manual'"/>
<xsl:variable name="sInManual" select="'in the user manual'"/>
<xsl:variable name="sOfManual" select="'of the User Guide'"/>
<xsl:variable name="sInManual" select="'in the User Guide'"/>
<!-- Default operation is to supress output -->
<!-- Default operation is to suppress output -->
<xsl:template match="node()|@*">
<xsl:apply-templates/>
</xsl:template>

View file

@ -1,12 +1,12 @@
<?xml version="1.0"?>
<!--
docbook-refentry-to-manual-sect1.xsl:
docbook-refentry-to-C-help.xsl:
XSLT stylesheet for nicking the refsynopsisdiv bit of a
refentry (manpage) for use in the command overview section
in the user manual.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -148,8 +148,13 @@ static const RTMSGREFENTRYSTR </xsl:text><xsl:value-of select="$sDataBaseSym"/><
<!-- Then comes the description and other refsect1 -->
<xsl:for-each select="./refsect1">
<!-- assertions -->
<xsl:if test="name(*[1]) != 'title'"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Expected title as the first element in refsect1.</xsl:message></xsl:if>
<xsl:if test="text()"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>No text supported in refsect1.</xsl:message></xsl:if>
<xsl:if test="not(@id)"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>refsect1 must have an @id attribute.</xsl:message></xsl:if>
<xsl:if test="not(starts-with(@id, concat(../@id, '-')))"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Wrong @id refsect1 prefix: '<xsl:value-of select="@id"/>', expected it to start with '<xsl:value-of select="../@id"/>-'</xsl:message></xsl:if>
<!-- .... -->
<xsl:if test="not(./remark[@role='help-skip'])">
<xsl:variable name="sTitle">
<xsl:apply-templates select="./title/node()"/>
@ -264,9 +269,12 @@ static const RTMSGREFENTRY </xsl:text><xsl:value-of select="$sDataBaseSym"/><xsl
<xsl:template match="arg|group">
<!-- separator char if we're not the first child -->
<xsl:if test="position() > 1">
<!--<xsl:value-of select="concat('*',name(),'=', position(),'#')"/>-->
<xsl:choose>
<xsl:when test="parent::group and ancestor::*[@role='compact']"><xsl:value-of select="$arg.or.sep.compact"/></xsl:when>
<xsl:when test="parent::group"><xsl:value-of select="$arg.or.sep"/></xsl:when>
<xsl:when test="ancestor-or-self::*/@sepchar"><xsl:value-of select="ancestor-or-self::*/@sepchar"/></xsl:when>
<xsl:when test="ancestor::*[@role='compact']"></xsl:when>
<xsl:when test="ancestor::*/@sepchar"><xsl:value-of select="ancestor::*/@sepchar"/></xsl:when>
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:if>
@ -301,9 +309,11 @@ static const RTMSGREFENTRY </xsl:text><xsl:value-of select="$sDataBaseSym"/><xsl
<xsl:when test="@choice = 'req'"> <xsl:value-of select="$arg.choice.req.close.str"/></xsl:when>
</xsl:choose>
<!-- Add a space padding if we're the last element in a repeating arg or group -->
<xsl:if test="(parent::arg or parent::group) and not(following-sibiling)">
<!-- 2023-03-22 bird: This is incorrectly written. Fix as needed...
<xsl:if test="(parent::arg or parent::group) and not(following-sibiling) and not(ancestor::*[@role='compact'])">
<xsl:text> </xsl:text>
</xsl:if>
-->
</xsl:if>
</xsl:template>
@ -315,6 +325,8 @@ static const RTMSGREFENTRY </xsl:text><xsl:value-of select="$sDataBaseSym"/><xsl
<!-- assertions -->
<xsl:if test="text()"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>refsect2 shouldn't contain text</xsl:message></xsl:if>
<xsl:if test="count(./title) != 1"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>refsect2 requires a title (<xsl:value-of select="ancestor-or-self::*[@id][1]/@id"/>)</xsl:message></xsl:if>
<xsl:if test="not(@id)"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>refsect2 must have an @id attribute.</xsl:message></xsl:if>
<xsl:if test="not(starts-with(@id, concat(../../@id, '-')))"><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Wrong @id refsect2 prefix: '<xsl:value-of select="@id"/>', expected it to start with '<xsl:value-of select="../../@id"/>-'</xsl:message></xsl:if>
<!-- title / command synopsis - sets the scope. -->
<xsl:variable name="sTitle">
@ -725,10 +737,10 @@ Only supported on: refsect1, refsect2, refsynopsisdiv/cmdsynopsis</xsl:message>
<!-- Figures out the scope of a refsect1 element. -->
<xsl:template name="calc-scope-refsect1">
<xsl:choose>
<xsl:when test="title[text() = 'Description']">
<xsl:when test="contains(@id, '-description') or title[text() = 'Description']">
<xsl:text>RTMSGREFENTRYSTR_SCOPE_GLOBAL</xsl:text>
</xsl:when>
<xsl:when test="@id or remark[@role='help-scope']">
<xsl:when test="(@id and not(contains(@id, '-see-also')) and not(contains(@id, '-examples'))) or remark[@role='help-scope']">
<xsl:call-template name="calc-scope-from-remark-or-id"/>
</xsl:when>
<xsl:otherwise>
@ -740,7 +752,7 @@ Only supported on: refsect1, refsect2, refsynopsisdiv/cmdsynopsis</xsl:message>
<!-- Figures out the scope of a refsect2 element. -->
<xsl:template name="calc-scope-refsect2">
<xsl:choose>
<xsl:when test="@id or remark[@role='help-scope']">
<xsl:when test="(@id and not(contains(@id, '-see-also')) and not(contains(@id, '-examples'))) or remark[@role='help-scope']">
<xsl:call-template name="calc-scope-from-remark-or-id"/>
</xsl:when>
<xsl:otherwise>

View file

@ -5,7 +5,7 @@
constants header for the built-in help.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -98,7 +98,10 @@ enum
<!-- Add scoping info for refsect1 and refsect2 IDs that aren't part of the synopsis. -->
<xsl:for-each select=".//refsect1[@id] | .//refsect2[@id]">
<xsl:variable name="sThisId" select="@id"/>
<xsl:if test="not($RefEntry[@id = $sThisId]) and not($RefEntry/refsynopsisdiv/cmdsynopsis[@id = concat('synopsis-', $sThisId)])">
<xsl:if test=" not($RefEntry[@id = $sThisId])
and not($RefEntry/refsynopsisdiv/cmdsynopsis[@id = concat('synopsis-', $sThisId)])
and not(contains($sThisId, '-see-also'))
and not(contains($sThisId, '-examples')) "> <!-- controlvm is too big, so skip these two -->
<xsl:variable name="sSubNm">
<xsl:text>HELP_SCOPE_</xsl:text>
<xsl:choose>

View file

@ -6,7 +6,7 @@
VBoxManage built-in help.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -4,7 +4,7 @@
XSLT stylesheet that renders a refentry into a troff manpage.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -0,0 +1,82 @@
<?xml version="1.0"?>
<!--
docbook-refentry-to-manual-dita-pre.xsl:
XSLT stylesheet for preprocessing a refentry (manpage)
before converting it to dita for use in the user manual.
This just applies remark elements.
-->
<!--
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://xsltsl.org/string"
>
<xsl:import href="string.xsl"/>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:preserve-space elements="*"/>
<!-- - - - - - - - - - - - - - - - - - - - - - -
base operation is to copy everything except for comments.
- - - - - - - - - - - - - - - - - - - - - - -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()"/>
<!--
remark extensions:
-->
<!-- Default: remove all remarks. -->
<xsl:template match="remark"/>
<!-- help-manual - stuff that should only be included in the manual. -->
<xsl:template match="remark[@role = 'help-manual']">
<xsl:apply-templates/>
</xsl:template>
<!-- help-copy-synopsis - used in refsect2 to copy synopsis from the refsynopsisdiv. -->
<xsl:template match="remark[@role = 'help-copy-synopsis']">
<xsl:if test="not(parent::refsect2)">
<xsl:message terminate="yes">The help-copy-synopsis remark is only applicable in refsect2.</xsl:message>
</xsl:if>
<xsl:variable name="sSrcId" select="concat('synopsis-',../@id)"/>
<xsl:if test="not(/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId])">
<xsl:message terminate="yes">Could not find any cmdsynopsis with id=<xsl:value-of select="$sSrcId"/> in refsynopsisdiv.</xsl:message>
</xsl:if>
<xsl:element name="cmdsynopsis">
<xsl:copy-of select="/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId]/node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

File diff suppressed because it is too large Load diff

View file

@ -1,74 +0,0 @@
<?xml version="1.0"?>
<!--
docbook-refentry-to-manual-sect1.xsl:
XSLT stylesheet for nicking the refsynopsisdiv bit of a
refentry (manpage) for use in the command overview section
in the user manual.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Base operation is to copy. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!--
The refentry element is the top level one. We only process the
refsynopsisdiv sub element within it, since that is all we want.
-->
<xsl:template match="refentry">
<xsl:apply-templates select="refsynopsisdiv"/>
</xsl:template>
<!--
Combine all cmdsynopsis lines into a bunch of commands.
-->
<xsl:template match="refsynopsisdiv">
<xsl:if test="not(cmdsynopsis)">
<xsl:message terminate="yes">What? No cmdsynopsis in the refsynopsisdiv?</xsl:message>
</xsl:if>
<xsl:element name="cmdsynopsis">
<xsl:attribute name="id"><xsl:value-of select="/refentry/@id"/><xsl:text>-overview</xsl:text></xsl:attribute>
<xsl:for-each select="cmdsynopsis">
<xsl:copy-of select="node()"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
<!-- Remove all remarks (for now). -->
<xsl:template match="remark"/>
</xsl:stylesheet>

View file

@ -1,183 +0,0 @@
<?xml version="1.0"?>
<!--
docbook-refentry-to-manual-sect1.xsl:
XSLT stylesheet for transforming a refentry (manpage)
to a sect1 for the user manual.
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://xsltsl.org/string"
>
<xsl:import href="string.xsl"/>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- - - - - - - - - - - - - - - - - - - - - - -
global XSLT variables
- - - - - - - - - - - - - - - - - - - - - - -->
<!-- - - - - - - - - - - - - - - - - - - - - - -
base operation is to copy.
- - - - - - - - - - - - - - - - - - - - - - -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -->
<!-- rename refentry to sect1 -->
<xsl:template match="refentry">
<xsl:element name="sect1">
<xsl:attribute name="condition">refentry</xsl:attribute>
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<!-- Remove refentryinfo, keeping the title element. -->
<xsl:template match="refentryinfo">
<xsl:if test="./title">
<xsl:copy-of select="./title"/>
</xsl:if>
</xsl:template>
<!-- Morph refnamediv into a brief description. -->
<xsl:template match="refnamediv">
<xsl:element name="para">
<xsl:call-template name="capitalize">
<xsl:with-param name="text" select="normalize-space(./refpurpose)"/>
</xsl:call-template>
<xsl:text>.</xsl:text>
</xsl:element>
</xsl:template>
<!-- Morph the refsynopsisdiv part into a synopsis section. -->
<xsl:template match="refsynopsisdiv">
<xsl:if test="name(*[1]) != 'cmdsynopsis'"><xsl:message terminate="yes">Expected refsynopsisdiv to start with cmdsynopsis</xsl:message></xsl:if>
<xsl:if test="title"><xsl:message terminate="yes">No title element supported in refsynopsisdiv</xsl:message></xsl:if>
<xsl:element name="sect2">
<xsl:attribute name="role">not-in-toc</xsl:attribute>
<xsl:attribute name="condition">refsynopsisdiv</xsl:attribute>
<xsl:element name="title">
<xsl:text>Synopsis</xsl:text>
</xsl:element>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- refsect1 -> sect2 -->
<xsl:template match="refsect1">
<xsl:if test="not(title)"><xsl:message terminate="yes">refsect1 requires title</xsl:message></xsl:if>
<xsl:element name="sect2">
<xsl:attribute name="role">not-in-toc</xsl:attribute>
<xsl:attribute name="condition">refsect1</xsl:attribute>
<xsl:if test="@id">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- refsect2 -> sect3 -->
<xsl:template match="refsect2">
<xsl:if test="not(title)"><xsl:message terminate="yes">refsect2 requires title</xsl:message></xsl:if>
<xsl:element name="sect3">
<xsl:attribute name="role">not-in-toc</xsl:attribute>
<xsl:attribute name="condition">refsect2</xsl:attribute>
<xsl:if test="@id">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- refsect3 -> sect4 -->
<xsl:template match="refsect3">
<xsl:if test="not(title)"><xsl:message terminate="yes">refsect3 requires title</xsl:message></xsl:if>
<xsl:element name="sect4">
<xsl:attribute name="role">not-in-toc</xsl:attribute>
<xsl:attribute name="condition">refsect3</xsl:attribute>
<xsl:if test="@id">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- Remove refmeta. -->
<xsl:template match="refmeta"/>
<!--
remark extensions:
-->
<!-- Default: remove all remarks. -->
<xsl:template match="remark"/>
<!-- help-manual - stuff that should only be included in the manual. -->
<xsl:template match="remark[@role = 'help-manual']">
<xsl:apply-templates/>
</xsl:template>
<!-- help-copy-synopsis - used in refsect2 to copy synopsis from the refsynopsisdiv. -->
<xsl:template match="remark[@role = 'help-copy-synopsis']">
<xsl:if test="not(parent::refsect2)">
<xsl:message terminate="yes">The help-copy-synopsis remark is only applicable in refsect2.</xsl:message>
</xsl:if>
<xsl:variable name="sSrcId" select="concat('synopsis-',../@id)"/>
<xsl:if test="not(/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId])">
<xsl:message terminate="yes">Could not find any cmdsynopsis with id=<xsl:value-of select="$sSrcId"/> in refsynopsisdiv.</xsl:message>
</xsl:if>
<xsl:element name="cmdsynopsis">
<xsl:copy-of select="/refentry/refsynopsisdiv/cmdsynopsis[@id = $sSrcId]/node()"/>
</xsl:element>
</xsl:template>
<!--
Captializes the given text.
-->
<xsl:template name="capitalize">
<xsl:param name="text"/>
<xsl:call-template name="str:to-upper">
<xsl:with-param name="text" select="substring($text,1,1)"/>
</xsl:call-template>
<xsl:value-of select="substring($text,2)"/>
</xsl:template>
</xsl:stylesheet>

View file

@ -19,7 +19,7 @@
by this XSLT (see below).
-->
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
@ -96,6 +96,7 @@
<!-- command synopsis -->
<xsl:variable name="arg.rep.repeat.str.tex">\ldots{}</xsl:variable>
<xsl:variable name="arg.or.sep.compact.tex">|</xsl:variable>
<xsl:variable name="arg.or.sep.tex"> |~</xsl:variable>
<xsl:output method="text"/>
@ -388,41 +389,21 @@
<xsl:with-param name="texcmd">\section</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="parent::sect2[@role='not-in-toc'] or parent::refsect1 or (parent::section and count(ancestor::section) = 2)">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subsection*</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="name(..)='sect2'">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subsection</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="parent::sect3[@role='not-in-toc'] or parent::refsect2 or (parent::section and count(ancestor::section) = 3)">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subsubsection*</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="name(..)='sect3'">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subsubsection</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="parent::sect4[@role='not-in-toc'] or parent::refsect3 or (parent::section and count(ancestor::section) = 4)">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\paragraph*</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="name(..)='sect4'">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\paragraph</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="parent::sect5[@role='not-in-toc'] or parent::refsect4 or (parent::section and count(ancestor::section) = 5)">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subparagraph*</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="name(..)='sect5'">
<xsl:call-template name="title-wrapper">
<xsl:with-param name="texcmd">\subparagraph</xsl:with-param>
@ -967,8 +948,10 @@
<!-- separator char if we're not the first child -->
<xsl:if test="position() > 1">
<xsl:choose>
<xsl:when test="parent::group and ancestor::*[@role='compact']"><xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.or.sep.compact.tex"/><xsl:text>}</xsl:text></xsl:when>
<xsl:when test="parent::group"><xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.or.sep.tex"/><xsl:text>}</xsl:text></xsl:when>
<xsl:when test="ancestor-or-self::*/@sepchar"><xsl:value-of select="ancestor-or-self::*/@sepchar"/></xsl:when>
<xsl:when test="ancestor::*[@role='compact']"></xsl:when>
<xsl:when test="ancestor::*/@sepchar"><xsl:value-of select="ancestor::*/@sepchar"/></xsl:when>
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:if>
@ -1005,9 +988,10 @@
</xsl:choose>
<!-- add space padding if we're the last element in a nested arg -->
<xsl:if test="parent::arg and not(following-sibling)">
<!-- 2023-03-22 bird: This is incorrectly written. Fix as needed...
<xsl:if test="(parent::arg or parent::group) and not(following-sibling) and not(ancestor::*[@role='compact'])">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:if> -->
</xsl:template>
<xsl:template match="replaceable">

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2019-2023 Oracle and/or its affiliates.
Copyright (C) 2019-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

View file

@ -0,0 +1,30 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<!--
Copyright (C) 2023-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<topic xml:lang="en-us" id="dummy-topic">
<title>Dummy</title>
<body>
<p>Dummy</p>
</body>
</topic>

View file

@ -4,7 +4,7 @@
#
#
# Copyright (C) 2010-2023 Oracle and/or its affiliates.
# Copyright (C) 2010-2024 Oracle and/or its affiliates.
#
# This file is part of VirtualBox base platform packages, as
# available from https://www.virtualbox.org.

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.

File diff suppressed because it is too large Load diff

View file

@ -1,112 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2006-2023 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"[
<!ENTITY % all.entities SYSTEM "all-entities.ent">
%all.entities;
]>
<book id="VBOXU" lang="en">
<!-- VBox bookinfo section -->
<bookinfo>
<title>&VBOX_PRODUCT;</title>
<subtitle>User Manual</subtitle>
<edition>Version &VBOX_VERSION_STRING;</edition>
<corpauthor>&VBOX_VENDOR;</corpauthor>
<address>http://www.virtualbox.org</address>
<copyright>
<year>2004-&VBOX_C_YEAR;</year>
<holder>&VBOX_VENDOR;</holder>
</copyright>
</bookinfo>
<xi:include href="user_Preface.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Introduction.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Installation.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_BasicConcepts.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_GuestAdditions.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Storage.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Networking.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Frontends.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_VBoxManage.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_AdvancedTopics.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Technical.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_VirtualBoxAPI.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Troubleshooting.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Security.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_KnownIssues.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_ChangeLog.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_ThirdParty.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_PrivacyPolicy.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="user_Glossary.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
</book>

View file

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<!--
dita-refentry-link-replacement-xsl-gen.xsl:
XSLT stylesheet for generate a stylesheet that replaces links
to the user manual in the manpages.
-->
<!--
Copyright (C) 2006-2024 Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
SPDX-License-Identifier: GPL-3.0-only
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://xsltsl.org/string"
>
<xsl:import href="../dita-refentry-link-replacement-xsl-gen.xsl"/>
<!-- Translated strings -->
<!-- none needed, English is the base language -->
</xsl:stylesheet>

View file

@ -0,0 +1,699 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap.dtd">
<!-- The bookmap ID is imperative and matched the Jarvis GUID required to build and pretty much do anything -->
<bookmap id="EN-VBOX-7-1-USER" xml:lang="en-US">
<booktitle>
<mainbooktitle>Oracle VirtualBox: User Guide for Release 7.1</mainbooktitle>
</booktitle>
<bookmeta>
<publisherinformation>
<published>
<completed>
<month>September</month>
<year>2024</year>
</completed>
</published>
</publisherinformation>
<bookrights>
<copyrfirst>
<year>2022</year>
</copyrfirst>
<bookowner>
<organization>Oracle and/or its affiliates. All rights reserved.</organization>
</bookowner>
</bookrights>
</bookmeta>
<!-- Chunking should be set with chunk="to-content" in each chapter. -->
<frontmatter>
<mapref href="conkeyrefs.ditamap" format="ditamap" toc="no" processing-role="resource-only"/>
<booklists>
<toc/>
<figurelist/>
<tablelist/>
</booklists>
<preface href="topics/preface.dita" chunk="to-content">
<topicref href="topics/preface-audience.dita"/>
<topicref href="topics/preface-reldocs.dita"/>
<topicref href="topics/preface-conventions.dita"/>
<topicref href="topics/preface-doc-accessibility.dita"/>
<topicref href="topics/preface-accessibility.dita"/>
<topicref href="topics/preface-diversity.dita"/>
</preface>
</frontmatter>
<chapter href="topics/Introduction.dita" chunk="to-content">
<topicref href="topics/virt-why-useful.dita"/>
<topicref href="topics/virtintro.dita"/>
<topicref href="topics/features-overview.dita">
<topicref href="topics/frontends.dita"/>
</topicref>
<topicref href="topics/hostossupport.dita">
<topicref href="topics/host-guest-matrix.dita"/>
<topicref href="topics/arm-host-limitations.dita"/>
<topicref href="topics/hostcpurequirements.dita"/>
</topicref>
<topicref href="topics/intro-installing.dita"/>
<topicref href="topics/intro-starting.dita"/>
<topicref href="topics/configuring-virtualbox.dita">
<topicref href="topics/preferences.dita"/>
<topicref href="topics/ui-experience-level.dita"/>
<topicref href="topics/gui-tools-global.dita"/>
</topicref>
<topicref href="topics/add-vm.dita"/>
<topicref href="topics/create-vm-wizard.dita">
<topicref href="topics/create-vm-wizard-name-os.dita"/>
<topicref href="topics/create-vm-wizard-unattended-install.dita"/>
<topicref href="topics/create-vm-wizard-hardware.dita"/>
<topicref href="topics/create-vm-wizard-virtual-hard-disk.dita"/>
</topicref>
<topicref href="topics/intro-running.dita">
<topicref href="topics/intro-starting-vm-first-time.dita"/>
<topicref href="topics/vm-status-bar.dita"/>
<topicref href="topics/keyb_mouse_normal.dita"/>
<topicref href="topics/specialcharacters.dita"/>
<topicref href="topics/intro-removable-media-changing.dita"/>
<topicref href="topics/intro-resize-window.dita"/>
<topicref href="topics/intro-save-machine-state.dita"/>
</topicref>
<topicref href="topics/managing-vms.dita">
<topicref href="topics/configbasics.dita"/>
<topicref href="topics/gui-vmgroups.dita"/>
</topicref>
<topicref href="topics/snapshots.dita">
<topicref href="topics/snapshots-take-restore-delete.dita"/>
<topicref href="topics/snapshots-contents.dita"/>
</topicref>
<topicref href="topics/intro-removing.dita"/>
<topicref href="topics/clone.dita"/>
<topicref href="topics/ovf.dita">
<topicref href="topics/ovf-about.dita"/>
<topicref href="topics/ovf-import-appliance.dita"/>
<topicref href="topics/ovf-export-appliance.dita"/>
</topicref>
<topicref href="topics/cloud-integration.dita">
<topicref href="topics/cloud-integration-steps.dita"/>
<topicref href="topics/cloud-create-api-keypair.dita"/>
<topicref href="topics/cloud-upload-public-key.dita"/>
<topicref href="topics/cloud-create-cloud-profile.dita"/>
<topicref href="topics/cloud-using-cloud-profile-manager.dita">
<topicref href="topics/cloud-profile-creating.dita"/>
<topicref href="topics/cloud-profile-importing.dita"/>
</topicref>
<topicref href="topics/cloud-vbox-oci-tasks.dita"/>
<topicref href="topics/cloud-vm.dita">
<topicref href="topics/cloud-vm-oci-group.dita"/>
<topicref href="topics/cloud-vm-new.dita"/>
<topicref href="topics/cloud-vm-add.dita"/>
<topicref href="topics/cloud-vm-clone.dita"/>
<topicref href="topics/cloud-vm-settings.dita"/>
<topicref href="topics/cloud-vm-control.dita"/>
<topicref href="topics/cloud-vm-monitor.dita"/>
<topicref href="topics/cloud-vm-remove.dita"/>
<topicref href="topics/cloud-vm-instance-console.dita"/>
</topicref>
<topicref href="topics/cloud-export-oci.dita">
<topicref href="topics/cloud-export-oci-prepare-vm.dita"/>
</topicref>
<topicref href="topics/cloud-import-oci.dita">
<topicref href="topics/import-instance-sequence.dita"/>
</topicref>
<topicref href="topics/cloud-using-cloud-networks.dita"/>
<topicref href="topics/cloud-using-cli.dita"/>
</topicref>
<topicref href="topics/soft-keyb.dita">
<topicref href="topics/soft-keyb-using.dita"/>
<topicref href="topics/soft-keyb-custom.dita"/>
</topicref>
<topicref href="topics/vm-info.dita">
<topicref href="topics/vm-activity-overview.dita"/>
<topicref href="topics/vm-activity-session-information.dita"/>
<topicref href="topics/log-viewer.dita"/>
</topicref>
</chapter>
<chapter href="topics/installation.dita" chunk="to-content">
<topicref href="topics/installation_windows.dita">
<topicref href="topics/install-win-prereq.dita"/>
<topicref href="topics/install-win-installdir-req.dita"/>
<topicref href="topics/install-win-performing.dita"/>
<topicref href="topics/install-win-uninstall.dita"/>
<topicref href="topics/install-win-unattended.dita"/>
<topicref href="topics/install-win-public-props.dita"/>
</topicref>
<topicref href="topics/installation-mac.dita">
<topicref href="topics/install-mac-performing.dita"/>
<topicref href="topics/install-mac-uninstall.dita"/>
<topicref href="topics/install-mac-unattended.dita"/>
</topicref>
<topicref href="topics/install-linux-host.dita">
<topicref href="topics/install-linux-prereq.dita"/>
<topicref href="topics/externalkernelmodules.dita">
<topicref href="topics/kernel-modules-efi-secure-boot.dita"/>
</topicref>
<topicref href="topics/install-linux-performing.dita">
<topicref href="topics/install-linux-debian-ubuntu.dita"/>
<topicref href="topics/install-linux-alt-installer.dita"/>
<topicref href="topics/install-linux-manual.dita"/>
<topicref href="topics/install-linux-update-uninstall.dita"/>
<topicref href="topics/install-linux-debian-automatic.dita"/>
<topicref href="topics/install-linux-rpm-automatic.dita"/>
<topicref href="topics/linux_install_opts.dita"/>
</topicref>
<topicref href="topics/install-linux-vboxusers.dita"/>
<topicref href="topics/startingvboxonlinux.dita"/>
</topicref>
<topicref href="topics/install-solaris-host.dita">
<topicref href="topics/install-solaris-performing.dita"/>
<topicref href="topics/install-solaris-vboxuser.dita"/>
<topicref href="topics/install-solaris-starting.dita"/>
<topicref href="topics/uninstall-solaris-host.dita"/>
<topicref href="topics/install-solaris-unattended.dita"/>
<topicref href="topics/solaris-zones.dita"/>
</topicref>
<topicref href="topics/install-ext-pack.dita">
<topicref href="topics/install-ext-pack-manager.dita"/>
</topicref>
</chapter>
<chapter href="topics/BasicConcepts.dita" chunk="to-content">
<!-- <topicref href="topics/guestossupport.dita"> -->
<topicref href="topics/guest-os.dita">
<topicref href="topics/guest-os-x86-64.dita"/>
<topicref href="topics/guest-os-Arm.dita"/>
<topicref href="topics/guest-os-legacy.dita"/>
<topicref href="topics/intro-macosxguests.dita"/>
<topicref href="topics/intro-64bitguests.dita"/>
</topicref>
<topicref href="topics/basic-unattended.dita">
<topicref href="topics/unattended-guest-install-example.dita"/>
</topicref>
<topicref href="topics/emul-hardware.dita"/>
<topicref href="topics/settings-window.dita"/>
<topicref href="topics/generalsettings.dita">
<topicref href="topics/settings-basic.dita"/>
<topicref href="topics/settings-general-advanced.dita"/>
<topicref href="topics/settings-description.dita"/>
<topicref href="topics/settings-disk-encryption.dita"/>
</topicref>
<topicref href="topics/settings-system.dita">
<topicref href="topics/settings-motherboard.dita"/>
<topicref href="topics/settings-processor.dita"/>
<topicref href="topics/settings-acceleration.dita"/>
</topicref>
<topicref href="topics/settings-display.dita">
<topicref href="topics/settings-screen.dita"/>
<topicref href="topics/settings-remote-display.dita"/>
<topicref href="topics/settings-capture.dita"/>
</topicref>
<topicref href="topics/settings-storage.dita"/>
<topicref href="topics/settings-audio.dita"/>
<topicref href="topics/settings-network.dita"/>
<topicref href="topics/serialports.dita"/>
<topicref href="topics/usb-support.dita">
<topicref href="topics/settings-usb.dita"/>
<topicref href="topics/usb-implementation-notes.dita"/>
</topicref>
<topicref href="topics/shared-folders.dita"/>
<topicref href="topics/user-interface.dita"/>
<topicref href="topics/efi.dita">
<topicref href="topics/efividmode.dita"/>
<topicref href="topics/efibootargs.dita"/>
</topicref>
</chapter>
<chapter href="topics/guestadditions.dita" chunk="to-content">
<topicref href="topics/guestadd-intro.dita"/>
<topicref href="topics/guestadd-install.dita">
<topicref href="topics/additions-windows.dita">
<topicref href="topics/mountingadditionsiso.dita"/>
<topicref href="topics/additions-windows-updating.dita"/>
<topicref href="topics/additions-windows-install-unattended.dita"/>
<topicref href="topics/additions-windows-install-unattended-certs.dita"/>
<topicref href="topics/windows-guest-file-extraction.dita"/>
</topicref>
<topicref href="topics/additions-linux.dita">
<topicref href="topics/additions-linux-install.dita"/>
<topicref href="topics/additions-linux-install-unattended.dita"/>
<topicref href="topics/additions-linux-graphics-mouse.dita"/>
<topicref href="topics/additions-linux-updating.dita"/>
<topicref href="topics/additions-linux-uninstall.dita"/>
</topicref>
<topicref href="topics/additions-solaris.dita">
<topicref href="topics/additions-solaris-install.dita"/>
<topicref href="topics/additions-solaris-install-unattended.dita"/>
<topicref href="topics/additions-solaris-uninstall.dita"/>
<topicref href="topics/additions-solaris-updating.dita"/>
</topicref>
<topicref href="topics/additions-os2.dita"/>
</topicref>
<topicref href="topics/sharedfolders.dita">
<topicref href="topics/sf_mount_manual.dita"/>
<topicref href="topics/sf_mount_auto.dita"/>
</topicref>
<topicref href="topics/guestadd-clipboard.dita">
<topicref href="topics/guestadd-clipboard-limitations.dita"/>
</topicref>
<topicref href="topics/guestadd-dnd.dita">
<topicref href="topics/guestadd-dnd-formats.dita"/>
<topicref href="topics/guestadd-dnd-limitations.dita"/>
</topicref>
<topicref href="topics/guestadd-video.dita"/>
<topicref href="topics/seamlesswindows.dita"/>
<topicref href="topics/guestadd-guestprops.dita">
<topicref href="topics/guestadd-guestprops-waits.dita"/>
</topicref>
<topicref href="topics/guestadd-gc-file-manager.dita">
<topicref href="topics/guestadd-gc-file-manager-using.dita"/>
</topicref>
<topicref href="topics/guestadd-guestcontrol.dita"/>
<topicref href="topics/guestadd-memory-usage.dita">
<topicref href="topics/guestadd-balloon.dita"/>
<topicref href="topics/guestadd-pagefusion.dita"/>
</topicref>
<topicref href="topics/guestadd-resizing.dita">
<topicref href="topics/guestadd-resizing-linux.dita">
<topicref href="topics/guestadd-resizing-linux-limitations.dita"/>
</topicref>
</topicref>
</chapter>
<chapter href="topics/storage.dita" chunk="to-content">
<topicref href="topics/harddiskcontrollers.dita"/>
<topicref href="topics/vdidetails.dita"/>
<topicref href="topics/virtual-media-manager.dita">
<topicref href="topics/create-virtual-hard-disk-image.dita"/>
<topicref href="topics/create-optical-disk-image.dita"/>
<topicref href="topics/create-floppy-disk-image.dita"/>
</topicref>
<topicref href="topics/hdimagewrites.dita"/>
<topicref href="topics/diffimages.dita"/>
<topicref href="topics/cloningvdis.dita"/>
<topicref href="topics/iocaching.dita"/>
<topicref href="topics/storage-bandwidth-limit.dita"/>
<topicref href="topics/storage-cds.dita"/>
<topicref href="topics/storage-iscsi.dita"/>
<topicref href="topics/vboximg-mount.dita">
<topicref href="topics/vboximg-mount-display.dita"/>
<topicref href="topics/vboximg-mount-steps.dita"/>
</topicref>
</chapter>
<chapter href="topics/networkingdetails.dita" chunk="to-content">
<topicref href="topics/nichardware.dita"/>
<topicref href="topics/networkingmodes.dita"/>
<topicref href="topics/network_nat.dita">
<topicref href="topics/natforward.dita"/>
<topicref href="topics/nat-tftp.dita"/>
<topicref href="topics/nat-limitations.dita"/>
</topicref>
<topicref href="topics/network_nat_service.dita"/>
<topicref href="topics/network_bridged.dita"/>
<topicref href="topics/network_internal.dita"/>
<topicref href="topics/network_hostonly.dita"/>
<topicref href="topics/network_udp_tunnel.dita"/>
<topicref href="topics/network_vde.dita"/>
<topicref href="topics/network_cloud.dita"/>
<topicref href="topics/network-manager.dita">
<topicref href="topics/network-manager-host-only-tab.dita"/>
<topicref href="topics/network-manager-nat-network-tab.dita"/>
<topicref href="topics/network-manager-cloud-network-tab.dita"/>
</topicref>
<topicref href="topics/network_bandwidth_limit.dita"/>
<topicref href="topics/network_performance.dita"/>
</chapter>
<chapter href="topics/remotevm.dita" chunk="to-content">
<topicref href="topics/vrde.dita">
<topicref href="topics/rdp-viewers.dita"/>
<topicref href="topics/vboxheadless.dita"/>
<topicref href="topics/headless-vm-steps.dita"/>
<topicref href="topics/vboxheadless-separate-mode.dita"/>
<topicref href="topics/usb-over-rdp.dita"/>
<topicref href="topics/vbox-auth.dita"/>
<topicref href="topics/vrde-crypt.dita"/>
<topicref href="topics/vrde-multiconnection.dita"/>
<topicref href="topics/vrde-multimonitor.dita"/>
<topicref href="topics/vrde-videochannel.dita"/>
<topicref href="topics/vrde-customization.dita"/>
</topicref>
<topicref href="topics/teleporting.dita"/>
<topicref format="ditamap" href="topics/man_VBoxHeadless.ditamap"/>
</chapter>
<!-- VBoxManage Refentry command topics -->
<chapter href="topics/vboxmanage.dita" chunk="to-content">
<topicref href="topics/vboxmanage-intro.dita"/>
<!-- Commands Overview -->
<topicref href="topics/vboxmanage-cmd-overview.dita"/>
<!-- The remainder of the topics in this chapter are generated from docbook XML files.-->
<topicref format="ditamap" href="topics/man_VBoxManage-common.ditamap"/>
<!-- Note! We sort these alphabetical unless someone can define a
maintainable ordering (previously it seemed to be total
random and included several duplicates). -->
<topicref format="ditamap" href="topics/man_VBoxManage-adoptstate.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-bandwidthctl.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-checkmediumpwd.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-clonemedium.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-clonevm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-closemedium.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-cloud.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-cloudprofile.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-controlvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-convertfromraw.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-createmedium.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-createvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-debugvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-dhcpserver.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-discardstate.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-encryptmedium.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-encryptvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-export.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-extpack.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-getextradata.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-guestcontrol.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-guestproperty.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-hostonlyif.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-hostonlynet.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-import.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-list.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-mediumio.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-mediumproperty.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-metrics.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-modifymedium.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-modifynvram.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-modifyvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-movevm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-natnetwork.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-registervm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-setextradata.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-setproperty.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-sharedfolder.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-showmediuminfo.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-showvminfo.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-signova.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-snapshot.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-startvm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-storageattach.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-storagectl.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-unattended.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-unregistervm.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-updatecheck.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-usbdevsource.ditamap"/>
<topicref format="ditamap" href="topics/man_VBoxManage-usbfilter.ditamap"/>
<!-- End sorted manpage topics. -->
<topicref format="ditamap" href="topics/man_vboximg-mount.ditamap"/>
</chapter>
<chapter href="topics/AdvancedTopics.dita" chunk="to-content">
<topicref href="topics/autologon.dita">
<topicref href="topics/autologon_win.dita"/>
<topicref href="topics/autologon_unix.dita">
<topicref href="topics/autologon_unix_lightdm.dita"/>
</topicref>
</topicref>
<topicref href="topics/adv-config-win-guest.dita">
<topicref href="topics/sysprep.dita"/>
</topicref>
<topicref href="topics/adv-config-linux-guest.dita">
<topicref href="topics/linux-guest-manual-setup.dita"/>
<topicref href="topics/guestxorgsetup.dita"/>
</topicref>
<topicref href="topics/cpuhotplug.dita"/>
<topicref href="topics/webcam-passthrough.dita">
<topicref href="topics/webcam-using-guest.dita"/>
<topicref href="topics/webcam-win-hosts.dita"/>
<topicref href="topics/webcam-mac-hosts.dita"/>
<topicref href="topics/webcam-linux-hosts.dita"/>
</topicref>
<topicref href="topics/adv-display-config.dita">
<topicref href="topics/customvesa.dita"/>
<topicref href="topics/max-resolution-guests.dita"/>
</topicref>
<topicref href="topics/adv-storage-config.dita">
<topicref href="topics/rawdisk.dita">
<topicref href="topics/rawdisk-access-entire-physical-disk.dita"/>
<topicref href="topics/rawdisk-access-disk-partitions.dita"/>
</topicref>
<topicref href="topics/changevpd.dita"/>
<topicref href="topics/iscsi-intnet.dita"/>
</topicref>
<topicref href="topics/changenat.dita">
<topicref href="topics/nat-address-config.dita"/>
<topicref href="topics/nat-adv-tftp.dita"/>
<topicref href="topics/nat-adv-settings.dita"/>
<topicref href="topics/nat-bind-sockets.dita"/>
<topicref href="topics/nat-adv-dns.dita"/>
<topicref href="topics/nat_host_resolver_proxy.dita">
<topicref href="topics/nat_host_resolver_name_intercepting.dita"/>
</topicref>
<topicref href="topics/nat-adv-alias.dita"/>
</topicref>
<topicref href="topics/changedmi.dita"/>
<topicref href="topics/changeacpicust.dita"/>
<topicref href="topics/fine-tune-timers.dita">
<topicref href="topics/changetscmode.dita"/>
<topicref href="topics/warpguest.dita"/>
<topicref href="topics/changetimesync.dita"/>
<topicref href="topics/disabletimesync.dita"/>
</topicref>
<topicref href="topics/vboxbowsolaris11.dita"/>
<topicref href="topics/vboxbowvnictemplates.dita"/>
<topicref href="topics/addhostonlysolaris.dita"/>
<topicref href="topics/solariscodedumper.dita"/>
<topicref href="topics/vboxandsolzvmm.dita"/>
<topicref href="topics/guitweaks.dita">
<topicref href="topics/customize-vm-manager.dita"/>
<topicref href="topics/customize-vm-selector.dita"/>
<topicref href="topics/config-vm-selector-menu.dita"/>
<topicref href="topics/config-vm-window-menu.dita"/>
<topicref href="topics/config-vm-window-status-bar.dita"/>
<topicref href="topics/config-vm-window-visual-modes.dita"/>
<topicref href="topics/host-key-customize.dita"/>
<topicref href="topics/terminate-vm-action.dita"/>
<topicref href="topics/terminate-vm-default-action.dita"/>
<topicref href="topics/guru-meditation-action.dita"/>
<topicref href="topics/mouse-capture.dita"/>
<topicref href="topics/legacy-fullscreen-mode.dita"/>
<topicref href="topics/restrict-network-attachments.dita"/>
</topicref>
<topicref href="topics/vboxwebsrv-daemon.dita">
<topicref href="topics/vboxwebsrv-linux.dita"/>
<topicref href="topics/vboxwebsrv-solaris.dita"/>
<topicref href="topics/vboxwebsrv-osx.dita"/>
</topicref>
<topicref href="topics/vboxwatchdog.dita">
<topicref href="topics/vboxwatchdog-ballonctrl.dita"/>
<topicref href="topics/vboxwatchdog-hostisln.dita"/>
<topicref href="topics/vboxwatchdog-moreinfo.dita"/>
<topicref href="topics/vboxwatchdog-linux.dita"/>
<topicref href="topics/vboxwatchdog-solaris.dita"/>
</topicref>
<topicref href="topics/otherextpacks.dita"/>
<topicref href="topics/autostart.dita">
<topicref href="topics/autostart-linux.dita"/>
<topicref href="topics/autostart-solaris.dita"/>
<topicref href="topics/autostart-osx.dita"/>
<topicref href="topics/autostart-windows.dita"/>
</topicref>
<topicref href="topics/vmencryption.dita">
<topicref href="topics/vmencryption-limitations.dita"/>
<topicref href="topics/vmencryption-encryption.dita"/>
<topicref href="topics/vmencryption-addpassword.dita"/>
<topicref href="topics/vmencryption-decryption.dita"/>
</topicref>
<topicref href="topics/vboxexpertstoragemgmt.dita"/>
<topicref href="topics/hostpowertweaks.dita"/>
<topicref href="topics/sse412passthrough.dita"/>
<topicref href="topics/hidledssync.dita"/>
<topicref href="topics/usbtrafficcapturing.dita"/>
<topicref href="topics/heartbeatservice.dita"/>
<topicref href="topics/diskencryption.dita">
<topicref href="topics/diskencryption-limitations.dita"/>
<topicref href="topics/diskencryption-encryption.dita"/>
<topicref href="topics/diskencryption-startvm.dita"/>
<topicref href="topics/diskencryption-decryption.dita"/>
</topicref>
<topicref href="topics/gimdebug.dita">
<topicref href="topics/gimdebughyperv.dita">
<topicref href="topics/gimdebughyperv-windows-setup.dita"/>
</topicref>
</topicref>
<topicref href="topics/pcspeaker_passthrough.dita"/>
<topicref href="topics/usbip.dita">
<topicref href="topics/usbip-setup-server.dita"/>
<topicref href="topics/usbip-security.dita"/>
</topicref>
<topicref href="topics/hyperv-support.dita"/>
<topicref href="topics/nested-virt.dita"/>
<topicref href="topics/vboxsvc-session-0.dita">
<topicref href="topics/vboxsvc-session-0-known-issues.dita"/>
</topicref>
<topicref format="ditamap" href="topics/user_isomakercmd-man.ditamap"/>
</chapter>
<chapter href="topics/TechnicalBackground.dita" chunk="to-content">
<topicref href="topics/vboxconfigdata.dita">
<topicref href="topics/vboxconfigdata-machine-folder.dita"/>
<topicref href="topics/vboxconfigdata-global.dita"/>
<topicref href="topics/vboxconfigdata-summary-locations.dita"/>
<topicref href="topics/vboxconfigdata-XML-files.dita"/>
</topicref>
<topicref href="topics/technical-components.dita"/>
<topicref href="topics/hwvirt.dita"/>
<topicref href="topics/hwvirt-details.dita"/>
<topicref href="topics/gimproviders.dita"/>
<topicref href="topics/nestedpaging.dita"/>
</chapter>
<chapter href="topics/VirtualBoxAPI.dita" chunk="to-content"/>
<chapter href="topics/Troubleshooting.dita" chunk="to-content">
<topicref href="topics/ts_procs-tools.dita">
<topicref href="topics/ts_categorize-isolate.dita"/>
<topicref href="topics/collect-debug-info.dita"/>
<topicref href="topics/ts_vboxbugreport.dita"/>
<topicref href="topics/ts_debugger.dita"/>
<topicref href="topics/ts_guest-core-format.dita"/>
</topicref>
<topicref href="topics/ts_general.dita">
<topicref href="topics/ts_config-periodic-flush.dita"/>
<topicref href="topics/ts_ide-sata-flush.dita"/>
<topicref href="topics/ts_host-freq-boost.dita"/>
<topicref href="topics/ts_host-freq-scaling.dita"/>
<topicref href="topics/ts_win-cpu-usage-rept.dita"/>
<topicref href="topics/ts_host-powermgmt.dita"/>
</topicref>
<topicref href="topics/ts_win-guests.dita">
<topicref href="topics/ts_win7-guest-usb3-support.dita"/>
<topicref href="topics/ts_win-guest-bluescreen.dita"/>
<topicref href="topics/ts_win-guest-bluescreen-smp.dita"/>
<topicref href="topics/ts_win2k-guest-install.dita"/>
<topicref href="topics/ts_win-guest-bluescreen-record-info.dita"/>
<topicref href="topics/ts_win-vista-guest-networking.dita"/>
<topicref href="topics/ts_win-guest-high-cpu.dita"/>
<topicref href="topics/ts_win-guest-shared-folders-access-delay.dita"/>
<topicref href="topics/ts_win98-guest-usb-tablet-coordinates.dita"/>
<topicref href="topics/ts_win-guest-active-dir-domain.dita"/>
<topicref href="topics/ts_win31-ram-limitations.dita"/>
</topicref>
<topicref href="topics/ts_lin-x11-guests.dita">
<topicref href="topics/ts_linux-guest-high-cpu.dita"/>
<topicref href="topics/ts_linux-buggy.dita"/>
<topicref href="topics/ts_linux-guest-x11-services.dita"/>
</topicref>
<topicref href="topics/ts_sol-guests.dita">
<topicref href="topics/ts_solaris-10-guest-slow-boot-smp.dita"/>
<topicref href="topics/ts_solaris-no-e1000-bm.dita"/>
</topicref>
<topicref href="topics/ts_win-hosts.dita">
<topicref href="topics/ts_win-dnd-uipi.dita"/>
<topicref href="topics/ts_win-host-com-server.dita"/>
<topicref href="topics/ts_win-host-cd-dvd-changes.dita"/>
<topicref href="topics/ts_win-host-rdp-client.dita"/>
<topicref href="topics/ts_win-host-iscsi.dita"/>
<topicref href="topics/ts_win-host-bridged-network-adapters.dita"/>
<topicref href="topics/ts_win-host-host-only-network-adapters.dita"/>
</topicref>
<topicref href="topics/ts_lin-hosts.dita">
<topicref href="topics/ts_linux-kernelmodule-fails-to-load.dita"/>
<topicref href="topics/ts_linux-host-cd-dvd-not-found.dita"/>
<topicref href="topics/ts_linux-host-ide-messages.dita"/>
<topicref href="topics/ts_linux-host-vboxsvc.dita"/>
<topicref href="topics/ts_usb-linux.dita"/>
<topicref href="topics/ts_linux-host-grsec.dita"/>
<topicref href="topics/ts_linux-host-malloc.dita"/>
</topicref>
<topicref href="topics/ts_sol-hosts.dita">
<topicref href="topics/ts_sol-host-zfs.dita"/>
</topicref>
</chapter>
<chapter href="topics/Security.dita" chunk="to-content">
<topicref href="topics/security-general.dita"/>
<topicref href="topics/security-secure-install.dita">
<topicref href="topics/security-secure-install-overview.dita"/>
<topicref href="topics/security-secure-install-postinstall.dita"/>
</topicref>
<topicref href="topics/security-features.dita">
<topicref href="topics/security-model.dita"/>
<topicref href="topics/secure-config-vms.dita">
<topicref href="topics/security-networking.dita"/>
<topicref href="topics/security-of-remote-vms.dita"/>
<topicref href="topics/security-vrdp-auth.dita"/>
<topicref href="topics/security_clipboard.dita"/>
<topicref href="topics/security-shared-folders.dita"/>
<topicref href="topics/security-cd-dvd-passthrough.dita"/>
<topicref href="topics/security-usb-passthrough.dita"/>
</topicref>
<topicref href="topics/auth-config-using.dita"/>
<topicref href="topics/pot-insecure.dita"/>
<topicref href="topics/security-encryption.dita"/>
</topicref>
<topicref href="topics/security-recommendations.dita">
<topicref href="topics/sec-rec-cve-2018-3646.dita">
<topicref href="topics/disable-nested-paging-mitigation.dita"/>
<topicref href="topics/flush-level1-data-cache-mitigation.dita"/>
</topicref>
<topicref href="topics/sec-rec-cve-2018-12126-et-al.dita">
<topicref href="topics/buffer-overwriting-mitigation.dita"/>
</topicref>
</topicref>
</chapter>
<chapter href="topics/KnownIssues.dita" chunk="to-content">
<topicref href="topics/ExperimentalFeatures.dita"/>
<topicref href="topics/KnownProblems.dita"/>
</chapter>
<!-- Change Log -->
<chapter href="topics/ChangeLog.dita" chunk="to-content">
<!-- This map file and all the topics it is referencing is generated from user_ChangeLogImpl.xml. -->
<topicref format="ditamap" href="topics/changelog-versions.ditamap"/>
<topicref href="topics/changelog-older.dita"/>
</chapter>
<!-- Third Party Licenses-->
<chapter href="topics/licensing/licensing_chapter.dita" chunk="to-content">
<topicref format="ditamap" href="topics/licensing/licensing.ditamap"/>
</chapter>
<chapter href="topics/privacy.dita" chunk="to-content"/>
<chapter href="topics/Glossary.dita" chunk="to-content">
<topicref toc="no" href="topics/glossentry-acpi.dita"/>
<topicref toc="no" href="topics/glossentry-ahci.dita"/>
<topicref toc="no" href="topics/glossentry-amdv.dita"/>
<topicref toc="no" href="topics/glossentry-api.dita"/>
<topicref toc="no" href="topics/glossentry-apic.dita"/>
<topicref toc="no" href="topics/glossentry-ata.dita"/>
<topicref toc="no" href="topics/glossentry-bios.dita"/>
<topicref toc="no" href="topics/glossentry-com.dita"/>
<topicref toc="no" href="topics/glossentry-dhcp.dita"/>
<topicref toc="no" href="topics/glossentry-efi.dita"/>
<topicref toc="no" href="topics/glossentry-ehci.dita"/>
<topicref toc="no" href="topics/glossentry-gui.dita"/>
<topicref toc="no" href="topics/glossentry-guid.dita"/>
<topicref toc="no" href="topics/glossentry-ioapic.dita"/>
<topicref toc="no" href="topics/glossentry-ide.dita"/>
<topicref toc="no" href="topics/glossentry-iscsi.dita"/>
<topicref toc="no" href="topics/glossentry-mac.dita"/>
<topicref toc="no" href="topics/glossentry-msi.dita"/>
<topicref toc="no" href="topics/glossentry-nat.dita"/>
<topicref toc="no" href="topics/glossentry-ovf.dita"/>
<topicref toc="no" href="topics/glossentry-pae.dita"/>
<topicref toc="no" href="topics/glossentry-pic.dita"/>
<topicref toc="no" href="topics/glossentry-pxe.dita"/>
<topicref toc="no" href="topics/glossentry-rdp.dita"/>
<topicref toc="no" href="topics/glossentry-sas.dita"/>
<topicref toc="no" href="topics/glossentry-sata.dita"/>
<topicref toc="no" href="topics/glossentry-scsi.dita"/>
<topicref toc="no" href="topics/glossentry-smp.dita"/>
<topicref toc="no" href="topics/glossentry-ssd.dita"/>
<topicref toc="no" href="topics/glossentry-tar.dita"/>
<topicref toc="no" href="topics/glossentry-uuid.dita"/>
<topicref toc="no" href="topics/glossentry-vm.dita"/>
<topicref toc="no" href="topics/glossentry-vmm.dita"/>
<topicref toc="no" href="topics/glossentry-vrde.dita"/>
<topicref toc="no" href="topics/glossentry-vrdp.dita"/>
<topicref toc="no" href="topics/glossentry-vtx.dita"/>
<topicref toc="no" href="topics/glossentry-xhci.dita"/>
<topicref toc="no" href="topics/glossentry-xml.dita"/>
<topicref toc="no" href="topics/glossentry-xpcom.dita"/>
</chapter>
</bookmap>

View file

@ -0,0 +1,31 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="vbox-conkeyref-phrases">
<title>ConKeyRef Phrases for VirtualBox</title>
<body>
<p>
<ph id="product-name">Oracle VirtualBox</ph>
</p>
<p>
<ph id="product-version">7.1</ph>
</p>
<p>
<ph id="vbox-mgr">VirtualBox Manager</ph>
</p>
<p>
<ph id="vbox-base">Oracle VirtualBox Base Package</ph>
</p>
<p>
<ph id="vbox-ext">Oracle VirtualBox Extension Pack</ph>
</p>
<p>
<ph id="oci">Oracle Cloud Infrastructure</ph>
</p>
<p>
<ph id="company-name">Oracle</ph>
</p>
<p>
<ph id="oci-console">Oracle Cloud Console</ph>
</p>
</body>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map>
<title>ConKeyRef Definitions for VirtualBox</title>
<keydef keys="vbox-conkeyref-phrases" href="conkeyref_phrases.dita"/>
</map>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<val>
<prop action="include" att="platform" val="htmlhelp"/>
<prop action="exclude" att="platform" val="ohc"/>
</val>

View file

@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<val>
<prop action="exclude" att="platform" val="htmlhelp"/>
<prop action="include" att="platform" val="ohc"/>
</val>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="AdvancedTopics">
<title>Advanced Topics</title>
<body/>
</topic>

View file

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="BasicConcepts">
<title>Configuring Virtual Machines</title>
<body>
<p>This chapter provides detailed steps for configuring an <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
virtual machine (VM). For an introduction to <ph conkeyref="vbox-conkeyref-phrases/product-name"/> and steps to
get your first virtual machine running, see <xref href="Introduction.dita#Introduction"/>. </p>
<p>You have considerable latitude when deciding what virtual hardware to provide to the guest. Use virtual hardware
to communicate with the host system or with other guests. For example, you can use virtual hardware in the
following ways: </p>
<ul>
<li>
<p>Have <ph conkeyref="vbox-conkeyref-phrases/product-name"/> present an ISO CD-ROM image to a guest system as
if it were a physical CD-ROM. </p>
</li>
<li>
<p>Provide a guest system access to the physical network through its virtual network card. </p>
</li>
<li>
<p>Provide the host system, other guests, and computers on the Internet access to the guest system. </p>
</li>
</ul>
</body>
</topic>

View file

@ -0,0 +1,23 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="ChangeLog">
<title>Change Log</title>
<body>
<p>
This section summarizes the changes between <ph conkeyref="vbox-conkeyref-phrases/product-name"/> versions.
Note that this change log is not exhaustive and not all changes are
listed.
</p>
<p>
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> version numbers consist of three numbers separated by
dots where the first and second number represent the major version
and the third number the minor version. Minor version numbers of
official releases are always even. An odd minor version number
represents an internal development or test build. In addition, each
build contains a revision number.
</p>
</body>
</topic>

View file

@ -0,0 +1,41 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="ExperimentalFeatures">
<title>Experimental Features</title>
<body>
<p> Some <ph conkeyref="vbox-conkeyref-phrases/product-name"/> features are labeled as experimental. Such features are provided on an "as-is" basis and are not formally supported. However, feedback and suggestions about such features are welcome. A comprehensive list of experimental features is as follows: </p>
<ul>
<li>
<p>
Hardware 3D acceleration support for Windows, Linux, and
Oracle Solaris guests
</p>
</li>
<li>
<p>
Mac OS X guests (macOS hosts only)
</p>
</li>
<li>
<p>
ICH9 chipset emulation
</p>
</li>
<li>
<p>
Host CD/DVD drive passthrough
</p>
</li>
<li>
<p>
Support of iSCSI using internal networking
</p>
</li>
<li>
<p> Using <ph conkeyref="vbox-conkeyref-phrases/product-name"/> and Hyper-V on the same host </p>
</li>
</ul>
</body>
</topic>

View file

@ -0,0 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="Glossary">
<title>Glossary</title>
<body>
<p>This chapter describes some terms and abbreviations used in this document.</p>
</body>
</topic>

View file

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="Introduction">
<title>First Steps</title>
<body>
<p>Welcome to <ph conkeyref="vbox-conkeyref-phrases/product-name"/>.</p>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> is a cross-platform virtualization application. That means
it extends the capabilities of your existing computer so that it can run multiple operating systems, inside
multiple virtual machines (VMs), at the same time. As an example, you can run Windows and Linux on your Mac, run
Windows Server on your Linux server, run Linux on your Windows PC, and so on, all alongside your existing
applications. You can install and run as many virtual machines as you like. The only practical limits are disk
space and memory.</p>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> is deceptively simple yet also very powerful. It can run
everywhere from small embedded systems or desktop class machines all the way up to data center deployments and
even Cloud environments. </p>
<p>In this User Guide, we will begin simply with a quick introduction to virtualization and how to get your first
virtual machine running with the easy-to-use <ph conkeyref="vbox-conkeyref-phrases/product-name"/> graphical user
interface. Subsequent chapters will go into much more detail covering more powerful tools and features, but
fortunately, it is not necessary to read the entire User Guide before you can use <ph
conkeyref="vbox-conkeyref-phrases/product-name"/>. </p>
<p>You can find a summary of <ph conkeyref="vbox-conkeyref-phrases/product-name"/>'s capabilities in <xref
href="features-overview.dita#features-overview"/>. For existing <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> users who just want to find out what is new in this release,
see the <xref href="https://docs.oracle.com/en/virtualization/virtualbox/7.0/relnotes/relnotes-ChangeLog.html"
format="html" scope="external">Change Log</xref>. </p>
</body>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="KnownIssues">
<title>Known Limitations</title>
<body/>
</topic>

View file

@ -0,0 +1,234 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="KnownProblems">
<title>Known Issues</title>
<body>
<p>The following section describes known problems with this release of <ph
conkeyref="vbox-conkeyref-phrases/product-name"/>. Unless marked otherwise, these issues are planned to be fixed
in later releases. </p>
<ul>
<li>Saved states and online snapshots created on Arm VMs in <ph conkeyref="vbox-conkeyref-phrases/product-name"/> 7.1 will not be usable in later releases. Saved states within 7.1 are working as expected.</li>
<li>Internal networking on macOS hosts doesn't work between VMs run by different users.</li>
<li>
<p>Poor performance when using <ph conkeyref="vbox-conkeyref-phrases/product-name"/> and <b outputclass="bold"
>Hyper-V</b> on the same host. To fix this, certain Windows features like "Hyper-V Platform", "Virtual
Machine Platform" and "Windows Hypervisor Platform" must be turned off, followed by a host reboot. </p>
<p>On newer Windows versions, enabling the device security features Core Isolation or Memory Integrity will use Hyper-V, even if you had previously turned it off.</p>
<p>Additionally, the Microsoft Device Guard and Credential Guard hardware readiness tool might have to be used
in order to turn off more features. For example, by running the following command: </p>
<pre xml:space="preserve">.\DG_Readiness_Tool_vX.X.ps1 -Disable -AutoReboot</pre>
<note>
<p>Disabling Device Guard and Credential Guard features will have an impact on the overall security of the
host. Please contact your Administrator beforehand regarding this. </p>
</note>
</li>
<li>
<p>
The following <b outputclass="bold">Guest SMP (multiprocessor)
limitations</b> exist:
</p>
<ul>
<li>
<p><b outputclass="bold">Poor performance</b> with
32-bit guests on AMD CPUs. This affects mainly Windows and
Oracle Solaris guests, but possibly also some Linux kernel
revisions. Partially solved for 32-bit Windows NT, 2000,
XP, and 2003 guests. Requires the Guest Additions to be
installed.
</p>
</li>
<li>
<p><b outputclass="bold">Poor performance</b> with
32-bit guests on certain Intel CPU models that do not
include virtual APIC hardware optimization support. This
affects mainly Windows and Oracle Solaris guests, but
possibly also some Linux kernel revisions. Partially
solved for 32-bit Windows NT, 2000, XP, and 2003 guests.
Requires the Guest Additions to be installed.
</p>
</li>
</ul>
</li>
<li>
<p><b outputclass="bold">NX (no execute, data execution
prevention)</b> only works for guests running on 64-bit
hosts and requires that hardware virtualization be enabled.
</p>
</li>
<li>
<p><b outputclass="bold">Guest control.</b> On Windows
guests, a process started using the guest control execute
support will not be able to display a graphical user interface
<i>unless</i> the user account under which it is
running is currently logged in and has a desktop session.
</p>
<p>Also, to use accounts without or with an empty password, the guest's group policy must be changed. To do so,
open the group policy editor on the command line by typing <userinput>gpedit.msc</userinput>, open the key
<codeph>Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options</codeph>
and change the value of <codeph>Accounts: Limit local account use of blank passwords to console logon
only</codeph> to Disabled. </p>
</li>
<li>
<p><b outputclass="bold">Compacting virtual disk images is
limited to VDI files.</b> The <userinput>VBoxManage
modifymedium --compact</userinput> command is currently only
implemented for VDI files. At the moment the only way to
optimize the size of a virtual disk images in other formats,
such as VMDK or VHD, is to clone the image and then use the
cloned image in the VM configuration.
</p>
</li>
<li>
<p><b outputclass="bold">OVF import/export:</b>
</p>
<ul>
<li>
<p>OVF localization, with multiple languages in a single OVF file, is not yet supported. </p>
</li>
<li>
<p>Some OVF sections like StartupSection, DeploymentOptionSection, and InstallSection are ignored. </p>
</li>
<li>
<p>OVF environment documents, including their property sections and appliance configuration with ISO images,
are not yet supported. </p>
</li>
<li>
<p>Remote files using HTTP or other mechanisms are not yet supported. </p>
</li>
</ul>
</li>
<li>
<p>The RDP server in the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> extension pack supports only
audio streams in format 22.05kHz stereo 16-bit. If the RDP client requests any other audio format there will
be no audio. </p>
</li>
<li>
<p>Preserving the aspect ratio in scale mode works only on Windows hosts and on macOS hosts. </p>
</li>
<li>
<p>On <b outputclass="bold">macOS hosts</b>, the following features are not yet implemented: </p>
<ul>
<li>
<p>
Numlock emulation
</p>
</li>
<li>
<p>
CPU frequency metric
</p>
</li>
<li>
<p>
Memory ballooning
</p>
</li>
</ul>
</li>
<li>
<p><b outputclass="bold">macOS/Arm 64 (Apple silicon) host package</b>
<ul id="ul_ddr_kzn_hcc">
<li>
<p>x86-based guest operating systems will not run.</p>
</li>
<li>
<p>Arm(AArch64) guests only. Arm 32 is not supported at present.</p>
</li>
<li>
<p>Arm hosts have limitations with sound, storage, graphics, guest additions and unattended
installation.</p>
</li>
</ul></p>
</li>
<li>
<p><b outputclass="bold">Mac OS X guests:</b>
</p>
<ul>
<li>
<p>Mac OS X guests can only run on a certain host hardware. For details about license and host hardware
limitations. See <xref href="intro-macosxguests.dita">Mac OS X Guests</xref> and check the Apple software
license conditions. </p>
</li>
<li>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> does not provide Guest Additions for Mac OS X at
this time. </p>
</li>
<li>
<p>The graphics resolution currently defaults to 1024x768 as Mac OS X falls back to the built-in EFI display
support. See <xref href="efividmode.dita">Video Modes in EFI</xref> for more information on how to change
EFI video modes. </p>
</li>
<li>
<p>Mac OS X guests only work with one CPU assigned to the VM. Support for SMP will be provided in a future
release. </p>
</li>
<li>
<p>Depending on your system and version of Mac OS X, you might experience guest hangs after some time. This
can be fixed by turning off energy saving. Set the timeout to "Never" in the system preferences. </p>
</li>
<li>
<p>By default, the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> EFI enables debug output of the Mac
OS X kernel to help you diagnose boot problems. Note that there is a lot of output and not all errors are
fatal. They would also show when using a physical Apple Macintosh computer. You can turn off these
messages by using the following command: </p>
<pre xml:space="preserve">$ VBoxManage setextradata <varname>VM-name</varname> "VBoxInternal2/EfiBootArgs" " "</pre>
<p>
To revert to the previous behavior, use the following
command:
</p>
<pre xml:space="preserve">$ VBoxManage setextradata <varname>VM-name</varname> "VBoxInternal2/EfiBootArgs" ""</pre>
</li>
<li>
<p>It is currently not possible to start a Mac OS X guest in safe mode by specifying the <codeph>-x</codeph>
option in <codeph>VBoxInternal2/EfiBootArgs</codeph> extradata. </p>
</li>
</ul>
</li>
<li>
<p>
<b outputclass="bold">Oracle Solaris hosts:</b>
</p>
<ul>
<li>
<p>USB support on Oracle Solaris hosts requires Oracle Solaris 11 FCS or later. Webcams and other isochronous devices are known to have poor performance. </p>
</li>
<li>
<p>Host Webcam passthrough is restricted to 640x480 frames at 20 frames per second due to limitations in the
Oracle Solaris V4L2 API. This may be addressed in a future Oracle Solaris release. </p>
</li>
<li>
<p>No ACPI information, such as battery status or power source, is reported to the guest. </p>
</li>
<li>
<p>No support for using wireless adapters with bridged networking. </p>
</li>
<li>
<p>Crossbow-based bridged networking on Oracle Solaris 11 hosts does not work directly with aggregate links. However, you can use <userinput>dladm</userinput> to manually create a VNIC over the aggregate link and use that with a VM. This limitation does not exist in Oracle Solaris 11 update 1 (11.1) and later. </p>
</li>
</ul>
</li>
<li>
<p>Neither virtio nor Intel PRO/1000 drivers for <b outputclass="bold">Windows XP guests</b> support
segmentation offloading. Therefore Windows XP guests have slower transmission rates comparing to other guest
types. Refer to MS Knowledge base article 842264 for additional information. </p>
</li>
<li>
<p><b outputclass="bold">Guest Additions for OS/2.</b>
Seamless windows and automatic guest resizing will probably
never be implemented due to inherent limitations of the OS/2
graphics system.
</p>
</li>
<li>
<p>Some guest operating systems predating ATAPI CD-ROMs may exhibit long delays or entirely fail to boot in
certain configurations. This is most likely to happen when an IDE/ATAPI CD-ROM exists alone on a primary or
secondary IDE channel. </p>
<p>Affected operating systems are MS OS/2 1.21: fails to boot with an error message referencing COUNTRY.SYS and
MS OS/2 1.3: long boot delays. To avoid such problems, disable the emulated IDE/ATAPI CD-ROM. The guest OS
cannot use this device, anyway. </p>
</li>
</ul>
</body>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="Security">
<title>Security Guide</title>
<body/>
</topic>

View file

@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="TechnicalBackground">
<title>Technical Background</title>
<body>
<p> This chapter provides additional information for readers who are familiar with computer
architecture and technology and want to find out more about how <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> works <i>under the hood</i>. The contents
of this chapter are not required reading in order to use <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> successfully. </p>
</body>
</topic>

View file

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="Troubleshooting">
<title>Troubleshooting</title>
<body>
<p>
This chapter provides answers to commonly asked questions. In order
to improve your user experience with <ph conkeyref="vbox-conkeyref-phrases/product-name"/>, it is
recommended to read this section to learn more about common pitfalls
and get recommendations on how to use the product.
</p>
</body>
</topic>

View file

@ -0,0 +1,20 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="VirtualBoxAPI">
<title><ph conkeyref="vbox-conkeyref-phrases/product-name"/> Programming Interfaces</title>
<body>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> comes with comprehensive support for third-party
developers. The so-called <i>Main API</i> of <ph conkeyref="vbox-conkeyref-phrases/product-name"/> exposes the
entire feature set of the virtualization engine. It is completely documented and available to anyone who wants to
control <ph conkeyref="vbox-conkeyref-phrases/product-name"/> programmatically. </p>
<p>The Main API is made available to C++ clients through COM on Windows hosts or XPCOM on other hosts. Bridges also
exist for SOAP, Java and Python. </p>
<p>All programming information such as documentation, reference information, header and other interface files, as
well as samples have been split out to a separate <b outputclass="bold">Software Development Kit (SDK)</b>. The
SDK is available for download from <ph>http://www.virtualbox.org</ph>. In particular, the SDK comes with a
Programming Guide and Reference manual in PDF format. This manual contains, among other things, the information
that was previously in this chapter of the User Guide. </p>
</body>
</topic>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="add_vm">
<title>Adding Virtual Machines</title>
<body>
<p>
<ul id="ul_bwt_wjn_ccc">
<li>If you want to create a completely new VM, click <uicontrol>New</uicontrol> and follow the steps in
<xref href="create-vm-wizard.dita"/>.</li>
<li>If you already have a VM saved on your machine, you can add it to the machine list by clicking
<uicontrol>Add</uicontrol>.</li>
<li>If you have a VM on a different machine, you can import it by clicking <uicontrol>Import
Appliance</uicontrol>. See <xref href="ovf-import-appliance.dita"/>.</li>
<li>If you want to view an OCI instance from within <ph conkeyref="vbox-conkeyref-phrases/vbox-mgr"/>,
see <xref href="cloud-vm-add.dita"/>.</li>
</ul>
</p>
</body>
</topic>

View file

@ -0,0 +1,47 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="addhostonlysolaris">
<title>Configuring Multiple Host-Only Network Interfaces on Oracle Solaris
Hosts</title>
<body>
<p>By default <ph conkeyref="vbox-conkeyref-phrases/product-name"/> provides you with one host-only network
interface. Adding more host-only network interfaces on Oracle Solaris hosts requires manual configuration. Here is
how to add another host-only network interface. </p>
<p>Begin by stopping all running VMs. Then, unplumb the existing "vboxnet0" interface by execute the following
command as root: </p>
<pre xml:space="preserve"># ifconfig vboxnet0 unplumb</pre>
<p>If you have several vboxnet interfaces, you will need to unplumb all of them. Once all vboxnet interfaces are
unplumbed, remove the driver by executing the following command as root: </p>
<pre xml:space="preserve"># rem_drv vboxnet</pre>
<p>Edit the file <filepath>/platform/i86pc/kernel/drv/vboxnet.conf</filepath> and add a line for the new interface
we want to add as shown below: </p>
<pre xml:space="preserve">name="vboxnet" parent="pseudo" instance=1;
name="vboxnet" parent="pseudo" instance=2;</pre>
<p>Add as many of these lines as required with each line having a unique instance number. </p>
<p>Next, reload the vboxnet driver by executing the following command as root: </p>
<pre xml:space="preserve"># add_drv vboxnet</pre>
<p>On Oracle Solaris 11.1 and newer hosts you may want to rename the default vanity interface name. To check what
name has been assigned, execute: </p>
<pre xml:space="preserve">$ dladm show-phys
LINK MEDIA STATE SPEED DUPLEX DEVICE
net0 Ethernet up 100 full e1000g0
net2 Ethernet up 1000 full vboxnet1
net1 Ethernet up 1000 full vboxnet0</pre>
<p>
In the above example, we can rename "net2" to "vboxnet1" before
proceeding to plumb the interface. This can be done by executing
as root:
</p>
<pre xml:space="preserve"># dladm rename-link net2 vboxnet1</pre>
<p>Now plumb all the interfaces using <userinput>ifconfig vboxnet<varname>X</varname> plumb</userinput>, where
<varname>X</varname> would be 1 in this case. Once the interface is plumbed, it may be configured like any other
network interface. Refer to the <userinput>ifconfig</userinput> documentation for further details. </p>
<p>To make the settings for the newly added interfaces persistent across reboots, you will need to edit the files
<filepath>/etc/inet/netmasks</filepath>, and if you are using NWAM <filepath>/etc/nwam/llp</filepath> and add
the appropriate entries to set the netmask and static IP for each of those interfaces. The <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> installer only updates these configuration files for the one
"vboxnet0" interface it creates by default. </p>
</body>
</topic>

View file

@ -0,0 +1,56 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux-graphics-mouse">
<title>Graphics and Mouse Integration</title>
<body>
<p>In Linux and Oracle Solaris guests, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> graphics and mouse
integration goes through the X Window System. <ph conkeyref="vbox-conkeyref-phrases/product-name"/> can use the
X.Org variant of the system, or XFree86 version 4.3 which is identical to the first X.Org release. During the
installation process, the X.Org display server will be set up to use the graphics and mouse drivers which come
with the Guest Additions. </p>
<p>After installing the Guest Additions into a fresh installation of a supported Linux distribution or Oracle
Solaris system, many unsupported systems will work correctly too, the guest's graphics mode will change to fit the
size of the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> window on the host when it is resized. You can
also ask the guest system to switch to a particular resolution by sending a video mode hint using the
<userinput>VBoxManage</userinput> tool. </p>
<p>Multiple guest monitors are supported in guests using the X.Org server version 1.3, which is part of release 7.3
of the X Window System version 11, or a later version. The layout of the guest screens can be adjusted as needed
using the tools which come with the guest operating system. </p>
<p>If you want to understand more about the details of how the X.Org drivers are set up, in particular if you want
to use them in a setting which our installer does not handle correctly, see <xref href="guestxorgsetup.dita">Guest
Graphics and Mouse Driver Setup in Depth</xref>. </p>
<p>Starting from <ph conkeyref="vbox-conkeyref-phrases/product-name"/> 7, Linux guest screen resize functionality
for guests running VMSVGA graphics configuration has been changed. Since then, this functionality consists of a
standalone daemon called VBoxDRMClient and its Desktop Environment helper counterpart. </p>
<p>VBoxDRMClient runs as a root process and is a bridge between the host and the guest's vmwgfx driver. This means
that VBoxDRMClient listens to screen resize hints from the host and forwards them to the vmwgfx driver. This
enables guest screen resize functionality to be available before the user has performed a graphical login. </p>
<p>In order to perform Desktop Environment specific actions, such as setting the primary screen in a multimonitor
setup, a Desktop Environment helper is used. Once the user has performed a graphical login operation, the helper
daemon starts with user session scope and attempts to connect to VBoxDRMClient using an IPC connection. When
VBoxDRMClient has received a corresponding command from the host, it is forwarded to the helper daemon over IPC
and the action is then performed. </p>
<p>By default, VBoxDRMClient allows any process to connect to its IPC socket. This can be restricted by using the
following steps: </p>
<ol>
<li>
<p>The Guest Additions Linux installer creates a <codeph>vboxdrmipc</codeph> user group. A corresponding user
needs to be added to this group. </p>
</li>
<li>
<p>You must set the <codeph>DRMIpcRestricted</codeph> guest property, as follows: </p>
<pre xml:space="preserve">VBoxManage guestproperty set "VM name" /VirtualBox/GuestAdd/DRMIpcRestricted 1 \
--flags RDONLYGUEST</pre>
<p>It is important to set only the RDONLYGUEST flag for the property, so that it cannot be changed from inside
the guest. </p>
</li>
</ol>
<note>
<p>Both steps are required. If one of them is missing, all processes will have access to the IPC socket. </p>
</note>
<p>Restricted mode can be disabled by unsetting the guest property, as follows: </p>
<pre xml:space="preserve">VBoxManage guestproperty unset "VM name" /VirtualBox/GuestAdd/DRMIpcRestricted</pre>
</body>
</topic>

View file

@ -0,0 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux-install-unattended">
<title>Unattended Installation of the Linux Guest Additions</title>
<body>
<p>
You can configure unattended installation of the
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions when you create a new VM using
the <b outputclass="bold">Create Virtual Machine</b>
wizard. Select the <b outputclass="bold">Guest
Additions</b> check box on the
<b outputclass="bold">Unattended Guest OS Install</b>
page of the wizard.
</p>
<p>
Guest Additions are installed automatically, following
completion of the guest OS installation.
</p>
</body>
</topic>

View file

@ -0,0 +1,55 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux-install">
<title>Installing the Linux Guest Additions</title>
<body>
<p>
The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions for Linux are provided on
the same virtual CD-ROM file as the Guest Additions for
Windows. See <xref href="mountingadditionsiso.dita#mountingadditionsiso"/>. They also
come with an installation program that guides you through the
setup process. However, due to the significant differences
between Linux distributions, installation may be slightly more
complex when compared to Windows.
</p>
<p>
Installation generally involves the following steps:
</p>
<ol>
<li>
<p>
Before installing the Guest Additions, you prepare your
guest system for building external kernel modules. This
works as described in
<xref href="externalkernelmodules.dita#externalkernelmodules"/>, except that this
step must be performed in your Linux
<i>guest</i> instead of on a Linux host
system.
</p>
<p>
If you suspect that something has gone wrong, check that
your guest is set up correctly and run the following
command as root:
</p>
<pre xml:space="preserve">rcvboxadd setup</pre>
</li>
<li>
<p>
Insert the <filepath>VBoxGuestAdditions.iso</filepath> CD
file into your Linux guest's virtual CD-ROM drive, as
described for a Windows guest in
<xref href="mountingadditionsiso.dita#mountingadditionsiso"/>.
</p>
</li>
<li>
<p>
Change to the directory where your CD-ROM drive is mounted
and run the following command as root:
</p>
<pre xml:space="preserve">sh ./VBoxLinuxAdditions.run</pre>
</li>
</ol>
</body>
</topic>

View file

@ -0,0 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux-uninstall">
<title>Uninstalling the Linux Guest Additions</title>
<body>
<p>If you have a version of the Guest Additions installed on your virtual machine and want to remove it without
installing new ones, you can do so by inserting the Guest Additions CD image into the virtual CD-ROM drive as
described above. Then run the installer for the current Guest Additions with the <codeph>uninstall</codeph>
parameter from the path that the CD image is mounted on in the guest, as follows: </p>
<pre xml:space="preserve">sh ./VBoxLinuxAdditions.run uninstall</pre>
<p>While this will normally work without issues, you may need to do some manual cleanup of the guest in some cases,
especially of the XFree86Config or xorg.conf file. In particular, if the Additions version installed or the guest
operating system were very old, or if you made your own changes to the Guest Additions setup after you installed
them. </p>
<p>You can uninstall the Additions as follows: </p>
<pre xml:space="preserve">/opt/VBoxGuestAdditions-<varname>version</varname>/uninstall.sh</pre>
<p>Replace <filepath>/opt/VBoxGuestAdditions-<varname>version</varname></filepath> with the correct Guest Additions
installation directory. </p>
</body>
</topic>

View file

@ -0,0 +1,12 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux-updating">
<title>Updating the Linux Guest Additions</title>
<body>
<p>The Guest Additions can simply be updated by going through the installation procedure again with an updated
CD-ROM image. This will replace the drivers with updated versions. You should reboot after updating the Guest
Additions. </p>
</body>
</topic>

View file

@ -0,0 +1,65 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-linux">
<title>Guest Additions for Linux</title>
<body>
<p>
Like the Windows Guest Additions, the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest
Additions for Linux are a set of device drivers and system
applications which may be installed in the guest operating
system.
</p>
<p>
The following Linux distributions are officially supported:
</p>
<ul>
<li>
<p>
Oracle Linux as of version 5, including UEK kernels
</p>
</li>
<li>
<p>
Fedora as of Fedora Core 4
</p>
</li>
<li>
<p>
Red Hat Enterprise Linux as of version 3
</p>
</li>
<li>
<p>
SUSE and openSUSE Linux as of version 9
</p>
</li>
<li>
<p>
Ubuntu as of version 5.10
</p>
</li>
</ul>
<p>
Many other distributions are known to work with the Guest
Additions.
</p>
<p>
The version of the Linux kernel supplied by default in SUSE and
openSUSE 10.2, Ubuntu 6.10 (all versions) and Ubuntu 6.06
(server edition) contains a bug which can cause it to crash
during startup when it is run in a virtual machine. The Guest
Additions work in those distributions.
</p>
<p> Note that some Linux distributions already come with all or part of the <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions. You may choose to keep
the distribution's version of the Guest Additions but these are often out of date and limited
in functionality, so we recommend replacing them with the Guest Additions that come with <ph
conkeyref="vbox-conkeyref-phrases/product-name"/>. The <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Linux Guest Additions installer tries to
detect an existing installation and replace them but depending on how the distribution
integrates the Guest Additions, this may require some manual interaction. It is highly
recommended to take a snapshot of the virtual machine before replacing preinstalled Guest
Additions. </p>
</body>
</topic>

View file

@ -0,0 +1,27 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-os2">
<title>Guest Additions for OS/2</title>
<body>
<p>
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> also ships with a set of drivers that improve
running OS/2 in a virtual machine. Due to restrictions of OS/2
itself, this variant of the Guest Additions has a limited
feature set. See <xref href="KnownIssues.dita">Known Limitations</xref> for details.
</p>
<p>
The OS/2 Guest Additions are provided on the same ISO CD-ROM as
those for the other platforms. Mount the ISO in OS/2 as
described previously. The OS/2 Guest Additions are located in
the directory <filepath>\OS2</filepath>.
</p>
<p>
We do not provide an automatic installer at this time. See the
<filepath>readme.txt</filepath> file in the CD-ROM directory,
which describes how to install the OS/2 Guest Additions
manually.
</p>
</body>
</topic>

View file

@ -0,0 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-solaris-install-unattended">
<title>Unattended Installation of the Oracle Solaris Guest Additions</title>
<body>
<p>
You can configure unattended installation of the
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions when you create a new VM using
the <b outputclass="bold">Create Virtual Machine</b>
wizard. Select the <b outputclass="bold">Guest
Additions</b> check box on the
<b outputclass="bold">Unattended Guest OS Install</b>
page of the wizard.
</p>
<p>
Guest Additions are installed automatically, following
completion of the guest OS installation.
</p>
</body>
</topic>

View file

@ -0,0 +1,49 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-solaris-install">
<title>Installing the Oracle Solaris Guest Additions</title>
<body>
<p>
The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions for Oracle Solaris are
provided on the same ISO CD-ROM as the Additions for Windows
and Linux. They come with an installation program that guides
you through the setup process.
</p>
<p>
Installation involves the following steps:
</p>
<ol>
<li>
<p>
Mount the <filepath>VBoxGuestAdditions.iso</filepath> file
as your Oracle Solaris guest's virtual CD-ROM drive,
exactly the same way as described for a Windows guest in
<xref href="mountingadditionsiso.dita#mountingadditionsiso"/>.
</p>
<p>
If the CD-ROM drive on the guest does not get mounted, as
seen with some versions of Oracle Solaris 10, run the
following command as root:
</p>
<pre xml:space="preserve">svcadm restart volfs</pre>
</li>
<li>
<p>
Change to the directory where your CD-ROM drive is mounted
and run the following command as root:
</p>
<pre xml:space="preserve">pkgadd -G -d ./VBoxSolarisAdditions.pkg</pre>
</li>
<li>
<p>
Choose <b outputclass="bold">1</b> and confirm
installation of the Guest Additions package. After the
installation is complete, log out and log in to X server
on your guest, to activate the X11 Guest Additions.
</p>
</li>
</ol>
</body>
</topic>

View file

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-solaris-uninstall">
<title>Uninstalling the Oracle Solaris Guest Additions</title>
<body>
<p>
The Oracle Solaris Guest Additions can be safely removed by
removing the package from the guest. Open a root terminal
session and run the following command:
</p>
<pre xml:space="preserve">pkgrm SUNWvboxguest</pre>
</body>
</topic>

View file

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-solaris-updating">
<title>Updating the Oracle Solaris Guest Additions</title>
<body>
<p>
The Guest Additions should be updated by first uninstalling
the existing Guest Additions and then installing the new ones.
Attempting to install new Guest Additions without removing the
existing ones is not possible.
</p>
</body>
</topic>

View file

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-solaris">
<title>Guest Additions for Oracle Solaris</title>
<body>
<p>
Like the Windows Guest Additions, the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest
Additions for Oracle Solaris take the form of a set of device
drivers and system applications which may be installed in the
guest operating system.
</p>
<p>
The following Oracle Solaris distributions are officially
supported:
</p>
<ul>
<li>
<p>
Oracle Solaris 11, including Oracle Solaris 11 Express
</p>
</li>
<li>
<p>
Oracle Solaris 10 4/08 and later
</p>
</li>
</ul>
<p>
Other distributions may work if they are based on comparable
software releases.
</p>
</body>
</topic>

View file

@ -0,0 +1,68 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-windows-install-unattended-certs">
<title>Installing Code Signing Certificates</title>
<body>
<p>To avoid popups when performing an unattended installation of the <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions, the code signing certificates used to sign
the drivers needs to be installed in the correct certificate stores on the guest operating system. Failure to do
this will cause a typical Windows installation to display multiple dialogs asking whether you want to install a
particular driver. </p>
<note>
<p>On some legacy Windows versions, such as Windows 2000 and Windows XP, the user intervention popups mentioned
above are always displayed, even after importing the Oracle certificates. </p>
</note>
<p>Installing the code signing certificates on a Windows guest can be done automatically. Use the
<filepath>VBoxCertUtil.exe</filepath> utility from the <filepath>cert</filepath> folder on the Guest Additions
installation CD. </p>
<p>Use the following steps: </p>
<ol>
<li>
<p>
Log in as Administrator on the guest.
</p>
</li>
<li>
<p>
Mount the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions .ISO.
</p>
</li>
<li>
<p>
Open a command line window on the guest and change to
the <filepath>cert</filepath> folder on the
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions CD.
</p>
</li>
<li>
<p>
Run the following command:
</p>
<pre xml:space="preserve">VBoxCertUtil.exe add-trusted-publisher vbox*.cer --root vbox*.cer</pre>
<p>
This command installs the certificates to the
certificate store. When installing the same certificate
more than once, an appropriate error will be displayed.
</p>
</li>
</ol>
<p>To allow for completely unattended guest installations, you can specify a command line parameter to the install
launcher: </p>
<pre xml:space="preserve">VBoxWindowsAdditions.exe /S</pre>
<p>This automatically installs the right files and drivers for the corresponding platform, either 32-bit or 64-bit. </p>
<note>
<p>By default on an unattended installation on a Vista or Windows 7 guest, there will be the XPDM graphics driver
installed. This graphics driver does not support Windows Aero / Direct3D on the guest. Instead, the WDDM
graphics driver needs to be installed. To select this driver by default, add the command line parameter
<codeph>/with_wddm</codeph> when invoking the Windows Guest Additions installer. This is only required for
Vista and Windows 7. </p>
</note>
<note>
<p>For Windows Aero to run correctly on a guest, the guest's VRAM size needs to be configured to at least 128 MB. </p>
</note>
<p>For more options regarding unattended guest installations, consult the command line help by using the command: </p>
<pre xml:space="preserve">VBoxWindowsAdditions.exe /?</pre>
</body>
</topic>

View file

@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-windows-install-unattended">
<title>Unattended Installation of the Windows Guest Additions</title>
<body>
<p>You can configure unattended installation of the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Guest
Additions when you create a new VM using the <b outputclass="bold">Create Virtual Machine</b> wizard. Select the
<b outputclass="bold">Guest Additions</b> check box on the <b outputclass="bold">Unattended Guest OS Install</b>
page of the wizard. </p>
<p>Guest Additions are installed automatically, following completion of the guest OS installation. </p>
</body>
</topic>

View file

@ -0,0 +1,36 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-windows-updating">
<title>Updating the Windows Guest Additions</title>
<body>
<p>
Windows Guest Additions can be updated by running the
installation program again. This replaces the previous
Additions drivers with updated versions.
</p>
<p>
Alternatively, you can also open the Windows Device Manager
and select <b outputclass="bold">Update Driver...</b>
for the following devices:
</p>
<ul>
<li>
<p>
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> Graphics Adapter
</p>
</li>
<li>
<p>
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> System Device
</p>
</li>
</ul>
<p>
For each, choose the option to provide your own driver, click
<b outputclass="bold">Have Disk</b> and navigate to the
CD-ROM drive with the Guest Additions.
</p>
</body>
</topic>

View file

@ -0,0 +1,97 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="additions-windows">
<title>Guest Additions for Windows</title>
<body>
<p>The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Windows Guest Additions are designed to be installed in
a virtual machine running a Windows operating system. The following versions of Windows guests are supported: </p>
<ul>
<li>
<p>
Microsoft Windows 11
</p>
</li>
<li>
<p>
Microsoft Windows Server 2022
</p>
</li>
<li>
<p>
Microsoft Windows 10 (all builds)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2019
</p>
</li>
<li>
<p>
Microsoft Windows Server 2016
</p>
</li>
<li>
<p>
Microsoft Windows 8.1 (all editions)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2012R2
</p>
</li>
<li>
<p>
Microsoft Windows 8 (all editions)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2012
</p>
</li>
<li>
<p>
Microsoft Windows 7 (all editions)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2008R2
</p>
</li>
<li>
<p>
Microsoft Windows Vista (all editions)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2008
</p>
</li>
<li>
<p>
Microsoft Windows XP (any service pack)
</p>
</li>
<li>
<p>
Microsoft Windows Server 2003 (any service pack)
</p>
</li>
<li>
<p>
Microsoft Windows 2000 (any service pack)
</p>
</li>
<li>
<p>
Microsoft Windows NT 4.0 (any service pack)
</p>
</li>
</ul>
</body>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="adv-config-linux-guest">
<title>Advanced Configuration for Linux and Oracle Solaris Guests</title>
<body/>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="adv-config-win-guest">
<title>Advanced Configuration for Windows Guests</title>
<body/>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="adv-display-config">
<title>Advanced Display Configuration</title>
<body/>
</topic>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="adv-storage-config">
<title>Advanced Storage Configuration</title>
<body/>
</topic>

View file

@ -0,0 +1,25 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="arm-host-limitations">
<title>Arm Host Limitations</title>
<body>
<p>The following limitations apply when using an Arm platform host:</p>
<ul><li><p>Virtual machines must use an Arm-based guest operating system. Running an x86-based guest operating
system on an Arm host platform is not supported. </p></li>
<li><p>Only VMSVGA is supported as a graphics controller.</p></li>
<li><p>Unattended installation isn't available.</p></li>
<li><p>The following <b>System</b> page settings aren't available for Arm guests:</p>
<ul><li><p><b>Motherboard tab:</b> Chipset, TPM</p></li>
<li><p><b>Processor tab:</b> Extended Features such as Enable PAE/NX, Enable Nested VT-x/AMD-V</p></li></ul></li>
<!-- <li>
<p>The following <b>System</b> page settings may not be available for x86 guests:</p>
<ul id="ul_zy2_r1b_t1c">
<li>
<p><b>Acceleration tab:</b> Nested Paging</p>
</li>
</ul>
</li> -->
</ul>
</body>
</topic>

View file

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="auth-config-using">
<title>Configuring and Using Authentication</title>
<body>
<p>
The following components of <ph conkeyref="vbox-conkeyref-phrases/product-name"/> can use passwords for
authentication:
</p>
<ul>
<li>
<p> When using remote iSCSI storage and the storage server requires authentication, an
initiator secret can optionally be supplied with the <userinput>VBoxManage
storageattach</userinput> command. As long as no settings password is provided, by using
the command line option <codeph>--settingspwfile</codeph>, then this secret is stored
<i>unencrypted</i> in the machine configuration and is therefore potentially readable on
the host. See <xref href="storage-iscsi.dita">iSCSI Servers</xref> and <xref
href="vboxmanage-storageattach.dita">VBoxManage storageattach</xref>. </p>
</li>
<li>
<p>
When using the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> web service to control an
<ph conkeyref="vbox-conkeyref-phrases/product-name"/> host remotely, connections to the web service
are authenticated in various ways. This is described in
detail in the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Software Development Kit (SDK)
reference. See <xref href="VirtualBoxAPI.dita#VirtualBoxAPI"/>.
</p>
</li>
</ul>
</body>
</topic>

View file

@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autologon">
<title>Automated Guest Logins</title>
<body>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> provides Guest Addition modules for Windows, Linux, and
Oracle Solaris to enable automated logins on the guest. </p>
<p>When a guest operating system is running in a virtual machine, it might be required to perform coordinated and
automated logins using credentials passed from the host. Credentials are user name, password, and domain name,
where each value might be empty. </p>
</body>
</topic>

View file

@ -0,0 +1,129 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autologon_unix">
<title>Automated Linux and UNIX Guest Logins</title>
<body>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> provides a custom PAM module (Pluggable Authentication
Module) which can be used to perform automated guest logins on platforms which support this framework. Virtually
all modern Linux and UNIX distributions rely on PAM. </p>
<p>For automated logins on Ubuntu, or Ubuntu-derived, distributions using LightDM as the display manager. See <xref
href="autologon_unix_lightdm.dita#autologon_unix_lightdm"/>. </p>
<p>The <filepath>pam_vbox.so</filepath> module itself <i>does not</i> do an actual verification of the credentials
passed to the guest OS. Instead it relies on other modules such as <filepath>pam_unix.so</filepath> or
<filepath>pam_unix2.so</filepath> down in the PAM stack to do the actual validation using the credentials
retrieved by <filepath>pam_vbox.so</filepath>. Therefore <filepath>pam_vbox.so</filepath> has to be on top of the
authentication PAM service list. </p>
<note>
<p>The <filepath>pam_vbox.so</filepath> module only supports the <codeph>auth</codeph> primitive. Other primitives
such as <codeph>account</codeph>, <codeph>session</codeph>, or <codeph>password</codeph> are not supported. </p>
</note>
<p>The <filepath>pam_vbox.so</filepath> module is shipped as part of the Guest Additions but it is not installed or
activated on the guest OS by default. In order to install it, it has to be copied from
<filepath>/opt/VBoxGuestAdditions-<varname>version</varname>/other/</filepath> to the security modules
directory. This is usually <filepath>/lib/security/</filepath> on 32-bit Linux guests or
<filepath>/lib64/security/</filepath> on 64-bit Linux guests. Please refer to your guest OS documentation for
the correct PAM module directory. </p>
<p>For example, to use <filepath>pam_vbox.so</filepath> with a Ubuntu Linux guest OS and the GNOME Desktop Manager
(GDM) to log in users automatically with the credentials passed by the host, configure the guest OS as follows: </p>
<ol>
<li>
<p>Copy the <filepath>pam_vbox.so</filepath> module to the security modules directory. In this case,
<filepath>/lib/security</filepath>. </p>
</li>
<li>
<p>Edit the PAM configuration file for GDM, found at <filepath>/etc/pam.d/gdm</filepath>. Add the line
<codeph>auth requisite pam_vbox.so</codeph> at the top. Additionally, in most Linux distributions there is a
file called <filepath>/etc/pam.d/common-auth</filepath>. This file is included in many other services, like
the GDM file mentioned above. There you also have to add the line <codeph>auth requisite pam_vbox.so</codeph>. </p>
</li>
<li>
<p>If authentication against the shadow database using <filepath>pam_unix.so</filepath> or
<filepath>pam_unix2.so</filepath> is required, the argument <codeph>try_first_pass</codeph> for
<filepath>pam_unix.so</filepath> or <codeph>use_first_pass</codeph> for <filepath>pam_unix2.so</filepath> is
needed in order to pass the credentials from the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> module
to the shadow database authentication module. For Ubuntu, this must be added to
<filepath>/etc/pam.d/common-auth</filepath>, to the end of the line referencing
<filepath>pam_unix.so</filepath>. This argument tells the PAM module to use credentials already present in
the stack, such as the ones provided by the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> PAM module. </p>
</li>
</ol>
<note type="caution">
<p>An incorrectly configured PAM stack can effectively prevent you from logging into your guest system. </p>
</note>
<p>To make deployment easier, you can pass the argument <codeph>debug</codeph> right after the
<filepath>pam_vbox.so</filepath> statement. Debug log output will then be recorded using syslog. </p>
<note>
<p>By default, <userinput>pam_vbox</userinput> does not wait for credentials to arrive from the host. When a login
prompt is shown, for example by GDM/KDM or the text console, and <userinput>pam_vbox</userinput> does not yet
have credentials it does not wait until they arrive. Instead the next module in the PAM stack, depending on the
PAM configuration, will have the chance for authentication. </p>
</note>
<p><userinput>pam_vbox</userinput> supports various guest property
parameters that are located in
<filepath>/VirtualBox/GuestAdd/PAM/</filepath>. These parameters
allow <userinput>pam_vbox</userinput> to wait for credentials to be
provided by the host and optionally can show a message while
waiting for those. The following guest properties can be set:
</p>
<ul>
<li>
<p><codeph>CredsWait</codeph>: Set to 1 if
<userinput>pam_vbox</userinput> should start waiting until
credentials arrive from the host. Until then no other
authentication methods such as manually logging in will be
available. If this property is empty or gets deleted no
waiting for credentials will be performed and
<userinput>pam_vbox</userinput> will act like before. This
property must be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>CredsWaitAbort</codeph>: Aborts waiting for
credentials when set to any value. Can be set from host and
the guest.
</p>
</li>
<li>
<p><codeph>CredsWaitTimeout</codeph>: Timeout, in seconds, to
let <userinput>pam_vbox</userinput> wait for credentials to
arrive. When no credentials arrive within this timeout,
authentication of <userinput>pam_vbox</userinput> will be set to
failed and the next PAM module in chain will be asked. If
this property is not specified, set to 0 or an invalid
value, an infinite timeout will be used. This property must
be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
</ul>
<p>
To customize <userinput>pam_vbox</userinput> further there are the
following guest properties:
</p>
<ul>
<li>
<p><codeph>CredsMsgWaiting</codeph>: Custom message showed
while pam_vbox is waiting for credentials from the host.
This property must be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>CredsMsgWaitTimeout</codeph>: Custom message
showed when waiting for credentials by
<userinput>pam_vbox</userinput> has timed out. For example, they
did not arrive within time. This property must be set
read-only for the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
</ul>
<note>
<p>If a <userinput>pam_vbox</userinput> guest property does not have the correct flag set
(<codeph>RDONLYGUEST</codeph>) the property is ignored and, depending on the property, a default value will be
used. This can result in pam_vbox not waiting for credentials. Consult the appropriate syslog file for more
information and use the <codeph>debug</codeph> option. </p>
</note>
</body>
</topic>

View file

@ -0,0 +1,118 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autologon_unix_lightdm">
<title><ph conkeyref="vbox-conkeyref-phrases/product-name"/> Greeter for Ubuntu/LightDM</title>
<body>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> comes with a greeter module, named
<userinput>vbox-greeter</userinput>, that can be used with LightDM. LightDM is the default display manager for
Ubuntu Linux and therefore can also be used for automated guest logins. </p>
<p><userinput>vbox-greeter</userinput> does not need the
<userinput>pam_vbox</userinput> module described in
<xref href="autologon_unix.dita#autologon_unix"/>in order to function. It comes
with its own authentication mechanism provided by LightDM.
However, to provide maximum flexibility both modules can be
used together on the same guest.
</p>
<p>As with the <userinput>pam_vbox</userinput> module, <userinput>vbox-greeter</userinput> is shipped as part of the
Guest Additions but it is not installed or activated on the guest OS by default. To install
<userinput>vbox-greeter</userinput> automatically upon Guest Additions installation, use the
<codeph>--with-autologon</codeph> option when starting the <userinput>VBoxLinuxAdditions.run</userinput> file: </p>
<pre xml:space="preserve"># ./VBoxLinuxAdditions.run -- --with-autologon</pre>
<p>For manual or postponed installation, copy the <filepath>vbox-greeter.desktop</filepath> file from
<filepath>/opt/VBoxGuestAdditions-<varname>version</varname>/other/</filepath> to the
<filepath>xgreeters</filepath> directory, which is usually <filepath>/usr/share/xgreeters/</filepath>. See your
guest OS documentation for the name of the correct LightDM greeter directory. </p>
<p>The <userinput>vbox-greeter</userinput> module is installed by the <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions installer and is located in
<filepath>/usr/sbin/</filepath>. To enable <userinput>vbox-greeter</userinput> as the standard greeter module,
edit the file <filepath>/etc/lightdm/lightdm.conf</filepath> as follows: </p>
<pre xml:space="preserve">[SeatDefaults]
greeter-session=vbox-greeter</pre>
<note>
<ul>
<li>
<p>The LightDM server must be fully restarted in order for <userinput>vbox-greeter</userinput> to be used as
the default greeter. As <codeph>root</codeph> on Ubuntu, run <userinput>service lightdm
--full-restart</userinput> or restart the guest. </p>
</li>
<li>
<p><userinput>vbox-greeter</userinput> is independent of the
graphical session you choose, such as Gnome, KDE, or
Unity. However, <userinput>vbox-greeter</userinput> does
require FLTK 1.3 or later to implement its own user
interface.
</p>
</li>
</ul>
</note>
<p>There are numerous guest properties which can be used to further customize the login experience. For
automatically logging in users, the same guest properties apply as for <userinput>pam_vbox</userinput>. See <xref
href="autologon_unix.dita#autologon_unix"/>. </p>
<p>In addition to the previously mentioned guest properties, <userinput>vbox-greeter</userinput> enables you to
further customize its user interface. The following guest properties are located in the
<filepath>/VirtualBox/GuestAdd/Greeter/</filepath> directory: </p>
<ul>
<li>
<p><codeph>HideRestart</codeph>: Set to 1 if
<userinput>vbox-greeter</userinput> should hide the button to
restart the guest. This property must be set read-only for
the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>HideShutdown</codeph>: Set to 1 if
<userinput>vbox-greeter</userinput> should hide the button to
shutdown the guest. This property must be set read-only
for the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>BannerPath</codeph>: Path to a
<filepath>.PNG</filepath> file to use as a banner image on
the top of the greeter. The image size must be 460 x 90
pixels, any bit depth. This property must be set read-only
for the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>UseTheming</codeph>: Set to 1 for turning on the
following theming options. This property must be set
read-only for the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>Theme/BackgroundColor</codeph>: Hexadecimal
RRGGBB color for the background. This property must be set
read-only for the guest (<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>Theme/LogonDialog/HeaderColor</codeph>:
Hexadecimal RRGGBB foreground color for the header text.
This property must be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>Theme/LogonDialog/BackgroundColor</codeph>:
Hexadecimal RRGGBB color for the login dialog background.
This property must be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
<li>
<p><codeph>Theme/LogonDialog/ButtonColor</codeph>:
Hexadecimal RRGGBB background color for the login dialog
button. This property must be set read-only for the guest
(<codeph>RDONLYGUEST</codeph>).
</p>
</li>
</ul>
<note>
<p>The same restrictions for the guest properties above apply as for the ones specified in the
<codeph>pam_vbox</codeph> section. </p>
</note>
</body>
</topic>

View file

@ -0,0 +1,76 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autologon_win">
<title>Automated Windows Guest Logins</title>
<body>
<p>Windows provides a modular system login subsystem, called Winlogon, which can be customized and extended by means
of so-called GINA (Graphical Identification and Authentication) modules. In Windows Vista and later releases, the
GINA modules were replaced with a new mechanism called credential providers. The <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions for Windows come with both, a GINA and a
credential provider module, and therefore enable any Windows guest to perform automated logins. </p>
<p>To activate the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> GINA or credential provider module, install
the Guest Additions using the command line switch <codeph>/with_autologon</codeph>. All the following manual steps
required for installing these modules will be then done by the installer. </p>
<p>To manually install the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> GINA module, extract the Guest
Additions as shown in <xref href="windows-guest-file-extraction.dita">Manual File Extraction</xref>, and copy the
<filepath>VBoxGINA.dll</filepath> file to the Windows <filepath>SYSTEM32</filepath> directory. In the registry,
create the following key with a value of <filepath>VBoxGINA.dll</filepath>: </p>
<pre xml:space="preserve">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL</pre>
<note>
<p>The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> GINA module is implemented as a wrapper around the
<filepath>MSGINA.DLL</filepath> standard Windows GINA module. As a result, it might not work correctly with
third-party GINA modules. </p>
</note>
<p>To manually install the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> credential provider module, extract
the Guest Additions as shown in <xref href="windows-guest-file-extraction.dita">Manual File Extraction</xref> and
copy the <filepath>VBoxCredProv.dll</filepath> file to the Windows <filepath>SYSTEM32</filepath> directory. In the
registry, create the following keys: </p>
<pre xml:space="preserve">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</pre>
<p>All default values, the key named <codeph>Default</codeph>, must be set to <codeph>VBoxCredProv</codeph>. </p>
<p>Create the following string and assign it a value of <codeph>Apartment</codeph>. </p>
<pre xml:space="preserve">HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel</pre>
<p>
To set credentials, use the following command on a
<i>running</i> VM:
</p>
<pre xml:space="preserve">$ VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"</pre>
<p>While the VM is running, the credentials can be queried by the <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> login modules, GINA or credential provider, using the <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> Guest Additions device driver. When Windows is in <i>logged
out</i> mode, the login modules will constantly poll for credentials and if they are present, a login will be
attempted. After retrieving the credentials, the login modules will erase them so that the above command will have
to be repeated for subsequent logins. </p>
<p>For security reasons, credentials are not stored in any persistent manner and will be lost when the VM is reset.
Also, the credentials are write-only. There is no way to retrieve the credentials from the host side. Credentials
can be reset from the host side by setting empty values. </p>
<p>Depending on the Windows guest version, the following restrictions apply: </p>
<ul>
<li>
<p>For <b outputclass="bold">Windows XP guests.</b> The login subsystem needs to be configured to use the
classic login dialog, as the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> GINA module does not
support the Windows XP-style welcome dialog. </p>
</li>
<li>
<p><b outputclass="bold">Windows Vista, Windows 7, Windows 8, Windows 10 and Windows 11 guests.</b> The login subsystem does not support the so-called Secure Attention Sequence, <codeph>Ctrl+Alt+Del</codeph>. As a result, the guest's group policy settings need to be changed to not use the Secure Attention Sequence. Also, the user name given is only compared to the true user name, not the user friendly name. This means that when you rename a user, you still have to supply the original user name as Windows never renames user accounts internally. </p>
</li>
<li>
<p>Automatic login handling of the built-in <b outputclass="bold">Windows Remote Desktop Service</b>, formerly
known as Terminal Services, is disabled by default. To enable it, create the following registry key with a
<codeph>DWORD</codeph> value of <codeph>1</codeph>. </p>
<pre xml:space="preserve">HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon</pre>
</li>
</ul>
<p>The following command forces <ph conkeyref="vbox-conkeyref-phrases/product-name"/> to keep the credentials after
they were read by the guest and on VM reset: </p>
<pre xml:space="preserve">$ VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1</pre>
<p>Note that this is a potential security risk, as a malicious application running on the guest could request this
information using the proper interface. </p>
</body>
</topic>

View file

@ -0,0 +1,41 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autostart-linux">
<title>Linux: Starting the Autostart Service With init</title>
<body>
<p>On Linux, the autostart service is activated by setting two variables in
<filepath>/etc/default/virtualbox</filepath>. The first one is <codeph>VBOXAUTOSTART_DB</codeph> which
contains an absolute path to the autostart database directory. The directory should have write access for
every user who should be able to start virtual machines automatically. Furthermore the directory should have
the sticky bit set. The second variable is <codeph>VBOXAUTOSTART_CONFIG</codeph> which points the service to
the autostart configuration file which is used during boot to determine whether to allow individual users to
start a VM automatically and configure startup delays. The configuration file can be placed in
<filepath>/etc/vbox</filepath> and contains several options. One is <codeph>default_policy</codeph>
which controls whether the autostart service allows or denies to start a VM for users which are not in the
exception list. The exception list starts with <codeph>exception_list</codeph> and contains a comma
separated list with usernames. Furthermore a separate startup delay can be configured for every user to
avoid overloading the host. A sample configuration is given below: </p>
<pre xml:space="preserve"># Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
allow = true
startup_delay = 10
}
# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
allow = false
}
</pre>
<p>Any user who wants to enable autostart for individual machines must set the path to the autostart database
directory with the following command: </p>
<pre xml:space="preserve">VBoxManage setproperty autostartdbpath <varname>autostart-directory</varname>
</pre>
</body>
</topic>

View file

@ -0,0 +1,20 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autostart-osx">
<title>macOS: Starting the Autostart Service With launchd</title>
<body>
<p>On macOS, launchd is used to start the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> autostart service.
An example configuration file can be found in
<filepath>/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist</filepath>. To enable
the service copy the file to <filepath>/Library/LaunchDaemons</filepath> and change the <codeph>Disabled</codeph>
key from <codeph>true</codeph> to <codeph>false</codeph>. Furthermore replace the second parameter to an existing
configuration file which has the same format as on Linux, see <xref href="autostart-linux.dita#autostart-linux"/>. </p>
<p>To manually start the service use the following command: </p>
<pre xml:space="preserve"># launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist</pre>
<p>For additional information on how launchd services can be configured see: </p>
<p><ph>http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html</ph>.
</p>
</body>
</topic>

View file

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autostart-solaris">
<title>Oracle Solaris: Starting the Autostart Service With SMF</title>
<body>
<p>On Oracle Solaris hosts, the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> autostart daemon is integrated
into the SMF framework. To enable it you must point the service to an existing configuration file which has the
same format as on Linux, see <xref href="autostart-linux.dita#autostart-linux"/>. For example: </p>
<pre xml:space="preserve"># svccfg -s svc:/application/virtualbox/autostart:default setprop \
config/config=/etc/vbox/autostart.cfg</pre>
<p>When everything is configured correctly you can start the <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
autostart service with the following command: </p>
<pre xml:space="preserve"># svcadm enable svc:/application/virtualbox/autostart:default</pre>
<p>For more information about SMF, see the Oracle Solaris documentation. </p>
</body>
</topic>

View file

@ -0,0 +1,60 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autostart-windows">
<title>Windows: Starting the Autostart Service</title>
<body>
<p>On Windows, autostart functionality consist of two components. The first component is a configuration file where
the administrator can both set a delayed start for the VMs and temporarily disable autostarting for a particular
user. The configuration file should be located in a folder accessible by all required users but it should have
permissions allowing only reading by everyone but administrators. The configuration file contains several options.
The <codeph>default_policy</codeph> controls whether the autostart service allows or denies starting of a VM for
users that are not in the exception list. The exception list starts with <codeph>exception_list</codeph> and
contains a comma separated list with usernames. Furthermore, a separate startup delay can be configured for every
user to avoid overloading the host. A sample configuration is given below: </p>
<pre xml:space="preserve"> # Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
allow = true
startup_delay = 10
}
# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
allow = false
}
</pre>
<p>The user name can be specified using the following forms: "user", "domain\user", ".\user" and "user@domain". An
administrator must add the <codeph>VBOXAUTOSTART_CONFIG</codeph> environment variable into system variables
containing the path to the configuration file described above. The environment variable tells the autostart
services which configuration file is used. </p>
<p>The second component of autostart functionality is a Windows service. Every instance of this works on behalf of a
particular user using their credentials. </p>
<p>To enable autostarting for a particular user, a member of the administrators group must run the following
command: </p>
<pre xml:space="preserve">VBoxAutostartSvc install --user=<varname>user</varname> [--password-file=<varname>password_file</varname>]</pre>
<p>The password file should contain the password followed by a line break. The rest of the file is ignored. The user
will be asked for a password if the password file is not specified. </p>
<p>To disable autostarting for particular user, a member of the administrators group must run the following command: </p>
<pre xml:space="preserve">VBoxAutostartSvc delete --user=<varname>user</varname>
</pre>
<p>If a user has changed their password then a member of the administrators group must either reinstall the service
or change the service credentials using Windows Service Manager. Due to Windows security policies, the autostart
service cannot be installed for users with empty passwords. </p>
<p>Finally, the user should define which VMs should be started at boot. The user should run the following command
for every VM they want to start at boot: </p>
<pre xml:space="preserve">VBoxManage modifyvm <varname>VM name or UUID</varname> --autostart-enabled on</pre>
<p>The user can remove a particular VM from the VMs starting at boot by running the following command: </p>
<pre xml:space="preserve">VBoxManage modifyvm <varname>VM name or UUID</varname> --autostart-enabled off</pre>
<note>
<p>On Windows hosts, starting VMs by using the autostart service might cause some issues, as the virtual machines
are starting within the same session as VBoxSVC. For more information see <xref
href="vboxsvc-session-0.dita#vboxsvc-session-0"/>. </p>
</note>
</body>
</topic>

View file

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="autostart">
<title>Starting Virtual Machines During System Boot</title>
<body>
<p>You can start VMs automatically during system boot on Linux, Oracle Solaris, and macOS platforms for all users. </p>
</body>
</topic>

View file

@ -0,0 +1,39 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="basic-unattended">
<title>Unattended Guest Installation</title>
<body>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> can install a guest OS automatically. You only need to
provide the installation medium and a few other parameters, such as the name of the default user. </p>
<p>You can perform an unattended guest installation in the following ways: </p>
<ul>
<li>
<p><b outputclass="bold">Use the Create Virtual Machine
wizard.</b> An optional step in the wizard enables you
to configure unattended installation. You can specify the
default user credentials for the guest OS and also whether to
install the Guest Additions automatically. See
<xref href="create-vm-wizard.dita#create-vm-wizard"/>.
</p>
<p>During this step, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> scans the installation medium and
changes certain parameters to ensure a seamless installation as a guest running on <ph
conkeyref="vbox-conkeyref-phrases/product-name"/>. </p>
</li>
<li>
<p><b outputclass="bold">Use the <userinput>VBoxManage</userinput>
commands.</b><xref href="unattended-guest-install-example.dita#unattended-guest-install-example"/> describes
how to perform an unattended guest installation for an Oracle
Linux guest.
</p>
</li>
</ul>
<p>When you first start a VM that has been configured for unattended installation, the guest OS installation is
performed automatically. </p>
<p>The installation operation changes the boot device order to boot the virtual hard disk first and then the virtual
DVD drive. If the virtual hard disk is empty prior to the automatic installation, the VM boots from the virtual
DVD drive and begins the installation. </p>
<p>If the virtual hard disk contains a bootable OS, the installation operation exits. In this case, change the boot
device order manually by pressing F12 during the BIOS splash screen. </p>
</body>
</topic>

Some files were not shown because too many files have changed in this diff Show more