diff options
author | Brad King <brad.king@kitware.com> | 2010-12-07 21:23:38 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2010-12-08 22:29:20 (GMT) |
commit | 542b517449e8c7101ac6fbd316749bd461b48588 (patch) | |
tree | ce8295801336eee3b7cfb4a7d0427f4ec533c74a /Source/cmCustomCommandGenerator.cxx | |
parent | 6fe5b3db0b2ca3f9203a54589de0d744d59744c0 (diff) | |
download | CMake-542b517449e8c7101ac6fbd316749bd461b48588.zip CMake-542b517449e8c7101ac6fbd316749bd461b48588.tar.gz CMake-542b517449e8c7101ac6fbd316749bd461b48588.tar.bz2 |
Factor out common custom command generator
The Makefile, VS, and Xcode generators previously duplicated some custom
command line generation code. Factor this out into a separate class
cmCustomCommandGenerator shared by all generators.
Diffstat (limited to 'Source/cmCustomCommandGenerator.cxx')
-rw-r--r-- | Source/cmCustomCommandGenerator.cxx | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx new file mode 100644 index 0000000..890ac9c --- /dev/null +++ b/Source/cmCustomCommandGenerator.cxx @@ -0,0 +1,58 @@ +/*============================================================================ + 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" + +//---------------------------------------------------------------------------- +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()) +{ +} + +//---------------------------------------------------------------------------- +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]; + return this->LG->GetRealLocation(argv0.c_str(), 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 const& arg = commandLine[j]; + cmd += " "; + if(this->OldStyle) + { + cmd += this->LG->EscapeForShellOldStyle(arg.c_str()); + } + else + { + cmd += this->LG->EscapeForShell(arg.c_str(), this->MakeVars); + } + } +} |