VirtualBox

source: vbox/trunk/src/VBox/Installer/win/Makefile.kmk

Last change on this file was 108112, checked in by vboxsync, 11 days ago

Windows/Installer: Disable installing NetAdp and NetLwf drivers on arm64, as Windows/Arm requires at least NDIS 6.3 which we don't support yet [build fix]. bugref:10849

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 58.3 KB
Line 
1# $Id: Makefile.kmk 108112 2025-02-07 13:15:18Z vboxsync $
2## @file
3# Makefile for the Windows installer.
4#
5
6#
7# Copyright (C) 2006-2024 Oracle and/or its affiliates.
8#
9# This file is part of VirtualBox base platform packages, as
10# available from https://www.virtualbox.org.
11#
12# This program is free software; you can redistribute it and/or
13# modify it under the terms of the GNU General Public License
14# as published by the Free Software Foundation, in version 3 of the
15# License.
16#
17# This program is distributed in the hope that it will be useful, but
18# WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20# General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, see <https://www.gnu.org/licenses>.
24#
25# SPDX-License-Identifier: GPL-3.0-only
26#
27
28SUB_DEPTH = ../../../..
29include $(KBUILD_PATH)/subheader.kmk
30
31ifneq ($(KBUILD_HOST),win)
32 $(error "The Windows installer can only be built on Windows!")
33endif
34
35
36#
37# Include Sub-Makefiles.
38#
39include $(PATH_SUB_CURRENT)/InstallHelper/Makefile.kmk
40
41include $(PATH_SUB_CURRENT)/Stub/Makefile.kmk
42include $(PATH_SUB_CURRENT)/StubBld/Makefile.kmk
43include $(PATH_SUB_CURRENT)/Resources/Makefile.kmk
44ifdef VBOX_WITH_MSI_HACK
45 include $(PATH_SUB_CURRENT)/MsiHack/Makefile.kmk
46endif
47
48#
49# Profile for quickly testing the actual mechanisms of our installer.
50# This leaves out most of the optional stuff to make compilation / linking much
51# faster for development cycles. Tweak to your likings if needed.
52#
53# Note! Rather hacky approach -- this *only* works when 'packing' is executed
54# directly in the VBox\Installer directory; otherwise with WILL break the
55# build mostly likely, as we mess with dependencies between components.
56#
57# A better appraoch would be to define separate packing defines for dependencies
58# to decouple the building process from the packing more in such a scenario.
59#
60# Use with care!
61#
62ifdef VBOX_INSTALLER_QUICK
63 VBOX_INSTALLER_LANGUAGES := en_US de_DE
64 VBOX_WITH_LICENSE_DISPLAY :=
65 VBOX_WITH_SERIALNUMBER_INSTALL :=
66 VBOX_WITH_ADDITIONS_PACKING :=
67 VBOX_WITH_DEBUGGER_GUI :=
68 VBOX_WITH_EFIFW_PACKING :=
69 VBOX_WITH_EXTPACK :=
70 VBOX_WITH_NETADP :=
71 VBOX_WITH_NETFLT :=
72 VBOX_WITH_PYTHON :=
73 VBOX_WITH_WEBSERVICES :=
74 VBOX_WITH_UNATTENDED :=
75 VBOX_WITH_DOCS_PACKING :=
76 VBOX_WITH_QTGUI :=
77 VBOX_WITH_USB := 1
78 VBOX_WITH_VBOX_IMG :=
79 VBOX_WITH_VBOXSDL :=
80 VBOX_CAB_COMPRESSION_LEVEL := none
81endif
82
83# Disable installing NetAdp and NetLwf drivers on arm64, as Windows/Arm requires at least NDIS 6.3
84# which we don't support yet. See @bugref{10846}
85ifeq ($(KBUILD_TARGET_ARCH),arm64)
86 VBOX_WITH_NETADP :=
87 VBOX_WITH_NETFLT :=
88endif
89
90# Make sure that we show the license page in non-OSE release builds.
91if !defined(VBOX_OSE) && defined(VBOX_RELEASE_EXACT_MATCH) && !defined(VBOX_WITH_LICENSE_DISPLAY)
92 $(error In release mode the non-OSE installer must be built with license agreement being displayed!)
93endif
94
95#
96# Globals.
97#
98# Tip: Use VBOX_CAB_COMPRESSION_LEVEL=none on the kmk command line when working
99# on the installer.
100#
101VBOX_WIN_INST_MAKEFILE_DEP := $(MAKEFILE_CURRENT)
102ifndef VBOX_CAB_COMPRESSION_LEVEL
103 VBOX_CAB_COMPRESSION_LEVEL := high
104endif
105
106VBOX_PATH_WIN_INST_SRC := $(PATH_SUB_CURRENT)
107VBOX_WIN_INST_OUT_DIR := $(PATH_TARGET)/Installer/win
108VBOX_WIN_INST_REPACK_DIR := $(PATH_OUT)/repack
109
110# Translate our architecture names to MSI platform/arch.
111VBOX_INS_PROD_ARCH.amd64 = x64
112VBOX_INS_PROD_ARCH.arm64 = Arm64
113VBOX_INS_PROD_ARCH.x86 = Intel
114VBOX_INS_PROD_ARCH := $(VBOX_INS_PROD_ARCH.$(KBUILD_TARGET_ARCH))
115ifeq ($(VBOX_INS_PROD_ARCH),)
116 $(error VBOX_INS_PROD_ARCH is empty!)
117endif
118
119# Note: en_US *must* come first for the dependency file generation.
120ifndef VBOX_INSTALLER_LANGUAGES
121 VBOX_INSTALLER_LANGUAGES = en_US de_DE el_GR fr_FR it_IT tr_TR zh_TW zh_CN
122 VBOX_INSTALLER_LANGUAGES += $(VBOX_INSTALLER_ADD_LANGUAGES)
123endif
124
125# Aliases for VBOX_SIGN_FILE_FN that allows better control of the MSI and MSM signing.
126VBOX_SIGN_MSI_FN ?= $(VBOX_SIGN_FILE_FN)
127VBOX_SIGN_MSM_FN ?= $(VBOX_SIGN_FILE_FN)
128VBOX_SIGN_CAB_FN ?= $(VBOX_SIGN_FILE_FN)
129
130#
131# List of merge modules to use.
132#
133ifndef VBOX_INSTALLER_MERGE_MODULES
134 VBOX_INSTALLER_MERGE_MODULES = App
135 ifdef VBOX_WITH_NETADP
136 VBOX_INSTALLER_MERGE_MODULES += NetAdp6
137 endif
138 ifdef VBOX_WITH_NETFLT
139 VBOX_INSTALLER_MERGE_MODULES += NetLwf
140 endif
141 ifdef VBOX_WITH_USB
142 VBOX_INSTALLER_MERGE_MODULES += USB
143 endif
144 ifdef VBOX_WITH_PYTHON
145 VBOX_INSTALLER_MERGE_MODULES += Python
146 endif
147endif
148ifeq ($(KBUILD_TARGET_ARCH),amd64)
149 VBOX_INSTALLER_MERGE_MODULES += COM32On64
150endif
151
152# We only ship the merge modules in locale en_US for the moment.
153ifdef VBOX_WITH_MSM_INSTALL
154 VBOX_INSTALLER_LANGUAGES := en_US
155 VBOX_INSTALLER_MERGE_LANGUAGES = $(VBOX_INSTALLER_LANGUAGES)
156endif
157
158#
159# Language IDs (LCID, decimal)
160#
161VBOX_BRAND_en_US_LANG_ID ?= 1033
162VBOX_BRAND_de_DE_LANG_ID ?= 1031
163VBOX_BRAND_el_GR_LANG_ID ?= 1032
164VBOX_BRAND_fa_IR_LANG_ID ?= 1065
165VBOX_BRAND_fr_FR_LANG_ID ?= 1036
166VBOX_BRAND_it_IT_LANG_ID ?= 1040
167VBOX_BRAND_tr_TR_LANG_ID ?= 1055
168VBOX_BRAND_zh_TW_LANG_ID ?= 1028
169VBOX_BRAND_zh_CN_LANG_ID ?= 2052
170
171# Standard language names (in the native language), to be extended as we go.
172# VBOX_BRAND_$(lang)_LANG_NAME must be defined for each language which occurs
173# in either VBOX_LICENSE_ADD_LANGUAGES or VBOX_MANUAL_ADD_LANGUAGES.
174VBOX_BRAND_en_US_LANG_NAME := English
175VBOX_BRAND_de_DE_LANG_NAME := Deutsch
176VBOX_BRAND_el_GR_LANG_NAME := Ελληνικά
177VBOX_BRAND_fr_FR_LANG_NAME := Français
178VBOX_BRAND_it_IT_LANG_NAME := Italiano
179VBOX_BRAND_tr_TR_LANG_NAME := Türkçe
180VBOX_BRAND_zh_TW_LANG_NAME := 正體中文
181VBOX_BRAND_zh_CN_LANG_NAME := 简体中文
182
183
184#
185# We don't have the license text in another language than English yet,
186# so just define the branding targets to use the English one for now.
187# The installer generation assumes that there is a translation for each
188# of VBOX_INSTALLER_LANGUAGES.
189#
190$(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
191 $(eval VBOX_BRAND_$(lang)_LICENSE_RTF := $(VBOX_BRAND_LICENSE_RTF)))
192
193#
194# Set the codepage for all languages to 1252, covers most cases.
195#
196$(foreach lang,$(sort $(VBOX_INSTALLER_LANGUAGES) $(VBOX_LICENSE_ADD_LANGUAGES) $(VBOX_MANUAL_ADD_LANGUAGES)), \
197 $(eval VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE := 1252))
198# Exceptions:
199VBOX_BRAND_el_GR_LANGUAGE_CODEPAGE := 1253
200VBOX_BRAND_fa_IR_LANGUAGE_CODEPAGE := 1256
201VBOX_BRAND_tr_TR_LANGUAGE_CODEPAGE := 1254
202VBOX_BRAND_zh_TW_LANGUAGE_CODEPAGE := 950
203VBOX_BRAND_zh_CN_LANGUAGE_CODEPAGE := 936
204
205#
206# If we want to build a combined package, we separate all common stuff
207# (that is all 100% identical content between 32-/64-bit builds)
208# into an own .cab file to save space. This .cab file then gets included
209# and used by the 32-/64-bit installers.
210#
211ifdef VBOX_WITH_COMBINED_PACKAGE
212 VBOX_INSTALLER_COMMON_DISKID := 2
213else
214 VBOX_INSTALLER_COMMON_DISKID := 1
215endif
216
217## @todo VBOX_ prefixes!
218PACKAGE_BASE := VirtualBox-$(VBOX_VERSION_STRING)
219PACKAGE_NAME_LANG := $(PACKAGE_BASE)-r$(VBOX_SVN_REV)
220PACKAGE_NAME_FINAL := $(PATH_STAGE_BIN)/$(PACKAGE_NAME_LANG).msi
221
222ifdef VBOX_WITH_COMBINED_PACKAGE
223 PATH_MULTIARCH_TEMP := $(PATH_OUT_BASE)/win.amd64/$(KBUILD_TYPE)/obj/Installer
224 PATH_MULTIARCH_GUEST_ADDITIONS_ISO := $(PATH_OUT_BASE)/win.amd64/$(KBUILD_TYPE)/bin/additions
225 PACKAGE_NAME_MULTIARCH := $(PACKAGE_NAME_LANG)-MultiArch
226 PACKAGE_NAME_MULTIARCH.amd64 := $(PACKAGE_NAME_MULTIARCH)_amd64.msi
227 PACKAGE_NAME_MULTIARCH.arm64 := $(PACKAGE_NAME_MULTIARCH)_arm64.msi
228 PACKAGE_NAME_FINAL := $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.$(KBUILD_TARGET_ARCH))
229 PACKAGE_NAME_MULTIARCH_FINAL := $(PACKAGE_NAME_MULTIARCH).exe
230 # Always take the common.cab from the amd64 build, as it
231 # might contain certain files for x86 compatibility such
232 # as our 32-on-64-bit COM stuff.
233 PACKAGE_NAME_MULTIARCH_COMMONCAB := $(PATH_OUT_BASE)/win.amd64/$(KBUILD_TYPE)/obj/Installer/win/common.cab
234
235 BLDDIRS += $(PATH_MULTIARCH_TEMP)
236 PACKING += $(PACKAGE_NAME_FINAL)
237 ifeq ($(KBUILD_TARGET_ARCH),amd64)
238 PACKING += $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)
239 endif
240else
241 PACKAGE_NAME_MULTIARCH := $(PACKAGE_NAME_LANG)-MultiArch
242 PACKAGE_NAME_MULTIARCH_FINAL := $(PACKAGE_NAME_MULTIARCH).exe
243 PACKING += $(PACKAGE_NAME_FINAL) $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)
244endif
245BLDDIRS += \
246 $(VBOX_WIN_INST_OUT_DIR) \
247 $(VBOX_WIN_INST_REPACK_DIR)/ \
248 $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
249 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/ \
250 $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/ ) \
251 $(VBOX_WIN_INST_OUT_DIR)/NLS/
252
253OTHER_CLEAN += \
254 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wix \
255 $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox.wix \
256 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.msi.dep \
257 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
258 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi \
259 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_ProxyStub.wxi \
260 $(if $(VBOX_WITH_QTGUI),$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi) \
261 $(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi \
262 $(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi \
263 $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
264 $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
265 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
266 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst \
267 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb \
268 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
269 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix \
270 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).msi.dep \
271 $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix \
272 $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files \
273 $(VBOX_WIN_INST_REPACK_DIR)/1-build-$(PACKAGE_NAME_LANG).cmd \
274 $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/Language_$(lang).wxl \
275 $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/License_$(lang).wxl ) \
276 $(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi \
277 $(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi \
278 $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
279 $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
280 $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
281 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi \
282 $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd \
283 $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)
284
285ifdef VBOX_WITH_COMBINED_PACKAGE
286 ifeq ($(KBUILD_TARGET_ARCH),amd64)
287 OTHER_CLEAN += \
288 $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
289 $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.amd64)
290 endif
291 ifndef VBOX_WITH_MSM_INSTALL
292 OTHER_CLEAN += \
293 $(VBOX_WIN_INST_OUT_DIR)/common.cab
294 endif
295else
296 OTHER_CLEAN += \
297 $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
298 $(PACKAGE_NAME_FINAL)
299endif
300
301ifdef VBOX_WITH_MSM_INSTALL
302 OTHER_CLEAN += \
303 $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
304 $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
305 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang)_$(KBUILD_TARGET_ARCH).msm \
306 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).msm.dep \
307 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixpdb \
308 $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix \
309 $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).files)
310 BLDDIRS += $foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
311 $(VBOX_WIN_INST_REPACK_DIR)/files-VBoxMerge$(module)_$(lang)/)
312endif
313
314#
315# Defines the WIX binary we're going to use.
316#
317# For WIX v4 there only is one single binary which can do all the required steps
318# (compiling, linking, ...).
319#
320VBOX_TOOLS_WIN_WIX_BIN := $(VBOX_PATH_WIX)/tools/net472/x86/wix.exe
321# Defines the path to the WIX extension DLLs. Might differ for other (major) WIX versions.
322VBOX_TOOLS_WIN_WIXEXT_DIR := $(VBOX_PATH_WIX)/wixext4/
323
324#
325# Defines the extension DLL we use for building an installer.
326#
327VBOX_TOOLS_WIN_WIX_EXT := \
328 $(if-expr defined(VBOX_WITH_MSI_HACK),-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
329 -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Ui.wixext.dll \
330 -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll
331
332#
333# Create intermediate XML file for languages (needed for .MSI linking).
334#
335# Note: The double escaping of $(dir $@) in the prereq/dep list is because we first have
336# to escape the expansion of the $(eval ) argument and then the definition of the
337# rule. The statement is finally expanded during second dependency expansion, which
338# takes place after all makefiles has been loaded and with the @ variable defined.
339#
340define def_vbox_lang_xml
341 $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl: $(VBOX_PATH_WIN_INST_SRC)/NLS/$(lang).wxl | $$$$(dir $$$$@)
342 $$(call MSG_GENERATE,,$$@,$$<)
343 $(QUIET)$(INSTALL) -m 0644 $$< $$@
344endef
345
346$(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
347 $(eval $(def_vbox_lang_xml)))
348
349#
350# Create intermediate XML file for licenses (needed for .MSI building).
351# These files are created from the original .RTF files in the /docs directory.
352#
353# Note: The redirect command below will open $$@ as stdout in append+text mode
354# and then exec cat, thus appending the license file to the result file.
355#
356# Note: The license_file variable has to be created before def_vbox_license_xml
357# is expanded by the 2nd eval because we rely on the that expansion
358# replacing all $(license_file) (and $(lang)) references before evaluation.
359#
360# Note: The REDIRECT + ECHO_EXT is because WiX gets upset if there a newline
361# between the tag and the RTF license text.
362#
363define def_vbox_license_xml
364 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl: $(license_file) $(VBOX_WIN_INST_MAKEFILE_DEP) | $$$$(dir $$$$@)
365 $$(call MSG_GENERATE,,$$@,$$<)
366 $(APPEND) -t $$@ '<?xml version="1.0" encoding="utf-8"?>'
367 $(APPEND) $$@ '<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Codepage="$(VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE)" Culture="$(lang)">'
368
369 $(REDIRECT) -a+to $$@ -- $(ECHO_EXT) -n '<String Id="LicenseText" Value="'
370 $(REDIRECT) -a+to $$@ -- $(SED) -e "s|<|\&lt;|g" -e "s|>|\&gt;|g" $(license_file)
371 $(APPEND) $$@ '" />'
372
373 $(APPEND) $$@ '<String Id="LicenseFile" Value="$(license_file)" />'
374 $(APPEND) $$@ '<String Id="LicenseInstallFileLong" Value="License_$(lang).rtf" />'
375 $(APPEND) $$@ '<String Id="LicenseInstallFileShort" Value="L_$(lang).rtf" />'
376
377 $(APPEND) $$@ '</WixLocalization>'
378endef
379
380$(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
381 $(eval local license_file := $(VBOX_BRAND_$(subst en_US_,,$(lang)_)LICENSE_RTF)) \
382 $(eval $(def_vbox_license_xml)))
383
384#
385# Create one intermediate WXI (Windows Installer Include) file for all installers (needed for .MSI compiling).
386# This file includes all language-specific files (PDFs, CHMs, ...) to install.
387#
388# Note: When using the -n switch, append will append a new line after each
389# argument. The -t switch makes it truncate the file.
390#
391$(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
392 $(call MSG_GENERATE,,$@,$<)
393 $(APPEND) -t $@ '<?xml version="1.0" ?>'
394 $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
395ifdef VBOX_WITH_DOCS_PACKING
396 ifdef VBOX_WITH_DOCS_QHELP_PACKING
397 $(APPEND) $@ ' <File Id="file_UserManual.qch" Name="UserManual.qch" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual.qch)"></File>'
398 $(APPEND) $@ ' <File Id="file_UserManual.qhc" Name="UserManual.qhc" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual.qhc)"></File>'
399 $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
400 ' <File Id="file_UserManual_$(lang).qch" Name="UserManual_$(lang).qch" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual_$(lang).qch)"></File>' \
401 ' <File Id="file_UserManual_$(lang).qhc" Name="UserManual_$(lang).qhc" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual_$(lang).qhc)"></File>')
402 endif
403endif
404 $(APPEND) $@ '</Include>'
405
406$(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
407 $(call MSG_GENERATE,,$@,$<)
408 $(APPEND) -t $@ '<?xml version="1.0" ?>'
409 $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
410ifdef VBOX_WITH_DOCS_PACKING
411 $(APPEND) $@ ' <File Id="file_UserManual.pdf" Name="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual.pdf)">'
412 $(APPEND) $@ ' </File>'
413 $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
414 ' <File Id="file_UserManual_$(lang).pdf" Name="UserManual_$(lang).pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual_$(lang).pdf)">' \
415 ' </File>')
416endif
417 $(APPEND) $@ '</Include>'
418
419$(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
420 $(call MSG_GENERATE,,$@,$<)
421 $(APPEND) -t $@ '<?xml version="1.0" ?>'
422 $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">">'
423 $(APPEND) $@ ' <File Id="file_License_en_US.rtf" Name="License_en_US.rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(VBOX_BRAND_LICENSE_RTF))">' \
424 ' </File>'
425 $(APPEND) -n $@ $(foreach lang,$(VBOX_LICENSE_ADD_LANGUAGES), \
426 ' <File Id="file_License_$(lang).rtf" Name="License_$(lang).rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(VBOX_BRAND_$(lang)_LICENSE_RTF))">' \
427 ' </File>')
428 $(APPEND) $@ '</Include>'
429
430$(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) $(PATH_SUB_CURRENT)/../Config.kmk | $$(dir $$@)
431 $(call MSG_GENERATE,,$@,$<)
432 $(QUIET)$(APPEND) -nt "$@" \
433 '<?xml version="1.0" ?>' \
434 '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
435ifdef VBOX_WITH_DTRACE
436 $(QUIET)$(APPEND) -n "$@" \
437 '<Directory Id="dir_DTrace" Name="dtrace">' \
438 ' <Directory Id="dir_DTrace_lib" Name="lib">' \
439 ' <Directory Id="dir_DTrace_lib_arch" Name="$(KBUILD_TARGET_ARCH)">' \
440 ' <Component Id="cp_dir_DTrace_lib_arch" Guid="7476CDF6-4157-2E17-5CCC-FF92528D2854" Bitness="$$(var.Property_Bitness)">' \
441 $(foreach file, $(VBOXINST_DTRACE_LIB_ARCH_FILES) \
442 , ' <File Id="file_dtrace_lib_arch_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
443 ' Source="$(subst /,\,$(PATH_STAGE_BIN)/dtrace/lib/$(KBUILD_TARGET_ARCH)/$(file))" />' ) \
444 ' </Component>' \
445 ' </Directory>' \
446 ' </Directory>' \
447 $(if $(VBOXINST_DTRACE_TESTCASE_ARCH_FILES), \
448 ' <Directory Id="dir_DTrace_testcase" Name="testcase">' \
449 ' <Directory Id="dir_DTrace_testcase_arch" Name="$(KBUILD_TARGET_ARCH)">' \
450 ' <Component Id="cp_dir_DTrace_testcase_arch" Guid="45DF7014-4431-6C40-6DB0-35AF7C690EE1" Bitness="$$(var.Property_Bitness)">' \
451 $(foreach file, $(VBOXINST_DTRACE_TESTCASE_ARCH_FILES) \
452 , ' <File Id="file_dtrace_testcase_arch_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
453 ' Source="$(subst /,\,$(PATH_STAGE_BIN)/dtrace/testcase/$(KBUILD_TARGET_ARCH)/$(file))" />' ) \
454 ' </Component>' \
455 ' </Directory>' \
456 ' </Directory>') \
457 $(if $(VBOXINST_DTRACE_SCRIPTS_FILES), \
458 ' <Directory Id="dir_DTrace_scripts" Name="scripts">' \
459 ' <Component Id="cp_dir_DTrace_scripts" Guid="AE07F9D5-4FD9-ACC7-C760-E9923CE01E16" Bitness="$$(var.Property_Bitness)">' \
460 $(foreach file, $(VBOXINST_DTRACE_SCRIPTS_FILES) \
461 , ' <File Id="file_dtrace_scripts_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
462 ' Source="$(subst /,\,$(PATH_STAGE_BIN)/dtrace/scripts/$(file))" />' ) \
463 ' </Component>' \
464 ' </Directory>') \
465 '</Directory>'
466endif
467 $(QUIET)$(APPEND) "$@" '</Include>'
468
469
470$(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
471 $(call MSG_GENERATE,,$@,$<)
472 $(APPEND) -t $@ '<?xml version="1.0" ?>'
473 $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
474 #
475 # Documentation (PDF/CHM)
476 #
477ifdef VBOX_WITH_DOCS_PACKING
478 $(APPEND) $@ ' <Shortcut Id="sc_StartMenu_ManualPDF_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, English)" Description="!(loc.StartMenu_UserManual)"' \
479 ' Target="[INSTALLDIR]\doc\UserManual.pdf" WorkingDirectory="dir_StartMenuVBox" Advertise="no"/>'
480 $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
481 ' <Shortcut Id="sc_StartMenu_ManualPDF_$(lang)" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
482 ' Description="!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="[INSTALLDIR]\doc\UserManual_$(lang).pdf" WorkingDirectory="dir_StartMenuVBox"/>')
483endif
484 #
485 # License(s) (RTF)
486 #
487 $(APPEND) $@ ' <Shortcut Id="sc_StartMenu_License_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_License) (English)" Description="!(loc.StartMenu_License)"' \
488 ' Target="[INSTALLDIR]License_en_US.rtf" WorkingDirectory="INSTALLDIR" Advertise="no"/>'
489 $(APPEND) -n $@ $(foreach lang,$(VBOX_LICENSE_ADD_LANGUAGES), \
490 ' <Shortcut Id="sc_StartMenu_License_$(lang)" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))"' \
491 ' Description="!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="License_$(lang).rtf" WorkingDirectory="INSTALLDIR"/>')
492 $(APPEND) $@ '</Include>'
493
494# Note! Keep the list sorted for easier lookup.
495VBOX_WIN_INST_ENV := \
496 -E 'KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)' \
497 -E 'KBUILD_TYPE=$(KBUILD_TYPE)' \
498 -E 'PATH_MULTIARCH_GUEST_ADDITIONS_ISO=$(subst /,\,$(PATH_MULTIARCH_GUEST_ADDITIONS_ISO))' \
499 -E 'PATH_OUT=$(subst /,\,$(PATH_OUT))' \
500 -E 'PATH_ROOT=$(subst /,\,$(PATH_ROOT))' \
501 -E 'PATH_TARGET=$(subst /,\,$(VBOX_WIN_INST_OUT_DIR))' \
502 -E 'VBOX_ADD_LANGUAGES=$(VBOX_INSTALLER_ADD_LANGUAGES)' \
503 -E 'VBOX_BRAND_LICENSE_RTF=$(subst /,\,$(VBOX_BRAND_LICENSE_RTF))' \
504 -E 'VBOX_BRAND_WIN_INST_DLGJPG=$(subst /,\,$(VBOX_BRAND_WIN_INST_DLGJPG))' \
505 -E 'VBOX_BUILD_NR_FOR_INST=$(VBOX_VERSION_BUILD)' \
506 -E 'VBOX_C_YEAR=$(VBOX_C_YEAR)' \
507 $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
508 -E 'VBOX_BRAND_$(lang)_LICENSE_RTF=$(subst /,\,$(VBOX_BRAND_$(subst en_US_,,$(lang)_)LICENSE_RTF))') \
509 -E 'VBOX_INSTALLER_QUICK=$(VBOX_INSTALLER_QUICK)' \
510 -E 'VBOX_MIDL_PROXY_CLSID=$(VBOX_MIDL_PROXY_CLSID)' \
511 -E 'VBOX_PATH_WIN_INST_SRC=$(subst /,\,$(VBOX_PATH_WIN_INST_SRC))' \
512 -E 'VBOX_PRODUCT=$(VBOX_PRODUCT)' \
513 -E 'VBOX_QT_INFIX=$(VBOX_QT_INFIX)' \
514 -E 'VBOX_SIGNING_MODE=$(strip $(if $(VBOX_SIGNING_MODE),$(VBOX_SIGNING_MODE),none))' \
515 -E 'VBOX_VCC_TOOL_STEM=$(VBOX_VCC_TOOL_STEM)' \
516 -E 'VBOX_VENDOR_SHORT=$(VBOX_VENDOR_SHORT)' \
517 -E 'VBOX_VENDOR=$(VBOX_VENDOR)' \
518 -E 'VBOX_VERSION_MAJOR_INST=$(VBOX_VERSION_MAJOR)' \
519 -E 'VBOX_VERSION_MINOR_INST=$(VBOX_VERSION_MINOR)' \
520 -E 'VBOX_VERSION_STRING_RAW=$(VBOX_VERSION_STRING_RAW)' \
521 -E 'VBOX_VERSION_STRING=$(VBOX_VERSION_STRING)' \
522 -E 'VBOX_WINDOWS_ICON_FILE=$(subst /,\,$(VBOX_WINDOWS_ICON_FILE))' \
523 -E 'VBOX_WITH_32_ON_64_MAIN_API=$(if $(VBOX_WITH_32_ON_64_MAIN_API),yes,no)' \
524 -E 'VBOX_WITH_ADDITIONS_PACKING=$(if $(VBOX_WITH_ADDITIONS_PACKING),yes,no)' \
525 -E 'VBOX_WITH_COMBINED_PACKAGE=$(if-expr defined(VBOX_WITH_COMBINED_PACKAGE),yes,no)' \
526 -E 'VBOX_WITH_CRT_PACKING=$(if-expr defined(VBOX_WITH_CRT_PACKING),yes,no)' \
527 -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
528 -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
529 -E 'VBOX_WITH_DRAG_AND_DROP=$(if $(VBOX_WITH_DRAG_AND_DROP),yes,no)' \
530 -E 'VBOX_WITH_DTRACE=$(if $(VBOX_WITH_DTRACE),yes,no)' \
531 -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
532 -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
533 -E 'VBOX_WITH_FE_AUTOSTART=$(if $(VBOX_WITH_FE_AUTOSTART),yes,no)' \
534 -E 'VBOX_WITH_FE_BALLOONCTRL=$(if $(VBOX_WITH_FE_BALLOONCTRL),yes,no)' \
535 -E 'VBOX_WITH_FE_BUGREPORT=$(if $(VBOX_WITH_FE_BUGREPORT),yes,no)' \
536 -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
537 -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
538 -E 'VBOX_WITH_HARDENING=$(if $(VBOX_WITH_HARDENING),yes,no)' \
539 -E 'VBOX_WITH_HEADLESS=$(if $(VBOX_WITH_HEADLESS),yes,no)' \
540 -E 'VBOX_WITH_HOST_SHIPPING_AUDIO_TEST=$(if $(VBOX_WITH_HOST_SHIPPING_AUDIO_TEST),yes,no)' \
541 -E 'VBOX_WITH_LIBSSH=$(if $(VBOX_WITH_LIBSSH),yes,no)' \
542 -E 'VBOX_WITH_LICENSE_DISPLAY=$(if $(VBOX_WITH_LICENSE_DISPLAY),yes,no)' \
543 -E 'VBOX_WITH_MIDL_PROXY_STUB=$(if $(VBOX_WITH_MIDL_PROXY_STUB),yes,no)' \
544 -E 'VBOX_WITH_MINIMAL_R0=$(if $(VBOX_WITH_MINIMAL_R0),yes,no)' \
545 -E 'VBOX_WITH_MSM_INSTALL=$(if-expr defined(VBOX_WITH_MSM_INSTALL),yes,no)' \
546 $(if-expr defined(VBOX_WITH_MSM_INSTALL), \
547 $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
548 -E 'VBOX_WIN_INST_MERGE_$(toupper $(module))=$(subst /,\,$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang)_$(KBUILD_TARGET_ARCH).msm')),) \
549 -E 'VBOX_WITH_NETADP=$(if $(VBOX_WITH_NETADP),yes,no)' \
550 -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
551 -E 'VBOX_WITH_ORACLE_QT=$(if $(VBOX_WITH_ORACLE_QT),yes,no)' \
552 -E 'VBOX_WITH_PYTHON=$(if $(VBOX_WITH_PYTHON),yes,no)' \
553 -E 'VBOX_WITH_QTGUI=$(if $(VBOX_WITH_QTGUI),yes,no)' \
554 -E 'VBOX_WITH_R0_MODULES=$(if $(VBOX_WITH_R0_MODULES),yes,no)' \
555 -E 'VBOX_WITH_RAW_MODE=$(if $(VBOX_WITH_RAW_MODE),yes,no)' \
556 -E 'VBOX_WITH_SDS=$(if $(VBOX_WITH_SDS),yes,no)' \
557 -E 'VBOX_WITH_SERIALNUMBER_INSTALL=$(if $(VBOX_WITH_SERIALNUMBER_INSTALL),yes,no)' \
558 -E 'VBOX_WITH_UNATTENDED_TEMPLATES=$(if $(VBOX_UNATTENDED_TEMPLATES),yes,no)' \
559 -E 'VBOX_WITH_UNATTENDED=$(if $(VBOX_WITH_UNATTENDED),yes,no)' \
560 -E 'VBOX_WITH_USB=$(if $(VBOX_WITH_USB),yes,no)' \
561 -E 'VBOX_WITH_VBOX_IMG=$(if $(VBOX_WITH_VBOX_IMG),yes,no)' \
562 -E 'VBOX_WITH_VBOXSDL=$(if $(VBOX_WITH_VBOXSDL),yes,no)' \
563 -E 'VBOX_WITH_VIDEOHWACCEL=$(if $(VBOX_WITH_VIDEOHWACCEL),yes,no)' \
564 -E 'VBOX_WITH_VIDEOHWACCEL=$(if $(VBOX_WITH_VIDEOHWACCEL),yes,no)' \
565 -E 'VBOX_WITH_VMSVGA3D=$(if $(VBOX_WITH_VMSVGA3D),yes,no)' \
566 -E 'VBOX_WITH_VRDP=$(if-expr defined(VBOX_WITH_VRDP) && !defined(VBOX_WITH_EXTPACK_PUEL),yes,no)' \
567 -E 'VBOX_WITH_WEBSERVICES=$(if $(VBOX_WITH_WEBSERVICES),yes,no)'
568
569ifndef VBOX_WIN_ATTESTATION_SIGNING
570 VBOX_WIN_INST_ENV += \
571 -E 'VBOX_PATH_ATTESTATION_SIGNED=$(subst /,\,$(PATH_OUT))\bin'
572
573else # VBOX_WIN_ATTESTATION_SIGNING
574 VBOX_WIN_INST_ENV += \
575 -E 'VBOX_PATH_ATTESTATION_SIGNED=$(subst /,\,$(VBOX_WIN_INST_REPACK_DIR))\hostdrivers'
576
577 $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab \
578 + $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab.ddf \
579 + $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab.inf \
580 + $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab.rpt: \
581 $(VBOX_WIN_INST_REPACK_DIR)/PackDriversForSubmission.cmd ## @todo more deps
582 $(call MSG_L1,Packing drivers for submission to attesttion signing (=> $@))
583 $(RM) -f -- "$@" "$@.ddf" "$@.inf" "$@.rpt"
584 $(REDIRECT) -E 'KBUILD_BIN_PATH=$(KBUILD_BIN_PATH)' \
585 -C "$(@D)" \
586 -- $(EXEC_X86_WIN32) cmd.exe /c \
587 'PackDriversForSubmission.cmd -b $(PATH_STAGE_BIN) -a $(KBUILD_TARGET_ARCH) -x -n --no-extpack -o $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab'
588
589 $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab.Signed.zip: \
590 $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab
591 $(call MSG_L1,Submitting drivers ($<) for attestation signing (=> $@))
592 $(TIME_EXT) $(REDIRECT_EXT) -C "$(@D)" \
593 -- $(VBOX_RETRY) $(VBOX_WIN_ATTESTATION_SIGNING_EXE) \
594 "VirtualBox Base drivers $(KBUILD_TARGET_ARCH) $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)r$(VBOX_SVN_REV)" \
595 "$(KBUILD_TARGET_ARCH)" \
596 "r$(VBOX_SVN_REV)" \
597 "$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab"
598
599 $(VBOX_WIN_INST_REPACK_DIR)/hostdrivers/UnpackedSignedDrivers.ts: \
600 $(VBOX_WIN_INST_REPACK_DIR)/$(PACKAGE_NAME_LANG)-$(KBUILD_TARGET_ARCH).cab.Signed.zip
601 $(call MSG_L1,Unpacking attestation signed drivers ($<))
602 $(RM) -Rf -- "$(@D)"
603 $(MKDIR) -p -- "$(@D)"
604 unzip -j "$<" -d "$(@D)"
605 ## @todo verify the signatures like UnpackBlessedDrivers.cmd does?
606 $(TOUCH) "$@"
607
608endif # VBOX_WIN_ATTESTATION_SIGNING
609
610#
611# Building the main installer (en_US).
612#
613# Since WIX v4 we don't need to do compilation + linking as separate steps,
614# as the WIX binary all now does this internally with its "build" command.
615#
616# Note: This will clean up any previous .msi and .wixpdb files to prevent dep
617# build boxes from filling up with old files.
618#
619define def_vbox_build_msi
620 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
621 $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE) && !defined(VBOX_WITH_MSM_INSTALL), + $(VBOX_WIN_INST_OUT_DIR)/common.cab,): \
622 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib \
623 $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
624 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
625 $(PATH_STAGE_BIN)/VBoxDrvInst.exe \
626 $(PATH_STAGE_BIN)/VBoxInstallHelper.dll \
627 $(if-expr defined(VBOX_WIN_ATTESTATION_SIGNING),$(VBOX_WIN_INST_REPACK_DIR)/hostdrivers/UnpackedSignedDrivers.ts,) \
628 $(VBOX_SVN_REV_KMK) \
629 $(VBOX_WIN_INST_MAKEFILE_DEP) \
630 $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHack.dll,) \
631 $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
632 | $$$$(dir $$$$@)
633 $$(call MSG_L1,Building installer $$@)
634 $(QUIET)$(RM) -f $$(wildcard $$(subst r$$(VBOX_SVN_REV),r*,\
635 $$@ \
636 $$(basename $$@).wixpdb \
637 $$(VBOX_WIN_INST_REPACK_DIR)/2-link-$$(PACKAGE_NAME_LANG).cmd ))
638 kmk_time $$(REDIRECT_EXT) $(VBOX_WIN_INST_ENV) -E WIX_TEMP='$$(subst /,\,$$(@D))' \
639 -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
640 -arch "$(VBOX_INS_PROD_ARCH)" \
641 -defaultcompressionlevel "$(VBOX_CAB_COMPRESSION_LEVEL)" \
642 -intermediatefolder $$(@D)/wix-temp/ \
643 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
644 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
645 -lib $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib \
646 -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll \
647 -pdbtype none \
648 -out $$@
649 if defined(VBOX_WITH_COMBINED_PACKAGE) && !defined(VBOX_WITH_MSM_INSTALL)
650 $(MV) -f -- $$(@D)/common.cab $$(@D)/../common.cab
651 endif
652 ifeq ($(lang),en_US)
653 $(CP) -f -- "$(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl" "$(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl" \
654 "$(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/"
655 # Create repack script for this step.
656 $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/1-compile-$$(PACKAGE_NAME_LANG).cmd" \
657 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
658 $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
659 '$(VBOX_TOOLS_WIN_WIX_BIN) build ^' \
660 ' files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
661 ' files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
662 ' -lib VirtualBox_en_US.wixlib ^' \
663 ' -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll ^' \
664 ' -pdbtype none ^' \
665 ' -out $$(@F) ^' \
666 ' || exit /b1' \
667 ) \
668 '@echo Created MSI installer: $$(@F)' \
669 $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE) && !defined(VBOX_WITH_MSM_INSTALL),'@echo Created: common.cab',)
670
671 endif
672 $(RM) -Rf -- $$(@D)/wix-temp/
673endef
674
675$(foreach lang, en_US, $(eval $(def_vbox_build_msi)))
676
677
678#
679# Merge module building (all languages).
680#
681# This takes the existing merge module WIX library (.wixlib) as input and builds a MSI merge
682# module (.msm) out of it.
683#
684# Note: This will clean up any previous .msm to prevent dep build boxes from
685# filling up with old files.
686#
687define def_vbox_build_msm
688 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang)_$(KBUILD_TARGET_ARCH).msm: \
689 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
690 $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
691 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
692 $(PATH_STAGE_BIN)/VBoxDrvInst.exe \
693 $(PATH_STAGE_BIN)/VBoxInstallHelper.dll \
694 $(VBOX_SVN_REV_KMK) \
695 $(VBOX_WIN_INST_MAKEFILE_DEP) \
696 | $$$$(dir $$$$@)
697 $$(call MSG_L1,Building merge module $$@)
698 $(QUIET)$(RM) -f $$(wildcard $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_BASE)-r*_$(lang).msi)
699 kmk_time $$(REDIRECT_EXT) $(VBOX_WIN_INST_ENV) -E WIX_TEMP='$$(subst /,\,$$(@D))' \
700 -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
701 -arch "$(VBOX_INS_PROD_ARCH)" \
702 -defaultcompressionlevel "$(VBOX_CAB_COMPRESSION_LEVEL)" \
703 -intermediatefolder $$(@D)/wix-temp/ \
704 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
705 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
706 -lib $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
707 -pdbtype none \
708 -out $$@
709 $(RM) -Rf -- \
710 $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst \
711 $$(@D)/wix-temp/
712 $(call VBOX_SIGN_MSM_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
713 # Create repack script for this step.
714 $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/1-build-VBoxMerge$(module)_$(lang).cmd" \
715 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
716 $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
717 '$(VBOX_TOOLS_WIN_WIX_BIN) build ^' \
718 ' files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
719 ' files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
720 ' $(VBOX_TOOLS_WIN_WIX_EXT) ^' \
721 ' -out $$(@F) ^' \
722 ' || exit /b1' \
723 'call sign-sha1.cmd $$(@F) || exit /b1' \
724 ) \
725 '@echo Created MSM module: $$(@F)'
726endef
727
728ifdef VBOX_WITH_MSM_INSTALL
729 $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
730 $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
731 $(eval $(def_vbox_build_msm))))
732endif
733
734
735#
736# Add dependencies that makes sure necessary bits gets built.
737# For combined packages we always use the .ISO from the amd64 build.
738#
739## @todo these are applied to the wrong step at the moment...
740ifdef VBOX_WITH_COMBINED_PACKAGE
741 VBOX_MSI_DEPENDENCIES := \
742 $(if $(VBOX_WITH_ADDITIONS_PACKING),$(PATH_MULTIARCH_GUEST_ADDITIONS_ISO)/VBoxGuestAdditions.iso)
743else
744 VBOX_MSI_DEPENDENCIES := \
745 $(if $(VBOX_WITH_ADDITIONS_PACKING),$(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso)
746endif
747
748
749#
750# Building a WIX library object (.wixlib).
751# We've separated the final building from the WIX library building for repacking reasons.
752#
753## @todo Proper dependencies: unzip -p VirtualBox_en_US.wixlib | sed -e "s/\([,{]\)/\1\n/g" bar.json | sed -n -e "s/,$//" -e "s/]}$//" -e "s/}}$//" -e 's/"file"://p' -e 's/"path"://p' | sort |uniq
754$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib)
755$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib \
756+ $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_en_US.wixlib \
757+ $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_en_US.files: \
758 $(PATH_SUB_CURRENT)/VirtualBox.wxs \
759 $(PATH_SUB_CURRENT)/UserInterface.wxi \
760 $(PATH_SUB_CURRENT)/CommonProperties.wxi \
761 $(PATH_SUB_CURRENT)/Defines.wxi \
762 $(PATH_SUB_CURRENT)/VBoxMergeApp.wxi \
763 $(PATH_SUB_CURRENT)/VBoxMergeAppCA.wxi \
764 $(PATH_SUB_CURRENT)/VBoxMergeAppSeq.wxi \
765 $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
766 $(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi \
767 $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
768 $(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi \
769 $(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi \
770 $(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi \
771 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
772 $(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi \
773 $(if-expr defined(VBOX_WITH_MSM_INSTALL), \
774 $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
775 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_en_US_$(KBUILD_TARGET_ARCH).msm) \
776 , \
777 $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
778 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
779 $(if $(VBOX_WITH_32_ON_64_MAIN_API),$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi,) \
780 $(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi \
781 $(if $(VBOX_WITH_CRT_PACKING),$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls.wxi,) \
782 $(if $(VBOX_WITH_CRT_PACKING),$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls32.wxi,) \
783 $(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi \
784 $(if $(VBOX_WITH_QTGUI),$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi) \
785 $(VBOX_MSI_DEPENDENCIES)) \
786 $(VBOX_VERSION_STAMP) \
787 | $$(dir $$@) \
788 $(VBOX_WIN_INST_REPACK_DIR)/ \
789 $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_en_US/
790 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
791 $(QUIET)$(RM) -f -- "$@" "$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib" "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_en_US.wixlib"
792 $(REDIRECT) \
793 $(VBOX_WIN_INST_ENV) \
794 -- \
795 $(VBOX_TOOLS_WIN_WIX_BIN) build $(filter-out $(VBOX_VERSION_STAMP),$<) \
796 -arch "$(VBOX_INS_PROD_ARCH)" \
797 -defaultcompressionlevel "$(VBOX_CAB_COMPRESSION_LEVEL)" \
798 -intermediatefolder $(@D)/wix-temp/ \
799 $(VBOX_TOOLS_WIN_WIX_EXT) \
800 -outputtype library \
801 -out $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib
802# Copy over the .wixlib into the repack directory, so that it can be used later when
803# doing the repacking via the shell scripts.
804 $(CP) $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib $(VBOX_WIN_INST_REPACK_DIR)/
805 $(RM) -Rf -- $(@D)/wix-temp/
806
807## @todo r=bird: what is this supposed to be doing these days? OTHER_CLEAN += $(VBOX_REPACK_FILES_VirtualBox_en_US)
808
809
810#
811# MSM (merge module) building as a WIX library (.wixlib).
812#
813define def_vbox_build_msm_wixlib
814 includedep $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib.dep
815 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
816 $(if-expr "$(lang)" != "en_US",, \
817 + $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wixlib): \
818 $(PATH_SUB_CURRENT)/VBoxMerge$(module).wxs \
819 $(PATH_SUB_CURRENT)/VBoxMerge$(module).wxi \
820 $(PATH_SUB_CURRENT)/VBoxMerge$(module)CA.wxi \
821 $(PATH_SUB_CURRENT)/VBoxMerge$(module)Seq.wxi \
822 $(PATH_SUB_CURRENT)/UserInterface.wxi \
823 $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
824 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
825 $(if $(VBOX_WITH_32_ON_64_MAIN_API),$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi,) \
826 $(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi \
827 $(if $(VBOX_WITH_CRT_PACKING),$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls.wxi,) \
828 $(if $(VBOX_WITH_CRT_PACKING),$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls32.wxi,) \
829 $(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi \
830 $(if $(VBOX_WITH_QTGUI),$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi) \
831 $(VBOX_MSI_DEPENDENCIES) \
832 $(VBOX_VERSION_STAMP) \
833 | $$$$(dir $$$$@) $(VBOX_WIN_INST_REPACK_DIR)/
834 $(QUIET)$(RM) -f -- "$$@" "$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix" "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix"
835 $(REDIRECT) \
836 $(VBOX_WIN_INST_ENV) \
837 -- \
838 $(VBOX_TOOLS_WIN_WIX_BIN) build $(filter-out $(VBOX_VERSION_STAMP),$$<) \
839 -arch "$(VBOX_INS_PROD_ARCH)" \
840 -defaultcompressionlevel "$(VBOX_CAB_COMPRESSION_LEVEL)" \
841 -intermediatefolder $$(@D)/wix-temp/ \
842 $(VBOX_TOOLS_WIN_WIX_EXT) \
843 -outputtype library \
844 -out $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib
845 $(RM) -Rf -- $$(@D)/wix-temp/
846 ifeq ($(lang),en_US)
847 # Copy over the .wixlib into the repack directory, so that it can be used later when
848 # doing the repacking via the shell scripts.
849 $(CP) $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib $(VBOX_WIN_INST_REPACK_DIR)/
850 $(MKDIR) -p -- "$(VBOX_WIN_INST_REPACK_DIR)/files-VBoxMerge$(module)_$(lang)/"
851 endif
852 $(eval OTHER_CLEAN += $(VBOX_REPACK_FILES_VBoxMerge$(module)_$(lang)))
853endef
854
855$(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
856 $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
857 $(eval $(def_vbox_build_msm_wixlib))))
858
859#
860# VirtualBox Type Library definition.
861#
862$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi: \
863 $(PATH_SUB_CURRENT)/$(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),VirtualBox_TypeLibWithInterfaces.xsl,VirtualBox_TypeLib.xsl) \
864 $(VBOX_XIDL_FILE) \
865 $(MAKEFILE) \
866 | $$(dir $$@)
867 $(VBOX_XSLTPROC) \
868 $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),--stringparam "a_sProxyStubClsid" "$(VBOX_MIDL_PROXY_CLSID)",) \
869 $(if-expr defined(VBOX_WITH_SDS),--stringparam "a_sWithSDS" "yes",) \
870 -o $@ $< $(VBOX_XIDL_FILE)
871
872$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi: \
873 $(PATH_SUB_CURRENT)/$(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),VirtualBox_TypeLibWithInterfaces.xsl,VirtualBox_TypeLib.xsl) \
874 $(VBOX_XIDL_FILE) \
875 | $$(dir $$@)
876 $(VBOX_XSLTPROC) --stringparam "a_sTarget" "VBoxClient-x86" \
877 $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),--stringparam "a_sProxyStubClsid" "$(VBOX_MIDL_PROXY_CLSID)",) \
878 $(if-expr defined(VBOX_WITH_SDS),--stringparam "a_sWithSDS" "yes",) \
879 -o $@ $< $(VBOX_XIDL_FILE)
880
881#
882# Construct the list of GUI translations.
883# ('-t' -- truncate file; '-n' -- new line between arguments)
884#
885include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
886$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi)
887$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi: $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk | $$(dir $$@)
888 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
889 $(APPEND) -t $@ '<?xml version="1.0" ?>'
890 $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
891 $(APPEND) -n $@ $(foreach lang,$(VBOX_APPROVED_GUI_LANGUAGES), \
892 ' <File Id="nlsqt${lang}" Name="qt_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm" />' \
893 ' <File Id="nlsgui${lang}" Name="VirtualBox_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\VirtualBox_${lang}.qm" />')
894 $(APPEND) $@ '</Include>'
895
896#
897# Edit the version stored in the registry.
898#
899$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi)
900$(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi: $(PATH_SUB_CURRENT)/VBoxKey.wxi $(VBOX_VERSION_STAMP) | $$(dir $$@)
901 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
902 $(SED) -e 's/%VER%/$(VBOX_VERSION_STRING_RAW)/' \
903 -e 's/%VER_EXT%/$(VBOX_VERSION_STRING)/' \
904 --output $@ $<
905
906#
907# Generate the list of CRT DLLs.
908#
909ifndef TOOL_$(VBOX_VCC_TOOL)
910 include $(KBUILD_PATH)/tools/$(VBOX_VCC_TOOL).kmk
911endif
912$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls.wxi)
913$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls.wxi: | $$(dir $$@)
914 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
915 $(APPEND) -t -n $@ \
916 '<?xml version="1.0" ?>' \
917 '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">' \
918 $(foreach dll \
919 ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC100",msvcr100.dll msvcp100.dll \
920 ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC110",msvcr110.dll msvcp110.dll \
921 ,$(TOOL_$(VBOX_VCC_TOOL)_REDIST_CRT_DLLS) $(TOOL_$(VBOX_VCC_TOOL)_REDIST_CPP_DLLS))) \
922 $(if-expr "$(KBUILD_TYPE)"=="asan",clang_rt.asan_dynamic-x86_64.dll,) \
923 ,' <File Id="file_$(translate $(dll),-,_)" Name="$(dll)" Source="$$(env.PATH_OUT)\bin\$(dll)" />') \
924 '</Include>'
925
926#
927# Generate the list of 32-bit CRT DLLs.
928#
929ifndef TOOL_$(VBOX_VCC_TOOL_STEM)X86
930 include $(KBUILD_PATH)/tools/$(VBOX_VCC_TOOL_STEM)X86.kmk
931endif
932$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls32.wxi)
933$(VBOX_WIN_INST_OUT_DIR)/VBoxCrtDlls32.wxi: | $$(dir $$@)
934 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
935 $(APPEND) -t -n $@ \
936 '<?xml version="1.0" ?>' \
937 '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">' \
938 $(foreach dll \
939 ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC100",msvcr100.dll msvcp100.dll \
940 ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC110",msvcr110.dll msvcp110.dll \
941 ,$(TOOL_$(VBOX_VCC_TOOL_STEM)X86_REDIST_CRT_DLLS) $(TOOL_$(VBOX_VCC_TOOL_STEM)X86_REDIST_CPP_DLLS))) \
942 $(if-expr "$(KBUILD_TYPE)"=="asan",clang_rt.asan_dynamic-i386.dll,) \
943 ,' <File Id="file_$(translate $(dll),-,_)_x86" Name="$(dll)" Source="$$(env.PATH_OUT)\bin\x86\$(dll)" DiskId="$$(var.Property_DiskIdCommon)" />') \
944 '</Include>'
945#
946# Generate the list of unattended template script files.
947#
948$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi)
949$(VBOX_WIN_INST_OUT_DIR)/VBoxUnattendedTemplateComponent.wxi: | $$(dir $$@)
950 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
951 $(APPEND) -t -n $@ \
952 '<?xml version="1.0" ?>' \
953 '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
954ifdef VBOX_UNATTENDED_TEMPLATES
955 $(APPEND) -n $@ \
956 ' <Directory Id="dir_VBoxUnattendedTemplates" Name="UnattendedTemplates">' \
957 ' <Component Id="cp_UnattendedTemplates" Guid="0571550d-aaa5-4723-c17b-5ddcc29f5686" Bitness="$$(var.Property_Bitness)">' \
958 $(foreach file,$(VBOX_UNATTENDED_TEMPLATES), \
959 ' <File Id="$(file)" Name="$(file)" Source="$$(env.PATH_OUT)\bin\UnattendedTemplates\$(file)" />') \
960 ' </Component>' \
961 ' </Directory>'
962endif
963 $(APPEND) $@ '</Include>'
964
965
966#
967# Build the multi-language version of the .MSI installer (final installer).
968#
969# This is done by creating binary .MST diffs of all the language-specific installers
970# against the en_US one, and then merging the diffs into the en_US one using tools
971# from the MS Installer SDK.
972#
973# Only contains the minimal set of stuff to get a language-specific .msi built.
974# We also don't need waste time to compress anything here.
975#
976# See also https://github.com/wixtoolset/issues/issues/7544 which requests a
977# simpler way of doing this.
978#
979define def_vbox_create_mst
980 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst \
981 + $(VBOX_WIN_INST_REPACK_DIR)/$(lang).mst: \
982 $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
983 $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
984 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
985 $(PATH_STAGE_BIN)/VBoxInstallHelper.dll \
986 $(VBOX_SVN_REV_KMK) \
987 $(VBOX_WIN_INST_MAKEFILE_DEP) \
988 $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHack.dll,) \
989 $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
990 | $$$$(dir $$$$@) $(VBOX_WIN_INST_REPACK_DIR)/
991 $(RM) -f -- "$$@"
992 $(call MSG_L1,Creating language diff for $(lang))
993 kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' $(VBOX_WIN_INST_ENV) \
994 -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
995 -arch "$(VBOX_INS_PROD_ARCH)" \
996 -defaultcompressionlevel none \
997 -intermediatefolder $$(@D)/wix-temp/ \
998 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
999 -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
1000 -lib $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib \
1001 -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll \
1002 -pdbtype none \
1003 -out $$(@D)/$(PACKAGE_NAME_LANG)_$(lang).msi
1004 $(VBOX_TOOLS_WIN_WIX_BIN) msi transform -t language -intermediateFolder "$$(@D)/wix-temp/" \
1005 "$$<" "$$(@D)/$(PACKAGE_NAME_LANG)_$(lang).msi" -out "$$@"
1006 $(CP) -f -- "$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst" "$(VBOX_WIN_INST_REPACK_DIR)/$(lang).mst"
1007 $(RM) -Rf -- "$$(@D)/$(PACKAGE_NAME_LANG)_$(lang).msi" \
1008 "$$(@D)/wix-temp/" \
1009 "$$(@D)/common.cab"
1010
1011endef
1012
1013$(foreach lang,$(filter-out en_US, $(VBOX_INSTALLER_LANGUAGES)), \
1014 $(eval local lang_id := $(VBOX_BRAND_$(lang)_LANG_ID)) \
1015 $(eval $(def_vbox_create_mst)))
1016
1017
1018# Create WISUMINFO argument.
1019VBOX_INS_PROD_LANG := 7="$(VBOX_INS_PROD_ARCH);1033
1020$(foreach lang, $(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES))\
1021 , $(eval VBOX_INS_PROD_LANG := $(VBOX_INS_PROD_LANG)$(COMMA)$(VBOX_BRAND_$(lang)_LANG_ID)))
1022VBOX_INS_PROD_LANG := $(VBOX_INS_PROD_LANG)"
1023
1024# The multilingual installer rule.
1025$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi)
1026$(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi \
1027+ $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd: \
1028 $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
1029 $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)),$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst)
1030 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
1031 $(call MSG_L1,Creating final multilingual MSI)
1032 $(QUIET)$(RM) -f -- \
1033 $(wildcard $(@D)/$(PACKAGE_BASE)-r*.msi $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_BASE)-r*.cmd )
1034 $(CP) -f -- "$<" "$@"
1035# Add non-english languages.
1036 $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)), \
1037 $(NLTAB)$(REDIRECT) -C "$(@D)/$(lang)" -- $(VBOX_PATH_MSIDB) -d "$@" -r "$(lang).mst" \
1038 $(NLTAB)$(REDIRECT) -C "$(@D)/$(lang)" -- cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $@ $(lang).mst $(VBOX_BRAND_$(lang)_LANG_ID) )
1039# Display MSI details.
1040 $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $(@F)
1041 $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUMINFO) $@
1042# Update the list of language IDs (starts with platform/arch).
1043 $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUMINFO) $@ $(VBOX_INS_PROD_LANG)
1044# Display updated MSI details.
1045 $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUMINFO) $@
1046# Finally, sign it.
1047 $(call VBOX_SIGN_MSI_FN,$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
1048# Create repack script for this step.
1049 $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd" \
1050 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
1051 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
1052 'copy /y "$(<F)" "$(@F)" || exit /b1' \
1053 $(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
1054 $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)), \
1055 '$(VBOX_PATH_MSIDB) -d $(@F) -r $(lang).mst || exit /b1' \
1056 'cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $(@F) $(lang).mst $(VBOX_BRAND_$(lang)_LANG_ID) || exit /b1') \
1057 'cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $(@F) || exit /b1' \
1058 'cscript.exe /nologo $(VBOX_PATH_WISUMINFO) $(@F) $(VBOX_INS_PROD_LANG) || exit /b1' \
1059 'call sign-sha1.cmd $(@F) || exit /b1' \
1060 ) ) \
1061 $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE),'copy /y "$(@F)" "$(notdir $(PACKAGE_NAME_FINAL))" || exit /b1',) \
1062 '@echo Created multilanguage MSI: $(notdir $(PACKAGE_NAME_FINAL))'
1063# Validation. Currently there is a list of grievances, we ignore it. (TODO: Fix errors.)
1064 $(call MSG_L1,Start validation of "$@")
1065 $(REDIRECT) -- $(VBOX_TOOLS_WIN_WIX_BIN) msi validate "$@"
1066 $(call MSG_L1,Finished validating "$@")
1067
1068
1069# Copy multilingual installer to bin, deleting any older .msi files to avoid wasting space.
1070$(PACKAGE_NAME_FINAL): $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi | $$(dir $$@)
1071 $(QUIET)$(RM) -f $(wildcard $(@D)/$(PACKAGE_BASE)-r*$(if-expr defined(VBOX_WITH_COMBINED_PACKAGE),_$(KBUILD_TARGET_ARCH),).msi)
1072 $(INSTALL_STAGING) -- $< $@
1073
1074
1075if defined(VBOX_WITH_COMBINED_PACKAGE) && "$(KBUILD_TARGET_ARCH)" == "amd64"
1076 #
1077 # Make the multi-architecture installer by calling our stub builder
1078 # with both platform installers (amd64 and arm64) + common cab. The common
1079 # cab only is needed when we don't use merge modules. We only
1080 # need to do this once; so do it on amd64 only.
1081 #
1082 $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL) \
1083 + $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
1084 $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.amd64) \
1085 $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.arm64) \
1086 $(PATH_STAGE_BIN)/VBoxStub.exe \
1087 $$(VBoxStubBld_1_TARGET)
1088 $(call MSG_L1,Building Windows combined package)
1089 $(QUIET)$(RM) -f -- $(wildcard $(subst r$(VBOX_SVN_REV),r*, \
1090 $@ \
1091 $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
1092 $(if-expr defined(VBOX_WITH_MSM_INSTALL),,$(call VBOX_SIGN_CAB_FN,$(PACKAGE_NAME_MULTIARCH_COMMONCAB)))
1093 $(REDIRECT) -C $(@D) -- \
1094 $(VBoxStubBld_1_TARGET) -out $@ \
1095 -target-amd64 $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.amd64) \
1096 -target-arm64 $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.arm64) \
1097 $(if-expr defined(VBOX_WITH_MSM_INSTALL),,-target-all $(PACKAGE_NAME_MULTIARCH_COMMONCAB)) \
1098 -stub $(PATH_STAGE_BIN)/VBoxStub.exe
1099 $(VBOX_VCC_EDITBIN) /IntegrityCheck:NO $@
1100 $(call VBOX_SIGN_FILE_FN,$@)
1101 # Create repack script for this step.
1102 $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(@F).cmd" \
1103 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
1104 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
1105 $(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%, \
1106 $(if-expr defined(VBOX_WITH_MSM_INSTALL), \
1107 ,'call sign-dual.cmd ../../../win.amd64/$(KBUILD_TYPE)/repack/$(notdir $(PACKAGE_NAME_MULTIARCH_COMMONCAB)) || exit /b1') \
1108 '..\bin\VBoxStubBld.exe ^' \
1109 ' -out $(@F) ^' \
1110 ' -target-amd64 $(PACKAGE_NAME_MULTIARCH.amd64) ^' \
1111 ' -target-arm64 ../../../win.arm64/$(KBUILD_TYPE)/repack/$(PACKAGE_NAME_MULTIARCH.arm64) ^' \
1112 $(if-expr defined(VBOX_WITH_MSM_INSTALL),\
1113 ,' -target-all $(notdir $(PACKAGE_NAME_MULTIARCH_COMMONCAB)) ^' ) \
1114 ' -stub ../bin/VBoxStub.exe || exit /b1' \
1115 '$(VBOX_VCC_EDITBIN) /IntegrityCheck:NO $(@F) || exit /b1' \
1116 'call sign-dual.cmd $(@F) || exit /b1' \
1117 ) ) \
1118 '@echo Created multiarch EXE: $(@F)'
1119else
1120 #
1121 # We still do the installer stub thing even if we only ship 64-bit, because we've
1122 # gotten used to having it around to install the certificate and such.
1123 #
1124 $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL) \
1125 + $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
1126 $(PACKAGE_NAME_FINAL) \
1127 $(PATH_STAGE_BIN)/VBoxStub.exe \
1128 $$(VBoxStubBld_1_TARGET)
1129 $(call MSG_L1,Building Windows package w/ installer stub)
1130 $(QUIET)$(RM) -f -- $(wildcard $(subst r$(VBOX_SVN_REV),r*, \
1131 $@ \
1132 $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
1133 $(REDIRECT) -C "$(@D)" -- \
1134 $(VBoxStubBld_1_TARGET) -out $@ \
1135 -target-$(KBUILD_TARGET_ARCH) $(PACKAGE_NAME_FINAL) \
1136 -stub $(PATH_STAGE_BIN)/VBoxStub.exe
1137 $(VBOX_VCC_EDITBIN) /IntegrityCheck:NO $@
1138 $(call VBOX_SIGN_FILE_FN,$@,,,,,,timed)
1139 # Create repack script for this step.
1140 $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(@F).cmd" \
1141 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
1142 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
1143 $(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%, \
1144 '..\bin\VBoxStubBld.exe ^' \
1145 ' -out $(@F) ^' \
1146 ' -target-$(KBUILD_TARGET_ARCH) $(notdir $(PACKAGE_NAME_FINAL)) ^' \
1147 ' -stub ../bin/VBoxStub.exe || exit /b1' \
1148 '$(VBOX_VCC_EDITBIN) /IntegrityCheck:NO $(@F) || exit /b1' \
1149 'call sign-dual.cmd $(@F) || exit /b1' \
1150 ) ) \
1151 '@echo Created multiarch EXE: $(@F)'
1152endif
1153
1154#
1155# Repackaging scripts and files.
1156#
1157INSTALLS += RePackScripts
1158RePackScripts_TEMPLATE = DUMMY
1159RePackScripts_INST = repack/
1160RePackScripts_INSTTYPE = stage
1161RePackScripts_SOURCES = \
1162 Scripts/UnpackBlessedDrivers.cmd \
1163 $(RePackScripts_0_OUTDIR)/PackDriversForSubmission.cmd \
1164 $(RePackScripts_0_OUTDIR)/sign-dual.cmd \
1165 $(RePackScripts_0_OUTDIR)/sign-sha1.cmd \
1166 $(if-expr defined(VBOX_SIGN_EV_FILE_FN),$(RePackScripts_0_OUTDIR)/sign-ev.cmd,) \
1167 $(RePackScripts_0_OUTDIR)/VMMR0.inf \
1168 $(RePackScripts_0_OUTDIR)/VBoxExtPackPuel.inf
1169if !defined(VBOX_WITH_COMBINED_PACKAGE) || "$(KBUILD_TARGET_ARCH)" == "amd64"
1170 RePackScripts_SOURCES += \
1171 $(RePackScripts_0_OUTDIR)/RepackExtPack.cmd
1172endif
1173ifdef VBOX_WITH_COMBINED_PACKAGE
1174 if "$(KBUILD_TARGET_ARCH)" == "amd64"
1175 RePackScripts_SOURCES += \
1176 $(RePackScripts_0_OUTDIR)/Combined-1-Prepare.cmd \
1177 $(RePackScripts_0_OUTDIR)/Combined-3-Repack.cmd \
1178 $(RePackScripts_0_OUTDIR)/Combined-3-RepackAdditions.cmd
1179 endif
1180else
1181 RePackScripts_SOURCES += \
1182 $(RePackScripts_0_OUTDIR)/Single-1-Prepare.cmd \
1183 $(RePackScripts_0_OUTDIR)/Single-3-Repack.cmd
1184
1185 ifndef VBOX_OSE
1186 RePackScripts_SOURCES += \
1187 $(RePackScripts_0_OUTDIR)/Single-0-All.cmd
1188 endif
1189
1190endif
1191RePackScripts_CLEAN = \
1192 $(RePackScripts_0_OUTDIR)/PackDriversForSubmission.cmd \
1193 $(RePackScripts_0_OUTDIR)/sign-dual.cmd \
1194 $(RePackScripts_0_OUTDIR)/sign-sha1.cmd \
1195 $(RePackScripts_0_OUTDIR)/sign-ev.cmd \
1196 $(RePackScripts_0_OUTDIR)/VMMR0.inf \
1197 $(RePackScripts_0_OUTDIR)/VBoxExtPackPuel.inf
1198
1199$(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/PackDriversForSubmission.cmd,PackDriversForSubmission.cmd)
1200$(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/RepackExtPack.cmd,RepackExtPack.cmd)
1201ifdef VBOX_WITH_COMBINED_PACKAGE
1202 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Combined-1-Prepare.cmd,Combined-1-Prepare.cmd)
1203 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Combined-3-Repack.cmd,Combined-3-Repack.cmd)
1204 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Combined-3-RepackAdditions.cmd,Combined-3-RepackAdditions.cmd)
1205else
1206 ifndef VBOX_OSE
1207 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Single-0-All.cmd,Single-0-All.cmd)
1208 endif
1209 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Single-1-Prepare.cmd,Single-1-Prepare.cmd)
1210 $(call VBOX_EDIT_VERSION_AND_BUILD_RULE_FN,RePackScripts,Scripts/Single-3-Repack.cmd,Single-3-Repack.cmd)
1211endif
1212
1213$$(RePackScripts_0_OUTDIR)/sign-dual.cmd: | $$(dir $$@)
1214 $(APPEND) -nt "$@" \
1215 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b 1)' \
1216 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b 1)' \
1217 'if ".%1" == "." (echo No .cat file specified & exit /b 1)' \
1218 $(subst /win-6.1/,/win-rel/,$(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%, \
1219 '( $(call VBOX_SIGN_FILE_FN,%1,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,,&&) ) || exit /b1' \
1220 ) ) )
1221
1222$$(RePackScripts_0_OUTDIR)/sign-sha1.cmd: | $$(dir $$@)
1223 $(APPEND) -nt "$@" \
1224 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b 1)' \
1225 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b 1)' \
1226 'if ".%1" == "." (echo No .cat file specified & exit /b 1)' \
1227 $(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%, \
1228 '( $(call VBOX_SIGN_FILE_FN,%1,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing,&&) ) || exit /b1' \
1229 ) )
1230
1231# The %~dp1\ oddity is working around otherwise ending with \" during
1232# expansion of the CCS command line which for a reason I cannot immediately
1233# understand appends a " to the path.
1234$$(RePackScripts_0_OUTDIR)/sign-ev.cmd: | $$(dir $$@)
1235 $(APPEND) -nt "$@" \
1236 'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b 1)' \
1237 'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b 1)' \
1238 'if ".%1" == "." (echo No .cab file specified & exit /b 1)' \
1239 $(subst $(KBUILD_BIN_PATH),%KBUILD_BIN_PATH%,$(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%, \
1240 '( $(call VBOX_SIGN_EV_FILE_FN,%1,%~dp1\) ) || exit /b1' \
1241 ) )
1242
1243$$(RePackScripts_0_OUTDIR)/VMMR0.inf: $(PATH_SUB_CURRENT)/Scripts/VMMR0.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
1244 $(call MSG_GENERATE,RePackScripts,$@,$<)
1245 $(call VBOX_EDIT_INF_FN,$<,$@)
1246
1247$$(RePackScripts_0_OUTDIR)/VBoxExtPackPuel.inf: $(PATH_SUB_CURRENT)/Scripts/VBoxExtPackPuel.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
1248 $(call MSG_GENERATE,RePackScripts,$@,$<)
1249 $(call VBOX_EDIT_INF_FN,$<,$@)
1250
1251
1252include $(FILE_KBUILD_SUB_FOOTER)
Note: See TracBrowser for help on using the repository browser.

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