From 01670894849ca79725b39b5bee9f75a4b5b9419b Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 5 Jun 2024 13:40:15 -0400 Subject: CPack/WiX: Restore default (missing) InstallScope from 3.28 and lower In commit 60661f6770 (CPack/WiX: Make InstallScope configurable, 2023-11-07, v3.29.0-rc1~413^2) the `CPACK_WIX_INSTALL_SCOPE` default was set to `perMachine`. While installers created with `perMachine` have better behavior on their own than installers created without any `InstallScope`, they do not cleanly convert existing installations on updates. Fixes: #26029 --- Help/cpack_gen/wix.rst | 13 ++++++++++++- Help/release/3.29.rst | 26 +++++++++++++++++++------- Modules/Internal/CPack/CPackWIX.cmake | 2 +- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Help/cpack_gen/wix.rst b/Help/cpack_gen/wix.rst index cb56c9d..43e3ff7 100644 --- a/Help/cpack_gen/wix.rst +++ b/Help/cpack_gen/wix.rst @@ -346,7 +346,7 @@ Windows using WiX. This variable can be optionally set to specify the ``InstallScope`` of the installer: - ``perMachine`` (default) + ``perMachine`` Create an installer that installs for all users and requires administrative privileges. Start menu entries created by the installer are visible to all users. @@ -357,6 +357,8 @@ Windows using WiX. ``NONE`` Create an installer without any ``InstallScope`` attribute. + This is the default to preserve compatibility with CPack 3.28 and older. + .. deprecated:: 3.29 This value is only for compatibility with the inconsistent behavior used @@ -365,4 +367,13 @@ Windows using WiX. but the start menu entry and uninstaller registration are created only for the current user. + .. warning:: + + An installation performed by an installer created without any + ``InstallScope`` cannot be cleanly updated or replaced by an + installer with an ``InstallScope``. In order to transition + a project's installers from ``NONE`` to ``perMachine``, the + latter installer should be distributed with instructions to + first manually uninstall any older version. + See https://wixtoolset.org/docs/v3/xsd/wix/package/ diff --git a/Help/release/3.29.rst b/Help/release/3.29.rst index 3903c91..10912b2 100644 --- a/Help/release/3.29.rst +++ b/Help/release/3.29.rst @@ -193,13 +193,6 @@ Other Changes * The :variable:`CPACK_PRODUCTBUILD_DOMAINS` variable now defaults to true. See policy :policy:`CMP0161`. -* The :cpack_gen:`CPack WIX Generator` now produces WiX MSI installers - that create start menu and uninstall entries for all users by default, - as documented by the :variable:`CPACK_WIX_INSTALL_SCOPE` variable - ``perMachine`` value. Previously, without a custom WiX template, - it produced installers that would only create start menu and uninstall - entries for the current user, even though they install for all users. - Updates ======= @@ -218,3 +211,22 @@ Changes made since CMake 3.29.0 include the following. * These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions. + +3.29.5 +------ + +* The :cpack_gen:`CPack WIX Generator`'s :variable:`CPACK_WIX_INSTALL_SCOPE` + variable, new in 3.29, now defaults to ``NONE``. This restores + compatibility with behavior of 3.28 and below: without a custom WiX + template, it produces installers that only create start menu and + uninstall entries for the current user, even though they install + for all users. + + In 3.29.0 through 3.29.4, ``CPACK_WIX_INSTALL_SCOPE`` defaulted to + ``perMachine``. This created MSI installers that create start menu + and uninstall entries for all users by default. While this behavior + is better on its own, these installers do not cleanly replace existing + installations created with MSI installers produced by 3.28 and below. + 3.29.5 reverts the default for compatibility. Projects may transition + to ``perMachine`` on their own schedule by setting + ``CPACK_WIX_INSTALL_SCOPE``. diff --git a/Modules/Internal/CPack/CPackWIX.cmake b/Modules/Internal/CPack/CPackWIX.cmake index 5fe772e..c40ddd5 100644 --- a/Modules/Internal/CPack/CPackWIX.cmake +++ b/Modules/Internal/CPack/CPackWIX.cmake @@ -20,5 +20,5 @@ if(NOT CPACK_WIX_LIGHT_EXECUTABLE) endif() if(NOT DEFINED CPACK_WIX_INSTALL_SCOPE) - set(CPACK_WIX_INSTALL_SCOPE "perMachine") + set(CPACK_WIX_INSTALL_SCOPE "NONE") endif() -- cgit v0.12