From b78a14e204fee7547f6e513a9215f6204f30c159 Mon Sep 17 00:00:00 2001 From: Gregor Jasny Date: Thu, 31 Aug 2023 09:06:53 +0200 Subject: 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. --- Help/release/dev/xcode-no-legacy-buildsystem.rst | 8 ++++++++ Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst | 3 ++- Source/cmGlobalXCodeGenerator.cxx | 6 ++++-- .../GeneratorToolset/BadToolsetXcodeBuildSystem1-result.txt | 1 + .../GeneratorToolset/BadToolsetXcodeBuildSystem1-stderr.txt | 10 ++++++++++ .../GeneratorToolset/BadToolsetXcodeBuildSystem1.cmake | 1 + Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake | 6 +++++- Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake | 6 ++++-- 8 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 Help/release/dev/xcode-no-legacy-buildsystem.rst create mode 100644 Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-result.txt create mode 100644 Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-stderr.txt create mode 100644 Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1.cmake diff --git a/Help/release/dev/xcode-no-legacy-buildsystem.rst b/Help/release/dev/xcode-no-legacy-buildsystem.rst new file mode 100644 index 0000000..f3d1f67 --- /dev/null +++ b/Help/release/dev/xcode-no-legacy-buildsystem.rst @@ -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. diff --git a/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst b/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst index d153061..f3c213c 100644 --- a/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst +++ b/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst @@ -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. diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 3b9d2fd..90b8839 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -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" diff --git a/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-result.txt b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-stderr.txt b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-stderr.txt new file mode 100644 index 0000000..61188b6 --- /dev/null +++ b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1-stderr.txt @@ -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.]+\.$ diff --git a/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1.cmake b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1.cmake new file mode 100644 index 0000000..2fc38e5 --- /dev/null +++ b/Tests/RunCMake/GeneratorToolset/BadToolsetXcodeBuildSystem1.cmake @@ -0,0 +1 @@ +message(FATAL_ERROR "This should not be reached!") diff --git a/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake index a742391..71cc2d4 100644 --- a/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake +++ b/Tests/RunCMake/GeneratorToolset/RunCMakeTest.cmake @@ -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() diff --git a/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake b/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake index b3ab624..abb357b 100644 --- a/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake +++ b/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake @@ -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" "$/PlugIns") xctest_add_bundle_test(Darwin macosx "12" "$/PlugIns") - xctest_add_bundle_test(iOS iphonesimulator "1" "$/PlugIns") + if(XCODE_VERSION VERSION_LESS 14) + xctest_add_bundle_test(Darwin macosx "1" "$/PlugIns") + xctest_add_bundle_test(iOS iphonesimulator "1" "$/PlugIns") + endif() if (XCODE_VERSION VERSION_LESS 12.5) xctest_add_bundle_test(iOS iphonesimulator "12" "$") else() -- cgit v0.12