diff options
author | Brad King <brad.king@kitware.com> | 2022-06-30 12:20:14 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-06-30 12:20:24 (GMT) |
commit | 5a460f32437b51cc9b765ae191957901232b3e0b (patch) | |
tree | 926a2dba9f8552109c657326ad9aef1ff04e9486 /Source | |
parent | 4c2cead0c395bae3cb45ce02daf5dac1d38d0763 (diff) | |
parent | 3fee5398bd381e3721972220a8415b62bc96b172 (diff) | |
download | CMake-5a460f32437b51cc9b765ae191957901232b3e0b.zip CMake-5a460f32437b51cc9b765ae191957901232b3e0b.tar.gz CMake-5a460f32437b51cc9b765ae191957901232b3e0b.tar.bz2 |
Merge topic 'file-set-crash'
3fee5398bd install(EXPORT): Check for missing file sets at generate time
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7420
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmExportSet.cxx | 31 | ||||
-rw-r--r-- | Source/cmExportSet.h | 2 | ||||
-rw-r--r-- | Source/cmInstallExportGenerator.cxx | 3 |
3 files changed, 32 insertions, 4 deletions
diff --git a/Source/cmExportSet.cxx b/Source/cmExportSet.cxx index a20aa9a..3d4ef0a 100644 --- a/Source/cmExportSet.cxx +++ b/Source/cmExportSet.cxx @@ -2,10 +2,15 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmExportSet.h" +#include <algorithm> #include <tuple> #include <utility> +#include "cmGeneratorTarget.h" #include "cmLocalGenerator.h" +#include "cmMessageType.h" +#include "cmStringAlgorithms.h" +#include "cmTarget.h" #include "cmTargetExport.h" cmExportSet::cmExportSet(std::string name) @@ -15,11 +20,35 @@ cmExportSet::cmExportSet(std::string name) cmExportSet::~cmExportSet() = default; -void cmExportSet::Compute(cmLocalGenerator* lg) +bool cmExportSet::Compute(cmLocalGenerator* lg) { for (std::unique_ptr<cmTargetExport>& tgtExport : this->TargetExports) { tgtExport->Target = lg->FindGeneratorTargetToUse(tgtExport->TargetName); + + auto const interfaceFileSets = + tgtExport->Target->Target->GetAllInterfaceFileSets(); + auto const fileSetInTargetExport = + [&tgtExport, lg](const std::string& fileSetName) -> bool { + auto* fileSet = tgtExport->Target->Target->GetFileSet(fileSetName); + + if (!tgtExport->FileSetGenerators.count(fileSet)) { + lg->IssueMessage(MessageType::FATAL_ERROR, + cmStrCat("File set \"", fileSetName, + "\" is listed in interface file sets of ", + tgtExport->Target->GetName(), + " but has not been exported")); + return false; + } + return true; + }; + + if (!std::all_of(interfaceFileSets.begin(), interfaceFileSets.end(), + fileSetInTargetExport)) { + return false; + } } + + return true; } void cmExportSet::AddTargetExport(std::unique_ptr<cmTargetExport> te) diff --git a/Source/cmExportSet.h b/Source/cmExportSet.h index 07deb11..b75a26d 100644 --- a/Source/cmExportSet.h +++ b/Source/cmExportSet.h @@ -25,7 +25,7 @@ public: cmExportSet(const cmExportSet&) = delete; cmExportSet& operator=(const cmExportSet&) = delete; - void Compute(cmLocalGenerator* lg); + bool Compute(cmLocalGenerator* lg); void AddTargetExport(std::unique_ptr<cmTargetExport> tgt); diff --git a/Source/cmInstallExportGenerator.cxx b/Source/cmInstallExportGenerator.cxx index 8a48aa2..b80437d 100644 --- a/Source/cmInstallExportGenerator.cxx +++ b/Source/cmInstallExportGenerator.cxx @@ -48,8 +48,7 @@ cmInstallExportGenerator::~cmInstallExportGenerator() = default; bool cmInstallExportGenerator::Compute(cmLocalGenerator* lg) { this->LocalGenerator = lg; - this->ExportSet->Compute(lg); - return true; + return this->ExportSet->Compute(lg); } std::string cmInstallExportGenerator::TempDirCalculate() const |