mirror of
https://github.com/reactos/CMake.git
synced 2024-12-01 15:30:40 +00:00
145 lines
3.5 KiB
C++
145 lines
3.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#include "cmDefinePropertyCommand.h"
|
|
#include "cmake.h"
|
|
|
|
// cmDefinePropertiesCommand
|
|
bool cmDefinePropertyCommand
|
|
::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
|
|
{
|
|
if(args.size() < 1)
|
|
{
|
|
this->SetError("called with incorrect number of arguments");
|
|
return false;
|
|
}
|
|
|
|
// Get the scope in which to define the property.
|
|
cmProperty::ScopeType scope;
|
|
if(args[0] == "GLOBAL")
|
|
{
|
|
scope = cmProperty::GLOBAL;
|
|
}
|
|
else if(args[0] == "DIRECTORY")
|
|
{
|
|
scope = cmProperty::DIRECTORY;
|
|
}
|
|
else if(args[0] == "TARGET")
|
|
{
|
|
scope = cmProperty::TARGET;
|
|
}
|
|
else if(args[0] == "SOURCE")
|
|
{
|
|
scope = cmProperty::SOURCE_FILE;
|
|
}
|
|
else if(args[0] == "TEST")
|
|
{
|
|
scope = cmProperty::TEST;
|
|
}
|
|
else if(args[0] == "VARIABLE")
|
|
{
|
|
scope = cmProperty::VARIABLE;
|
|
}
|
|
else if (args[0] == "CACHED_VARIABLE")
|
|
{
|
|
scope = cmProperty::CACHED_VARIABLE;
|
|
}
|
|
else
|
|
{
|
|
cmOStringStream e;
|
|
e << "given invalid scope " << args[0] << ". "
|
|
<< "Valid scopes are "
|
|
<< "GLOBAL, DIRECTORY, TARGET, SOURCE, "
|
|
<< "TEST, VARIABLE, CACHED_VARIABLE.";
|
|
this->SetError(e.str().c_str());
|
|
return false;
|
|
}
|
|
|
|
// Parse remaining arguments.
|
|
bool inherited = false;
|
|
enum Doing { DoingNone, DoingProperty, DoingBrief, DoingFull };
|
|
Doing doing = DoingNone;
|
|
for(unsigned int i=1; i < args.size(); ++i)
|
|
{
|
|
if(args[i] == "PROPERTY")
|
|
{
|
|
doing = DoingProperty;
|
|
}
|
|
else if(args[i] == "BRIEF_DOCS")
|
|
{
|
|
doing = DoingBrief;
|
|
}
|
|
else if(args[i] == "FULL_DOCS")
|
|
{
|
|
doing = DoingFull;
|
|
}
|
|
else if(args[i] == "INHERITED")
|
|
{
|
|
doing = DoingNone;
|
|
inherited = true;
|
|
}
|
|
else if(doing == DoingProperty)
|
|
{
|
|
doing = DoingNone;
|
|
this->PropertyName = args[i];
|
|
}
|
|
else if(doing == DoingBrief)
|
|
{
|
|
doing = DoingNone;
|
|
this->BriefDocs = args[i];
|
|
}
|
|
else if(doing == DoingFull)
|
|
{
|
|
doing = DoingNone;
|
|
this->FullDocs = 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;
|
|
}
|
|
|
|
// Make sure documentation was given.
|
|
if(this->BriefDocs.empty())
|
|
{
|
|
this->SetError("not given a BRIEF_DOCS <brief-doc> argument.");
|
|
return false;
|
|
}
|
|
if(this->FullDocs.empty())
|
|
{
|
|
this->SetError("not given a FULL_DOCS <full-doc> argument.");
|
|
return false;
|
|
}
|
|
|
|
// Actually define the property.
|
|
this->Makefile->GetCMakeInstance()->DefineProperty
|
|
(this->PropertyName.c_str(), scope,
|
|
this->BriefDocs.c_str(), this->FullDocs.c_str(), inherited);
|
|
|
|
return true;
|
|
}
|
|
|