cfengine/core — pull request #863 by tzz (2013-08-09 11:02:44+00:00)
Title: Bring in optional libmatheval and support it in the eval() function

Using the optional GNU libmatheval, we get:

* symbolic evaluation (disabled for now)
* function differentiation (unused for now)
* parsing of infix expressions with parenthesis
* all the math goodness you expect, including standard constants and the hyperbolic inverse cosecant `acsch` (gesundheit)
* robust parser; acceptance test shows its usage
* no rounding (use `format` for that)
* fast evaluation

I left the function parameters as a type (currenly only `math`) and some options (currently only `novars`) to support future expansions; I feel strongly that leaving these parameters is very useful as our evaluation needs grow. For instance we may need a logical evaluation mode that can parse Boolean logic.