1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-15 03:48:02 +08:00

CPack: Change CPACK_PRODUCTBUILD_DOMAINS default to true (CMP0161)

Fixes: #23351
This commit is contained in:
Craig Scott
2024-01-28 17:57:58 +11:00
parent 4e7f2397e4
commit 339ae33e55
14 changed files with 99 additions and 3 deletions

View File

@@ -91,8 +91,9 @@ macOS using ProductBuild:
.. versionadded:: 3.23 .. versionadded:: 3.23
This option enables more granular control over where the product may be This option enables more granular control over where the product may be
installed. When it is set to true, a ``domains`` element of the following installed. When it is set to true (see policy :policy:`CMP0161`), a
form will be added to the productbuild Distribution XML: ``domains`` element of the following form will be added to the
productbuild Distribution XML:
.. code-block:: xml .. code-block:: xml

View File

@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.29
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1
CMP0161: CPACK_PRODUCTBUILD_DOMAINS defaults to true. </policy/CMP0161>
CMP0160: More read-only target properties now error when trying to set them. </policy/CMP0160> CMP0160: More read-only target properties now error when trying to set them. </policy/CMP0160>
CMP0159: file(STRINGS) with REGEX updates CMAKE_MATCH_<n>. </policy/CMP0159> CMP0159: file(STRINGS) with REGEX updates CMAKE_MATCH_<n>. </policy/CMP0159>
CMP0158: add_test() honors CMAKE_CROSSCOMPILING_EMULATOR only when cross-compiling. </policy/CMP0158> CMP0158: add_test() honors CMAKE_CROSSCOMPILING_EMULATOR only when cross-compiling. </policy/CMP0158>

36
Help/policy/CMP0161.rst Normal file
View File

@@ -0,0 +1,36 @@
CMP0161
-------
.. versionadded:: 3.29
The :variable:`CPACK_PRODUCTBUILD_DOMAINS` variable defaults to true.
Before CMake 3.29, the :variable:`CPACK_PRODUCTBUILD_DOMAINS` variable is
unset by default. When using the :cpack_gen:`CPack productbuild Generator`,
this disables the use of the ``domains`` attribute in the productbuild
Distribution XML, and falls back to the ``auth`` attribute instead.
These attributes control where a productbuild package is allowed to be
installed. But the ``auth`` attribute has been deprecated by Apple,
so projects should migrate to using ``domains`` instead.
CMake 3.29 and above prefer to use a default value of true for
:variable:`CPACK_PRODUCTBUILD_DOMAINS`, which means ``domains`` will be used
by default unless the project explicitly sets
:variable:`CPACK_PRODUCTBUILD_DOMAINS` to false.
This policy provides compatibility with projects that enabled the
:cpack_gen:`CPack productbuild Generator`, but did not explicitly set
:variable:`CPACK_PRODUCTBUILD_DOMAINS`.
The ``OLD`` behavior for this policy is to leave
:variable:`CPACK_PRODUCTBUILD_DOMAINS` unset if it hasn't been set.
The ``NEW`` behavior for this policy is to use a default value of true for
:variable:`CPACK_PRODUCTBUILD_DOMAINS`.
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.29
.. |WARNS_OR_DOES_NOT_WARN| replace:: warns
.. include:: STANDARD_ADVICE.txt
Note that a warning will only be emitted if the
:variable:`CPACK_BINARY_PRODUCTBUILD <CPACK_BINARY_<GENNAME>>` variable is
set to true and the project is being built for an Apple platform.
.. include:: DEPRECATED.txt

View File

@@ -0,0 +1,5 @@
productbuild-domains-policy
---------------------------
* The :variable:`CPACK_PRODUCTBUILD_DOMAINS` variable now defaults to true.
See policy :policy:`CMP0161`.

View File

