From 677f3d721b6a469c0312abc0f880ffd017f8911a Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 19 Mar 2024 09:35:09 -0400 Subject: Tests/RunCMake/CMakePackage: Add architecture i386 for macOS on Xcode < 10 Use every architecture each version of Xcode has in `$(ARCHS_STANDARD)`. --- Tests/RunCMake/CMakePackage/RunCMakeTest.cmake | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake index 32fc7fb..7d9d42a 100644 --- a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake @@ -50,10 +50,17 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 12) set(macos_archs "x86_64;arm64") + set(tvos_sim_archs "x86_64;arm64") set(watch_sim_archs "x86_64") set(select_archs "arm64;x86_64") - else() + elseif(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 10) set(macos_archs "x86_64") + set(tvos_sim_archs "x86_64") + set(watch_sim_archs "i386") + set(select_archs "") + else() + set(macos_archs "i386;x86_64") + set(tvos_sim_archs "x86_64") set(watch_sim_archs "i386") set(select_archs "") endif() @@ -81,8 +88,7 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") apple_export(ios-simulator-${arch} iOS "${arch}" iphonesimulator) endforeach() endif() - - apple_export(tvos-simulator tvOS "${macos_archs}" appletvsimulator) + apple_export(tvos-simulator tvOS "${tvos_sim_archs}" appletvsimulator) if(enable_visionos) apple_export(visionos-simulator visionOS "${macos_archs}" xrsimulator) endif() @@ -101,7 +107,7 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") apple_import(ios-simulator-${arch} iOS "${arch}" iphonesimulator) endforeach() endif() - apple_import(tvos-simulator tvOS "${macos_archs}" appletvsimulator) + apple_import(tvos-simulator tvOS "${tvos_sim_archs}" appletvsimulator) if(enable_visionos) apple_import(visionos-simulator visionOS "${macos_archs}" xrsimulator) endif() -- cgit v0.12 From 8959ad9db1e88527ad3d1b42347785a4b6fa6c65 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 18 Mar 2024 10:51:22 -0400 Subject: Tests/RunCMake/CMakePackage: Fix Apple architecture selection argument order Call `generate_apple_architecture_selection_file` with matching order in `SINGLE_ARCHITECTURES` and `SINGLE_ARCHITECTURE_INCLUDE_FILES`. --- Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake index 9011180d..cb4f7aa 100644 --- a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake +++ b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake @@ -1,11 +1,14 @@ include(apple-export-common.cmake) if(IOS_SIMULATOR_SELECT_ARCHS) + set(IOS_SIMULATOR_SELECT_FILES "${IOS_SIMULATOR_SELECT_ARCHS}") + list(TRANSFORM IOS_SIMULATOR_SELECT_FILES PREPEND "lib/ios-simulator-") + list(TRANSFORM IOS_SIMULATOR_SELECT_FILES APPEND "/cmake/mylib/mylib-targets.cmake") generate_apple_architecture_selection_file(mylib-select-arch-install.cmake INSTALL_DESTINATION lib/ios-simulator/cmake/mylib INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} SINGLE_ARCHITECTURES "${IOS_SIMULATOR_SELECT_ARCHS}" - SINGLE_ARCHITECTURE_INCLUDE_FILES "lib/ios-simulator-arm64/cmake/mylib/mylib-targets.cmake;lib/ios-simulator-x86_64/cmake/mylib/mylib-targets.cmake" + SINGLE_ARCHITECTURE_INCLUDE_FILES "${IOS_SIMULATOR_SELECT_FILES}" UNIVERSAL_ARCHITECTURES "${IOS_SIMULATOR_SELECT_ARCHS}" UNIVERSAL_INCLUDE_FILE "lib/ios-simulator/cmake/mylib/mylib-targets.cmake" ) -- cgit v0.12 From be642f6ed52e3633e6a173a2d39043a5f10c91eb Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 18 Mar 2024 10:53:22 -0400 Subject: generate_apple_architecture_selection_file: Simplify signature Allow callers to pass multiple values to list-valued arguments instead of putting the entire list in a single quoted argument. Fixes: #25779 --- Modules/CMakePackageConfigHelpers.cmake | 27 ++++++++++------------ .../apple-export-ios-simulator-common.cmake | 6 ++--- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake index b5bcd02..59d604a 100644 --- a/Modules/CMakePackageConfigHelpers.cmake +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -271,9 +271,9 @@ Generating an Apple Platform Selection File generate_apple_architecture_selection_file( INSTALL_DESTINATION [INSTALL_PREFIX ] - [SINGLE_ARCHITECTURES - SINGLE_ARCHITECTURE_INCLUDE_FILES ] - [UNIVERSAL_ARCHITECTURES + [SINGLE_ARCHITECTURES ... + SINGLE_ARCHITECTURE_INCLUDE_FILES ...] + [UNIVERSAL_ARCHITECTURES ... UNIVERSAL_INCLUDE_FILE ] ) @@ -292,21 +292,17 @@ Generating an Apple Platform Selection File is not passed, the :variable:`CMAKE_INSTALL_PREFIX` variable will be used instead. - ``SINGLE_ARCHITECTURES `` - A :ref:`semicolon-separated list ` of - architectures provided by entries of - ``SINGLE_ARCHITECTURE_INCLUDE_FILES``. + ``SINGLE_ARCHITECTURES ...`` + Architectures provided by entries of ``SINGLE_ARCHITECTURE_INCLUDE_FILES``. - ``SINGLE_ARCHITECTURE_INCLUDE_FILES `` - A :ref:`semicolon-separated list ` of - architecture-specific files. One of them will be loaded + ``SINGLE_ARCHITECTURE_INCLUDE_FILES ...`` + Architecture-specific files. One of them will be loaded when :variable:`CMAKE_OSX_ARCHITECTURES` contains a single architecture matching the corresponding entry of ``SINGLE_ARCHITECTURES``. - ``UNIVERSAL_ARCHITECTURES `` - A :ref:`semicolon-separated list ` of - architectures provided by the ``UNIVERSAL_INCLUDE_FILE``. + ``UNIVERSAL_ARCHITECTURES ...`` + Architectures provided by the ``UNIVERSAL_INCLUDE_FILE``. ``UNIVERSAL_INCLUDE_FILE `` A file to load when :variable:`CMAKE_OSX_ARCHITECTURES` contains @@ -526,12 +522,13 @@ function(generate_apple_architecture_selection_file _output_file) set(_single INSTALL_DESTINATION INSTALL_PREFIX + UNIVERSAL_INCLUDE_FILE + ) + set(_multi SINGLE_ARCHITECTURES SINGLE_ARCHITECTURE_INCLUDE_FILES UNIVERSAL_ARCHITECTURES - UNIVERSAL_INCLUDE_FILE ) - set(_multi) cmake_parse_arguments(PARSE_ARGV 0 _gasf "${_options}" "${_single}" "${_multi}") if(NOT _gasf_INSTALL_DESTINATION) diff --git a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake index cb4f7aa..ab66407 100644 --- a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake +++ b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake @@ -7,9 +7,9 @@ if(IOS_SIMULATOR_SELECT_ARCHS) generate_apple_architecture_selection_file(mylib-select-arch-install.cmake INSTALL_DESTINATION lib/ios-simulator/cmake/mylib INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} - SINGLE_ARCHITECTURES "${IOS_SIMULATOR_SELECT_ARCHS}" - SINGLE_ARCHITECTURE_INCLUDE_FILES "${IOS_SIMULATOR_SELECT_FILES}" - UNIVERSAL_ARCHITECTURES "${IOS_SIMULATOR_SELECT_ARCHS}" + SINGLE_ARCHITECTURES ${IOS_SIMULATOR_SELECT_ARCHS} + SINGLE_ARCHITECTURE_INCLUDE_FILES ${IOS_SIMULATOR_SELECT_FILES} + UNIVERSAL_ARCHITECTURES ${IOS_SIMULATOR_SELECT_ARCHS} UNIVERSAL_INCLUDE_FILE "lib/ios-simulator/cmake/mylib/mylib-targets.cmake" ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mylib-select-arch-install.cmake DESTINATION lib/ios-simulator/cmake/mylib RENAME mylib-select-arch.cmake) -- cgit v0.12 From 2149dbd379896fd1c80700fefecc2b812a267b41 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 18 Mar 2024 12:51:00 -0400 Subject: generate_apple_architecture_selection_file: Document $(ARCHS_STANDARD) support Also add a test case. Fixes: #25780 --- Modules/CMakePackageConfigHelpers.cmake | 4 ++++ Tests/RunCMake/CMakePackage/RunCMakeTest.cmake | 3 +++ Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake | 2 +- .../RunCMake/CMakePackage/apple-import-ios-simulator-xcode-stdout.txt | 1 + Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode.cmake | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode-stdout.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode.cmake diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake index 59d604a..0c04608 100644 --- a/Modules/CMakePackageConfigHelpers.cmake +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -304,6 +304,10 @@ Generating an Apple Platform Selection File ``UNIVERSAL_ARCHITECTURES ...`` Architectures provided by the ``UNIVERSAL_INCLUDE_FILE``. + The list may include ``$(ARCHS_STANDARD)`` to support consumption using + the :generator:`Xcode` generator, but the architectures should always + be listed individually too. + ``UNIVERSAL_INCLUDE_FILE `` A file to load when :variable:`CMAKE_OSX_ARCHITECTURES` contains a (non-strict) subset of the ``UNIVERSAL_ARCHITECTURES`` and diff --git a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake index 7d9d42a..ccf0a86 100644 --- a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake @@ -102,6 +102,9 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") endif() apple_import(watchos watchOS "${watch_archs}" watchos) apple_import(ios-simulator iOS "${macos_archs}" iphonesimulator) + if(RunCMake_GENERATOR STREQUAL "Xcode") + apple_import(ios-simulator-xcode iOS "$(ARCHS_STANDARD)" iphonesimulator) + endif() if(select_archs) foreach(arch IN LISTS macos_archs) apple_import(ios-simulator-${arch} iOS "${arch}" iphonesimulator) diff --git a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake index ab66407..c935c3a 100644 --- a/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake +++ b/Tests/RunCMake/CMakePackage/apple-export-ios-simulator-common.cmake @@ -9,7 +9,7 @@ if(IOS_SIMULATOR_SELECT_ARCHS) INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} SINGLE_ARCHITECTURES ${IOS_SIMULATOR_SELECT_ARCHS} SINGLE_ARCHITECTURE_INCLUDE_FILES ${IOS_SIMULATOR_SELECT_FILES} - UNIVERSAL_ARCHITECTURES ${IOS_SIMULATOR_SELECT_ARCHS} + UNIVERSAL_ARCHITECTURES ${IOS_SIMULATOR_SELECT_ARCHS} $(ARCHS_STANDARD) UNIVERSAL_INCLUDE_FILE "lib/ios-simulator/cmake/mylib/mylib-targets.cmake" ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mylib-select-arch-install.cmake DESTINATION lib/ios-simulator/cmake/mylib RENAME mylib-select-arch.cmake) diff --git a/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode-stdout.txt b/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode-stdout.txt new file mode 100644 index 0000000..4ca925d --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode-stdout.txt @@ -0,0 +1 @@ +loaded: '[^']*/Tests/RunCMake/CMakePackage/apple-install/lib/ios-simulator/cmake/mylib/mylib-targets.cmake' diff --git a/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode.cmake b/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode.cmake new file mode 100644 index 0000000..90624a0 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-ios-simulator-xcode.cmake @@ -0,0 +1 @@ +include(apple-import-ios-simulator.cmake) -- cgit v0.12 From 85d6d3b2e3537b7730542dc410dd6540ee61fcae Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 18 Mar 2024 11:22:47 -0400 Subject: generate_apple_*_selection_file: Add option to capture errors Add an option to capture error messages in a variable instead of terminating with a fatal error. Fixes: #25778 --- Modules/CMakePackageConfigHelpers.cmake | 63 ++++++++++++++++++++-- .../Internal/AppleArchitectureSelection.cmake.in | 6 --- Modules/Internal/ApplePlatformSelection.cmake.in | 3 +- Tests/RunCMake/CMakePackage/RunCMakeTest.cmake | 10 ++++ .../apple-export-unsupported-capture.cmake | 16 ++++++ .../apple-export-unsupported-fatal.cmake | 14 +++++ .../apple-import-unsupported-capture-stdout.txt | 2 + .../apple-import-unsupported-capture.cmake | 11 ++++ ...mport-unsupported-fatal-architecture-result.txt | 1 + ...mport-unsupported-fatal-architecture-stderr.txt | 6 +++ ...ple-import-unsupported-fatal-architecture.cmake | 4 ++ ...le-import-unsupported-fatal-platform-result.txt | 1 + ...le-import-unsupported-fatal-platform-stderr.txt | 6 +++ .../apple-import-unsupported-fatal-platform.cmake | 4 ++ 14 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 Tests/RunCMake/CMakePackage/apple-export-unsupported-capture.cmake create mode 100644 Tests/RunCMake/CMakePackage/apple-export-unsupported-fatal.cmake create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-capture-stdout.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-capture.cmake create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-result.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-stderr.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture.cmake create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-result.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-stderr.txt create mode 100644 Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform.cmake diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake index 0c04608..fe5cc21 100644 --- a/Modules/CMakePackageConfigHelpers.cmake +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -210,6 +210,7 @@ Generating an Apple Platform Selection File [WATCHOS_SIMULATOR_INCLUDE_FILE ] [VISIONOS_INCLUDE_FILE ] [VISIONOS_SIMULATOR_INCLUDE_FILE ] + [ERROR_VARIABLE ] ) Write a file that includes an Apple-platform-specific ``.cmake`` file, @@ -256,9 +257,16 @@ Generating an Apple Platform Selection File ``VISIONOS_SIMULATOR_INCLUDE_FILE `` File to include if the platform is visionOS Simulator. + ``ERROR_VARIABLE `` + If the consuming project is built for an unsupported platform, + set ```` to an error message. The includer may use this + information to pretend the package was not found. If this option + is not given, the default behavior is to issue a fatal error. + If any of the optional include files is not specified, and the consuming - project is built for its corresponding platform, an error will be thrown - when including the generated file. + project is built for its corresponding platform, the generated file will + consider the platform to be unsupported. The behavior is determined + by the ``ERROR_VARIABLE`` option. .. command:: generate_apple_architecture_selection_file @@ -275,6 +283,7 @@ Generating an Apple Platform Selection File SINGLE_ARCHITECTURE_INCLUDE_FILES ...] [UNIVERSAL_ARCHITECTURES ... UNIVERSAL_INCLUDE_FILE ] + [ERROR_VARIABLE ] ) Write a file that includes an Apple-architecture-specific ``.cmake`` file @@ -313,6 +322,12 @@ Generating an Apple Platform Selection File a (non-strict) subset of the ``UNIVERSAL_ARCHITECTURES`` and does not match any one of the ``SINGLE_ARCHITECTURES``. + ``ERROR_VARIABLE `` + If the consuming project is built for an unsupported architecture, + set ```` to an error message. The includer may use this + information to pretend the package was not found. If this option + is not given, the default behavior is to issue a fatal error. + Example Generating Package Files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -486,6 +501,7 @@ function(generate_apple_platform_selection_file _output_file) INSTALL_DESTINATION INSTALL_PREFIX ${_config_file_options} + ERROR_VARIABLE ) set(_multi) cmake_parse_arguments(PARSE_ARGV 0 _gpsf "${_options}" "${_single}" "${_multi}") @@ -499,8 +515,15 @@ function(generate_apple_platform_selection_file _output_file) set(maybe_INSTALL_PREFIX "") endif() + if(_gpsf_ERROR_VARIABLE) + set(_branch_INIT "set(\"${_gpsf_ERROR_VARIABLE}\" \"\")") + else() + set(_branch_INIT "") + endif() + + set(_else ELSE) set(_have_relative 0) - foreach(_opt IN LISTS _config_file_options) + foreach(_opt IN LISTS _config_file_options _else) if(_gpsf_${_opt}) set(_config_file "${_gpsf_${_opt}}") if(NOT IS_ABSOLUTE "${_config_file}") @@ -508,6 +531,8 @@ function(generate_apple_platform_selection_file _output_file) set(_have_relative 1) endif() set(_branch_${_opt} "include(\"${_config_file}\")") + elseif(_gpsf_ERROR_VARIABLE) + set(_branch_${_opt} "set(\"${_gpsf_ERROR_VARIABLE}\" \"Platform not supported\")") else() set(_branch_${_opt} "message(FATAL_ERROR \"Platform not supported\")") endif() @@ -527,6 +552,7 @@ function(generate_apple_architecture_selection_file _output_file) INSTALL_DESTINATION INSTALL_PREFIX UNIVERSAL_INCLUDE_FILE + ERROR_VARIABLE ) set(_multi SINGLE_ARCHITECTURES @@ -552,6 +578,30 @@ function(generate_apple_architecture_selection_file _output_file) set(_branch_code "") + if(_gasf_ERROR_VARIABLE) + string(APPEND _branch_code + "set(\"${_gasf_ERROR_VARIABLE}\" \"\")\n" + ) + endif() + + string(APPEND _branch_code + "\n" + "if(NOT CMAKE_OSX_ARCHITECTURES)\n" + ) + if(_gasf_ERROR_VARIABLE) + string(APPEND _branch_code + " set(\"${_gasf_ERROR_VARIABLE}\" \"CMAKE_OSX_ARCHITECTURES must be explicitly set for this package\")\n" + " return()\n" + ) + else() + string(APPEND _branch_code + " message(FATAL_ERROR \"CMAKE_OSX_ARCHITECTURES must be explicitly set for this package\")\n" + ) + endif() + string(APPEND _branch_code + "endif()\n" + ) + foreach(pair IN ZIP_LISTS _gasf_SINGLE_ARCHITECTURES _gasf_SINGLE_ARCHITECTURE_INCLUDE_FILES) set(arch "${pair_0}") set(config_file "${pair_1}") @@ -588,6 +638,13 @@ function(generate_apple_architecture_selection_file _output_file) message(FATAL_ERROR "UNIVERSAL_ARCHITECTURES requires UNIVERSAL_INCLUDE_FILE") endif() + string(APPEND _branch_code "\n") + if(_gasf_ERROR_VARIABLE) + string(APPEND _branch_code "set(\"${_gasf_ERROR_VARIABLE}\" \"Architecture not supported\")") + else() + string(APPEND _branch_code "message(FATAL_ERROR \"Architecture not supported\")") + endif() + configure_package_config_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Internal/AppleArchitectureSelection.cmake.in" "${_output_file}" INSTALL_DESTINATION "${_gasf_INSTALL_DESTINATION}" ${maybe_INSTALL_PREFIX} diff --git a/Modules/Internal/AppleArchitectureSelection.cmake.in b/Modules/Internal/AppleArchitectureSelection.cmake.in index fec0d41..b7315b6 100644 --- a/Modules/Internal/AppleArchitectureSelection.cmake.in +++ b/Modules/Internal/AppleArchitectureSelection.cmake.in @@ -1,8 +1,2 @@ @PACKAGE_INIT@ - -if(NOT CMAKE_OSX_ARCHITECTURES) - message(FATAL_ERROR "CMAKE_OSX_ARCHITECTURES must be explicitly set for this package") -endif() @_branch_code@ - -message(FATAL_ERROR "Architecture not supported") diff --git a/Modules/Internal/ApplePlatformSelection.cmake.in b/Modules/Internal/ApplePlatformSelection.cmake.in index 5f5e01d..6c03ab6 100644 --- a/Modules/Internal/ApplePlatformSelection.cmake.in +++ b/Modules/Internal/ApplePlatformSelection.cmake.in @@ -1,6 +1,7 @@ @PACKAGE_INIT@ string(TOLOWER "${CMAKE_OSX_SYSROOT}" _CMAKE_OSX_SYSROOT_LOWER) +@_branch_INIT@ if(_CMAKE_OSX_SYSROOT_LOWER MATCHES "(^|/)iphonesimulator") @_branch_IOS_SIMULATOR_INCLUDE_FILE@ elseif(_CMAKE_OSX_SYSROOT_LOWER MATCHES "(^|/)iphoneos") @@ -20,5 +21,5 @@ elseif(_CMAKE_OSX_SYSROOT_LOWER MATCHES "(^|/)xros") elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") @_branch_MACOS_INCLUDE_FILE@ else() - message(FATAL_ERROR "Platform not supported") + @_branch_ELSE@ endif() diff --git a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake index ccf0a86..1551b55 100644 --- a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake @@ -37,6 +37,9 @@ function(apple_import platform system_name archs sysroot) ${maybe_CMAKE_BUILD_TYPE} ) set(RunCMake_TEST_NO_CLEAN 1) + if(apple_import_no_build) + return() + endif() run_cmake_command(apple-import-${platform}-build ${CMAKE_COMMAND} --build . --config Release) endfunction() @@ -93,6 +96,8 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") apple_export(visionos-simulator visionOS "${macos_archs}" xrsimulator) endif() apple_export(watchos-simulator watchOS "${watch_sim_archs}" watchsimulator) + apple_export(unsupported-capture Darwin "${macos_archs}" macosx) + apple_export(unsupported-fatal Darwin "${macos_archs}" macosx) apple_import(macos Darwin "${macos_archs}" macosx) apple_import(ios iOS "arm64" iphoneos) @@ -115,4 +120,9 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang") apple_import(visionos-simulator visionOS "${macos_archs}" xrsimulator) endif() apple_import(watchos-simulator watchOS "${watch_sim_archs}" watchsimulator) + set(apple_import_no_build 1) + apple_import(unsupported-capture Darwin "${macos_archs}" macosx) + apple_import(unsupported-fatal-platform Darwin "${macos_archs}" macosx) + apple_import(unsupported-fatal-architecture Darwin "${macos_archs}" macosx) + unset(apple_import_no_build) endif() diff --git a/Tests/RunCMake/CMakePackage/apple-export-unsupported-capture.cmake b/Tests/RunCMake/CMakePackage/apple-export-unsupported-capture.cmake new file mode 100644 index 0000000..e712bb2 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-export-unsupported-capture.cmake @@ -0,0 +1,16 @@ +include(apple-common.cmake) + +include(CMakePackageConfigHelpers) +generate_apple_platform_selection_file(bad-platform-capture-config-install.cmake + INSTALL_DESTINATION lib/cmake/bad-platform-capture + INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} + ERROR_VARIABLE bad-platform-capture_unsupported + ) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bad-platform-capture-config-install.cmake DESTINATION lib/cmake/bad-platform-capture RENAME bad-platform-capture-config.cmake) + +generate_apple_architecture_selection_file(bad-arch-capture-config-install.cmake + INSTALL_DESTINATION lib/cmake/bad-arch-capture + INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} + ERROR_VARIABLE bad-arch-capture_unsupported + ) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bad-arch-capture-config-install.cmake DESTINATION lib/cmake/bad-arch-capture RENAME bad-arch-capture-config.cmake) diff --git a/Tests/RunCMake/CMakePackage/apple-export-unsupported-fatal.cmake b/Tests/RunCMake/CMakePackage/apple-export-unsupported-fatal.cmake new file mode 100644 index 0000000..f2c5802 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-export-unsupported-fatal.cmake @@ -0,0 +1,14 @@ +include(apple-common.cmake) + +include(CMakePackageConfigHelpers) +generate_apple_platform_selection_file(bad-platform-fatal-config-install.cmake + INSTALL_DESTINATION lib/cmake/bad-platform-fatal + INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} + ) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bad-platform-fatal-config-install.cmake DESTINATION lib/cmake/bad-platform-fatal RENAME bad-platform-fatal-config.cmake) + +generate_apple_architecture_selection_file(bad-arch-fatal-config-install.cmake + INSTALL_DESTINATION lib/cmake/bad-arch-fatal + INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} + ) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bad-arch-fatal-config-install.cmake DESTINATION lib/cmake/bad-arch-fatal RENAME bad-arch-fatal-config.cmake) diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture-stdout.txt b/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture-stdout.txt new file mode 100644 index 0000000..107ad03 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture-stdout.txt @@ -0,0 +1,2 @@ +-- Platform not supported +-- Architecture not supported diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture.cmake b/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture.cmake new file mode 100644 index 0000000..6df5fe9 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-capture.cmake @@ -0,0 +1,11 @@ +include(apple-common.cmake) + +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) +find_package(bad-platform-capture CONFIG REQUIRED) +find_package(bad-arch-capture CONFIG REQUIRED) + +# The above packages capture their own error messages. +# In real packages they would then set _FOUND to false. +# For testing here, just print the messages. +message(STATUS "${bad-platform-capture_unsupported}") +message(STATUS "${bad-arch-capture_unsupported}") diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-result.txt b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-stderr.txt b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-stderr.txt new file mode 100644 index 0000000..1e84dac --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at [^ +]*/Tests/RunCMake/CMakePackage/apple-install/lib/cmake/bad-arch-fatal/bad-arch-fatal-config.cmake:[0-9]+ \(message\): + Architecture not supported +Call Stack \(most recent call first\): + apple-import-unsupported-fatal-architecture\.cmake:[0-9]+ \(find_package\) + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture.cmake b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture.cmake new file mode 100644 index 0000000..7a26e47 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-architecture.cmake @@ -0,0 +1,4 @@ +include(apple-common.cmake) + +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) +find_package(bad-arch-fatal CONFIG REQUIRED) diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-result.txt b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-stderr.txt b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-stderr.txt new file mode 100644 index 0000000..1eedad8 --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at [^ +]*/Tests/RunCMake/CMakePackage/apple-install/lib/cmake/bad-platform-fatal/bad-platform-fatal-config.cmake:[0-9]+ \(message\): + Platform not supported +Call Stack \(most recent call first\): + apple-import-unsupported-fatal-platform\.cmake:[0-9]+ \(find_package\) + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform.cmake b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform.cmake new file mode 100644 index 0000000..b38cd5c --- /dev/null +++ b/Tests/RunCMake/CMakePackage/apple-import-unsupported-fatal-platform.cmake @@ -0,0 +1,4 @@ +include(apple-common.cmake) + +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) +find_package(bad-platform-fatal CONFIG REQUIRED) -- cgit v0.12