diff options
author | Alex Neundorf <neundorf@kde.org> | 2012-09-15 20:38:30 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-09-28 13:21:42 (GMT) |
commit | 8b5f448ba628dc474d3cd22d67db65551acc0846 (patch) | |
tree | 5fa8506d5d98de07795d3e97efd891a8a0af8c1a /Source/cmExportFileGenerator.cxx | |
parent | 87f4c01910754199bcdcbc9d564de13d36ba2502 (diff) | |
download | CMake-8b5f448ba628dc474d3cd22d67db65551acc0846.zip CMake-8b5f448ba628dc474d3cd22d67db65551acc0846.tar.gz CMake-8b5f448ba628dc474d3cd22d67db65551acc0846.tar.bz2 |
exports: first try at error handling if a target is missing
Now, if an imported target depends on a library which must come
from some other export set, cmake generates a check which errors
out if that target does not exist. I guess instead of completely
erroring out it would be better to only make the find_package() fail.
Alex
Diffstat (limited to 'Source/cmExportFileGenerator.cxx')
-rw-r--r-- | Source/cmExportFileGenerator.cxx | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index fa6cc9f..36902a1 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -128,7 +128,9 @@ void cmExportFileGenerator::GenerateImportConfig(std::ostream& os, void cmExportFileGenerator ::SetImportDetailProperties(const char* config, std::string const& suffix, - cmTarget* target, ImportPropertyMap& properties) + cmTarget* target, ImportPropertyMap& properties, + std::vector<std::string>& missingTargets + ) { // Get the makefile in which to lookup target information. cmMakefile* mf = target->GetMakefile(); @@ -164,13 +166,13 @@ cmExportFileGenerator { this->SetImportLinkProperty(suffix, target, "IMPORTED_LINK_INTERFACE_LANGUAGES", - iface->Languages, properties); + iface->Languages, properties, missingTargets); this->SetImportLinkProperty(suffix, target, "IMPORTED_LINK_INTERFACE_LIBRARIES", - iface->Libraries, properties); + iface->Libraries, properties, missingTargets); this->SetImportLinkProperty(suffix, target, "IMPORTED_LINK_DEPENDENT_LIBRARIES", - iface->SharedDeps, properties); + iface->SharedDeps, properties, missingTargets); if(iface->Multiplicity > 0) { std::string prop = "IMPORTED_LINK_INTERFACE_MULTIPLICITY"; @@ -189,7 +191,9 @@ cmExportFileGenerator cmTarget* target, const char* propName, std::vector<std::string> const& libs, - ImportPropertyMap& properties) + ImportPropertyMap& properties, + std::vector<std::string>& missingTargets + ) { // Skip the property if there are no libraries. if(libs.empty()) @@ -234,8 +238,10 @@ cmExportFileGenerator if (targetOccurrences == 1) { - link_libs += namespaces[0]; - link_libs += *li; + std::string missingTarget = namespaces[0]; + missingTarget += *li; + link_libs += missingTarget; + missingTargets.push_back(missingTarget); } else { @@ -439,6 +445,23 @@ cmExportFileGenerator //---------------------------------------------------------------------------- +void cmExportFileGenerator::GenerateMissingTargetsCheckCode(std::ostream& os, + const std::vector<std::string>& missingTargets) +{ + os << "# Make sure the targets which have been exported in some other \n" + "# export set exist.\n"; + for(unsigned int i=0; i<missingTargets.size(); ++i) + { + os << "IF(NOT TARGET \"" << missingTargets[i] << "\" )\n" + << " MESSAGE(FATAL_ERROR \"Required imported target \\\"" + << missingTargets[i] << "\\\" not found ! \")\n" + << "ENDIF()\n"; + } + os << "\n"; +} + + +//---------------------------------------------------------------------------- void cmExportFileGenerator::GenerateImportedFileCheckLoop(std::ostream& os) { |