diff --git a/5556.patch b/5556.patch new file mode 100644 index 0000000..f4b8db0 --- /dev/null +++ b/5556.patch @@ -0,0 +1,198 @@ +From 38bcb5c0a3accd2dd29fb7632c6b3bf31b990d82 Mon Sep 17 00:00:00 2001 +From: Deniz Bahadir +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 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 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 const& args, + std::unique_ptr publicHeaderGenerator; + std::unique_ptr 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 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 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 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 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 + diff --git a/cmake.changes b/cmake.changes index 736a926..dc05398 100644 --- a/cmake.changes +++ b/cmake.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Dec 15 15:58:39 UTC 2020 - Dominique Leuenberger + +- Add 5556.patch: export: Do not fail generation for separate + namelink only case. Fixes regression, blocking other packages + from build, + ------------------------------------------------------------------- Tue Nov 24 23:13:21 UTC 2020 - Andreas Stieger @@ -12,7 +19,7 @@ Thu Nov 19 12:51:09 UTC 2020 - Andreas Stieger - cmake 3.19.0: * cmake(1) and cmake-gui(1) now recognize CMakePresets.json and CMakeUserPresets.json files - * support for ISPC + * support for ISPC * exctend CUDA language support for Clang * extend cmake-file-ap "codemodel" * cli --install supports --default-directory-permissions diff --git a/cmake.spec b/cmake.spec index ef25d82..04db276 100644 --- a/cmake.spec +++ b/cmake.spec @@ -55,6 +55,8 @@ Patch0: cmake-fix-ruby-test.patch # Search for python interpreters from newest to oldest rather then picking up /usr/bin/python as first choice Patch1: feature-suse-python-interp-search-order.patch Patch2: cmake-fix-png-include-dir.patch +# PATCH-FIX-UPSTREAM 5556.patch dimstar@opensuse.org -- export: Do not fail generation for separate namelink only case +Patch3: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5556.patch BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: pkgconfig