summaryrefslogtreecommitdiff
path: root/Source/cmGetTargetPropertyCommand.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGetTargetPropertyCommand.cxx')
-rw-r--r--Source/cmGetTargetPropertyCommand.cxx105
1 files changed, 68 insertions, 37 deletions
diff --git a/Source/cmGetTargetPropertyCommand.cxx b/Source/cmGetTargetPropertyCommand.cxx
index 02f00a508..0910a5324 100644
--- a/Source/cmGetTargetPropertyCommand.cxx
+++ b/Source/cmGetTargetPropertyCommand.cxx
@@ -1,52 +1,83 @@
-/*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#include "cmGetTargetPropertyCommand.h"
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
+#include <sstream>
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
-============================================================================*/
-#include "cmGetTargetPropertyCommand.h"
+#include "cmListFileCache.h"
+#include "cmMakefile.h"
+#include "cmPolicies.h"
+#include "cmTarget.h"
+#include "cmTargetPropertyComputer.h"
+#include "cmake.h"
+
+class cmExecutionStatus;
+class cmMessenger;
// cmSetTargetPropertyCommand
-bool cmGetTargetPropertyCommand
-::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
+bool cmGetTargetPropertyCommand::InitialPass(
+ std::vector<std::string> const& args, cmExecutionStatus&)
{
- if(args.size() != 3 )
- {
+ if (args.size() != 3) {
this->SetError("called with incorrect number of arguments");
return false;
- }
- std::string var = args[0].c_str();
- const char* targetName = args[1].c_str();
- const char *prop = 0;
+ }
+ std::string const& var = args[0];
+ std::string const& targetName = args[1];
+ std::string prop;
+ bool prop_exists = false;
- if(args[2] == "ALIASED_TARGET")
- {
- if(this->Makefile->IsAlias(targetName))
- {
- if(cmTarget* target =
- this->Makefile->FindTargetToUse(targetName))
- {
- prop = target->GetName();
+ if (cmTarget* tgt = this->Makefile->FindTargetToUse(targetName)) {
+ if (args[2] == "ALIASED_TARGET") {
+ if (this->Makefile->IsAlias(targetName)) {
+ prop = tgt->GetName();
+ prop_exists = true;
+ }
+ } else if (!args[2].empty()) {
+ const char* prop_cstr = CM_NULLPTR;
+ cmListFileBacktrace bt = this->Makefile->GetBacktrace();
+ cmMessenger* messenger = this->Makefile->GetMessenger();
+ if (cmTargetPropertyComputer::PassesWhitelist(tgt->GetType(), args[2],
+ messenger, bt)) {
+ prop_cstr = tgt->GetComputedProperty(args[2], messenger, bt);
+ if (!prop_cstr) {
+ prop_cstr = tgt->GetProperty(args[2]);
}
}
+ if (prop_cstr) {
+ prop = prop_cstr;
+ prop_exists = true;
+ }
}
- else if(cmTarget* tgt = this->Makefile->FindTargetToUse(targetName))
- {
- cmTarget& target = *tgt;
- prop = target.GetProperty(args[2].c_str());
+ } else {
+ bool issueMessage = false;
+ std::ostringstream e;
+ cmake::MessageType messageType = cmake::AUTHOR_WARNING;
+ switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0045)) {
+ case cmPolicies::WARN:
+ issueMessage = true;
+ e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0045) << "\n";
+ case cmPolicies::OLD:
+ break;
+ case cmPolicies::REQUIRED_IF_USED:
+ case cmPolicies::REQUIRED_ALWAYS:
+ case cmPolicies::NEW:
+ issueMessage = true;
+ messageType = cmake::FATAL_ERROR;
}
-
- if (prop)
- {
- this->Makefile->AddDefinition(var.c_str(), prop);
- return true;
+ if (issueMessage) {
+ e << "get_target_property() called with non-existent target \""
+ << targetName << "\".";
+ this->Makefile->IssueMessage(messageType, e.str());
+ if (messageType == cmake::FATAL_ERROR) {
+ return false;
+ }
}
- this->Makefile->AddDefinition(var.c_str(), (var+"-NOTFOUND").c_str());
+ }
+ if (prop_exists) {
+ this->Makefile->AddDefinition(var, prop.c_str());
+ return true;
+ }
+ this->Makefile->AddDefinition(var, (var + "-NOTFOUND").c_str());
return true;
}
-