You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*=========================================================================
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 "cmMathCommand.h"
#include "cmExprParserHelper.h"
//----------------------------------------------------------------------------
bool cmMathCommand::InitialPass(std::vector<std::string> const& args) { if ( args.size() < 1 ) { this->SetError("must be called with at least one argument."); return false; } const std::string &subCommand = args[0]; if(subCommand == "EXPR") { return this->HandleExprCommand(args); } std::string e = "does not recognize sub-command "+subCommand; this->SetError(e.c_str()); return false; }
//----------------------------------------------------------------------------
bool cmMathCommand::HandleExprCommand(std::vector<std::string> const& args) { if ( args.size() != 3 ) { this->SetError("EXPR called with incorrect arguments."); return false; }
const std::string& outputVariable = args[1]; const std::string& expression = args[2]; cmExprParserHelper helper; if ( !helper.ParseString(expression.c_str(), 0) ) { std::string e = "cannot parse the expression: \""+expression+"\": "; e += helper.GetError(); this->SetError(e.c_str()); return false; }
char buffer[1024]; sprintf(buffer, "%d", helper.GetResult());
this->Makefile->AddDefinition(outputVariable.c_str(), buffer); return true; }
|