mirror of
https://github.com/reactos/CMake.git
synced 2025-01-10 05:31:02 +00:00
91011bd217
Removing the Process() API and removing the parameters from the constructor will allow cmGeneratorExpressions to be cached and evaluated with multiple configs for example, such as when evaluating target properties. This requires the creation of a new compiled representation of cmGeneratorExpression. The cmListFileBacktrace remains in the constructor so that we can record where a particular generator expression appeared in the CMakeLists file.
74 lines
2.7 KiB
C++
74 lines
2.7 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2010 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
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 "cmCustomCommandGenerator.h"
|
|
|
|
#include "cmMakefile.h"
|
|
#include "cmCustomCommand.h"
|
|
#include "cmLocalGenerator.h"
|
|
#include "cmGeneratorExpression.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmCustomCommandGenerator::cmCustomCommandGenerator(
|
|
cmCustomCommand const& cc, const char* config, cmMakefile* mf):
|
|
CC(cc), Config(config), Makefile(mf), LG(mf->GetLocalGenerator()),
|
|
OldStyle(cc.GetEscapeOldStyle()), MakeVars(cc.GetEscapeAllowMakeVars()),
|
|
GE(new cmGeneratorExpression(cc.GetBacktrace()))
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmCustomCommandGenerator::~cmCustomCommandGenerator()
|
|
{
|
|
delete this->GE;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
unsigned int cmCustomCommandGenerator::GetNumberOfCommands() const
|
|
{
|
|
return static_cast<unsigned int>(this->CC.GetCommandLines().size());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
std::string cmCustomCommandGenerator::GetCommand(unsigned int c) const
|
|
{
|
|
std::string const& argv0 = this->CC.GetCommandLines()[c][0];
|
|
cmTarget* target = this->Makefile->FindTargetToUse(argv0.c_str());
|
|
if(target && target->GetType() == cmTarget::EXECUTABLE &&
|
|
(target->IsImported() || !this->Makefile->IsOn("CMAKE_CROSSCOMPILING")))
|
|
{
|
|
return target->GetLocation(this->Config);
|
|
}
|
|
return this->GE->Parse(argv0).Evaluate(this->Makefile, this->Config);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void
|
|
cmCustomCommandGenerator
|
|
::AppendArguments(unsigned int c, std::string& cmd) const
|
|
{
|
|
cmCustomCommandLine const& commandLine = this->CC.GetCommandLines()[c];
|
|
for(unsigned int j=1;j < commandLine.size(); ++j)
|
|
{
|
|
std::string arg = this->GE->Parse(commandLine[j]).Evaluate(this->Makefile,
|
|
this->Config);
|
|
cmd += " ";
|
|
if(this->OldStyle)
|
|
{
|
|
cmd += this->LG->EscapeForShellOldStyle(arg.c_str());
|
|
}
|
|
else
|
|
{
|
|
cmd += this->LG->EscapeForShell(arg.c_str(), this->MakeVars);
|
|
}
|
|
}
|
|
}
|