/*============================================================================
  CMake - Cross Platform Makefile Generator
  Copyright 2000-2009 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 "cmMathCommand.h"

#include "cmExprParserHelper.h"

//----------------------------------------------------------------------------
bool cmMathCommand
::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
{
  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;
}
/qscriptvalue.cpp?h=v4.7.0-beta2'>tree</a><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2'>commit</a><a href='/oss-git/Qt.git/diff/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2'>diff</a><a href='/oss-git/Qt.git/stats/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2'>stats</a></td><td class='form'><form class='right' method='get' action='/oss-git/Qt.git/log/src/script/api/qscriptvalue.cpp'>
<input type='hidden' name='h' value='v4.7.0-beta2'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='text' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/oss-git/Qt.git/log/?h=v4.7.0-beta2'>root</a>/<a href='/oss-git/Qt.git/log/src?h=v4.7.0-beta2'>src</a>/<a href='/oss-git/Qt.git/log/src/script?h=v4.7.0-beta2'>script</a>/<a href='/oss-git/Qt.git/log/src/script/api?h=v4.7.0-beta2'>api</a>/<a href='/oss-git/Qt.git/log/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2'>qscriptvalue.cpp</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/oss-git/Qt.git/log/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>*   </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=501a80b1dc9df816a3de25bd1af5b55cdc0fcbce'>Merge remote branch 'origin/4.6' into qt-4.7-from-4.6</a><span class='decoration'></span></td><td>Thiago Macieira</td><td><span title='2010-04-09 17:02:00 (GMT)'>2010-04-09</span></td><td>1</td><td>-2/+11</td></tr>
<tr class='nohover'><td class='commitgraph'><span class='column1'>|</span><span class='column2'>\</span>  </td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'><span class='column1'>|</span> * </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=06add85eb8a9bd8f53acd162ce665d46e7ebc137'>Regressions in Global Object prototype access</a><span class='decoration'></span></td><td>Kent Hansen</td><td><span title='2010-04-09 14:31:12 (GMT)'>2010-04-09</span></td><td>1</td><td>-2/+11</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column2'>|</span> </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=3a1f89fc122c202d5b2f9352e81d467b0a48e61c'>QScript: more missing APIShim</a><span class='decoration'></span></td><td>Olivier Goffart</td><td><span title='2010-04-01 12:26:58 (GMT)'>2010-04-01</span></td><td>1</td><td>-0/+2</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column2'>|</span> </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=3e5745ea75d73869918889cb374c3d651bed0991'>QScriptEngine: Fix reentrency involving creation and desctructions of QScript...</a><span class='decoration'></span></td><td>Olivier Goffart</td><td><span title='2010-03-29 17:14:59 (GMT)'>2010-03-29</span></td><td>1</td><td>-20/+58</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column2'>|</span> </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=2fdfb3e0285ac535b63548d208da6dcae71105cc'>QtScript: Add API for reporting additional memory costs</a><span class='decoration'></span></td><td>Kent Hansen</td><td><span title='2010-03-25 14:05:13 (GMT)'>2010-03-25</span></td><td>1</td><td>-0/+2</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column2'>|</span> </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=739f15838f73e84cb5e5ae58bb8adc267bc1b79c'>QtScript: Add more missing API shims</a><span class='decoration'></span></td><td>Kent Hansen</td><td><span title='2010-03-24 13:09:18 (GMT)'>2010-03-24</span></td><td>1</td><td>-4/+8</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column2'>|</span>   </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=e48850c6ec90cd5eaa95d07573c2afa1a1c4f67f'>Merge branch '4.6-s60' into 4.7-s60</a><span class='decoration'></span></td><td>axis</td><td><span title='2010-03-22 09:24:51 (GMT)'>2010-03-22</span></td><td>1</td><td>-3/+2</td></tr>
<tr class='nohover'><td class='commitgraph'><span class='column3'>|</span><span class='column2'>\</span> <span class='column2'>\</span>  
<span class='column3'>|</span> <span class='column2'>|</span><span class='column2'>/</span>  </td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'><span class='column3'>|</span> * </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=de6b46d64a193278f6f4c0d8967783d47f605ca0'>Don't assert in QScriptValue::call()</a><span class='decoration'></span></td><td>Kent Hansen</td><td><span title='2010-03-18 17:18:25 (GMT)'>2010-03-18</span></td><td>1</td><td>-3/+2</td></tr>
<tr class='nohover'><td class='commitgraph'></td>
<td colspan='5'>
</td></tr>
<tr><td class='commitgraph'>* <span class='column4'>|</span> </td><td><a href='/oss-git/Qt.git/commit/src/script/api/qscriptvalue.cpp?h=v4.7.0-beta2&amp;id=ccf34d2a9f2d3aa2341de7babab5188b359861a1'>Add missing QtScript API shims</a><span class='decoration'></span></td><td>Kent Hansen</td><td><span title='2010-03-15 07:32:38 (GMT)'>2010-03-15</span>