VirtualBox

Ignore:
Timestamp:
Apr 29, 2024 8:09:47 AM (9 months ago)
Author:
vboxsync
Message:

Windows host installer: Upgraded to WIX v4 (4.0.5). This is a massive change that accumulates the transition from WIX v3 -> v4 where the WIX XML scheme as well as the build system has changed. See comments for details. bugref:10644

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Installer/win/Makefile.kmk

    r104431 r104453  
    6161#
    6262ifdef VBOX_INSTALLER_QUICK
    63  VBOX_INSTALLER_LANGUAGES       := en_US
     63 VBOX_INSTALLER_LANGUAGES       := en_US de_DE
    6464 VBOX_WITH_LICENSE_DISPLAY      :=
    6565 VBOX_WITH_SERIALNUMBER_INSTALL :=
     
    176176        $(eval VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE := 1252))
    177177# Exceptions:
     178VBOX_BRAND_el_GR_LANGUAGE_CODEPAGE := 1253
     179VBOX_BRAND_fa_IR_LANGUAGE_CODEPAGE := 1256
     180VBOX_BRAND_tr_TR_LANGUAGE_CODEPAGE := 1254
    178181VBOX_BRAND_zh_TW_LANGUAGE_CODEPAGE := 950
    179182VBOX_BRAND_zh_CN_LANGUAGE_CODEPAGE := 936
    180 VBOX_BRAND_fa_IR_LANGUAGE_CODEPAGE := 1256
    181 VBOX_BRAND_tr_TR_LANGUAGE_CODEPAGE := 1254
    182183
    183184#
     
    230231
    231232OTHER_CLEAN += \
    232         $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wixobj \
    233233        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wix \
    234234        $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox.wix \
    235         $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wixobj.dep \
     235        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.msi.dep \
    236236        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
    237237        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi \
     
    247247                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
    248248                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix \
    249                 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
    250                 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj.dep \
     249                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).msi.dep \
    251250                $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix \
    252251                $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files \
    253                 $(VBOX_WIN_INST_REPACK_DIR)/2-link-$(PACKAGE_NAME_LANG).cmd \
     252                $(VBOX_WIN_INST_REPACK_DIR)/1-build-$(PACKAGE_NAME_LANG).cmd \
    254253                $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/Language_$(lang).wxl \
    255254                $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/License_$(lang).wxl ) \
     
    260259        $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
    261260        $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi \
    262         $(VBOX_WIN_INST_REPACK_DIR)/3-multilingual-$(PACKAGE_NAME_LANG).cmd \
     261        $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd \
    263262        $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)
    264263
     
    266265 ifeq ($(KBUILD_TARGET_ARCH),x86)
    267266  OTHER_CLEAN += \
    268         $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
     267        $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
    269268        $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.x86)
    270269 endif
     
    275274else
    276275 OTHER_CLEAN += \
    277         $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
     276        $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd \
    278277        $(PACKAGE_NAME_FINAL)
    279278endif
     
    284283                $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
    285284                        $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang)_$(KBUILD_TARGET_ARCH).msm \
    286                         $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixobj \
    287                         $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixobj.dep \
     285                        $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).msm.dep \
    288286                        $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixpdb \
    289287                        $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix \
     
    294292
    295293#
    296 # Suppress/skip the following ICE (Internal Consistency Evaluators):
    297 # - ICE64: Checks that new directories in the user profile are removed correctly in roaming scenarios.
    298 #          -> We don't want to remove system folders (like "Microsoft/Internet Explorer/Quick Launch").
    299 # - ICE69: Checks if file references are within the same component.
    300 #          -> We reference to files within different components, but these components are installed using
    301 #             the same feature, so that's fine.
    302 #
    303 VBOX_MSI_ICE_IGNORE := \
    304         -ice:64 \
    305         -ice:69
     294# Defines the WIX binary we're going to use.
     295#
     296# For WIX v4 there only is one single binary which can do all the required steps
     297# (compiling, linking, ...).
     298#
     299VBOX_TOOLS_WIN_WIX_BIN    := $(VBOX_PATH_WIX)/tools/net472/x86/wix.exe
     300# Defines the path to the WIX extension DLLs. Might differ for other (major) WIX versions.
     301VBOX_TOOLS_WIN_WIXEXT_DIR := $(VBOX_PATH_WIX)/wixext4/
     302
     303#
     304# Defines the extension DLL we use for building an installer.
     305#
     306VBOX_TOOLS_WIN_WIX_EXT := \
     307        -lib $(VBOX_TOOLS_WIN_WIXEXT_DIR)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib \
     308        $(if-expr defined(VBOX_WITH_MSI_HACK),-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
     309        -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Ui.wixext.dll \
     310        -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.DifxApp.wixext.dll \
     311        -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll
    306312
    307313#
     
    323329
    324330#
    325 # Create intermediate XML file for licenses (needed for .MSI linking).
     331# Create intermediate XML file for licenses (needed for .MSI building).
    326332# These files are created from the original .RTF files in the /docs directory.
    327333#
     
    340346        $$(call MSG_GENERATE,,$$@,$$<)
    341347        $(APPEND) -t $$@ '<?xml version="1.0" encoding="utf-8"?>'
    342         $(APPEND) $$@ '<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="$(VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE)" Culture="$(lang)">'
    343 
    344         $(REDIRECT) -a+to $$@ -- $(ECHO_EXT) -n '<String Id="LicenseText">'
     348        $(APPEND) $$@ '<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Codepage="$(VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE)" Culture="$(lang)">'
     349
     350        $(REDIRECT) -a+to $$@ -- $(ECHO_EXT) -n '<String Id="LicenseText" Value="'
    345351        $(REDIRECT) -a+to $$@ -- $(SED) -e "s|<|\&lt;|g" -e "s|>|\&gt;|g" $(license_file)
    346         $(APPEND) $$@ '</String>'
    347 
    348         $(APPEND) $$@ '<String Id="LicenseFile">$(license_file)</String>'
    349         $(APPEND) $$@ '<String Id="LicenseInstallFileLong">License_$(lang).rtf</String>'
    350         $(APPEND) $$@ '<String Id="LicenseInstallFileShort">L_$(lang).rtf</String>'
     352        $(APPEND) $$@ '" />'
     353
     354        $(APPEND) $$@ '<String Id="LicenseFile" Value="$(license_file)" />'
     355        $(APPEND) $$@ '<String Id="LicenseInstallFileLong" Value="License_$(lang).rtf" />'
     356        $(APPEND) $$@ '<String Id="LicenseInstallFileShort" Value="L_$(lang).rtf" />'
    351357
    352358        $(APPEND) $$@ '</WixLocalization>'
     
    367373        $(call MSG_GENERATE,,$@,$<)
    368374        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    369         $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     375        $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    370376ifdef VBOX_WITH_DOCS_PACKING
    371377 ifdef VBOX_WITH_DOCS_QHELP_PACKING
     
    382388        $(call MSG_GENERATE,,$@,$<)
    383389        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    384         $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     390        $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    385391ifdef VBOX_WITH_DOCS_PACKING
    386392        $(APPEND) $@ '  <File Id="file_UserManual.pdf" Name="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(subst /,\,$(PATH_STAGE_BIN)/UserManual.pdf)">'
     
    395401        $(call MSG_GENERATE,,$@,$<)
    396402        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    397         $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     403        $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">">'
    398404        $(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))">' \
    399405                     '  </File>'
     
    407413        $(QUIET)$(APPEND) -nt "$@" \
    408414                '<?xml version="1.0" ?>' \
    409                 '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     415                '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    410416ifdef VBOX_WITH_DTRACE
    411417        $(QUIET)$(APPEND) -n "$@" \
     
    413419                '  <Directory Id="dir_DTrace_lib" Name="lib">' \
    414420                '    <Directory Id="dir_DTrace_lib_arch" Name="$(KBUILD_TARGET_ARCH)">' \
    415                 '      <Component Id="cp_dir_DTrace_lib_arch" Guid="7476CDF6-4157-2E17-5CCC-FF92528D2854" Win64="$$(var.Property_Win64)">' \
     421                '      <Component Id="cp_dir_DTrace_lib_arch" Guid="7476CDF6-4157-2E17-5CCC-FF92528D2854" Bitness="$$(var.Property_Bitness)">' \
    416422                $(foreach file, $(VBOXINST_DTRACE_LIB_ARCH_FILES) \
    417423                        , '        <File Id="file_dtrace_lib_arch_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
     
    423429                '  <Directory Id="dir_DTrace_testcase" Name="testcase">' \
    424430                '    <Directory Id="dir_DTrace_testcase_arch" Name="$(KBUILD_TARGET_ARCH)">' \
    425                 '      <Component Id="cp_dir_DTrace_testcase_arch" Guid="45DF7014-4431-6C40-6DB0-35AF7C690EE1" Win64="$$(var.Property_Win64)">' \
     431                '      <Component Id="cp_dir_DTrace_testcase_arch" Guid="45DF7014-4431-6C40-6DB0-35AF7C690EE1" Bitness="$$(var.Property_Bitness)">' \
    426432                $(foreach file, $(VBOXINST_DTRACE_TESTCASE_ARCH_FILES) \
    427433                        , '        <File Id="file_dtrace_testcase_arch_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
     
    432438        $(if $(VBOXINST_DTRACE_SCRIPTS_FILES), \
    433439                '  <Directory Id="dir_DTrace_scripts" Name="scripts">' \
    434                 '    <Component Id="cp_dir_DTrace_scripts" Guid="AE07F9D5-4FD9-ACC7-C760-E9923CE01E16" Win64="$$(var.Property_Win64)">' \
     440                '    <Component Id="cp_dir_DTrace_scripts" Guid="AE07F9D5-4FD9-ACC7-C760-E9923CE01E16" Bitness="$$(var.Property_Bitness)">' \
    435441                $(foreach file, $(VBOXINST_DTRACE_SCRIPTS_FILES) \
    436442                        , '      <File Id="file_dtrace_scripts_$(subst -,_,$(file))" Name="$(file)" Vital="yes" ' \
     
    446452        $(call MSG_GENERATE,,$@,$<)
    447453        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    448         $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     454        $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    449455        #
    450456        # Documentation (PDF/CHM)
     
    452458ifdef VBOX_WITH_DOCS_PACKING
    453459        $(APPEND) $@ '  <Shortcut Id="sc_StartMenu_ManualPDF_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, English)" Description="!(loc.StartMenu_UserManual)"' \
    454                      '            Target="[INSTALLDIR]\doc\UserManual.pdf" WorkingDirectory="dir_Documents" Advertise="no"/>'
     460                     '            Target="[INSTALLDIR]\doc\UserManual.pdf" WorkingDirectory="dir_StartMenuVBox" Advertise="no"/>'
    455461        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
    456462                     '  <Shortcut Id="sc_StartMenu_ManualPDF_$(lang)" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
    457                      '            Description="!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="[INSTALLDIR]\doc\UserManual_$(lang).pdf" WorkingDirectory="dir_Documents"/>')
     463                     '            Description="!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="[INSTALLDIR]\doc\UserManual_$(lang).pdf" WorkingDirectory="dir_StartMenuVBox"/>')
    458464endif
    459465        #
     
    467473        $(APPEND) $@ '</Include>'
    468474
    469 #
    470 # .MSI linking of the main installer (en_US).
     475VBOX_WIN_INST_ENV := \
     476                -E 'PATH_OUT=$(subst /,\,$(PATH_OUT))' \
     477                -E 'PATH_TARGET=$(subst /,\,$(VBOX_WIN_INST_OUT_DIR))' \
     478                -E 'PATH_ROOT=$(subst /,\,$(PATH_ROOT))' \
     479                -E 'PATH_MULTIARCH_GUEST_ADDITIONS_ISO=$(subst /,\,$(PATH_MULTIARCH_GUEST_ADDITIONS_ISO))' \
     480                -E 'VBOX_PATH_WIN_INST_SRC=$(subst /,\,$(VBOX_PATH_WIN_INST_SRC))' \
     481                -E 'VBOX_BRAND_WIN_INST_DLGJPG=$(subst /,\,$(VBOX_BRAND_WIN_INST_DLGJPG))' \
     482                -E 'VBOX_ADD_LANGUAGES=$(VBOX_INSTALLER_ADD_LANGUAGES)' \
     483                -E 'VBOX_BRAND_LICENSE_RTF=$(subst /,\,$(VBOX_BRAND_LICENSE_RTF))' \
     484                -E 'VBOX_BUILD_NR_FOR_INST=$(VBOX_VERSION_BUILD)' \
     485                -E 'VBOX_VENDOR=$(VBOX_VENDOR)' \
     486                -E 'VBOX_VENDOR_SHORT=$(VBOX_VENDOR_SHORT)' \
     487                -E 'VBOX_PRODUCT=$(VBOX_PRODUCT)' \
     488                -E 'VBOX_C_YEAR=$(VBOX_C_YEAR)' \
     489                -E 'VBOX_VERSION_STRING=$(VBOX_VERSION_STRING)' \
     490                -E 'VBOX_VERSION_STRING_RAW=$(VBOX_VERSION_STRING_RAW)' \
     491                -E 'VBOX_VERSION_MAJOR_INST=$(VBOX_VERSION_MAJOR)' \
     492                -E 'VBOX_VERSION_MINOR_INST=$(VBOX_VERSION_MINOR)' \
     493                -E 'VBOX_SIGNING_MODE=$(strip $(if $(VBOX_SIGNING_MODE),$(VBOX_SIGNING_MODE),none))' \
     494                -E 'VBOX_MIDL_PROXY_CLSID=$(VBOX_MIDL_PROXY_CLSID)' \
     495                -E 'VBOX_WINDOWS_ICON_FILE=$(subst /,\,$(VBOX_WINDOWS_ICON_FILE))' \
     496                -E 'VBOX_QT_INFIX=$(VBOX_QT_INFIX)' \
     497                -E 'VBOX_WITH_32_ON_64_MAIN_API=$(if $(VBOX_WITH_32_ON_64_MAIN_API),yes,no)' \
     498                -E 'VBOX_WITH_ADDITIONS_PACKING=$(if $(VBOX_WITH_ADDITIONS_PACKING),yes,no)' \
     499                -E 'VBOX_WITH_COMBINED_PACKAGE=$(if-expr defined(VBOX_WITH_COMBINED_PACKAGE),yes,no)' \
     500                -E 'VBOX_WITH_CRT_PACKING=$(if-expr defined(VBOX_WITH_CRT_PACKING),yes,no)' \
     501                -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
     502                -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
     503                -E 'VBOX_WITH_DRAG_AND_DROP=$(if $(VBOX_WITH_DRAG_AND_DROP),yes,no)' \
     504                -E 'VBOX_WITH_DTRACE=$(if $(VBOX_WITH_DTRACE),yes,no)' \
     505                -E 'VBOX_WITH_HOST_SHIPPING_AUDIO_TEST=$(if $(VBOX_WITH_HOST_SHIPPING_AUDIO_TEST),yes,no)' \
     506                -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
     507                -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
     508                -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
     509                -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
     510                -E 'VBOX_WITH_HARDENING=$(if $(VBOX_WITH_HARDENING),yes,no)' \
     511                -E 'VBOX_WITH_HEADLESS=$(if $(VBOX_WITH_HEADLESS),yes,no)' \
     512                -E 'VBOX_WITH_FE_BALLOONCTRL=$(if $(VBOX_WITH_FE_BALLOONCTRL),yes,no)' \
     513                -E 'VBOX_WITH_FE_AUTOSTART=$(if $(VBOX_WITH_FE_AUTOSTART),yes,no)' \
     514                -E 'VBOX_WITH_FE_BUGREPORT=$(if $(VBOX_WITH_FE_BUGREPORT),yes,no)' \
     515                -E 'VBOX_WITH_LIBSSH=$(if $(VBOX_WITH_LIBSSH),yes,no)' \
     516                -E 'VBOX_WITH_LICENSE_DISPLAY=$(if $(VBOX_WITH_LICENSE_DISPLAY),yes,no)' \
     517                -E 'VBOX_WITH_MIDL_PROXY_STUB=$(if $(VBOX_WITH_MIDL_PROXY_STUB),yes,no)' \
     518                -E 'VBOX_WITH_MSM_INSTALL=$(if-expr defined(VBOX_WITH_MSM_INSTALL),yes,no)' \
     519                -E 'VBOX_WITH_NETADP=$(if $(VBOX_WITH_NETADP),yes,no)' \
     520                -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
     521                -E 'VBOX_WITH_PYTHON=$(if $(VBOX_WITH_PYTHON),yes,no)' \
     522                -E 'VBOX_WITH_QTGUI=$(if $(VBOX_WITH_QTGUI),yes,no)' \
     523                -E 'VBOX_WITH_RAW_MODE=$(if $(VBOX_WITH_RAW_MODE),yes,no)' \
     524                -E 'VBOX_WITH_SERIALNUMBER_INSTALL=$(if $(VBOX_WITH_SERIALNUMBER_INSTALL),yes,no)' \
     525                -E 'VBOX_WITH_VIDEOHWACCEL=$(if $(VBOX_WITH_VIDEOHWACCEL),yes,no)' \
     526                -E 'VBOX_WITH_VRDP=$(if-expr defined(VBOX_WITH_VRDP) && !defined(VBOX_WITH_EXTPACK_PUEL),yes,no)' \
     527                -E 'VBOX_WITH_WEBSERVICES=$(if $(VBOX_WITH_WEBSERVICES),yes,no)' \
     528                -E 'VBOX_WITH_SDS=$(if $(VBOX_WITH_SDS),yes,no)' \
     529                -E 'VBOX_WITH_UNATTENDED=$(if $(VBOX_WITH_UNATTENDED),yes,no)' \
     530                -E 'VBOX_WITH_UNATTENDED_TEMPLATES=$(if $(VBOX_UNATTENDED_TEMPLATES),yes,no)' \
     531                -E 'VBOX_WITH_USB=$(if $(VBOX_WITH_USB),yes,no)' \
     532                -E 'VBOX_WITH_VBOX_IMG=$(if $(VBOX_WITH_VBOX_IMG)$(VBOX_WITH_TESTCASES),yes,no)' \
     533                -E 'VBOX_WITH_VBOXSDL=$(if $(VBOX_WITH_VBOXSDL),yes,no)' \
     534                -E 'VBOX_WITH_VMSVGA3D=$(if $(VBOX_WITH_VMSVGA3D),yes,no)' \
     535                -E 'VBOX_WITH_VIDEOHWACCEL=$(if $(VBOX_WITH_VIDEOHWACCEL),yes,no)' \
     536                -E 'KBUILD_TYPE=$(KBUILD_TYPE)' \
     537                -E 'KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)' \
     538                -E 'VBOX_INSTALLER_QUICK=$(VBOX_INSTALLER_QUICK)' \
     539                -E 'VBOX_VCC_TOOL_STEM=$(VBOX_VCC_TOOL_STEM)' \
     540                -E 'VBOX_CAB_COMPRESSION_LEVEL=$(VBOX_CAB_COMPRESSION_LEVEL)' \
     541                -E 'VBOX_CAB_COMPRESSION_LEVEL_COMMON=$(VBOX_CAB_COMPRESSION_LEVEL)'
     542
     543#
     544# Building the main installer (en_US).
     545#
     546# Since WIX v4 we don't need to do compilation + linking as separate steps,
     547# as the WIX binary all now does this internally with its "build" command.
    471548#
    472549# Note: This will clean up any previous .msi and .wixpdb files to prevent dep
    473550#       build boxes from filling up with old files.
    474551#
    475 define def_vbox_link_msi
     552define def_vbox_build_msi
    476553 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
    477554 $(if-expr defined(VBOX_WITH_COMBINED_PACKAGE) && !defined(VBOX_WITH_MSM_INSTALL), + $(VBOX_WIN_INST_OUT_DIR)/common.cab,): \
    478                 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
     555                $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib \
    479556                $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    480557                $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
     
    485562                $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
    486563                | $$$$(dir $$$$@)
    487         $$(call MSG_L1,Linking installer $$@)
     564        $$(call MSG_L1,Building installer $$@)
    488565        $(QUIET)$(RM) -f $$(wildcard $$(subst r$$(VBOX_SVN_REV),r*,\
    489566                $$@ \
    490567                $$(basename $$@).wixpdb \
    491568                $$(VBOX_WIN_INST_REPACK_DIR)/2-link-$$(PACKAGE_NAME_LANG).cmd ))
    492         kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' -- $(VBOX_PATH_WIX)/light.exe -v -nologo \
     569        kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' $(VBOX_WIN_INST_ENV) \
     570                -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
    493571                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    494572                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
    495                 -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    496                 -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    497                 -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    498                $(if-expr defined(VBOX_WITH_MSI_HACK),-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
    499                 $(VBOX_MSI_ICE_IGNORE) \
    500                 -out $$@ \
    501                 $$< \
    502                 $(VBOX_PATH_WIX)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib
     573                -lib $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib \
     574                -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll \
     575                -pdbtype none \
     576                -out $$@
    503577 if defined(VBOX_WITH_COMBINED_PACKAGE) && !defined(VBOX_WITH_MSM_INSTALL)
    504578        $(MV) -f -- $$(@D)/common.cab $$(@D)/../common.cab
     
    508582        "$(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/"
    509583  # Create repack script for this step.
    510         $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/2-link-$$(PACKAGE_NAME_LANG).cmd" \
     584        $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/1-compile-$$(PACKAGE_NAME_LANG).cmd" \
    511585        'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    512586                $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
    513                 '$(VBOX_PATH_WIX)/light.exe -v -nologo ^' \
    514                 '  -loc files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
    515                 '  -loc files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
    516                 '  -ext $(VBOX_PATH_WIX)/WixUIExtension.dll ^' \
    517                 '  -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll ^' \
    518                 '  -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll ^' \
    519                $(if-expr defined(VBOX_WITH_MSI_HACK),'-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll ^',) \
    520                 '  $(VBOX_MSI_ICE_IGNORE) ^' \
     587                '$(VBOX_TOOLS_WIN_WIX_BIN) build ^' \
     588                '  files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
     589                '  files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
     590                '  -lib VirtualBox_en_US.wixlib ^' \
     591                '  -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll ^' \
     592                '  -pdbtype none ^' \
    521593                '  -out $$(@F) ^' \
    522                 '  $$(<F) ^' \
    523                 '  $(VBOX_PATH_WIX)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib ^' \
    524594               '  || exit /b1' \
    525595               ) \
     
    530600endef
    531601
    532 $(foreach lang, en_US, $(eval $(def_vbox_link_msi)))
    533 
    534 
    535 #
    536 # Merge module linking (all languages).
     602$(foreach lang, en_US, $(eval $(def_vbox_build_msi)))
     603
     604
     605#
     606# Merge module building (all languages).
     607#
     608# This takes the existing merge module WIX library (.wixlib) as input and builds a MSI merge
     609# module (.msm) out of it.
    537610#
    538611# Note: This will clean up any previous .msm to prevent dep build boxes from
    539612#       filling up with old files.
    540613#
    541 define def_vbox_link_msm
     614define def_vbox_build_msm
    542615 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang)_$(KBUILD_TARGET_ARCH).msm: \
    543                 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixobj \
     616                $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
    544617                $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    545618                $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
     
    548621                $(VBOX_WIN_INST_MAKEFILE_DEP) \
    549622                | $$$$(dir $$$$@)
    550         $$(call MSG_L1,Linking installer $$@)
     623        $$(call MSG_L1,Building merge module $$@)
    551624        $(QUIET)$(RM) -f $$(wildcard $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_BASE)-r*_$(lang).msi)
    552         kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' -- $(VBOX_PATH_WIX)/light.exe -v -nologo \
     625        kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' $(VBOX_WIN_INST_ENV) \
     626                -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
    553627                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    554628                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
    555                 -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    556                 -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    557                 $(VBOX_MSI_ICE_IGNORE) \
    558                 -out $$@ \
    559                 $$< \
    560                 $(VBOX_PATH_WIX)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib
     629                -lib $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
     630                -pdbtype none \
     631                -out $$@
    561632        $(RM) -f $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst
    562633        $(call VBOX_SIGN_MSM_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
    563634 # Create repack script for this step.
    564         $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/2-link-VBoxMerge$(module)_$(lang).cmd" \
     635        $(APPEND) -tn "$$(VBOX_WIN_INST_REPACK_DIR)/1-build-VBoxMerge$(module)_$(lang).cmd" \
    565636        'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    566637                $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
    567                 '$(VBOX_PATH_WIX)/light.exe -v -nologo ^' \
    568                 '  -loc files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
    569                 '  -loc files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
    570                 '  -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll ^' \
    571                 '  -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll ^' \
    572                 '  $(VBOX_MSI_ICE_IGNORE) ^' \
     638                '$(VBOX_TOOLS_WIN_WIX_BIN) build ^' \
     639                '  files-VirtualBox_$(lang)/Language_$(lang).wxl ^' \
     640                '  files-VirtualBox_$(lang)/License_$(lang).wxl ^' \
     641                '  $(VBOX_TOOLS_WIN_WIX_EXT) ^' \
    573642                '  -out $$(@F) ^' \
    574                 '  $$(<F) ^' \
    575                 '  $(VBOX_PATH_WIX)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib ^' \
    576643               '  || exit /b1' \
    577644                'call sign-sha1.cmd $$(@F) || exit /b1' \
     
    583650 $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
    584651        $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
    585                 $(eval $(def_vbox_link_msm)))),)
     652                $(eval $(def_vbox_build_msm))))
    586653endif
    587654
     
    618685
    619686#
    620 # MSI compile.
    621 # We've separated the processing from the compilation for repacking reasons.
    622 #
    623 define def_vbox_compile_wixobj
    624  includedep $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj.dep
    625  $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
    626  + $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix \
     687# Building a WIX library object (.wixlib).
     688# We've separated the final building from the WIX library building for repacking reasons.
     689#
     690define def_vbox_build_wixlib
     691 includedep $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixlib.dep
     692 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib \
    627693 $(if-expr "$(lang)" != "en_US",, \
    628         + $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files ): \
     694        + $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wixlib $(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files ): \
    629695                $(PATH_SUB_CURRENT)/VirtualBox.wxs \
    630696                $(PATH_SUB_CURRENT)/UserInterface.wxi \
     
    644710                | $$$$(dir $$$$@) $(if-expr "$(lang)" != "en_US",, \
    645711                        $(VBOX_WIN_INST_REPACK_DIR)/ $(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/ )
    646         $(QUIET)$(RM) -f -- "$$@"  "$(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix" "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix"
     712        $(QUIET)$(RM) -f -- "$$@"  "$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib" "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wixlib"
    647713        $(REDIRECT) \
    648714                -E 'PATH_OUT=$(subst /,\,$(PATH_OUT))' \
     
    707773                -E 'VBOX_WITH_SDS=$(if $(VBOX_WITH_SDS),yes,no)' \
    708774                -E 'VBOX_WITH_UNATTENDED=$(if $(VBOX_WITH_UNATTENDED),yes,no)' \
     775                -E 'VBOX_WITH_UNATTENDED_TEMPLATES=$(if $(VBOX_UNATTENDED_TEMPLATES),yes,no)' \
    709776                -E 'VBOX_WITH_USB=$(if $(VBOX_WITH_USB),yes,no)' \
    710777                -E 'VBOX_WITH_VBOX_IMG=$(if $(VBOX_WITH_VBOX_IMG)$(VBOX_WITH_TESTCASES),yes,no)' \
     
    717784                -E 'VBOX_VCC_TOOL_STEM=$(VBOX_VCC_TOOL_STEM)' \
    718785                -- \
    719                 $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) \
    720                         -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    721                         -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    722                         -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    723                         -p$(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix
    724         $(VBOX_PATH_WIX)/candle.exe $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix \
    725                 -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    726                 -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    727                 -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    728                 -out $$@
     786                $(VBOX_TOOLS_WIN_WIX_BIN) build $(filter-out $(VBOX_VERSION_STAMP),$$<) \
     787                        $(VBOX_TOOLS_WIN_WIX_EXT) \
     788                        -outputtype library \
     789                        -out $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib
    729790 ifeq ($(lang),en_US)
    730   # Copy preprocessed wix and change source paths to be relative.  Stuff not in ../bin needs copying.
    731         $(SED)  -e 's,$(subst /,\\,$(PATH_OUT))\\bin,..\\bin,g' \
    732                 -e 's,$(subst /,\\,$(PATH_OUT_BASE))\\win.amd64\\$(KBUILD_TYPE)\\bin,..\\..\\..\\win.amd64\\$(KBUILD_TYPE)\\bin,g' \
    733                 -e 's,$(subst /,\\,$(PATH_OUT_BASE))\\win.x86\\$(KBUILD_TYPE)\\bin,..\\..\\..\\win.x86\\$(KBUILD_TYPE)\\bin,g' \
    734                \
    735                 -e 's,$(subst /,\\,$(PATH_ROOT))\\doc\\,files-VirtualBox_$(lang)\\,g' \
    736                 -e 's,$(subst /,\\,$(VBOX_PATH_WIN_INST_SRC))\\Binary\\,files-VirtualBox_$(lang)\\,g' \
    737                 -e 's,$(subst /,\\,$(VBOX_WIN_INST_OUT_DIR))\\,,g' \
    738                 -e 's,$(subst /,\\,$(dir $(VBOX_WINDOWS_ICON_FILE))),files-VirtualBox_$(lang)\\,g' \
    739                 --output "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix" \
    740                 "$(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix"
    741         $(SED)  -n \
    742                 -e '/<\?ln /d' \
    743                 -e '/$(subst /,\\,$(PATH_ROOT))/p' \
    744                 -e '/$(subst /,\\,$(PATH_ROOT))/q2' \
    745                 "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).wix"
    746         $(SED)  -n \
    747                 -e '/<\?ln /d' \
    748                 -e 's/\\/\//g' \
    749                 -e 's,^.*"\($(PATH_ROOT)/doc/[^"]*\)".*$$(DOLLAR),\1,p' \
    750                 -e 's,^.*"\($(VBOX_PATH_WIN_INST_SRC)/Binary/[^"]*\)".*$$(DOLLAR),\1,p' \
    751                 -e 's,^.*"\($(dir $(VBOX_WINDOWS_ICON_FILE))[^"]*\)".*$$(DOLLAR),\1,p' \
    752                 --output "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files" \
    753                 "$(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wix"
    754         set -xe && for file in  `$(CAT_EXT) "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files"`; \
    755                 do $(CP_EXT) -f -- "$$(DOLLAR){file}" "$(VBOX_WIN_INST_REPACK_DIR)/files-VirtualBox_$(lang)/"; done
    756   # Create repack script for this step.
    757         $(APPEND) -tn "$(VBOX_WIN_INST_REPACK_DIR)/1-compile-VirtualBox_$(lang).cmd" \
    758         'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    759                 $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
    760                 '$(VBOX_PATH_WIX)/candle.exe VirtualBox_$(lang).wix ^' \
    761                 '  -ext $(VBOX_PATH_WIX)/WixUIExtension.dll ^' \
    762                 '  -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll ^' \
    763                 '  -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll ^' \
    764                 '  -out $$(@F) || exit /b1' \
    765                ) \
    766                '@echo Created: $$(@F)'
    767  endif
    768  # Generate wxi dependencies based on the sourceLineNumber references in the output.  Add repack file list for cleanup.
    769         $(QUIET)$(APPEND) -t '[email protected]' '$$@: \'
    770         $(QUIET)$(VBOX_XSLTPROC) $(VBOX_PATH_WIN_INST_SRC)/dep.xsl "$$@" >> "[email protected]"
    771         $(QUIET)$(VBOX_XSLTPROC) $(VBOX_PATH_WIN_INST_SRC)/dep2.xsl "$$@" | sort  | $(SED) '$!N; /^\(.*\)\n\1$$$$/!P; D' >> "[email protected]"
    772         $(QUIET)$(APPEND) -n '[email protected]' '' ''
    773  ifeq ($(lang),en_US)
    774         $(QUIET)$(APPEND) -n '[email protected]' 'define VBOX_REPACK_FILES_VirtualBox_$(lang)'
    775         $(QUIET)$(CAT_EXT) "$(VBOX_WIN_INST_REPACK_DIR)/VirtualBox_$(lang).files" >> '[email protected]'
    776         $(QUIET)$(APPEND) -n '[email protected]' '' 'endef'
    777  endif
     791  # Copy over the .wixlib into the repack directory, so that it can be used later when
     792  # doing the repacking via the shell scripts.
     793        $(CP) $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixlib $(VBOX_WIN_INST_REPACK_DIR)/
     794
     795 endif
     796
    778797
    779798 $(eval OTHER_CLEAN += $(VBOX_REPACK_FILES_VirtualBox_$(lang)))
     
    781800
    782801$(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
    783         $(eval $(def_vbox_compile_wixobj)))
    784 
    785 #
    786 # MSM (merge module) compile.
    787 #
    788 define def_vbox_compile_msm
    789  includedep $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixobj.dep
    790  $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixobj \
    791  + $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix \
     802        $(eval $(def_vbox_build_wixlib)))
     803
     804#
     805# MSM (merge module) building as a WIX library (.wixlib).
     806#
     807define def_vbox_build_msm_wixlib
     808 includedep $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib.dep
     809 $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib \
    792810 $(if-expr "$(lang)" != "en_US",, \
    793         + $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix): \
     811        + $(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wixlib): \
    794812                $(PATH_SUB_CURRENT)/VBoxMerge$(module).wxs \
    795813                $(PATH_SUB_CURRENT)/VBoxMerge$(module).wxi \
     
    868886                -E 'VBOX_WITH_SDS=$(if $(VBOX_WITH_SDS),yes,no)' \
    869887                -E 'VBOX_WITH_UNATTENDED=$(if $(VBOX_WITH_UNATTENDED),yes,no)' \
     888                -E 'VBOX_WITH_UNATTENDED_TEMPLATES=$(if $(VBOX_UNATTENDED_TEMPLATES),yes,no)' \
    870889                -E 'VBOX_WITH_VBOX_IMG=$(if $(VBOX_WITH_VBOX_IMG),yes,no)' \
    871890                -E 'VBOX_WITH_VBOXSDL=$(if $(VBOX_WITH_VBOXSDL),yes,no)' \
     
    877896                -E 'VBOX_VCC_TOOL_STEM=$(VBOX_VCC_TOOL_STEM)' \
    878897                -- \
    879                 $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) \
    880                         -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    881                         -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    882                         -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    883                         -p$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix
    884         $(VBOX_PATH_WIX)/candle.exe $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix \
    885                 -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    886                 -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    887                 -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    888                 -out $$@
     898                $(VBOX_TOOLS_WIN_WIX_BIN) build $(filter-out $(VBOX_VERSION_STAMP),$$<) \
     899                        $(VBOX_TOOLS_WIN_WIX_EXT) \
     900                        -outputtype library \
     901                        -out $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib
    889902 ifeq ($(lang),en_US)
    890   # Copy preprocessed wix and change source paths to be relative.  Stuff not in ../bin needs copying.
    891         $(SED)  -e 's,$(subst /,\\,$(PATH_OUT))\\bin,..\\bin,g' \
    892                 -e 's,$(subst /,\\,$(PATH_OUT_BASE))\\win.amd64\\$(KBUILD_TYPE)\\bin,..\\..\\..\\win.amd64\\$(KBUILD_TYPE)\\bin,g' \
    893                 -e 's,$(subst /,\\,$(PATH_OUT_BASE))\\win.x86\\$(KBUILD_TYPE)\\bin,..\\..\\..\\win.x86\\$(KBUILD_TYPE)\\bin,g' \
    894                 -e 's,$(subst /,\\,$(PATH_ROOT))\\doc\\,files-VBoxMerge$(module)_$(lang)\\,g' \
    895                 -e 's,$(subst /,\\,$(VBOX_PATH_WIN_INST_SRC))\\Binary\\,files-VBoxMerge$(module)_$(lang)\\,g' \
    896                 -e 's,$(subst /,\\,$(dir $(VBOX_WINDOWS_ICON_FILE))),files-VBoxMerge$(module)_$(lang)\\,g' \
    897                 -e 's,$(subst /,\\,$(VBOX_PATH_WIN_INST_SRC))\\,,g' \
    898                 --output "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix" \
    899                 "$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix"
    900         $(SED)  -n \
    901                 -e '/<\?ln /d' \
    902                 -e '/$(subst /,\\,$(PATH_ROOT))/p' \
    903                 -e '/$(subst /,\\,$(PATH_ROOT))/q2' \
    904                 "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).wix"
    905         $(SED)  -n \
    906                 -e '/<\?ln /d' \
    907                 -e 's/\\/\//g' \
    908                 -e 's,^.*"\($(PATH_ROOT)/doc/[^"]*\)".*$$(DOLLAR),\1,p' \
    909                 -e 's,^.*"\($(VBOX_PATH_WIN_INST_SRC)/Binary/[^"]*\)".*$$(DOLLAR),\1,p' \
    910                 -e 's,^.*"\($(dir $(VBOX_WINDOWS_ICON_FILE))[^"]*\)".*$$(DOLLAR),\1,p' \
    911                 --output "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).files" \
    912                 "$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wix"
     903  # Copy over the .wixlib into the repack directory, so that it can be used later when
     904  # doing the repacking via the shell scripts.
     905        $(CP) $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixlib $(VBOX_WIN_INST_REPACK_DIR)/
    913906        $(MKDIR) -p -- "$(VBOX_WIN_INST_REPACK_DIR)/files-VBoxMerge$(module)_$(lang)/"
    914         set -xe && for file in  `$(CAT_EXT) "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).files"`; \
    915                 do $(CP_EXT) -f -- "$$(DOLLAR){file}" "$(VBOX_WIN_INST_REPACK_DIR)/files-VBoxMerge$(module)_$(lang)/"; done
    916   # Create repack script for this step.
    917         $(APPEND) -tn "$(VBOX_WIN_INST_REPACK_DIR)/1-compile-VBoxMerge$(module)_$(lang).cmd" \
    918         'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    919                 $(subst $(KBUILD_DEVTOOLS),%KBUILD_DEVTOOLS%,\
    920                 '$(VBOX_PATH_WIX)/candle.exe VBoxMerge$(module)_$(lang).wix ^' \
    921                 '  -ext $(VBOX_PATH_WIX)/WixUIExtension.dll ^'\
    922                 '  -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll ^' \
    923                 '  -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll ^' \
    924                 '  -out $$(@F) || exit /b1' \
    925                ) \
    926                '@echo Created: $$(@F)'
    927  endif
    928  # Generate wxi dependencies based on the sourceLineNumber references in the output.  Add repack file list for cleanup.
    929         $(QUIET)$(APPEND) -t '[email protected]' '$$@: \'
    930         $(QUIET)$(VBOX_XSLTPROC) $(VBOX_PATH_WIN_INST_SRC)/dep.xsl "$$@" >> "[email protected]"
    931         $(QUIET)$(VBOX_XSLTPROC) $(VBOX_PATH_WIN_INST_SRC)/dep2.xsl "$$@" | sort  | $(SED) '$!N; /^\(.*\)\n\1$$$$/!P; D' >> "[email protected]"
    932         $(QUIET)$(APPEND) -n '[email protected]' '' ''
    933  ifeq ($(lang),en_US)
    934         $(QUIET)$(APPEND) -n '[email protected]' 'define VBOX_REPACK_FILES_VBoxMerge$(module)_$(lang)'
    935         $(QUIET)$(CAT_EXT) "$(VBOX_WIN_INST_REPACK_DIR)/VBoxMerge$(module)_$(lang).files" >> '[email protected]'
    936         $(QUIET)$(APPEND) -n '[email protected]' '' 'endef'
    937907 endif
    938908
     
    942912$(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
    943913        $(foreach lang,$(VBOX_INSTALLER_MERGE_LANGUAGES), \
    944                 $(eval $(def_vbox_compile_msm))))
     914                $(eval $(def_vbox_build_msm_wixlib))))
    945915
    946916#
     
    974944$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi: $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk | $$(dir $$@)
    975945        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    976         $(APPEND) $@ '<Include>'
     946        $(APPEND) $@ '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    977947        $(APPEND) -n $@ $(foreach lang,$(VBOX_APPROVED_GUI_LANGUAGES), \
    978948                     '  <File Id="nlsqt${lang}"  Name="qt_${lang}.qm"         DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm"         />' \
     
    999969        $(APPEND) -t -n $@ \
    1000970                '<?xml version="1.0" ?>' \
    1001                 '<Include>' \
     971                '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">' \
    1002972                $(foreach dll \
    1003973                ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC100",msvcr100.dll msvcp100.dll \
     
    1018988        $(APPEND) -t -n $@ \
    1019989                '<?xml version="1.0" ?>' \
    1020                 '<Include>' \
     990                '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">' \
    1021991                $(foreach dll \
    1022992                ,$(if-expr "$(VBOX_VCC_TOOL_STEM)"=="VCC100",msvcr100.dll msvcp100.dll \
     
    10331003        $(APPEND) -t -n $@ \
    10341004                '<?xml version="1.0" ?>' \
    1035                 '<Include>'
     1005                '<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">'
    10361006ifdef VBOX_UNATTENDED_TEMPLATES
    10371007        $(APPEND) -n $@ \
    10381008                '  <Directory Id="dir_VBoxUnattendedTemplates" Name="UnattendedTemplates">' \
    1039                 '    <Component Id="cp_UnattendedTemplates" Guid="0571550d-aaa5-4723-c17b-5ddcc29f5686" Win64="$$(var.Property_Win64)">' \
     1009                '    <Component Id="cp_UnattendedTemplates" Guid="0571550d-aaa5-4723-c17b-5ddcc29f5686" Bitness="$$(var.Property_Bitness)">' \
    10401010                $(foreach file,$(VBOX_UNATTENDED_TEMPLATES), \
    10411011                '      <File Id="$(file)" Name="$(file)" Source="$$(env.PATH_OUT)\bin\UnattendedTemplates\$(file)" />') \
     
    10531023# from the MS Installer SDK.
    10541024#
     1025# Only contains the minimal set of stuff to get a language-specific .msi built.
     1026#
    10551027define def_vbox_create_mst
    10561028 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst \
    10571029 + $(VBOX_WIN_INST_REPACK_DIR)/$(lang).mst: \
    10581030                $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
    1059                 $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
    10601031                $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    10611032                $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
     
    10671038                | $$$$(dir $$$$@) $(VBOX_WIN_INST_REPACK_DIR)/
    10681039        $(call MSG_L1,Creating language diff for $(lang))
    1069         kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' -- $(VBOX_PATH_WIX)/light.exe -v -nologo \
     1040        kmk_time $$(REDIRECT_EXT) -E WIX_TEMP='$$(subst /,\,$$(@D))' $(VBOX_WIN_INST_ENV) \
     1041                -- $(VBOX_TOOLS_WIN_WIX_BIN) build \
    10701042                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    10711043                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
    1072                 -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
    1073                 -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
    1074                 -ext $(VBOX_PATH_WIX)/WixUtilExtension.dll \
    1075                $(if-expr defined(VBOX_WITH_MSI_HACK),-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
    1076                 $(VBOX_MSI_ICE_IGNORE) \
    1077                 -out $$(@D)/$(PACKAGE_NAME_LANG)_$(lang).msi \
    1078                 $$(@D)/VirtualBox_$(lang).wixobj \
    1079                 $(VBOX_PATH_WIX)/difxapp_$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86",x86,x64).wixlib
     1044                -lib $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_en_US.wixlib \
     1045                -ext $(VBOX_TOOLS_WIN_WIXEXT_DIR)/WixToolset.Util.wixext.dll \
     1046                -pdbtype none \
     1047                -out $$(@D)/$(PACKAGE_NAME_LANG)_$(lang).msi
    10801048        $(REDIRECT) -C $$(@D) -- $$(VBOX_PATH_MSITRAN) -g $$< $(PACKAGE_NAME_LANG)_$(lang).msi $(lang).mst
    10811049        $(CP) -f -- "$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst" "$(VBOX_WIN_INST_REPACK_DIR)/$(lang).mst"
     
    11051073# The multilingual installer rule.
    11061074$(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi \
    1107 + $(VBOX_WIN_INST_REPACK_DIR)/3-multilingual-$(PACKAGE_NAME_LANG).cmd: \
     1075+ $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd: \
    11081076                $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
    11091077                $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)),$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst)
    11101078        $(call MSG_L1,Creating final multilingual MSI)
    11111079        $(QUIET)$(RM) -f -- \
    1112                 $(wildcard $(@D)/$(PACKAGE_BASE)-r*.msi $(VBOX_WIN_INST_REPACK_DIR)/3-multilingual-$(PACKAGE_BASE)-r*.cmd )
     1080                $(wildcard $(@D)/$(PACKAGE_BASE)-r*.msi $(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_BASE)-r*.cmd )
    11131081        $(CP) -f -- "$<" "$@"
    11141082
     
    11221090
    11231091# Create repack script for this step.
    1124         $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/3-multilingual-$(PACKAGE_NAME_LANG).cmd" \
     1092        $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/2-multilingual-$(PACKAGE_NAME_LANG).cmd" \
    11251093                'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    11261094                'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
     
    11511119 #
    11521120 $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL) \
    1153  + $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
     1121 + $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
    11541122                $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.x86) \
    11551123                $(PATH_MULTIARCH_TEMP)/$(PACKAGE_NAME_MULTIARCH.amd64) \
     
    11591127        $(QUIET)$(RM) -f -- $(wildcard $(subst r$(VBOX_SVN_REV),r*, \
    11601128                $@ \
    1161                 $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
     1129                $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
    11621130        $(if-expr defined(VBOX_WITH_MSM_INSTALL),,$(call VBOX_SIGN_CAB_FN,$(PACKAGE_NAME_MULTIARCH_COMMONCAB)))
    11631131        $(REDIRECT) -C $(@D) -- \
     
    11701138        $(call VBOX_SIGN_FILE_FN,$@)
    11711139 # Create repack script for this step.
    1172         $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(@F).cmd" \
     1140        $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(@F).cmd" \
    11731141                'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    11741142                'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
     
    11931161 #
    11941162 $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL) \
    1195  + $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
     1163 + $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd: \
    11961164                $(PACKAGE_NAME_FINAL) \
    11971165                $(PATH_STAGE_BIN)/VBoxStub.exe \
     
    12001168        $(QUIET)$(RM) -f -- $(wildcard $(subst r$(VBOX_SVN_REV),r*, \
    12011169                $@ \
    1202                 $(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
     1170                $(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(PACKAGE_NAME_MULTIARCH_FINAL).cmd ) )
    12031171        $(REDIRECT) -C "$(@D)" -- \
    12041172                $(VBoxStubBld_1_TARGET) -out $@ \
     
    12081176        $(call VBOX_SIGN_FILE_FN,$@,,,,,,timed)
    12091177 # Create repack script for this step.
    1210         $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/4-multiarch-$(@F).cmd" \
     1178        $(APPEND) -nt "$(VBOX_WIN_INST_REPACK_DIR)/3-multiarch-$(@F).cmd" \
    12111179                'if ".%KBUILD_DEVTOOLS%" == "." (echo KBUILD_DEVTOOLS is not set & exit /b1)' \
    12121180                'if ".%KBUILD_BIN_PATH%" == "." (echo KBUILD_BIN_PATH is not set & exit /b1)' \
Note: See TracChangeset for help on using the changeset viewer.

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