From 3bdf95f942c8532fb1e0fbad52f04f46e822b2f9 Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Wed, 20 Sep 2023 12:59:53 +0200 Subject: macOS: GNU toolchain: ensure framework, marked as SYSTEM, can be linked Fixes: #25263 --- Source/cmLinkLineComputer.cxx | 18 +++++------------- Source/cmLinkLineComputer.h | 3 +-- Source/cmLocalGenerator.cxx | 5 +---- Tests/RunCMake/CMakeLists.txt | 7 ++++--- .../codemodel-v2-data/targets/apple_exe_framework.json | 2 +- .../Framework/FrameworkSystemIncludeTest.cmake | 6 +++--- Tests/RunCMake/Framework/RunCMakeTest.cmake | 18 ++++++++++++------ 7 files changed, 27 insertions(+), 32 deletions(-) diff --git a/Source/cmLinkLineComputer.cxx b/Source/cmLinkLineComputer.cxx index 1f5005b..a29e33f 100644 --- a/Source/cmLinkLineComputer.cxx +++ b/Source/cmLinkLineComputer.cxx @@ -192,24 +192,16 @@ std::string cmLinkLineComputer::ComputeRPath(cmComputeLinkInformation& cli) } std::string cmLinkLineComputer::ComputeFrameworkPath( - cmComputeLinkInformation& cli, cmValue fwSearchFlag, cmValue sysFwSearchFlag) + cmComputeLinkInformation& cli, cmValue fwSearchFlag) { - if (!fwSearchFlag && !sysFwSearchFlag) { + if (!fwSearchFlag) { return std::string{}; } std::string frameworkPath; - auto const& fwDirs = cli.GetFrameworkPaths(); - for (auto const& fd : fwDirs) { - if (sysFwSearchFlag && - cli.GetTarget()->IsSystemIncludeDirectory(fd, cli.GetConfig(), - cli.GetLinkLanguage())) { - frameworkPath += sysFwSearchFlag; - } else { - frameworkPath += fwSearchFlag; - } - frameworkPath += this->ConvertToOutputFormat(fd); - frameworkPath += " "; + for (auto const& fd : cli.GetFrameworkPaths()) { + frameworkPath += + cmStrCat(fwSearchFlag, this->ConvertToOutputFormat(fd), ' '); } return frameworkPath; } diff --git a/Source/cmLinkLineComputer.h b/Source/cmLinkLineComputer.h index 4e285f2..afd3944 100644 --- a/Source/cmLinkLineComputer.h +++ b/Source/cmLinkLineComputer.h @@ -44,8 +44,7 @@ public: std::vector>& linkPath); std::string ComputeFrameworkPath(cmComputeLinkInformation& cli, - cmValue fwSearchFlag, - cmValue sysFwSearchFlag); + cmValue fwSearchFlag); std::string ComputeLinkLibraries(cmComputeLinkInformation& cli, std::string const& stdLibString); diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 63c8aa8..f1fe7df 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1850,11 +1850,8 @@ void cmLocalGenerator::OutputLinkLibraries( // Append the framework search path flags. cmValue fwSearchFlag = this->Makefile->GetDefinition( cmStrCat("CMAKE_", linkLanguage, "_FRAMEWORK_SEARCH_FLAG")); - cmValue sysFwSearchFlag = this->Makefile->GetDefinition( - cmStrCat("CMAKE_", linkLanguage, "_SYSTEM_FRAMEWORK_SEARCH_FLAG")); - frameworkPath = - linkLineComputer->ComputeFrameworkPath(cli, fwSearchFlag, sysFwSearchFlag); + frameworkPath = linkLineComputer->ComputeFrameworkPath(cli, fwSearchFlag); linkLineComputer->ComputeLinkPath(cli, libPathFlag, libPathTerminator, linkPath); linkLineComputer->ComputeLinkLibraries(cli, stdLibString, linkLibraries); diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 9b9a53e..111f542 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -707,10 +707,11 @@ if(XCODE_VERSION) set_property(TEST RunCMake.XcodeProject PROPERTY TIMEOUT ${CMake_TEST_XcodeProject_TIMEOUT}) endif() -if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" +if((CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) - add_RunCMake_test(Framework) - if(NOT DEFINED CMake_TEST_XcFramework) + OR (APPLE AND CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)) + add_RunCMake_test(Framework -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}) + if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT DEFINED CMake_TEST_XcFramework) set(CMake_TEST_XcFramework ON) endif() if(CMake_TEST_XcFramework AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 11.0) diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json index 6d320f4..a4c13a8 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json @@ -34,7 +34,7 @@ "lto": null, "commandFragments": [ { - "fragment": "-iframework .+/framework(/(Debug|Release|RelWithDebInfo|MinSizeRel))?\"? -iframework /usr/Frameworks$", + "fragment": "-F.+/framework(/(Debug|Release|RelWithDebInfo|MinSizeRel))?\"? -F/usr/Frameworks$", "role": "frameworkPath", "backtrace": null }, diff --git a/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake b/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake index 94c0b87..b50a8ad 100644 --- a/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake +++ b/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake @@ -8,7 +8,7 @@ set_target_properties(Example::Example PROPERTIES ) add_library(testcase FrameworkSystemIncludeTest.c) -target_compile_options(testcase PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase PRIVATE "$,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase PRIVATE Example::Example) @@ -20,7 +20,7 @@ set_target_properties(Example::Example2 PROPERTIES ) add_library(testcase2 FrameworkSystemIncludeTest.c) -target_compile_options(testcase2 PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase2 PRIVATE "$,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase2 PRIVATE Example::Example2) @@ -32,5 +32,5 @@ set_target_properties(Example::Example3 PROPERTIES ) add_library(testcase3 FrameworkSystemIncludeTest.c) -target_compile_options(testcase3 PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase3 PRIVATE "$,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase3 PRIVATE Example::Example3) diff --git a/Tests/RunCMake/Framework/RunCMakeTest.cmake b/Tests/RunCMake/Framework/RunCMakeTest.cmake index 7319a59..2c5b46f 100644 --- a/Tests/RunCMake/Framework/RunCMakeTest.cmake +++ b/Tests/RunCMake/Framework/RunCMakeTest.cmake @@ -15,8 +15,10 @@ function(framework_layout_test Name Toolchain Type) run_cmake_command(${Name} ${CMAKE_COMMAND} --build .) endfunction() -framework_layout_test(iOSFrameworkLayout-build ios SHARED) -framework_layout_test(iOSFrameworkLayout-build ios STATIC) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_layout_test(iOSFrameworkLayout-build ios SHARED) + framework_layout_test(iOSFrameworkLayout-build ios STATIC) +endif() framework_layout_test(OSXFrameworkLayout-build osx SHARED) framework_layout_test(OSXFrameworkLayout-build osx STATIC) @@ -36,13 +38,17 @@ function(framework_type_test Toolchain Type UseProperty) run_cmake_command(FrameworkType${Type}-build ${CMAKE_COMMAND} --build .) endfunction() -framework_type_test(ios SHARED NO) -framework_type_test(ios STATIC NO) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_type_test(ios SHARED NO) + framework_type_test(ios STATIC NO) +endif() framework_type_test(osx SHARED NO) framework_type_test(osx STATIC NO) -framework_type_test(ios SHARED YES) -framework_type_test(ios STATIC YES) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_type_test(ios SHARED YES) + framework_type_test(ios STATIC YES) +endif() framework_type_test(osx SHARED YES) framework_type_test(osx STATIC YES) -- cgit v0.12