diff options
Diffstat (limited to 'dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch')
-rw-r--r-- | dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch new file mode 100644 index 000000000000..1b51cf013fe5 --- /dev/null +++ b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch @@ -0,0 +1,198 @@ +From 38bcb5c0a3accd2dd29fb7632c6b3bf31b990d82 Mon Sep 17 00:00:00 2001 +From: Deniz Bahadir <dbahadir@benocs.com> +Date: Tue, 1 Dec 2020 00:25:39 +0100 +Subject: [PATCH] export: Do not fail generation for separate namelink only + case + +Update the change from commit 64690f6df0 (export: Do not fail generation +for namelink-only case, 2020-10-09, v3.19.0-rc1~7^2) to also handle +separate namelink-only and namelink-skip calls. + +Fixes: #21529 +--- + Source/cmExportBuildFileGenerator.cxx | 3 +++ + Source/cmExportInstallFileGenerator.cxx | 3 +++ + Source/cmInstallCommand.cxx | 19 +++++++++++-------- + Source/cmTargetExport.h | 2 ++ + Tests/RunCMake/export/RunCMakeTest.cmake | 1 + + .../export/SeparateNamelinkExport.cmake | 16 ++++++++++++++++ + .../install/EXPORT-SeparateNamelink.cmake | 19 +++++++++++++++++++ + Tests/RunCMake/install/RunCMakeTest.cmake | 1 + + 8 files changed, 56 insertions(+), 8 deletions(-) + create mode 100644 Tests/RunCMake/export/SeparateNamelinkExport.cmake + create mode 100644 Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake + +diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx +index dd700c5edf..1a31ae4afd 100644 +--- a/Source/cmExportBuildFileGenerator.cxx ++++ b/Source/cmExportBuildFileGenerator.cxx +@@ -288,6 +288,9 @@ void cmExportBuildFileGenerator::GetTargets( + if (this->ExportSet) { + for (std::unique_ptr<cmTargetExport> const& te : + this->ExportSet->GetTargetExports()) { ++ if (te->NamelinkOnly) { ++ continue; ++ } + targets.push_back(te->TargetName); + } + return; +diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx +index 987ec9ea7b..0b9b183d54 100644 +--- a/Source/cmExportInstallFileGenerator.cxx ++++ b/Source/cmExportInstallFileGenerator.cxx +@@ -42,6 +42,9 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os) + std::string sep; + for (std::unique_ptr<cmTargetExport> const& te : + this->IEGen->GetExportSet()->GetTargetExports()) { ++ if (te->NamelinkOnly) { ++ continue; ++ } + expectedTargets += sep + this->Namespace + te->Target->GetExportName(); + sep = " "; + if (this->ExportedTargets.insert(te->Target).second) { +diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx +index b99e6a3c6c..ff08ee41ef 100644 +--- a/Source/cmInstallCommand.cxx ++++ b/Source/cmInstallCommand.cxx +@@ -461,6 +461,13 @@ bool HandleTargetsMode(std::vector<std::string> const& args, + std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator; + std::unique_ptr<cmInstallFilesGenerator> resourceGenerator; + ++ // Avoid selecting default destinations for PUBLIC_HEADER and ++ // PRIVATE_HEADER if any artifacts are specified. ++ bool artifactsSpecified = false; ++ ++ // Track whether this is a namelink-only rule. ++ bool namelinkOnly = false; ++ + auto addTargetExport = [&]() { + // Add this install rule to an export if one was specified. + if (!exports.empty()) { +@@ -475,20 +482,13 @@ bool HandleTargetsMode(std::vector<std::string> const& args, + te->ObjectsGenerator = objectGenerator.get(); + te->InterfaceIncludeDirectories = + cmJoin(includesArgs.GetIncludeDirs(), ";"); +- ++ te->NamelinkOnly = namelinkOnly; + helper.Makefile->GetGlobalGenerator() + ->GetExportSets()[exports] + .AddTargetExport(std::move(te)); + } + }; + +- // Avoid selecting default destinations for PUBLIC_HEADER and +- // PRIVATE_HEADER if any artifacts are specified. +- bool artifactsSpecified = false; +- +- // Track whether this is a namelink-only rule. +- bool namelinkOnly = false; +- + switch (target.GetType()) { + case cmStateEnums::SHARED_LIBRARY: { + // Shared libraries are handled differently on DLL and non-DLL +@@ -497,6 +497,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, + if (target.IsDLLPlatform()) { + // When in namelink only mode skip all libraries on Windows. + if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) { ++ namelinkOnly = true; + addTargetExport(); + continue; + } +@@ -529,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, + if (target.IsFrameworkOnApple()) { + // When in namelink only mode skip frameworks. + if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) { ++ namelinkOnly = true; + addTargetExport(); + continue; + } +@@ -574,6 +576,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, + if (target.IsFrameworkOnApple()) { + // When in namelink only mode skip frameworks. + if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) { ++ namelinkOnly = true; + addTargetExport(); + continue; + } +diff --git a/Source/cmTargetExport.h b/Source/cmTargetExport.h +index cb4d8dae44..1e38d84923 100644 +--- a/Source/cmTargetExport.h ++++ b/Source/cmTargetExport.h +@@ -31,4 +31,6 @@ public: + cmInstallFilesGenerator* HeaderGenerator; + std::string InterfaceIncludeDirectories; + ///@} ++ ++ bool NamelinkOnly = false; + }; +diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake b/Tests/RunCMake/export/RunCMakeTest.cmake +index 95c8d5cf45..0e6020f0f4 100644 +--- a/Tests/RunCMake/export/RunCMakeTest.cmake ++++ b/Tests/RunCMake/export/RunCMakeTest.cmake +@@ -17,3 +17,4 @@ run_cmake(DependOnNotExport) + run_cmake(DependOnDoubleExport) + run_cmake(UnknownExport) + run_cmake(NamelinkOnlyExport) ++run_cmake(SeparateNamelinkExport) +diff --git a/Tests/RunCMake/export/SeparateNamelinkExport.cmake b/Tests/RunCMake/export/SeparateNamelinkExport.cmake +new file mode 100644 +index 0000000000..b006aea128 +--- /dev/null ++++ b/Tests/RunCMake/export/SeparateNamelinkExport.cmake +@@ -0,0 +1,16 @@ ++enable_language(CXX) ++add_library(foo SHARED empty.cpp) ++install(TARGETS foo EXPORT fooExport ++ RUNTIME DESTINATION bin ++ LIBRARY ++ DESTINATION lib ++ COMPONENT runtime ++ NAMELINK_SKIP ++) ++install(TARGETS foo EXPORT fooExport ++ LIBRARY ++ DESTINATION lib ++ COMPONENT development ++ NAMELINK_ONLY ++) ++export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake") +diff --git a/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake +new file mode 100644 +index 0000000000..5c6fa10d18 +--- /dev/null ++++ b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake +@@ -0,0 +1,19 @@ ++enable_language(C) ++add_library(foo SHARED empty.c) ++install(TARGETS foo EXPORT fooExport ++ RUNTIME DESTINATION bin ++ LIBRARY ++ DESTINATION lib ++ COMPONENT runtime ++ NAMELINK_SKIP ++) ++install(TARGETS foo EXPORT fooExport ++ LIBRARY ++ DESTINATION lib ++ COMPONENT development ++ NAMELINK_ONLY ++) ++install(EXPORT fooExport ++ DESTINATION "lib/cmake/" ++ FILE "foo.cmake" ++) +diff --git a/Tests/RunCMake/install/RunCMakeTest.cmake b/Tests/RunCMake/install/RunCMakeTest.cmake +index 5aab88ca80..d64d88b770 100644 +--- a/Tests/RunCMake/install/RunCMakeTest.cmake ++++ b/Tests/RunCMake/install/RunCMakeTest.cmake +@@ -78,6 +78,7 @@ run_cmake(TARGETS-DESTINATION-bad) + run_cmake(EXPORT-OldIFace) + run_cmake(EXPORT-UnknownExport) + run_cmake(EXPORT-NamelinkOnly) ++run_cmake(EXPORT-SeparateNamelink) + run_cmake(CMP0062-OLD) + run_cmake(CMP0062-NEW) + run_cmake(CMP0062-WARN) +-- +GitLab + |