Browse Source

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
Brad King 1 year ago
parent
commit
614100dbf6
2 changed files with 23 additions and 6 deletions
  1. 16 3
      Help/cpack_gen/wix.rst
  2. 7 3
      Modules/Internal/CPack/CPackWIX.cmake

+ 16 - 3
Help/cpack_gen/wix.rst

@@ -453,19 +453,23 @@ 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.
 
+   This is the default if :variable:`CPACK_WIX_VERSION` is set to any
+   value other than ``3``.
+
  ``perUser``
    Not yet supported. This is reserved for future use.
 
  ``NONE``
    Create an installer without any ``InstallScope`` attribute.
 
-   This is not supported if :variable:`CPACK_WIX_VERSION` is set
-   to any value other than ``3``.
+   If :variable:`CPACK_WIX_VERSION` is not set, or is set to ``3``, this
+   value is the default to preserve compatibility with 3.28 and lower.
+   Otherwise, this value is not supported.
 
    .. deprecated:: 3.29
 
@@ -475,4 +479,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/

+ 7 - 3
Modules/Internal/CPack/CPackWIX.cmake

@@ -11,6 +11,10 @@ if(CPACK_WIX_VERSION VERSION_GREATER_EQUAL 4)
   if(NOT CPACK_WIX_EXECUTABLE)
     message(FATAL_ERROR "Could not find the 'wix' executable.")
   endif()
+
+  if(NOT DEFINED CPACK_WIX_INSTALL_SCOPE)
+    set(CPACK_WIX_INSTALL_SCOPE "perMachine")
+  endif()
 else()
   find_program(CPACK_WIX_CANDLE_EXECUTABLE candle
     PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin")
@@ -23,8 +27,8 @@ else()
   if(NOT CPACK_WIX_LIGHT_EXECUTABLE)
     message(FATAL_ERROR "Could not find the WiX light executable.")
   endif()
-endif()
 
-if(NOT DEFINED CPACK_WIX_INSTALL_SCOPE)
-  set(CPACK_WIX_INSTALL_SCOPE "perMachine")
+  if(NOT DEFINED CPACK_WIX_INSTALL_SCOPE)
+    set(CPACK_WIX_INSTALL_SCOPE "NONE")
+  endif()
 endif()