Xcode: reject legacy buildsystem for Xcode 14

With Xcode 14 support for the Legacy Build System has been removed
and the BuildSystemType in the WorkspaceSettings is ignored.
If CMake still generates projects targeted to the Lecacy Build
System the build preparation phase will likely fail because Xcode
for example misses any declared outputs from script invocations.

This is a hard to debug problem and CMake should reject the invalid
configuration instead.
This commit is contained in:
Gregor Jasny 2023-08-31 09:06:53 +02:00
parent 4cd207b6f3
commit b78a14e204
8 changed files with 35 additions and 6 deletions

View File

@ -0,0 +1,8 @@
xcode-no-legacy-buildsystem
---------------------------
* The :generator:`Xcode` generator will now issue a fatal error if
the Legacy Build System has been selected for Xcode 14 and
newer. Those Xcode versions dropped support for the Legacy Build
System and expect the project being set-up for their current
Build System.

View File

@ -12,7 +12,8 @@ mature enough for use by CMake. The possible values are:
``1``
The original Xcode build system.
This is the default when using Xcode 11.x or below.
This is the default when using Xcode 11.x or below and supported
up to Xcode 13.x.
``12``
The Xcode "new build system" introduced by Xcode 10.

View File

@ -407,8 +407,10 @@ bool cmGlobalXCodeGenerator::ProcessGeneratorToolsetField(
mf->IssueMessage(MessageType::FATAL_ERROR, e);
return false;
}
if (this->XcodeBuildSystem == BuildSystem::Twelve &&
this->XcodeVersion < 120) {
if ((this->XcodeBuildSystem == BuildSystem::Twelve &&
this->XcodeVersion < 120) ||
(this->XcodeBuildSystem == BuildSystem::One &&
this->XcodeVersion >= 140)) {
/* clang-format off */
std::string const& e = cmStrCat(
"Generator\n"

View File

@ -0,0 +1,10 @@
CMake Error at CMakeLists.txt:[0-9]+ \(project\):
Generator
Xcode
toolset specification field
buildsystem=1
is not allowed with Xcode [0-9.]+\.$

View File

@ -0,0 +1 @@
message(FATAL_ERROR "This should not be reached!")

View File

@ -89,7 +89,11 @@ elseif("${RunCMake_GENERATOR}" STREQUAL "Xcode")
set(RunCMake_GENERATOR_TOOLSET "Test Toolset")
run_cmake(TestToolsetXcodeBuildSystemDefault12)
set(RunCMake_GENERATOR_TOOLSET "Test Toolset,buildsystem=1")
run_cmake(TestToolsetXcodeBuildSystem1)
if(XCODE_VERSION VERSION_GREATER_EQUAL 14)
run_cmake(BadToolsetXcodeBuildSystem1)
else()
run_cmake(TestToolsetXcodeBuildSystem1)
endif()
set(RunCMake_GENERATOR_TOOLSET "Test Toolset,buildsystem=12")
run_cmake(TestToolsetXcodeBuildSystem12)
else()

View File

@ -311,9 +311,11 @@ if (XCODE_VERSION VERSION_GREATER_EQUAL 7.3)
endfunction()
if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
xctest_add_bundle_test(Darwin macosx "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
xctest_add_bundle_test(Darwin macosx "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
xctest_add_bundle_test(iOS iphonesimulator "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
if(XCODE_VERSION VERSION_LESS 14)
xctest_add_bundle_test(Darwin macosx "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
xctest_add_bundle_test(iOS iphonesimulator "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
endif()
if (XCODE_VERSION VERSION_LESS 12.5)
xctest_add_bundle_test(iOS iphonesimulator "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>")
else()