@@ -883,6 +883,24 @@ endif()
# WiX specific variables # WiX specific variables
_cpack_set_default(CPACK_WIX_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}") _cpack_set_default(CPACK_WIX_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}")
# productbuild specific variables
cmake_policy(GET CMP0161 _CPack_CMP0161)
if("x${_CPack_CMP0161}x" STREQUAL "xNEWx")
_cpack_set_default(CPACK_PRODUCTBUILD_DOMAINS ON)
elseif(APPLE AND CPACK_BINARY_PRODUCTBUILD AND
NOT DEFINED CPACK_PRODUCTBUILD_DOMAINS AND
NOT "x${_CPack_CMP0161}x" STREQUAL "xOLDx")
cmake_policy(GET_WARNING CMP0161 _CMP0161_warning)
message(AUTHOR_WARNING
"${_CMP0161_warning}\n"
"For compatibility, CPACK_PRODUCTBUILD_DOMAINS will remain unset. "
"Explicitly setting CPACK_PRODUCTBUILD_DOMAINS or setting policy CMP0161 "
"to NEW will prevent this warning."
)
unset(_CMP0161_warning)
endif()
unset(_CPack_CMP0161)
# set sysroot so SDK tools can be used # set sysroot so SDK tools can be used
if(CMAKE_OSX_SYSROOT) if(CMAKE_OSX_SYSROOT)
_cpack_set_default(CPACK_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}") _cpack_set_default(CPACK_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")

View File

@@ -491,6 +491,8 @@ class cmMakefile;
SELECT( \ SELECT( \
POLICY, CMP0160, \ POLICY, CMP0160, \
"More read-only target properties now error when trying to set them.", 3, \ "More read-only target properties now error when trying to set them.", 3, \
29, 0, cmPolicies::WARN) \
SELECT(POLICY, CMP0161, "CPACK_PRODUCTBUILD_DOMAINS defaults to true.", 3, \
29, 0, cmPolicies::WARN) 29, 0, cmPolicies::WARN)
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)

View File

@@ -0,0 +1,3 @@
include(${RunCMake_SOURCE_DIR}/check.cmake)
test_variable(CPACK_PRODUCTBUILD_DOMAINS "ON")

View File

@@ -0,0 +1,2 @@
cmake_policy(SET CMP0161 NEW)
set(CPACK_BINARY_PRODUCTBUILD ON CACHE BOOL "" FORCE)

View File

@@ -0,0 +1,5 @@
include(${RunCMake_SOURCE_DIR}/check.cmake)
if(DEFINED CPACK_PRODUCTBUILD_DOMANS)
message(FATAL_ERROR "CPACK_PRODUCTBUILD_DOMANS was defined, but it should not have been")
endif()

View File

@@ -0,0 +1,2 @@
cmake_policy(SET CMP0161 OLD)
set(CPACK_BINARY_PRODUCTBUILD ON CACHE BOOL "" FORCE)

View File

@@ -0,0 +1,5 @@
include(${RunCMake_SOURCE_DIR}/check.cmake)
if(DEFINED CPACK_PRODUCTBUILD_DOMANS)
message(FATAL_ERROR "CPACK_PRODUCTBUILD_DOMANS was defined, but it should not have been")
endif()

View File

@@ -0,0 +1,12 @@
^CMake Warning \(dev\) at [^
]*/Modules/CPack\.cmake:[0-9]+ \(message\):
Policy CMP0161 is not set: CPACK_PRODUCTBUILD_DOMAINS defaults to true\.
Run "cmake --help-policy CMP0161" for policy details\. Use the cmake_policy
command to set the policy and suppress this warning\.
For compatibility, CPACK_PRODUCTBUILD_DOMAINS will remain unset\.
Explicitly setting CPACK_PRODUCTBUILD_DOMAINS or setting policy CMP0161 to
NEW will prevent this warning\.
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
This warning is for project developers\. Use -Wno-dev to suppress it\.$

View File

@@ -0,0 +1 @@
set(CPACK_BINARY_PRODUCTBUILD ON CACHE BOOL "" FORCE)

View File

@@ -2,6 +2,9 @@ include(RunCMake)
run_cmake(CMP0133-NEW) run_cmake(CMP0133-NEW)
run_cmake(CMP0133-WARN) run_cmake(CMP0133-WARN)
run_cmake(CMP0161-NEW)
run_cmake(CMP0161-OLD)
run_cmake(CMP0161-WARN)
run_cmake(Simple) run_cmake(Simple)
run_cmake(Default) run_cmake(Default)
run_cmake(Special) run_cmake(Special)