diff options
author | Stephen Kelly <steveire@gmail.com> | 2013-01-08 19:58:33 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2013-01-10 17:06:03 (GMT) |
commit | b6036d104a95156e8524dbfeb5533d3a579d8837 (patch) | |
tree | 43c87da6e21f66ec1737e0213aba5019ef3f326f | |
parent | cb1afbf466d126f233e93b2cdfa3f5c5dfe5b8f7 (diff) | |
download | CMake-b6036d104a95156e8524dbfeb5533d3a579d8837.zip CMake-b6036d104a95156e8524dbfeb5533d3a579d8837.tar.gz CMake-b6036d104a95156e8524dbfeb5533d3a579d8837.tar.bz2 |
Extract the AddTargetNamespace method.
-rw-r--r-- | Source/cmExportFileGenerator.cxx | 143 | ||||
-rw-r--r-- | Source/cmExportFileGenerator.h | 4 |
2 files changed, 52 insertions, 95 deletions
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 56b088e..da18856 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -184,6 +184,41 @@ void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget *target, } //---------------------------------------------------------------------------- +bool +cmExportFileGenerator::AddTargetNamespace(std::string &input, + cmTarget* target, + std::vector<std::string> &missingTargets) +{ + cmMakefile *mf = target->GetMakefile(); + + cmTarget *tgt = mf->FindTargetToUse(input.c_str()); + if (!tgt) + { + return false; + } + + if(tgt->IsImported()) + { + return true; + } + if(this->ExportedTargets.find(tgt) != this->ExportedTargets.end()) + { + input = this->Namespace + input; + } + else + { + std::string namespacedTarget; + this->HandleMissingTarget(namespacedTarget, missingTargets, + mf, target, tgt); + if (!namespacedTarget.empty()) + { + input = namespacedTarget; + } + } + return true; +} + +//---------------------------------------------------------------------------- void cmExportFileGenerator::ResolveTargetsInGeneratorExpressions( std::string &input, @@ -212,45 +247,17 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpressions( continue; } - const std::string targetName = input.substr(nameStartPos, + std::string targetName = input.substr(nameStartPos, commaPos - nameStartPos); - pos = nameStartPos; // We're not going to replace the entire expression, - // but only the target parameter. - if (cmTarget *tgt = mf->FindTargetToUse(targetName.c_str())) - { - if(tgt->IsImported()) - { - pos += targetName.size(); - } - else if(this->ExportedTargets.find(tgt) != this->ExportedTargets.end()) - { - input.replace(pos, targetName.size(), - this->Namespace + targetName); - pos += this->Namespace.size() + targetName.size(); - } - else - { - std::string namespacedTarget; - this->HandleMissingTarget(namespacedTarget, missingTargets, - mf, target, tgt); - if (!namespacedTarget.empty()) - { - input.replace(pos, targetName.size(), namespacedTarget); - pos += namespacedTarget.size(); - } - } - } - else + if (!this->AddTargetNamespace(targetName, target, missingTargets)) { errorString = "$<TARGET_PROPERTY:" + targetName + ",prop> requires " "its first parameter to be a reachable target."; - } - lastPos = pos; - if (!errorString.empty()) - { break; } + input.replace(nameStartPos, commaPos - nameStartPos, targetName); + lastPos = pos + targetName.size(); } if (!errorString.empty()) { @@ -267,51 +274,24 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpressions( if (endPos == input.npos) { errorString = "$<TARGET_NAME:...> expression incomplete"; + break; } - const std::string targetName = input.substr(nameStartPos, + std::string targetName = input.substr(nameStartPos, endPos - nameStartPos); if(targetName.find("$<") != input.npos) { errorString = "$<TARGET_NAME:...> requires its parameter to be a " "literal."; + break; } - if (cmTarget *tgt = mf->FindTargetToUse(targetName.c_str())) - { - if(tgt->IsImported()) - { - input.replace(pos, sizeof("$<TARGET_NAME:") + targetName.size(), - targetName); - pos += sizeof("$<TARGET_NAME:") + targetName.size(); - } - else if(this->ExportedTargets.find(tgt) != this->ExportedTargets.end()) - { - input.replace(pos, sizeof("$<TARGET_NAME:") + targetName.size(), - this->Namespace + targetName); - pos += sizeof("$<TARGET_NAME:") + targetName.size(); - } - else - { - std::string namespacedTarget; - this->HandleMissingTarget(namespacedTarget, missingTargets, - mf, target, tgt); - if (!namespacedTarget.empty()) - { - input.replace(pos, sizeof("$<TARGET_NAME:") + targetName.size(), - namespacedTarget); - pos += sizeof("$<TARGET_NAME:") + targetName.size(); - } - } - } - else + if (!this->AddTargetNamespace(targetName, target, missingTargets)) { errorString = "$<TARGET_NAME:...> requires its parameter to be a " "reachable target."; - } - lastPos = pos; - if (!errorString.empty()) - { break; } + input.replace(pos, endPos - pos + 1, targetName); + lastPos = endPos; } if (!errorString.empty()) { @@ -397,9 +377,6 @@ cmExportFileGenerator return; } - // Get the makefile in which to lookup target information. - cmMakefile* mf = target->GetMakefile(); - // Construct the property value. std::string link_libs; const char* sep = ""; @@ -410,33 +387,9 @@ cmExportFileGenerator link_libs += sep; sep = ";"; - // Append this entry. - if(cmTarget* tgt = mf->FindTargetToUse(li->c_str())) - { - // This is a target. - if(tgt->IsImported()) - { - // The target is imported (and therefore is not in the - // export). Append the raw name. - link_libs += *li; - } - else if(this->ExportedTargets.find(tgt) != this->ExportedTargets.end()) - { - // The target is in the export. Append it with the export - // namespace. - link_libs += this->Namespace; - link_libs += *li; - } - else - { - this->HandleMissingTarget(link_libs, missingTargets, mf, target, tgt); - } - } - else - { - // Append the raw name. - link_libs += *li; - } + std::string temp = *li; + this->AddTargetNamespace(temp, target, missingTargets); + link_libs += temp; } // Store the property. diff --git a/Source/cmExportFileGenerator.h b/Source/cmExportFileGenerator.h index 7c58ad8..a5b25f4 100644 --- a/Source/cmExportFileGenerator.h +++ b/Source/cmExportFileGenerator.h @@ -128,6 +128,10 @@ private: cmGeneratorExpression::PreprocessContext, ImportPropertyMap &properties, std::vector<std::string> &missingTargets); + + bool AddTargetNamespace(std::string &input, cmTarget* target, + std::vector<std::string> &missingTargets); + }; #endif |