|
@@ -20,9 +20,14 @@
|
|
|
#include "cmTest.h"
|
|
#include "cmTest.h"
|
|
|
#include "cmPropertyDefinition.h"
|
|
#include "cmPropertyDefinition.h"
|
|
|
|
|
|
|
|
-// cmGetPropertyCommand
|
|
|
|
|
-bool cmGetPropertyCommand::InitialPass(
|
|
|
|
|
- std::vector<std::string> const& args)
|
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+cmGetPropertyCommand::cmGetPropertyCommand()
|
|
|
|
|
+{
|
|
|
|
|
+ this->InfoType = OutValue;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::InitialPass(std::vector<std::string> const& args)
|
|
|
{
|
|
{
|
|
|
if(args.size() < 3 )
|
|
if(args.size() < 3 )
|
|
|
{
|
|
{
|
|
@@ -30,182 +35,308 @@ bool cmGetPropertyCommand::InitialPass(
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // the last argument in the property to get
|
|
|
|
|
- const char *property = args[args.size()-1].c_str();
|
|
|
|
|
- bool get_brief = false;
|
|
|
|
|
- if (!strcmp(property,"BRIEF_DOCS"))
|
|
|
|
|
- {
|
|
|
|
|
- get_brief = true;
|
|
|
|
|
- property = args[args.size()-2].c_str();
|
|
|
|
|
- }
|
|
|
|
|
- bool get_full = false;
|
|
|
|
|
- if (!strcmp(property,"FULL_DOCS"))
|
|
|
|
|
- {
|
|
|
|
|
- get_full = true;
|
|
|
|
|
- property = args[args.size()-2].c_str();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- std::string output = "NOTFOUND";
|
|
|
|
|
|
|
+ // The cmake variable in which to store the result.
|
|
|
|
|
+ this->Variable = args[0];
|
|
|
|
|
|
|
|
|
|
+ // Get the scope from which to get the property.
|
|
|
cmProperty::ScopeType scope;
|
|
cmProperty::ScopeType scope;
|
|
|
- const char *scopeName = 0;
|
|
|
|
|
- if (args[1] == "GLOBAL")
|
|
|
|
|
|
|
+ if(args[1] == "GLOBAL")
|
|
|
{
|
|
{
|
|
|
scope = cmProperty::GLOBAL;
|
|
scope = cmProperty::GLOBAL;
|
|
|
}
|
|
}
|
|
|
- else if (args[1] == "VARIABLE")
|
|
|
|
|
- {
|
|
|
|
|
- scope = cmProperty::VARIABLE;
|
|
|
|
|
- }
|
|
|
|
|
- else if (args[1] == "DIRECTORY" && args.size() >= 3)
|
|
|
|
|
|
|
+ else if(args[1] == "DIRECTORY")
|
|
|
{
|
|
{
|
|
|
scope = cmProperty::DIRECTORY;
|
|
scope = cmProperty::DIRECTORY;
|
|
|
- if ((args.size() == 4 && !get_brief && !get_full) ||
|
|
|
|
|
- (args.size() == 5 && (get_brief || get_full)))
|
|
|
|
|
- {
|
|
|
|
|
- scopeName = args[2].c_str();
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
- else if (args[1] == "TARGET" && args.size() >= 4)
|
|
|
|
|
|
|
+ else if(args[1] == "TARGET")
|
|
|
{
|
|
{
|
|
|
scope = cmProperty::TARGET;
|
|
scope = cmProperty::TARGET;
|
|
|
- scopeName = args[2].c_str();
|
|
|
|
|
}
|
|
}
|
|
|
- else if (args[1] == "TEST" && args.size() >= 4)
|
|
|
|
|
|
|
+ else if(args[1] == "SOURCE")
|
|
|
|
|
+ {
|
|
|
|
|
+ scope = cmProperty::SOURCE_FILE;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(args[1] == "TEST")
|
|
|
{
|
|
{
|
|
|
scope = cmProperty::TEST;
|
|
scope = cmProperty::TEST;
|
|
|
- scopeName = args[2].c_str();
|
|
|
|
|
}
|
|
}
|
|
|
- else if (args[1] == "SOURCE_FILE" && args.size() >= 4)
|
|
|
|
|
|
|
+ else if(args[1] == "VARIABLE")
|
|
|
{
|
|
{
|
|
|
- scope = cmProperty::SOURCE_FILE;
|
|
|
|
|
- scopeName = args[2].c_str();
|
|
|
|
|
|
|
+ scope = cmProperty::VARIABLE;
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- this->SetError("called with illegal arguments.");
|
|
|
|
|
|
|
+ cmOStringStream e;
|
|
|
|
|
+ e << "given invalid scope " << args[1] << ". "
|
|
|
|
|
+ << "Valid scopes are "
|
|
|
|
|
+ << "GLOBAL, DIRECTORY, TARGET, SOURCE, TEST, VARIABLE.";
|
|
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if (get_brief)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Parse remaining arguments.
|
|
|
|
|
+ enum Doing { DoingNone, DoingName, DoingProperty, DoingType };
|
|
|
|
|
+ Doing doing = DoingName;
|
|
|
|
|
+ for(unsigned int i=2; i < args.size(); ++i)
|
|
|
{
|
|
{
|
|
|
- cmPropertyDefinition *def =
|
|
|
|
|
- this->Makefile->GetCMakeInstance()->
|
|
|
|
|
- GetPropertyDefinition(property,scope);
|
|
|
|
|
- if (def)
|
|
|
|
|
|
|
+ if(args[i] == "PROPERTY")
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingProperty;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(args[i] == "BRIEF_DOCS")
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingNone;
|
|
|
|
|
+ this->InfoType = OutBriefDoc;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(args[i] == "FULL_DOCS")
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingNone;
|
|
|
|
|
+ this->InfoType = OutFullDoc;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(args[i] == "DEFINED")
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingNone;
|
|
|
|
|
+ this->InfoType = OutDefined;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(doing == DoingName)
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingNone;
|
|
|
|
|
+ this->Name = args[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(doing == DoingProperty)
|
|
|
|
|
+ {
|
|
|
|
|
+ doing = DoingNone;
|
|
|
|
|
+ this->PropertyName = args[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ cmOStringStream e;
|
|
|
|
|
+ e << "given invalid argument \"" << args[i] << "\".";
|
|
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Make sure a property name was found.
|
|
|
|
|
+ if(this->PropertyName.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("not given a PROPERTY <name> argument.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Compute requested output.
|
|
|
|
|
+ if(this->InfoType == OutBriefDoc)
|
|
|
|
|
+ {
|
|
|
|
|
+ // Lookup brief documentation.
|
|
|
|
|
+ std::string output;
|
|
|
|
|
+ if(cmPropertyDefinition* def =
|
|
|
|
|
+ this->Makefile->GetCMakeInstance()->
|
|
|
|
|
+ GetPropertyDefinition(this->PropertyName.c_str(), scope))
|
|
|
{
|
|
{
|
|
|
output = def->GetShortDescription();
|
|
output = def->GetShortDescription();
|
|
|
}
|
|
}
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ output = "NOTFOUND";
|
|
|
|
|
+ }
|
|
|
|
|
+ this->Makefile->AddDefinition(this->Variable.c_str(), output.c_str());
|
|
|
}
|
|
}
|
|
|
- else if (get_full)
|
|
|
|
|
|
|
+ else if(this->InfoType == OutFullDoc)
|
|
|
{
|
|
{
|
|
|
- cmPropertyDefinition *def =
|
|
|
|
|
- this->Makefile->GetCMakeInstance()->
|
|
|
|
|
- GetPropertyDefinition(property,scope);
|
|
|
|
|
- if (def)
|
|
|
|
|
|
|
+ // Lookup full documentation.
|
|
|
|
|
+ std::string output;
|
|
|
|
|
+ if(cmPropertyDefinition* def =
|
|
|
|
|
+ this->Makefile->GetCMakeInstance()->
|
|
|
|
|
+ GetPropertyDefinition(this->PropertyName.c_str(), scope))
|
|
|
{
|
|
{
|
|
|
output = def->GetFullDescription();
|
|
output = def->GetFullDescription();
|
|
|
}
|
|
}
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ output = "NOTFOUND";
|
|
|
|
|
+ }
|
|
|
|
|
+ this->Makefile->AddDefinition(this->Variable.c_str(), output.c_str());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- else switch (scope)
|
|
|
|
|
- {
|
|
|
|
|
- case cmProperty::VARIABLE:
|
|
|
|
|
- {
|
|
|
|
|
- if (this->Makefile->GetDefinition(property))
|
|
|
|
|
- {
|
|
|
|
|
- output = this->Makefile->GetDefinition(property);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::TARGET:
|
|
|
|
|
- {
|
|
|
|
|
- cmTarget *tgt = this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
|
|
|
|
|
- ->FindTarget(0, scopeName, true);
|
|
|
|
|
- if (tgt)
|
|
|
|
|
- {
|
|
|
|
|
- cmTarget& target = *tgt;
|
|
|
|
|
- const char *prop = target.GetProperty(property);
|
|
|
|
|
- if (prop)
|
|
|
|
|
- {
|
|
|
|
|
- output = prop;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::DIRECTORY:
|
|
|
|
|
- {
|
|
|
|
|
- cmLocalGenerator *lg = this->Makefile->GetLocalGenerator();
|
|
|
|
|
- if (args.size() >= 4)
|
|
|
|
|
- {
|
|
|
|
|
- std::string sd = scopeName;
|
|
|
|
|
- // make sure the start dir is a full path
|
|
|
|
|
- if (!cmSystemTools::FileIsFullPath(sd.c_str()))
|
|
|
|
|
- {
|
|
|
|
|
- sd = this->Makefile->GetStartDirectory();
|
|
|
|
|
- sd += "/";
|
|
|
|
|
- sd += scopeName;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // The local generators are associated with collapsed paths.
|
|
|
|
|
- sd = cmSystemTools::CollapseFullPath(sd.c_str());
|
|
|
|
|
-
|
|
|
|
|
- // lookup the makefile from the directory name
|
|
|
|
|
- lg =
|
|
|
|
|
- this->Makefile->GetLocalGenerator()->GetGlobalGenerator()->
|
|
|
|
|
- FindLocalGenerator(sd.c_str());
|
|
|
|
|
- }
|
|
|
|
|
- if (!lg)
|
|
|
|
|
- {
|
|
|
|
|
- this->SetError
|
|
|
|
|
- ("DIRECTORY argument provided but requested directory not found. "
|
|
|
|
|
- "This could be because the directory argument was invalid or, "
|
|
|
|
|
- "it is valid but has not been processed yet.");
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- const char *prop = lg->GetMakefile()->GetProperty(property);
|
|
|
|
|
- if (prop)
|
|
|
|
|
- {
|
|
|
|
|
- output = prop;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::GLOBAL:
|
|
|
|
|
- {
|
|
|
|
|
- const char *prop =
|
|
|
|
|
- this->Makefile->GetCMakeInstance()->GetProperty(property);
|
|
|
|
|
- if (prop)
|
|
|
|
|
- {
|
|
|
|
|
- output = prop;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::TEST:
|
|
|
|
|
- {
|
|
|
|
|
- cmTest *test = this->Makefile->GetTest(scopeName);
|
|
|
|
|
- const char *prop = test->GetProperty(property);
|
|
|
|
|
- if (prop)
|
|
|
|
|
- {
|
|
|
|
|
- output = prop;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::SOURCE_FILE:
|
|
|
|
|
- {
|
|
|
|
|
- cmSourceFile* sf = this->Makefile->GetSource(scopeName);
|
|
|
|
|
- const char *prop = sf->GetProperty(property);
|
|
|
|
|
- if (prop)
|
|
|
|
|
- {
|
|
|
|
|
- output = prop;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case cmProperty::CACHED_VARIABLE:
|
|
|
|
|
- // not handled by GetProperty
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- this->Makefile->AddDefinition(args[0].c_str(), output.c_str());
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ // Dispatch property getting.
|
|
|
|
|
+ switch(scope)
|
|
|
|
|
+ {
|
|
|
|
|
+ case cmProperty::GLOBAL: return this->HandleGlobalMode();
|
|
|
|
|
+ case cmProperty::DIRECTORY: return this->HandleDirectoryMode();
|
|
|
|
|
+ case cmProperty::TARGET: return this->HandleTargetMode();
|
|
|
|
|
+ case cmProperty::SOURCE_FILE: return this->HandleSourceMode();
|
|
|
|
|
+ case cmProperty::TEST: return this->HandleTestMode();
|
|
|
|
|
+ case cmProperty::VARIABLE: return this->HandleVariableMode();
|
|
|
|
|
+
|
|
|
|
|
+ case cmProperty::CACHED_VARIABLE:
|
|
|
|
|
+ break; // should never happen
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::StoreResult(const char* value)
|
|
|
|
|
+{
|
|
|
|
|
+ if(this->InfoType == OutDefined)
|
|
|
|
|
+ {
|
|
|
|
|
+ this->Makefile->AddDefinition(this->Variable.c_str(), value? "1":"0");
|
|
|
|
|
+ }
|
|
|
|
|
+ else // if(this->InfoType == OutValue)
|
|
|
|
|
+ {
|
|
|
|
|
+ this->Makefile->AddDefinition(this->Variable.c_str(), value);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleGlobalMode()
|
|
|
|
|
+{
|
|
|
|
|
+ if(!this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("given name for GLOBAL scope.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Get the property.
|
|
|
|
|
+ cmake* cm = this->Makefile->GetCMakeInstance();
|
|
|
|
|
+ return this->StoreResult(cm->GetProperty(this->PropertyName.c_str()));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleDirectoryMode()
|
|
|
|
|
+{
|
|
|
|
|
+ // Default to the current directory.
|
|
|
|
|
+ cmMakefile* mf = this->Makefile;
|
|
|
|
|
+
|
|
|
|
|
+ // Lookup the directory if given.
|
|
|
|
|
+ if(!this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ // Construct the directory name. Interpret relative paths with
|
|
|
|
|
+ // respect to the current directory.
|
|
|
|
|
+ std::string dir = this->Name;
|
|
|
|
|
+ if(!cmSystemTools::FileIsFullPath(dir.c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ dir = this->Makefile->GetCurrentDirectory();
|
|
|
|
|
+ dir += "/";
|
|
|
|
|
+ dir += this->Name;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // The local generators are associated with collapsed paths.
|
|
|
|
|
+ dir = cmSystemTools::CollapseFullPath(dir.c_str());
|
|
|
|
|
+
|
|
|
|
|
+ // Lookup the generator.
|
|
|
|
|
+ if(cmLocalGenerator* lg =
|
|
|
|
|
+ (this->Makefile->GetLocalGenerator()
|
|
|
|
|
+ ->GetGlobalGenerator()->FindLocalGenerator(dir.c_str())))
|
|
|
|
|
+ {
|
|
|
|
|
+ // Use the makefile for the directory found.
|
|
|
|
|
+ mf = lg->GetMakefile();
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ // Could not find the directory.
|
|
|
|
|
+ this->SetError
|
|
|
|
|
+ ("DIRECTORY scope provided but requested directory was not found. "
|
|
|
|
|
+ "This could be because the directory argument was invalid or, "
|
|
|
|
|
+ "it is valid but has not been processed yet.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Get the property.
|
|
|
|
|
+ return this->StoreResult(mf->GetProperty(this->PropertyName.c_str()));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleTargetMode()
|
|
|
|
|
+{
|
|
|
|
|
+ if(this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("not given name for TARGET scope.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(cmTarget* target =
|
|
|
|
|
+ this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
|
|
|
|
|
+ ->FindTarget(0, this->Name.c_str(), true))
|
|
|
|
|
+ {
|
|
|
|
|
+ return this->StoreResult(target->GetProperty(this->PropertyName.c_str()));
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ cmOStringStream e;
|
|
|
|
|
+ e << "could not find TARGET " << this->Name
|
|
|
|
|
+ << ". Perhaps it has not yet been created.";
|
|
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleSourceMode()
|
|
|
|
|
+{
|
|
|
|
|
+ if(this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("not given name for SOURCE scope.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Get the source file.
|
|
|
|
|
+ if(cmSourceFile* sf =
|
|
|
|
|
+ this->Makefile->GetOrCreateSource(this->Name.c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ return this->StoreResult(sf->GetProperty(this->PropertyName.c_str()));
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ cmOStringStream e;
|
|
|
|
|
+ e << "given SOURCE name that could not be found or created: "
|
|
|
|
|
+ << this->Name;
|
|
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleTestMode()
|
|
|
|
|
+{
|
|
|
|
|
+ if(this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("not given name for TEST scope.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Loop over all tests looking for matching names.
|
|
|
|
|
+ std::vector<cmTest*> const& tests = *this->Makefile->GetTests();
|
|
|
|
|
+ for(std::vector<cmTest*>::const_iterator ti = tests.begin();
|
|
|
|
|
+ ti != tests.end(); ++ti)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmTest* test = *ti;
|
|
|
|
|
+ if(test->GetName() == this->Name)
|
|
|
|
|
+ {
|
|
|
|
|
+ return this->StoreResult(test->GetProperty(this->PropertyName.c_str()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // If not found it is an error.
|
|
|
|
|
+ cmOStringStream e;
|
|
|
|
|
+ e << "given TEST name that does not exist: " << this->Name;
|
|
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
|
|
+ return false;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
|
|
+bool cmGetPropertyCommand::HandleVariableMode()
|
|
|
|
|
+{
|
|
|
|
|
+ if(!this->Name.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ this->SetError("given name for VARIABLE scope.");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return this->StoreResult
|
|
|
|
|
+ (this->Makefile->GetDefinition(this->PropertyName.c_str()));
|
|
|
|
|
+}
|