From f141c0212b04f2ddbbacad4aa21d1152e3d81d72 Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Wed, 2 Nov 2022 10:58:14 +0100 Subject: [PATCH 1/6] remove muparser source and download it using cmake --- src/external/muparser.cmake | 42 +- src/external/muparser_v225/Changes.txt | 557 -- src/external/muparser_v225/Install.txt | 133 - src/external/muparser_v225/License.txt | 35 - src/external/muparser_v225/Makefile.in | 368 - .../muparser_v225/build/autoconf/aclocal.m4 | 1992 ---- .../muparser_v225/build/autoconf/acregen.sh | 50 - .../build/autoconf/autoconf_inc.m4 | 134 - .../build/autoconf/bakefile-presets.m4 | 156 - .../muparser_v225/build/autoconf/config.guess | 1497 --- .../muparser_v225/build/autoconf/config.sub | 1608 ---- .../muparser_v225/build/autoconf/configure.ac | 82 - .../muparser_v225/build/autoconf/install-sh | 2 - .../build/autoconf/muparser.pc.in | 11 - .../build/bakefiles/Bakefiles.bkgen | 39 - .../muparser_v225/build/bakefiles/howto.txt | 28 - .../build/bakefiles/muparser.bkl | 160 - .../build/bakefiles/presets/debugopt.bkl | 55 - .../build/bakefiles/presets/setbuilddir.bkl | 63 - .../build/bakefiles/presets/sharedopt.bkl | 42 - .../build/bakefiles/presets/unicodeopt.bkl | 43 - .../muparser_v225/build/makefile.mingw | 283 - src/external/muparser_v225/build/makefile.vc | 322 - .../muparser_v225/build/msvc2013/muparser.sln | 119 - .../build/msvc2013/muparser_example1.vcxproj | 238 - .../muparser_example1.vcxproj.filters | 14 - .../build/msvc2013/muparser_example2.vcxproj | 208 - .../muparser_example2.vcxproj.filters | 14 - .../build/msvc2013/muparser_muParser.vcxproj | 411 - .../muparser_muParser.vcxproj.filters | 86 - src/external/muparser_v225/configure | 8354 ----------------- src/external/muparser_v225/docs/Doxyfile | 1563 --- .../muparser_v225/docs/muparser_doc.html | 15 - src/external/muparser_v225/include/muParser.h | 115 - .../muparser_v225/include/muParserBase.h | 317 - .../muparser_v225/include/muParserBytecode.h | 141 - .../muparser_v225/include/muParserCallback.h | 118 - .../muparser_v225/include/muParserDLL.h | 241 - .../muparser_v225/include/muParserDef.h | 368 - .../muparser_v225/include/muParserError.h | 176 - .../muparser_v225/include/muParserFixes.h | 62 - .../muparser_v225/include/muParserInt.h | 140 - .../muparser_v225/include/muParserStack.h | 125 - .../include/muParserTemplateMagic.h | 113 - .../muparser_v225/include/muParserTest.h | 214 - .../muparser_v225/include/muParserToken.h | 401 - .../include/muParserTokenReader.h | 161 - src/external/muparser_v225/lib/Readme.txt | 1 - .../samples/example1/example1.cpp | 592 -- .../muparser_v225/samples/example2/Readme.txt | 18 - .../muparser_v225/samples/example2/example2.c | 442 - .../samples/example2/muparser32.dll | Bin 154624 -> 0 bytes .../samples/example2/muparser32.lib | Bin 15856 -> 0 bytes .../samples/example2/muparser64.dll | Bin 192000 -> 0 bytes .../samples/example2/muparser64.lib | Bin 15516 -> 0 bytes .../samples/example2/muparserd32.dll | Bin 738816 -> 0 bytes .../samples/example2/muparserd32.lib | Bin 15938 -> 0 bytes .../samples/example2/muparserd64.dll | Bin 786944 -> 0 bytes .../samples/example2/muparserd64.lib | Bin 15594 -> 0 bytes src/external/muparser_v225/src/muParser.cpp | 397 - .../muparser_v225/src/muParserBase.cpp | 1778 ---- .../muparser_v225/src/muParserBytecode.cpp | 588 -- .../muparser_v225/src/muParserCallback.cpp | 463 - .../muparser_v225/src/muParserDLL.cpp | 1096 --- .../muparser_v225/src/muParserError.cpp | 337 - .../muparser_v225/src/muParserInt.cpp | 280 - .../muparser_v225/src/muParserTest.cpp | 1552 --- .../muparser_v225/src/muParserTokenReader.cpp | 958 -- 68 files changed, 21 insertions(+), 29897 deletions(-) delete mode 100644 src/external/muparser_v225/Changes.txt delete mode 100644 src/external/muparser_v225/Install.txt delete mode 100644 src/external/muparser_v225/License.txt delete mode 100644 src/external/muparser_v225/Makefile.in delete mode 100644 src/external/muparser_v225/build/autoconf/aclocal.m4 delete mode 100644 src/external/muparser_v225/build/autoconf/acregen.sh delete mode 100644 src/external/muparser_v225/build/autoconf/autoconf_inc.m4 delete mode 100644 src/external/muparser_v225/build/autoconf/bakefile-presets.m4 delete mode 100644 src/external/muparser_v225/build/autoconf/config.guess delete mode 100644 src/external/muparser_v225/build/autoconf/config.sub delete mode 100644 src/external/muparser_v225/build/autoconf/configure.ac delete mode 100644 src/external/muparser_v225/build/autoconf/install-sh delete mode 100644 src/external/muparser_v225/build/autoconf/muparser.pc.in delete mode 100644 src/external/muparser_v225/build/bakefiles/Bakefiles.bkgen delete mode 100644 src/external/muparser_v225/build/bakefiles/howto.txt delete mode 100644 src/external/muparser_v225/build/bakefiles/muparser.bkl delete mode 100644 src/external/muparser_v225/build/bakefiles/presets/debugopt.bkl delete mode 100644 src/external/muparser_v225/build/bakefiles/presets/setbuilddir.bkl delete mode 100644 src/external/muparser_v225/build/bakefiles/presets/sharedopt.bkl delete mode 100644 src/external/muparser_v225/build/bakefiles/presets/unicodeopt.bkl delete mode 100644 src/external/muparser_v225/build/makefile.mingw delete mode 100644 src/external/muparser_v225/build/makefile.vc delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser.sln delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj.filters delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj.filters delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj delete mode 100644 src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj.filters delete mode 100644 src/external/muparser_v225/configure delete mode 100644 src/external/muparser_v225/docs/Doxyfile delete mode 100644 src/external/muparser_v225/docs/muparser_doc.html delete mode 100644 src/external/muparser_v225/include/muParser.h delete mode 100644 src/external/muparser_v225/include/muParserBase.h delete mode 100644 src/external/muparser_v225/include/muParserBytecode.h delete mode 100644 src/external/muparser_v225/include/muParserCallback.h delete mode 100644 src/external/muparser_v225/include/muParserDLL.h delete mode 100644 src/external/muparser_v225/include/muParserDef.h delete mode 100644 src/external/muparser_v225/include/muParserError.h delete mode 100644 src/external/muparser_v225/include/muParserFixes.h delete mode 100644 src/external/muparser_v225/include/muParserInt.h delete mode 100644 src/external/muparser_v225/include/muParserStack.h delete mode 100644 src/external/muparser_v225/include/muParserTemplateMagic.h delete mode 100644 src/external/muparser_v225/include/muParserTest.h delete mode 100644 src/external/muparser_v225/include/muParserToken.h delete mode 100644 src/external/muparser_v225/include/muParserTokenReader.h delete mode 100644 src/external/muparser_v225/lib/Readme.txt delete mode 100644 src/external/muparser_v225/samples/example1/example1.cpp delete mode 100644 src/external/muparser_v225/samples/example2/Readme.txt delete mode 100644 src/external/muparser_v225/samples/example2/example2.c delete mode 100644 src/external/muparser_v225/samples/example2/muparser32.dll delete mode 100644 src/external/muparser_v225/samples/example2/muparser32.lib delete mode 100644 src/external/muparser_v225/samples/example2/muparser64.dll delete mode 100644 src/external/muparser_v225/samples/example2/muparser64.lib delete mode 100644 src/external/muparser_v225/samples/example2/muparserd32.dll delete mode 100644 src/external/muparser_v225/samples/example2/muparserd32.lib delete mode 100644 src/external/muparser_v225/samples/example2/muparserd64.dll delete mode 100644 src/external/muparser_v225/samples/example2/muparserd64.lib delete mode 100644 src/external/muparser_v225/src/muParser.cpp delete mode 100644 src/external/muparser_v225/src/muParserBase.cpp delete mode 100644 src/external/muparser_v225/src/muParserBytecode.cpp delete mode 100644 src/external/muparser_v225/src/muParserCallback.cpp delete mode 100644 src/external/muparser_v225/src/muParserDLL.cpp delete mode 100644 src/external/muparser_v225/src/muParserError.cpp delete mode 100644 src/external/muparser_v225/src/muParserInt.cpp delete mode 100644 src/external/muparser_v225/src/muParserTest.cpp delete mode 100644 src/external/muparser_v225/src/muParserTokenReader.cpp diff --git a/src/external/muparser.cmake b/src/external/muparser.cmake index 6334c84fd..15db415b5 100644 --- a/src/external/muparser.cmake +++ b/src/external/muparser.cmake @@ -2,31 +2,31 @@ # Copyright 2019, 2020, Visual Computing Lab, ISTI - Italian National Research Council # SPDX-License-Identifier: BSL-1.0 -option(ALLOW_BUNDLED_MUPARSER "Allow use of bundled muparser source" ON) -option(ALLOW_SYSTEM_MUPARSER "Allow use of system-provided muparser" ON) +option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER "Allow use of bundled muparser source" ON) +option(MESHLAB_ALLOW_SYSTEM_MUPARSER "Allow use of system-provided muparser" ON) find_package(muparser) -set(MUPARSER_DIR ${CMAKE_CURRENT_LIST_DIR}/muparser_v225) -if(ALLOW_SYSTEM_MUPARSER AND TARGET muparser::muparser) +if(MESHLAB_ALLOW_SYSTEM_MUPARSER AND TARGET muparser::muparser) message(STATUS "- muparser - using system-provided library") add_library(external-muparser INTERFACE) target_link_libraries(external-muparser INTERFACE muparser::muparser) -elseif(ALLOW_BUNDLED_MUPARSER AND EXISTS "${MUPARSER_DIR}/src/muParser.cpp") - message(STATUS "- muparser - using bundled source") - add_library( - external-muparser STATIC - "${MUPARSER_DIR}/src/muParser.cpp" - "${MUPARSER_DIR}/src/muParserBase.cpp" - "${MUPARSER_DIR}/src/muParserBytecode.cpp" - "${MUPARSER_DIR}/src/muParserCallback.cpp" - "${MUPARSER_DIR}/src/muParserDLL.cpp" - "${MUPARSER_DIR}/src/muParserError.cpp" - "${MUPARSER_DIR}/src/muParserInt.cpp" - "${MUPARSER_DIR}/src/muParserTest.cpp" - "${MUPARSER_DIR}/src/muParserTokenReader.cpp") - target_include_directories(external-muparser SYSTEM PUBLIC ${MUPARSER_DIR}/include) - target_compile_definitions(external-muparser PUBLIC _UNICODE) - set_property(TARGET external-muparser PROPERTY FOLDER External) - target_link_libraries(external-muparser PRIVATE external-disable-warnings) +elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER) + set(MUPARSER_VER 2.3.3-1) + set(MUPARSER_DIR ${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/muparser-${MUPARSER_VER}) + + if (NOT EXISTS "${MUPARSER_DIR}/src/muParser.cpp") + set(MUPARSER_LINK https://github.com/beltoforion/muparser/archive/refs/tags/v${MUPARSER_VER}.zip) + download_and_unzip(${MUPARSER_LINK} ${MESHLAB_EXTERNAL_DOWNLOAD_DIR} "muparser") + endif() + + message(STATUS "- muparser - using downloaded source") + + set(ENABLE_SAMPLES OFF) + set(MESSAGE_QUIET ON) + add_subdirectory(${MUPARSER_DIR}) + unset(MESSAGE_QUIET) + + add_library(external-muparser INTERFACE) + target_link_libraries(external-muparser INTERFACE muparser) endif() diff --git a/src/external/muparser_v225/Changes.txt b/src/external/muparser_v225/Changes.txt deleted file mode 100644 index abe969770..000000000 --- a/src/external/muparser_v225/Changes.txt +++ /dev/null @@ -1,557 +0,0 @@ -####################################################################### -# # -# # -# __________ # -# _____ __ __\______ \_____ _______ ______ ____ _______ # -# / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ # -# | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ # -# |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| # -# \/ \/ \/ \/ # -# Fast math parser Library # -# # -# Copyright (C) 2015 Ingo Berg # -# # -# Web: muparser.beltoforion.de # -# e-mail: muparser@beltoforion.de # -# # -# # -####################################################################### - - -History: --------- - -Rev 2.2.5: 27.04.2015 ---------------------- - Changes: - * example2 extended to work with UNICODE character set - * Applied patch from Issue 9 - - Bugfixes: - * muChar_t in muParserDLL.h was not set properly when UNICODE was used - * muparser.dll did not build on UNICODE systems - -Rev 2.2.4: 02.10.2014 ---------------------- - Changes: - * explicit positive sign allowed - - Bugfixes: - * Fix for Issue 6 (https://code.google.com/p/muparser/issues/detail?id=6) - * String constants did not work properly. Using more than a single one - was impossible. - * Project Files for VS2008 and VS2010 removed from the repository - * Fix for Issue 4 (https://code.google.com/p/muparser/issues/detail?id=4) - * Fix for VS2013 64 bit build option - * return type of ParserError::GetPos changed to int - * OpenMP support enabled in the VS2013 project files and precompiled windows DLL's - * Bulkmode did not evaluate properly if "=" and "," operator was used in the expression - -Rev 2.2.3: 22.12.2012 ---------------------- - - Removed features: - * build files for msvc2005, borland and watcom compiler were removed - - Bugfixes: - * Bugfix for Intel Compilers added: The power operator did not work properly - with Intel C++ composer XE 2011. - (see https://sourceforge.net/projects/muparser/forums/forum/462843/topic/5117983/index/page/1) - * Issue 3509860: Callbacks of functions with string parameters called twice - (see http://sourceforge.net/tracker/?func=detail&aid=3509860&group_id=137191&atid=737979) - * Issue 3570423: example1 shows slot number in hexadecimal - (see https://sourceforge.net/tracker/?func=detail&aid=3570423&group_id=137191&atid=737979) - * Fixes for compiling with the "MUP_MATH_EXCEPTIONS" macro definition: - - division by zero in constant expressions was reported with the code "ec_GENERIC" - instead of "ecDIV_BY_ZERO" - - added throwing of "ecDOMAIN_ERROR" to sqrt and log functions - - -Rev 2.2.2: 18.02.2012 ---------------------- - Bugfixes: - * Optimizer did'nt work properly for division: - (see https://sourceforge.net/projects/muparser/forums/forum/462843/topic/5037825) - -Rev 2.2.1: 22.01.2012 ---------------------- - Bugfixes: - * Optimizer bug in 64 bit systems fixed - (see https://sourceforge.net/projects/muparser/forums/forum/462843/topic/4977977/index/page/1) - -Rev 2.2.0: 22.01.2012 ---------------------- - Improvements: - * Optimizer rewritten and improved. In general: more optimizations are - now applied to the bytecode. The downside is that callback Functions - can no longer be flagged as non-optimizable. (The flag is still present - but ignored) This is necessary since the optimizer had to call the - functions in order to precalculate the result (see Bugfixes). These calls - posed a problems for callback functions with side effects and if-then-else - clauses in general since they undermined the shortcut evaluation prinziple. - - Bugfixes: - * Infix operators where not properly detected in the presence of a constant - name starting with an underscore which is a valid character for infix - operators too (i.e. "-_pi"). - * Issue 3463353: Callback functions are called twice during the first call to eval. - * Issue 3447007: GetUsedVar unnecessaryly executes callback functions. - - -Rev 2.1.0: 19.11.2011 ---------------------- - New feature: - * Function atan2 added - - Bugfixes: - * Issue 3438380: Changed behaviour of tellg with GCC >4.6 led to failures - in value detection callbacks. - * Issue 3438715: only "double" is a valid MUP_BASETYPE - MUP_BASETYPE can now be any of: - float, - double, - long double, - short, - unsigned short, - unsigned int, - long, - unsigned long. - Previousely only floating point types were allowed. - Using "int" is still not allowed! - * Compiler issues with GCC 4.6 fixed - * Custom value recognition callbacks added with AddValIdent had lower - priority than built in functions. This was causing problems with - hex value recognition since detection of non hex values had priority - over the detection of hex values. The "0" in the hex prefix "0x" would - be read as a separate non-hex number leaving the rest of the expression - unparseable. - -Rev 2.0.0: 04.09.2011 ---------------------- -This release introduces a new version numbering scheme in order to make -future changes in the ABI apparent to users of the library. The number is -now based on the SONAME property as used by GNU/Linux. - - Changes: - * Beginning with this version all version numbers will be SONAME compliant - * Project files for MSVC2010 added - * Project files for MSVC2003 removed - * Bytecode parsing engine cleaned up and rewritten - * Retrieving all results of expressions made up of comma separate - subexpressions is now possible with a new Eval overload. - * Callback functions with fixed number of arguments can now have up to 10 - Parameters (previous limit was 5) - - New features: - * ternary if-then-else operator added (C++ like; "(...) ? ... : ..." ) - * new intrinsic binary operators: "&&", "||" (logical and, or) - * A new bulkmode allows submitting large arrays as variables to compute large - numbers of expressions with a single call. This can drastically improve - parsing performance when interfacing the library from managed languages like - C#. (It doesn't bring any performance benefit for C++ users though...) - - Removed features: - * intrinsic "and", "or" and "xor" operators have been removed. I'd like to let - users the freedom of defining them on their own versions (either as logical or bitwise - operators). - * Implementation for complex numbers removed. This was merely a hack. If you - need complex numbers try muParserX which provides native support for them. - (see: http://beltoforion.de/muparserx/math_expression_parser_en.html) - - Bugfixes: - * User defined operators could collide with built in operators that entirely - contained their identifier. i.e. user defined "&" would not work with the built - in "&&" operator since the user defined operator was detected with a higher - priority resulting in a syntax error. - * Detection of unknown variables did not work properly in case a postfix operator - was defined which was part of the undefined variable. - i.e. If a postfix operator "m" was defined expressions like "multi*1.0" did - not detect "multi" as an undefined variable. - (Reference: http://sourceforge.net/tracker/index.php?func=detail&aid=3343891&group_id=137191&atid=737979) - * Postfix operators sharing the first few characters were causing bogus parsing exception. - (Reference: https://sourceforge.net/tracker/?func=detail&aid=3358571&group_id=137191&atid=737979) - -Rev 1.34: 04.09.2010 --------------------- - Changes: - * The prefix needed for parsing hex values is now "0x" and no longer "$". - * AddValIdent reintroduced into the DLL interface - - New features: - * The associativity of binary operators can now be changed. The pow operator - is now right associative. (This is what Mathematica is using) - * Seperator can now be used outside of functions. This allows compound - expressions like: - "a=10,b=20,c=a*b" The last "argument" will be taken as the return value - - Bugfixes: - * The copy constructor did not copy binary operator definitions. Those were lost - in the copied parser instance. - * Mixing special characters and alphabetic characters in binary operator names - led to inconsistent parsing behaviour when parsing expressions like "a ++ b" - and "a++b" when "++" is defined as a binary operator. Binary operators must - now consist entirely of special characters or of alphabetic ones. - (original bug report: https://sourceforge.net/projects/muparser/forums/forum/462843/topic/3696881/index/page/1) - * User defined operators were not exactly handled like built in operators. This - led to inconsistencies in expression evaluation when using them. The results - differed due to slightly different precedence rules. - * Using empty string arguments ("") would cause a crash of muParser - - -Rev 1.32: 29.01.2010 --------------------- - - Changes: - * "example3" renamed to "example2" - * Project/Makefiles files are now provided for: - - msvc2003 - - msvc2005 - - msvc2008 - - watcom (makefile) - - mingw (makefile) - - bcc (makefile) - * Project files for borland cpp builder were removed - - - New features: - * Added function returning muparsers version number - * Added function for resetting the locale - - - Bugfixes: - * Changes example1 in order to fix issues with irritating memory leak reports. - Added conditional code for memory leak detection with MSVC in example1. - (see: http://www.codeproject.com/KB/recipes/FastMathParser.aspx?msg=3286367#xx3286367xx) - * Fixed some warnings for gcc - - - -Rev 1.31cp: 15.01.2010 (Maintainance release for CodeProject) ----------------------- - - Changes: - * Archive structure changed - * C# wrapper added - * Fixed issued that prevented compiling with VS2010 Beta2 - - -Rev 1.30: 09.06.2008 --------------------- - - Changes: - * Epsilon of the numerical differentiation algorithm changed to allow greater accuracy. - - New features: - * Setting thousands separator and decimal separator is now possible - - Bugfixes: - * The dll interface did not provide a callback for functions without any arguments. - - -Rev 1.29: Januar 2008 ---------------------- - - Unrelease Version available only via SVN. - - -Rev 1.28: 02. July, 2007 ---------------------------- - - Library changes: - * Interface for the dynamic library changed and extended to create an interface - using pure C functions only. - * mupInit() removed - - Build system: - * MSVC7 Project files removed in favor of MSVC8 - - Bugfixes: - * The dynamic library did not build on other systems than linux due to a misplaced - preprocessor definition. This is fixed now. - - -Rev 1.27: ---------------------------- - - Build system: - * Modified build\ directory layout introducing some subfolders - for the various IDE supported - * Project files for BCB and MSVC7 added - * Switched to use bakefile 0.2.1 which now correctly creates the - "make uninstall" target for autoconf's Makefile.in - * Now the library debug builds are named "muparserd" instead of "muparser" - to allow multiple mixed release/debug builds to coexist; so e.g. on Windows - when building with DEBUG=1, you'll get "muparserd.lib" instead of "muparser.lib" - - New Features: - * Factory functions can now take a user defined pointer - * String functions can now be used with up to two additional - double parameters - * Support for UNICODE character types added - * Infix operator priority can now be changed by the user - - Bugfixes: - * An internal error was raised when evaluating an empty - expressions - * The error message raised in case of name collisions between - implicitely defined variables and postfix operators did contain - misleading data. - - -Rev 1.26: (unofficial release) ------------------------------- - - New Features: - * Unary operator precedence can now be changed by the user. - - -Rev 1.25: 5. February, 2006 ---------------------------- - - Build system: (special thanks to Francesco Montorsi for implementing it!) - * created a bakefile-based build system which adds support for the following win32 compilers: - -> MS visual C++ (6 and .NET) - -> BorlandC++ (5 or greater) - -> Mingw32 (tested with gcc 3.2) - -> Watcom (not tested) - and for GCC on Unix (using a standard autoconf's configure script). - - Compatibility improvements: - * fixed some small warnings when using -Wall with GCC on Unix - * added inclusion guards for win32-specific portions of code - * added fixes that remove compiler warnings on Intel C++ and the Solaris C++ compiler. - - -Rev 1.24: 29. October, 2005 ---------------------------- - -Changes: - - Compatibility improvements: - * parser now works on 64 bit compilers - * (bytecode base datatype can now be changed freely) - - -Rev 1.23: 19. October, 2005 ---------------------------- - -Changes: - - Bugfixes: - * Variable factory examples in Example1.cpp and Example3.cpp contained a subtle bug. - - New features: - * Added a MSVC6 project file and introduced muParserFixes.h in order to make it compile with MSVC6 - - -Rev 1.22: October, 2005 ------------------------ - -Release notes: - -All features of Version 1.22 are similar to Version 1.21. Version 1.22 fixes a compilation issue with -gcc 4.0. In order to fix this issue I rewrote part of the library to remove some unnecessary templates. -This should make the code cleaner. The Borland Project files were removed. If you want to use it -with Borland either use the dll version or create your own project files. I can't support it since I don't -have this compiler at hand. - -Changes: - - Project Changes: - * Borland project files removed - (The code should still compile with BCB but I cant provide you with project files) - - Internal Changes: - * unnecessary template files have been removed: - - new files: muParserError.cpp, muParserTokenReader.cpp, muParserCallback.cpp - - removed Files: muIParserTypes.h - - -Rev 1.2 / 1.21: April, 2005 ---------------------------- - -Release Notes: -First of all the interface has changed so this version is not backwards compatible. -After receiving a couple of questions about it, this version features support for -user defined binary operators. Consequently the built in operators can now be -turned off, thus you can deactivate them and write complete customized parser -subclasses that only contain the functionality you want. Another new feature is -the introduction of callback functions taking string arguments, implicit -generation of variables and the Assignement operator. - - Functionality - * New built in operator: xor; Logical xor. - * New built in operator: Assignement operator; Defining variables in terms of - other variables/constants - * New feature: Strings as arguments for callback functions - * New feature: User defined binary operators - * New feature: ParserInt a class with a sample implementation for - integer numbers. - * New feature: Callbacks to value regognition functions. - - * Removed: all predefined postfix operators have been removed. - * New project file: Now comes with a ready to use windows DLL. - * New project file: Makefile for cygwin now included. - * New example: Example3 shows usage of the DLL. - - Interface changes - * New member function: DefineOprt For adding user defined binary operators. - * New member function: EnableBuiltInOprt(bool) Enables/Disables built in - binary operators. - * New member function: AddValIdent(...) to add callbacks for custom value - recognition functions. - * Removed: SetVar(), SetConst(). - * Renamed: Most interface functions have been renamed - * Changed: The type for multiargument callbacks multfun_type has changed. - It no longer takes a std::vector as input. - - Internal changes - * new class muParserTokenReader.h encapsulates the token identification - and token assignement. - * Internal handling of function callbacks unified as a result the performance - of the bytecode evaluation increased. - - -Rev 1.10 : December 30, 2004 ----------------------------- - -Release Notes: -This version does not contain major new feature compared to V1.07 but its internal structure has -changed significantly. The String parsing routine is slower than the one of V1.07 but bytecode -parsing is equally fast. On the other hand the error messages of V1.09 are more flexible and you -can change its value datatype. It should work on 64-bit systems. For this reason I supply both -versions for download. If you use V1.07 and are happy with it there is no need for updating -your version. - - * New example program: Archive now contains two demo programs: One for standard C++ and one for - managed C++. - * New member function: RemoveVar(...) can be used for removing a single variable from the internal - storage. - * New member function: GetVar() can be used for querying the variable names and pointers of all - variables defined in the parser. - * New member function: GetConst() can be used for querying all defined constants and their values. - * New member function: GetFunDef() can be used for querying all defined functions and the number of - arguments they expect. - * Internal structure changed; hanging base datatype at compile time is now possible. - * Bugfix: Postfix operator parsing could fail in certain cases; This has been fixed now. - * Bugfix: Variable names must will now be tested if they conflict with constant or function names. - * Internal change: Removed most dependencies from the C-string libraries. - * Internal change: Bytecode is now stored in a separate class: ParserByteCode.h - * Internal change: GetUsedVar() does no longer require that variables are defined at time of call. - * Internal change: Error treatment changed. ParserException is no longer derived from - std::runtime_error; Internal treatment of Error messages changed. - * New functions in Parser interface: ValidNameChars(), ValidOprtChars() and ValidPrefixOprtChars() - they are used for defining the charset allowed for variable-, operator- and - function names. - - -Rev 1.09 : November 20, 2004 ----------------------------- - - * New member function: RemoveVar(...) can be used for removing a single variable from the internal - storage. - * Internal structure changed; changing base datatype at compile time is now possible. - * Bug fix: Postfix operator parsing could fail in certain cases; This has been fixed now. - * Internal change: Removed most dependencies from the C-string libraries. - * Internal change: Bytecode is now stored in a seperate class: ParserByteCode.h. - * Internal change: GetUsedVar() does no longer require that variables are defined at time of call. - * Internal change: Error treatment changed. ParserException is no longer derived from - std::runtime_error; Internal treatment of Error messages changed. - * New functions in Parser interface; ValidNameChars(), ValidOprtChars() and ValidPrefixOprtChars() - they are used for defining the charset allowed for variable-, operator- and function names. - - -Rev 1.08 : November, 2004 -------------------------- - - * unpublished; experimental template version with respect to data type and underlying string - type (string <-> widestring). The idea was dropped... - - -Rev 1.07 : September 4 2004 ---------------------------- - - * Improved portability; Changes to make life for MSVC 6 user easier, there are probably still some - issues left. - * Improved portability; Changes in order to allow compiling on BCB. - * New function; value_type Diff(value_type *a_Var, value_type a_fPos) 4th order Differentiation with - respect to a certain variable; added in muParser.h. - - -Rev 1.06 : August 20 2004 -------------------------- - - * Volatile functions added; All overloaded AddFun(...) functions can now take a third parameter - indicating that the function can not be optimized. - * Internal changes: muParserStack.h simplified; refactorings - * Parser is now distributed under the MIT License; all comments changed accordingly. - - -Rev 1.05 : August 20 2004 -------------------------- - - * Variable/constant names will now be checked for invalid characters. - * Querying the names of all variables used in an expression is now possible; new function: GetUsedVar(). - * Disabling bytecode parsing is now possible; new function: EnableByteCode(bool bStat). - * Predefined functions with variable number of arguments added: sum, avg, min, max. - * Unary prefix operators added; new functions: AddPrefixOp(...), ClearPrefixOp(). - * Postfix operator interface names changed; new function names: AddPostfixOp(...), ClearPostfixOp(). - * Hardcoded sign operators removed in favor of prefix operators; bytecode format changed accordingly. - * Internal changes: static array removed in Command code calculation routine; misc. changes. - - -Rev 1.04 : August 16 2004 -------------------------- - - * Support for functions with variable number of arguments added. - * Internal structure changed; new: ParserBase.h, ParserBase.cpp; removed: ParserException.h; - changed: Parser.h, Parser.cpp. - * Bug in the bytecode calculation function fixed (affected the unary minus operator). - * Optimizer can be deactivated; new function: EnableOptimizer(bool bStat). - - -Rev 1.03 : August 10 2004 -------------------------- - - * Support for user-defined unary postfix operators added; new functions: AddPostOp(), InitPostOp(), - ClearPostOp(). - * Minor changes to the bytecode parsing routine. - * User defined functions can now have up to four parameters. - * Performance optimized: simple formula optimization added; (precalculation of constant parts of the - expression). - * Bug fixes: Multi-arg function parameters, constant name lookup and unary minus did not work properly. - - -Rev 1.02 : July 30 2004 ------------------------ - - * Support for user defined constants added; new functions: InitConst(), AddConst(), SetConst(), - ClearConst(). - * Single variables can now be added using AddVar(); you have now the choice of adding them either - one by one or all at the same time using SetVar(const varmap_type &a_vVar). - * Internal handling of variables changed, is now similar to function handling. - * Virtual destructor added; InitFun(), InitConst() are now virtual too thus making it possible to - derive new parsers with a modified set of default functions and constants. - * Support for user defined functions with 2 or 3 parameters added; bytecode format changed to hold - function parameter count. - - -Rev 1.01 : July 23 2004 ------------------------ - - * Support for user defined functions has been added; new functions: AddFun(), ClearFun(), - InitFunctions(). - * Built in constants have been removed; the parser contained undocumented built in - constants pi, e. - There was the possibility of name conflicts with user defined variables. - * Setting multiple variables with SetVar can now be done with a map of names and pointers as the only - argument. For this reason, a new type Parser::varmap_type was added. The old version that took 3 - arguments (array of names, array of pointers, and array length) is now marked as deprecated. - * The names of logarithm functions have changed. The new names are: log2 for base 2, log10 or log for - base 10, and ln for base e. - - -Rev 1.00 : July 21 2004 ------------------------ - - * Initial release diff --git a/src/external/muparser_v225/Install.txt b/src/external/muparser_v225/Install.txt deleted file mode 100644 index 95d365de3..000000000 --- a/src/external/muparser_v225/Install.txt +++ /dev/null @@ -1,133 +0,0 @@ -####################################################################### -# # -# # -# __________ # -# _____ __ __\______ \_____ _______ ______ ____ _______ # -# / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ # -# | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ # -# |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| # -# \/ \/ \/ \/ # -# Fast math parser Library # -# # -# Copyright (C) 2012 Ingo Berg # -# # -# Web: muparser.beltoforion.de # -# e-mail: muparser@beltoforion.de # -# # -# # -####################################################################### - - - - Contents - ======== - - 1. Installation on win32 - 2. Installation on unix - 2.1 Other miscellaneous info Unix-specific - 3. Where to ask for help - - - - 1. Installation on win32 - ======================== - - muParser supports various win32 command-line compilers: - -> mingw - -> watcom - -> microsoft CL - and provides also the project files for MSVC6 IDE. - - In order to compile muParser from makefiles, open an MSDOS - prompt and then move to the muParser/build directory and - type: - - mingw32-make -fmakefile.mingw for mingw - nmake -fmakefile.vc for msvc - make -fmakefile.bcc for borland - wmake -fmakefile.wat for watcom - - All makefiles supports the following options: - - # Set to 1 to build debug version [0,1] - # 0 - Release - # 1 - Debug - DEBUG = 0 - - # Set to 1 to build shared (DLL) version [0,1] - # 0 - Static - # 1 - DLL - SHARED = 0 - - # Set to 1 to compile samples [0,1] - SAMPLES = 1 - - The muParser library is created in the 'lib' folder and the sample - binaries are created in samples\example1 or samples\example2. - - NOTE: samples\example1 can be compiled *only* when building - muParser as a STATIC library (SHARED=0). - samples\example2 can be compiled *only* when building - muParser as a SHARED library (SHARED=1). - - - - 2. Installation on Unix/Linux - ============================= - - muParser can be installed just extracting the sources somewhere - and then, from a terminal, typing: - - cd [path to muParser] - ./configure [--enable-shared=yes/no] [--enable-samples=yes/no] - [--enable-debug=yes/no] - make - [sudo*] make install - [sudo*] ldconfig - cd samples/example1 - ./example1 - - * = this command must be executed with root permissions and thus - you have to use 'sudo' or just 'su' to gain root access. - Note that installation and ldconfig are not strictly required unless - you built in shared mode. - - The "make" step will create the muParser library in 'lib' and the - sample binary in samples/example1. - The samples/example2 is win32-specific and thus won't be built. - - - - 2.1 Other miscellaneous info Unix-specific - ========================================== - - If you don't like to have your muParser folder filled by temporary - files created by GCC, then you can do the following: - - mkdir mybuild && cd mybuild && ../configure && make - - to put all object files in the "mybuild" directory. - - If you want to use muParser library in your programs, you can use - the pkg-config program (this works only if muParser was installed - with 'make install' !). The commands: - - pkg-config muparser --cflags - pkg-config muparser --libs - - will return all useful info you need to build your programs against - muParser ! - - - - 3. Where to ask for help - ======================== - - If you find problems with either compilation, installation or usage - of muParser, then you can ask in the muParser forum at: - - https://sourceforge.net/forum/forum.php?forum_id=462843 - - For more info about muParser, visit: - http://sourceforge.net/projects/muparser/ - http://muparser.sourceforge.net diff --git a/src/external/muparser_v225/License.txt b/src/external/muparser_v225/License.txt deleted file mode 100644 index c4c0d2b13..000000000 --- a/src/external/muparser_v225/License.txt +++ /dev/null @@ -1,35 +0,0 @@ -####################################################################### -# # -# # -# __________ # -# _____ __ __\______ \_____ _______ ______ ____ _______ # -# / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ # -# | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ # -# |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| # -# \/ \/ \/ \/ # -# Fast math parser Library # -# # -# Copyright (C) 2011 Ingo Berg # -# # -# Web: muparser.beltoforion.de # -# e-mail: muparser@beltoforion.de # -# # -# # -####################################################################### - - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/external/muparser_v225/Makefile.in b/src/external/muparser_v225/Makefile.in deleted file mode 100644 index 157be77de..000000000 --- a/src/external/muparser_v225/Makefile.in +++ /dev/null @@ -1,368 +0,0 @@ -# ========================================================================= -# This makefile was generated by -# Bakefile 0.2.9 (http://www.bakefile.org) -# Do not modify, all changes will be overwritten! -# ========================================================================= - - -@MAKE_SET@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datarootdir = @datarootdir@ -INSTALL = @INSTALL@ -SHARED_LD_CXX = @SHARED_LD_CXX@ -LIBEXT = @LIBEXT@ -LIBPREFIX = @LIBPREFIX@ -SO_SUFFIX = @SO_SUFFIX@ -DLLIMP_SUFFIX = @DLLIMP_SUFFIX@ -EXEEXT = @EXEEXT@ -LN_S = @LN_S@ -SETFILE = @SETFILE@ -PIC_FLAG = @PIC_FLAG@ -SONAME_FLAG = @SONAME_FLAG@ -STRIP = @STRIP@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_DIR = @INSTALL_DIR@ -BK_DEPS = @BK_DEPS@ -srcdir = @srcdir@ -top_builddir = @top_builddir@ -libdir = @libdir@ -DLLPREFIX = @DLLPREFIX@ -LIBS = @LIBS@ -AR = @AR@ -AROPTIONS = @AROPTIONS@ -RANLIB = @RANLIB@ -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ - -### Variables: ### - -DESTDIR = -MUPARSER_LIB_CXXFLAGS = $(____DEBUG) $(____SHARED) $(____SHARED_0) \ - -I$(srcdir)/include $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_LIB_OBJECTS = \ - muParser_lib_muParser.o \ - muParser_lib_muParserBase.o \ - muParser_lib_muParserBytecode.o \ - muParser_lib_muParserCallback.o \ - muParser_lib_muParserDLL.o \ - muParser_lib_muParserError.o \ - muParser_lib_muParserInt.o \ - muParser_lib_muParserTest.o \ - muParser_lib_muParserTokenReader.o -MUPARSER_LIB_HEADERS = \ - include/muParser.h \ - include/muParserBase.h \ - include/muParserBytecode.h \ - include/muParserCallback.h \ - include/muParserDLL.h \ - include/muParserDef.h \ - include/muParserError.h \ - include/muParserFixes.h \ - include/muParserInt.h \ - include/muParserStack.h \ - include/muParserTemplateMagic.h \ - include/muParserTest.h \ - include/muParserToken.h \ - include/muParserTokenReader.h -MUPARSER_DLL_CXXFLAGS = $(____DEBUG) $(____SHARED) $(____SHARED_0) \ - -I$(srcdir)/include $(PIC_FLAG) $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_DLL_OBJECTS = \ - muParser_dll_muParser.o \ - muParser_dll_muParserBase.o \ - muParser_dll_muParserBytecode.o \ - muParser_dll_muParserCallback.o \ - muParser_dll_muParserDLL.o \ - muParser_dll_muParserError.o \ - muParser_dll_muParserInt.o \ - muParser_dll_muParserTest.o \ - muParser_dll_muParserTokenReader.o -MUPARSER_DLL_HEADERS = \ - include/muParser.h \ - include/muParserBase.h \ - include/muParserBytecode.h \ - include/muParserCallback.h \ - include/muParserDLL.h \ - include/muParserDef.h \ - include/muParserError.h \ - include/muParserFixes.h \ - include/muParserInt.h \ - include/muParserStack.h \ - include/muParserTemplateMagic.h \ - include/muParserTest.h \ - include/muParserToken.h \ - include/muParserTokenReader.h -EXAMPLE1_CXXFLAGS = $(____DEBUG) -I$(srcdir)/include $(CPPFLAGS) $(CXXFLAGS) -EXAMPLE1_OBJECTS = \ - example1_example1.o - -### Conditionally set variables: ### - -@COND_DEPS_TRACKING_0@CXXC = $(CXX) -@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX) -@COND_DEBUG_0@DEBUG_BUILD_POSTFIX = -@COND_DEBUG_1@DEBUG_BUILD_POSTFIX = d -@COND_SHARED_0@__muParser_lib___depname = \ -@COND_SHARED_0@ $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(LIBEXT) -@COND_SHARED_0@__install_muParser_lib___depname = install_muParser_lib -@COND_SHARED_0@__uninstall_muParser_lib___depname = uninstall_muParser_lib -@COND_SHARED_0@__install_muParser_lib_headers___depname = \ -@COND_SHARED_0@ install_muParser_lib_headers -@COND_SHARED_0@__uninstall_muParser_lib_headers___depname = \ -@COND_SHARED_0@ uninstall_muParser_lib_headers -COND_SHARED_1___muParser_dll___depname = \ - $(top_builddir)/lib/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) -@COND_SHARED_1@__muParser_dll___depname = $(COND_SHARED_1___muParser_dll___depname) -@COND_SHARED_1@__install_muParser_dll___depname = install_muParser_dll -@COND_SHARED_1@__uninstall_muParser_dll___depname = uninstall_muParser_dll -COND_PLATFORM_MACOSX_1___muParser_dll___macinstnamecmd = -install_name \ - $(libdir)/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) -@COND_PLATFORM_MACOSX_1@__muParser_dll___macinstnamecmd = $(COND_PLATFORM_MACOSX_1___muParser_dll___macinstnamecmd) -@COND_SHARED_1@__install_muParser_dll_headers___depname = \ -@COND_SHARED_1@ install_muParser_dll_headers -@COND_SHARED_1@__uninstall_muParser_dll_headers___depname = \ -@COND_SHARED_1@ uninstall_muParser_dll_headers -COND_PLATFORM_OS2_1___muParser_dll___importlib = -import \ - $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_PLATFORM_OS2_1@__muParser_dll___importlib = $(COND_PLATFORM_OS2_1___muParser_dll___importlib) -COND_WINDOWS_IMPLIB_1___muParser_dll___importlib = \ - -Wl,--out-implib=$(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_WINDOWS_IMPLIB_1@__muParser_dll___importlib = $(COND_WINDOWS_IMPLIB_1___muParser_dll___importlib) -@COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@__muParser_dll___targetsuf2 \ -@COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@ = .$(SO_SUFFIX).2 -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@__muParser_dll___targetsuf2 \ -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@ = .2.$(SO_SUFFIX) -@COND_USE_SOVERSION_0@__muParser_dll___targetsuf2 = .$(SO_SUFFIX) -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@__muParser_dll___targetsuf3 \ -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@ = \ -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@ .$(SO_SUFFIX).2.2.4 -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@__muParser_dll___targetsuf3 \ -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@ = .2.2.4.$(SO_SUFFIX) -@COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1@__muParser_dll___targetsuf3 \ -@COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1@ = .$(SO_SUFFIX).2 -@COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1@__muParser_dll___targetsuf3 \ -@COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1@ = -2.$(SO_SUFFIX) -@COND_USE_SOVERSION_0@__muParser_dll___targetsuf3 = .$(SO_SUFFIX) -COND_USE_SOVERLINUX_1___muParser_dll___soname_flags = \ - $(SONAME_FLAG)$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) -@COND_USE_SOVERLINUX_1@__muParser_dll___soname_flags = $(COND_USE_SOVERLINUX_1___muParser_dll___soname_flags) -COND_USE_SOVERSOLARIS_1___muParser_dll___soname_flags = \ - $(SONAME_FLAG)$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) -@COND_USE_SOVERSOLARIS_1@__muParser_dll___soname_flags = $(COND_USE_SOVERSOLARIS_1___muParser_dll___soname_flags) -COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_cmd = (cd \ - $(top_builddir)/lib/; rm -f \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX)) -@COND_USE_SOTWOSYMLINKS_1@__muParser_dll___so_symlinks_cmd = $(COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_cmd) -COND_USE_SOVERSOLARIS_1___muParser_dll___so_symlinks_cmd = (cd \ - $(top_builddir)/lib/; rm -f \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX); $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX)) -@COND_USE_SOVERSOLARIS_1@__muParser_dll___so_symlinks_cmd = $(COND_USE_SOVERSOLARIS_1___muParser_dll___so_symlinks_cmd) -COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_inst_cmd = rm -f \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_USE_SOTWOSYMLINKS_1@__muParser_dll___so_symlinks_inst_cmd = $(COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_inst_cmd) -COND_USE_SOVERSOLARIS_1___muParser_dll___so_symlinks_inst_cmd = rm -f \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX); $(LN_S) \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX); -@COND_USE_SOVERSOLARIS_1@__muParser_dll___so_symlinks_inst_cmd = $(COND_USE_SOVERSOLARIS_1___muParser_dll___so_symlinks_inst_cmd) -COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_uninst_cmd = rm -f \ - $(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) \ - $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_USE_SOTWOSYMLINKS_1@__muParser_dll___so_symlinks_uninst_cmd = $(COND_USE_SOTWOSYMLINKS_1___muParser_dll___so_symlinks_uninst_cmd) -@COND_USE_SOVERSOLARIS_1@__muParser_dll___so_symlinks_uninst_cmd \ -@COND_USE_SOVERSOLARIS_1@ = rm -f \ -@COND_USE_SOVERSOLARIS_1@ $(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_PLATFORM_MACOSX_1@__muParser_dll___macver = \ -@COND_PLATFORM_MACOSX_1@ -compatibility_version 1 -current_version 1 -@COND_SAMPLES_1@__example1___depname = \ -@COND_SAMPLES_1@ $(top_builddir)/samples/example1/example1$(EXEEXT) -@COND_PLATFORM_MAC_0@__example1___mac_setfilecmd = @true -@COND_PLATFORM_MAC_1@__example1___mac_setfilecmd = \ -@COND_PLATFORM_MAC_1@ $(SETFILE) -t APPL \ -@COND_PLATFORM_MAC_1@ $(top_builddir)/samples/example1/example1$(EXEEXT) -@COND_SHARED_0@____SHARED = -@COND_SHARED_1@____SHARED = -DMUPARSER_DLL -@COND_SHARED_0@____SHARED_0 = -@COND_SHARED_1@____SHARED_0 = -DMUPARSERLIB_EXPORTS -@COND_DEBUG_0@____DEBUG = -DNDEBUG -@COND_DEBUG_1@____DEBUG = - -### Targets: ### - -all: $(__muParser_lib___depname) $(__muParser_dll___depname) $(__example1___depname) - -install: $(__install_muParser_lib___depname) $(__install_muParser_lib_headers___depname) $(__install_muParser_dll___depname) $(__install_muParser_dll_headers___depname) - $(INSTALL_DIR) $(DESTDIR)$(libdir)/pkgconfig - $(INSTALL_DATA) build/autoconf/muparser.pc $(DESTDIR)$(libdir)/pkgconfig - -uninstall: $(__uninstall_muParser_lib___depname) $(__uninstall_muParser_lib_headers___depname) $(__uninstall_muParser_dll___depname) $(__uninstall_muParser_dll_headers___depname) - -install-strip: install - $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) - -clean: - rm -rf ./.deps ./.pch - rm -f ./*.o - rm -f $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(LIBEXT) - rm -f $(top_builddir)/lib/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) - rm -f $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) - rm -f $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) $(top_builddir)/lib/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf2) - rm -f $(top_builddir)/samples/example1/example1$(EXEEXT) - -distclean: clean - rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile - rm -f build/autoconf/muparser.pc - -@COND_SHARED_0@$(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(LIBEXT): $(MUPARSER_LIB_OBJECTS) -@COND_SHARED_0@ rm -f $@ -@COND_SHARED_0@ $(AR) $(AROPTIONS) $@ $(MUPARSER_LIB_OBJECTS) -@COND_SHARED_0@ $(RANLIB) $@ - -@COND_SHARED_0@install_muParser_lib: $(__muParser_lib___depname) -@COND_SHARED_0@ $(INSTALL_DIR) $(DESTDIR)$(libdir) -@COND_SHARED_0@ $(INSTALL_DATA) $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(LIBEXT) $(DESTDIR)$(libdir) - -@COND_SHARED_0@uninstall_muParser_lib: -@COND_SHARED_0@ rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(LIBEXT) - -@COND_SHARED_0@install_muParser_lib_headers: -@COND_SHARED_0@ $(INSTALL_DIR) $(DESTDIR)$(prefix) -@COND_SHARED_0@ for f in $(MUPARSER_LIB_HEADERS); do \ -@COND_SHARED_0@ if test ! -d $(DESTDIR)$(prefix)/`dirname $$f` ; then \ -@COND_SHARED_0@ $(INSTALL_DIR) $(DESTDIR)$(prefix)/`dirname $$f`; \ -@COND_SHARED_0@ fi; \ -@COND_SHARED_0@ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(prefix)/$$f; \ -@COND_SHARED_0@ done - -@COND_SHARED_0@uninstall_muParser_lib_headers: -@COND_SHARED_0@ for f in $(MUPARSER_LIB_HEADERS); do \ -@COND_SHARED_0@ rm -f $(DESTDIR)$(prefix)/$$f; \ -@COND_SHARED_0@ done - -@COND_SHARED_1@$(top_builddir)/lib/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3): $(MUPARSER_DLL_OBJECTS) -@COND_SHARED_1@ $(SHARED_LD_CXX) $@ $(MUPARSER_DLL_OBJECTS) $(__muParser_dll___macinstnamecmd) $(__muParser_dll___importlib) $(__muParser_dll___soname_flags) $(__muParser_dll___macver) $(LDFLAGS) $(LIBS) -@COND_SHARED_1@ -@COND_SHARED_1@ $(__muParser_dll___so_symlinks_cmd) - -@COND_SHARED_1@install_muParser_dll: $(__muParser_dll___depname) -@COND_SHARED_1@ $(INSTALL_DIR) $(DESTDIR)$(libdir) -@COND_SHARED_1@ $(INSTALL_DATA) $(top_builddir)/lib/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) $(DESTDIR)$(libdir) -@COND_SHARED_1@ $(INSTALL_PROGRAM) $(top_builddir)/lib/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) $(DESTDIR)$(libdir) -@COND_SHARED_1@ (cd $(DESTDIR)$(libdir) ; $(__muParser_dll___so_symlinks_inst_cmd)) - -@COND_SHARED_1@uninstall_muParser_dll: -@COND_SHARED_1@ rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)muparser$(DEBUG_BUILD_POSTFIX).$(DLLIMP_SUFFIX) -@COND_SHARED_1@ rm -f $(DESTDIR)$(libdir)/$(DLLPREFIX)muparser$(DEBUG_BUILD_POSTFIX)$(__muParser_dll___targetsuf3) -@COND_SHARED_1@ (cd $(DESTDIR)$(libdir) ; $(__muParser_dll___so_symlinks_uninst_cmd)) - -@COND_SHARED_1@install_muParser_dll_headers: -@COND_SHARED_1@ $(INSTALL_DIR) $(DESTDIR)$(prefix) -@COND_SHARED_1@ for f in $(MUPARSER_DLL_HEADERS); do \ -@COND_SHARED_1@ if test ! -d $(DESTDIR)$(prefix)/`dirname $$f` ; then \ -@COND_SHARED_1@ $(INSTALL_DIR) $(DESTDIR)$(prefix)/`dirname $$f`; \ -@COND_SHARED_1@ fi; \ -@COND_SHARED_1@ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(prefix)/$$f; \ -@COND_SHARED_1@ done - -@COND_SHARED_1@uninstall_muParser_dll_headers: -@COND_SHARED_1@ for f in $(MUPARSER_DLL_HEADERS); do \ -@COND_SHARED_1@ rm -f $(DESTDIR)$(prefix)/$$f; \ -@COND_SHARED_1@ done - -@COND_SAMPLES_1@$(top_builddir)/samples/example1/example1$(EXEEXT): $(EXAMPLE1_OBJECTS) $(__muParser_lib___depname) -@COND_SAMPLES_1@ $(CXX) -o $@ $(EXAMPLE1_OBJECTS) -L$(top_builddir)/lib -L$(srcdir)/lib $(LDFLAGS) -lmuparser$(DEBUG_BUILD_POSTFIX) $(LIBS) -@COND_SAMPLES_1@ -@COND_SAMPLES_1@ $(__example1___mac_setfilecmd) - -lib: $(__muParser_lib___depname) $(__muParser_dll___depname) - -samples: $(__example1___depname) - -documentation: - ( cd $(srcdir)/docs && doxygen ) - -muParser_lib_muParser.o: $(srcdir)/src/muParser.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParser.cpp - -muParser_lib_muParserBase.o: $(srcdir)/src/muParserBase.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserBase.cpp - -muParser_lib_muParserBytecode.o: $(srcdir)/src/muParserBytecode.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserBytecode.cpp - -muParser_lib_muParserCallback.o: $(srcdir)/src/muParserCallback.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserCallback.cpp - -muParser_lib_muParserDLL.o: $(srcdir)/src/muParserDLL.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserDLL.cpp - -muParser_lib_muParserError.o: $(srcdir)/src/muParserError.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserError.cpp - -muParser_lib_muParserInt.o: $(srcdir)/src/muParserInt.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserInt.cpp - -muParser_lib_muParserTest.o: $(srcdir)/src/muParserTest.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserTest.cpp - -muParser_lib_muParserTokenReader.o: $(srcdir)/src/muParserTokenReader.cpp - $(CXXC) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(srcdir)/src/muParserTokenReader.cpp - -muParser_dll_muParser.o: $(srcdir)/src/muParser.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParser.cpp - -muParser_dll_muParserBase.o: $(srcdir)/src/muParserBase.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserBase.cpp - -muParser_dll_muParserBytecode.o: $(srcdir)/src/muParserBytecode.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserBytecode.cpp - -muParser_dll_muParserCallback.o: $(srcdir)/src/muParserCallback.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserCallback.cpp - -muParser_dll_muParserDLL.o: $(srcdir)/src/muParserDLL.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserDLL.cpp - -muParser_dll_muParserError.o: $(srcdir)/src/muParserError.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserError.cpp - -muParser_dll_muParserInt.o: $(srcdir)/src/muParserInt.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserInt.cpp - -muParser_dll_muParserTest.o: $(srcdir)/src/muParserTest.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserTest.cpp - -muParser_dll_muParserTokenReader.o: $(srcdir)/src/muParserTokenReader.cpp - $(CXXC) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(srcdir)/src/muParserTokenReader.cpp - -example1_example1.o: $(srcdir)/samples/example1/example1.cpp - $(CXXC) -c -o $@ $(EXAMPLE1_CXXFLAGS) $(srcdir)/samples/example1/example1.cpp - - -# Include dependency info, if present: -@IF_GNU_MAKE@-include ./.deps/*.d - -.PHONY: all install uninstall clean distclean install_muParser_lib \ - uninstall_muParser_lib install_muParser_lib_headers \ - uninstall_muParser_lib_headers install_muParser_dll uninstall_muParser_dll \ - install_muParser_dll_headers uninstall_muParser_dll_headers lib samples diff --git a/src/external/muparser_v225/build/autoconf/aclocal.m4 b/src/external/muparser_v225/build/autoconf/aclocal.m4 deleted file mode 100644 index 33fc938f1..000000000 --- a/src/external/muparser_v225/build/autoconf/aclocal.m4 +++ /dev/null @@ -1,1992 +0,0 @@ -# generated automatically by aclocal 1.13.3 -*- Autoconf -*- - -# Copyright (C) 1996-2013 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH], -[ -dnl ===================== dllar.sh begins here ===================== -dnl (Created by merge-scripts.py from dllar.sh -dnl file do not edit here!) -D='$' -cat <dllar.sh -#!/bin/sh -# -# dllar - a tool to build both a .dll and an .a file -# from a set of object (.o) files for EMX/OS2. -# -# Written by Andrew Zabolotny, bit@freya.etu.ru -# Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de -# -# This script will accept a set of files on the command line. -# All the public symbols from the .o files will be exported into -# a .DEF file, then linker will be run (through gcc) against them to -# build a shared library consisting of all given .o files. All libraries -# (.a) will be first decompressed into component .o files then act as -# described above. You can optionally give a description (-d "description") -# which will be put into .DLL. To see the list of accepted options (as well -# as command-line format) simply run this program without options. The .DLL -# is built to be imported by name (there is no guarantee that new versions -# of the library you build will have same ordinals for same symbols). -# -# dllar is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# dllar is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with dllar; see the file COPYING. If not, write to the Free -# Software Foundation, 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# To successfuly run this program you will need: -# - Current drive should have LFN support (HPFS, ext2, network, etc) -# (Sometimes dllar generates filenames which won't fit 8.3 scheme) -# - gcc -# (used to build the .dll) -# - emxexp -# (used to create .def file from .o files) -# - emximp -# (used to create .a file from .def file) -# - GNU text utilites (cat, sort, uniq) -# used to process emxexp output -# - GNU file utilities (mv, rm) -# - GNU sed -# - lxlite (optional, see flag below) -# (used for general .dll cleanup) -# - -flag_USE_LXLITE=1; - -# -# helper functions -# basnam, variant of basename, which does _not_ remove the path, _iff_ -# second argument (suffix to remove) is given -basnam(){ - case ${D}# in - 1) - echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//' - ;; - 2) - echo ${D}1 | sed 's/'${D}2'${D}//' - ;; - *) - echo "error in basnam ${D}*" - exit 8 - ;; - esac -} - -# Cleanup temporary files and output -CleanUp() { - cd ${D}curDir - for i in ${D}inputFiles ; do - case ${D}i in - *!) - rm -rf \`basnam ${D}i !\` - ;; - *) - ;; - esac - done - - # Kill result in case of failure as there is just to many stupid make/nmake - # things out there which doesn't do this. - if @<:@ ${D}# -eq 0 @:>@; then - rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile - fi -} - -# Print usage and exit script with rc=1. -PrintHelp() { - echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@' - echo ' @<:@-name-mangler-script script.sh@:>@' - echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@' - echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"' - echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@' - echo ' @<:@*.o@:>@ @<:@*.a@:>@' - echo '*> "output_file" should have no extension.' - echo ' If it has the .o, .a or .dll extension, it is automatically removed.' - echo ' The import library name is derived from this and is set to "name".a,' - echo ' unless overridden by -import' - echo '*> "importlib_name" should have no extension.' - echo ' If it has the .o, or .a extension, it is automatically removed.' - echo ' This name is used as the import library name and may be longer and' - echo ' more descriptive than the DLL name which has to follow the old ' - echo ' 8.3 convention of FAT.' - echo '*> "script.sh may be given to override the output_file name by a' - echo ' different name. It is mainly useful if the regular make process' - echo ' of some package does not take into account OS/2 restriction of' - echo ' DLL name lengths. It takes the importlib name as input and is' - echo ' supposed to procude a shorter name as output. The script should' - echo ' expect to get importlib_name without extension and should produce' - echo ' a (max.) 8 letter name without extension.' - echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)' - echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)' - echo ' These flags will be put at the start of GCC command line.' - echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.' - echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define' - echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".' - echo ' If the last character of a symbol is "*", all symbols beginning' - echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).' - echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or' - echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.' - echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s' - echo ' C runtime DLLs.' - echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.' - echo '*> All other switches (for example -L./ or -lmylib) will be passed' - echo ' unchanged to GCC at the end of command line.' - echo '*> If you create a DLL from a library and you do not specify -o,' - echo ' the basename for DLL and import library will be set to library name,' - echo ' the initial library will be renamed to 'name'_s.a (_s for static)' - echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial' - echo ' library will be renamed into gcc_s.a.' - echo '--------' - echo 'Example:' - echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord' - echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"' - CleanUp - exit 1 -} - -# Execute a command. -# If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script. -# @Uses Whatever CleanUp() uses. -doCommand() { - echo "${D}*" - eval ${D}* - rcCmd=${D}? - - if @<:@ ${D}rcCmd -ne 0 @:>@; then - echo "command failed, exit code="${D}rcCmd - CleanUp - exit ${D}rcCmd - fi -} - -# main routine -# setup globals -cmdLine=${D}* -outFile="" -outimpFile="" -inputFiles="" -renameScript="" -description="" -CC=gcc.exe -CFLAGS="-s -Zcrtdll" -EXTRA_CFLAGS="" -EXPORT_BY_ORDINALS=0 -exclude_symbols="" -library_flags="" -curDir=\`pwd\` -curDirS=curDir -case ${D}curDirS in -*/) - ;; -*) - curDirS=${D}{curDirS}"/" - ;; -esac -# Parse commandline -libsToLink=0 -omfLinking=0 -while @<:@ ${D}1 @:>@; do - case ${D}1 in - -ord*) - EXPORT_BY_ORDINALS=1; - ;; - -o*) - shift - outFile=${D}1 - ;; - -i*) - shift - outimpFile=${D}1 - ;; - -name-mangler-script) - shift - renameScript=${D}1 - ;; - -d*) - shift - description=${D}1 - ;; - -f*) - shift - CFLAGS=${D}1 - ;; - -c*) - shift - CC=${D}1 - ;; - -h*) - PrintHelp - ;; - -ex*) - shift - exclude_symbols=${D}{exclude_symbols}${D}1" " - ;; - -libf*) - shift - library_flags=${D}{library_flags}${D}1" " - ;; - -nocrt*) - CFLAGS="-s" - ;; - -nolxl*) - flag_USE_LXLITE=0 - ;; - -* | /*) - case ${D}1 in - -L* | -l*) - libsToLink=1 - ;; - -Zomf) - omfLinking=1 - ;; - *) - ;; - esac - EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 - ;; - *.dll) - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`" - if @<:@ ${D}omfLinking -eq 1 @:>@; then - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib" - else - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a" - fi - ;; - *) - found=0; - if @<:@ ${D}libsToLink -ne 0 @:>@; then - EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 - else - for file in ${D}1 ; do - if @<:@ -f ${D}file @:>@; then - inputFiles="${D}{inputFiles} ${D}file" - found=1 - fi - done - if @<:@ ${D}found -eq 0 @:>@; then - echo "ERROR: No file(s) found: "${D}1 - exit 8 - fi - fi - ;; - esac - shift -done # iterate cmdline words - -# -if @<:@ -z "${D}inputFiles" @:>@; then - echo "dllar: no input files" - PrintHelp -fi - -# Now extract all .o files from .a files -newInputFiles="" -for file in ${D}inputFiles ; do - case ${D}file in - *.a | *.lib) - case ${D}file in - *.a) - suffix=".a" - AR="ar" - ;; - *.lib) - suffix=".lib" - AR="emxomfar" - EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf" - ;; - *) - ;; - esac - dirname=\`basnam ${D}file ${D}suffix\`"_%" - mkdir ${D}dirname - if @<:@ ${D}? -ne 0 @:>@; then - echo "Failed to create subdirectory ./${D}dirname" - CleanUp - exit 8; - fi - # Append '!' to indicate archive - newInputFiles="${D}newInputFiles ${D}{dirname}!" - doCommand "cd ${D}dirname; ${D}AR x ../${D}file" - cd ${D}curDir - found=0; - for subfile in ${D}dirname/*.o* ; do - if @<:@ -f ${D}subfile @:>@; then - found=1 - if @<:@ -s ${D}subfile @:>@; then - # FIXME: This should be: is file size > 32 byte, _not_ > 0! - newInputFiles="${D}newInputFiles ${D}subfile" - fi - fi - done - if @<:@ ${D}found -eq 0 @:>@; then - echo "WARNING: there are no files in archive \\'${D}file\\'" - fi - ;; - *) - newInputFiles="${D}{newInputFiles} ${D}file" - ;; - esac -done -inputFiles="${D}newInputFiles" - -# Output filename(s). -do_backup=0; -if @<:@ -z ${D}outFile @:>@; then - do_backup=1; - set outFile ${D}inputFiles; outFile=${D}2 -fi - -# If it is an archive, remove the '!' and the '_%' suffixes -case ${D}outFile in -*_%!) - outFile=\`basnam ${D}outFile _%!\` - ;; -*) - ;; -esac -case ${D}outFile in -*.dll) - outFile=\`basnam ${D}outFile .dll\` - ;; -*.DLL) - outFile=\`basnam ${D}outFile .DLL\` - ;; -*.o) - outFile=\`basnam ${D}outFile .o\` - ;; -*.obj) - outFile=\`basnam ${D}outFile .obj\` - ;; -*.a) - outFile=\`basnam ${D}outFile .a\` - ;; -*.lib) - outFile=\`basnam ${D}outFile .lib\` - ;; -*) - ;; -esac -case ${D}outimpFile in -*.a) - outimpFile=\`basnam ${D}outimpFile .a\` - ;; -*.lib) - outimpFile=\`basnam ${D}outimpFile .lib\` - ;; -*) - ;; -esac -if @<:@ -z ${D}outimpFile @:>@; then - outimpFile=${D}outFile -fi -defFile="${D}{outFile}.def" -arcFile="${D}{outimpFile}.a" -arcFile2="${D}{outimpFile}.lib" - -#create ${D}dllFile as something matching 8.3 restrictions, -if @<:@ -z ${D}renameScript @:>@ ; then - dllFile="${D}outFile" -else - dllFile=\`${D}renameScript ${D}outimpFile\` -fi - -if @<:@ ${D}do_backup -ne 0 @:>@ ; then - if @<:@ -f ${D}arcFile @:>@ ; then - doCommand "mv ${D}arcFile ${D}{outFile}_s.a" - fi - if @<:@ -f ${D}arcFile2 @:>@ ; then - doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib" - fi -fi - -# Extract public symbols from all the object files. -tmpdefFile=${D}{defFile}_% -rm -f ${D}tmpdefFile -for file in ${D}inputFiles ; do - case ${D}file in - *!) - ;; - *) - doCommand "emxexp -u ${D}file >> ${D}tmpdefFile" - ;; - esac -done - -# Create the def file. -rm -f ${D}defFile -echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile -dllFile="${D}{dllFile}.dll" -if @<:@ ! -z ${D}description @:>@; then - echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile -fi -echo "EXPORTS" >> ${D}defFile - -doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%" -grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile - -# Checks if the export is ok or not. -for word in ${D}exclude_symbols; do - grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}% - mv ${D}{tmpdefFile}% ${D}tmpdefFile -done - - -if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then - sed "=" < ${D}tmpdefFile | \\ - sed ' - N - : loop - s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/ - t loop - ' > ${D}{tmpdefFile}% - grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile -else - rm -f ${D}{tmpdefFile}% -fi -cat ${D}tmpdefFile >> ${D}defFile -rm -f ${D}tmpdefFile - -# Do linking, create implib, and apply lxlite. -gccCmdl=""; -for file in ${D}inputFiles ; do - case ${D}file in - *!) - ;; - *) - gccCmdl="${D}gccCmdl ${D}file" - ;; - esac -done -doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS" -touch "${D}{outFile}.dll" - -doCommand "emximp -o ${D}arcFile ${D}defFile" -if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then - add_flags=""; - if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then - add_flags="-ynd" - fi - doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile" -fi -doCommand "emxomf -s -l ${D}arcFile" - -# Successful exit. -CleanUp 1 -exit 0 -EOF -dnl ===================== dllar.sh ends here ===================== -]) - -dnl -dnl This file is part of Bakefile (http://www.bakefile.org) -dnl -dnl Copyright (C) 2003-2007 Vaclav Slavik, David Elliott and others -dnl -dnl Permission is hereby granted, free of charge, to any person obtaining a -dnl copy of this software and associated documentation files (the "Software"), -dnl to deal in the Software without restriction, including without limitation -dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, -dnl and/or sell copies of the Software, and to permit persons to whom the -dnl Software is furnished to do so, subject to the following conditions: -dnl -dnl The above copyright notice and this permission notice shall be included in -dnl all copies or substantial portions of the Software. -dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -dnl DEALINGS IN THE SOFTWARE. -dnl -dnl $Id: bakefile-lang.m4 1337 2010-02-09 20:22:43Z vaclavslavik $ -dnl -dnl Compiler detection macros by David Elliott and Vadim Zeitlin -dnl - - -dnl =========================================================================== -dnl Macros to detect different C/C++ compilers -dnl =========================================================================== - -dnl Based on autoconf _AC_LANG_COMPILER_GNU -dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO) -AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER], -[ - AC_LANG_PUSH($2) - AC_CACHE_CHECK( - [whether we are using the $1 $2 compiler], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3], - [AC_TRY_COMPILE( - [], - [ - #ifndef $3 - choke me - #endif - ], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no] - ) - ] - ) - if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then - :; $4 - else - :; $5 - fi - AC_LANG_POP($2) -]) - -dnl More specific version of the above macro checking whether the compiler -dnl version is at least the given one (assumes that we do use this compiler) -dnl -dnl _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(NAME, LANG, SYMBOL, VER, VERMSG, IF-YES, IF-NO) -AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_LATER_THAN], -[ - AC_LANG_PUSH($2) - AC_CACHE_CHECK( - [whether we are using $1 $2 compiler v$5 or later], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4], - [AC_TRY_COMPILE( - [], - [ - #ifndef $3 || $3 < $4 - choke me - #endif - ], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=yes], - [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=no] - ) - ] - ) - if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4" = "xyes"; then - :; $6 - else - :; $7 - fi - AC_LANG_POP($2) -]) - -dnl CodeWarrior Metrowerks compiler defines __MWERKS__ for both C and C++ -AC_DEFUN([AC_BAKEFILE_PROG_MWCC], -[ - _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C, __MWERKS__, MWCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_MWCXX], -[ - _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C++, __MWERKS__, MWCXX=yes) -]) - -dnl IBM xlC compiler defines __xlC__ for both C and C++ -AC_DEFUN([AC_BAKEFILE_PROG_XLCC], -[ - _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C, __xlC__, XLCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_XLCXX], -[ - _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C++, __xlC__, XLCXX=yes) -]) - -dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION -dnl -dnl NB: old versions define _COMPILER_VERSION but this could probably be -dnl defined by other compilers too so don't test for it to be safe -AC_DEFUN([AC_BAKEFILE_PROG_SGICC], -[ - _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_SGICXX], -[ - _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes) -]) - -dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC -AC_DEFUN([AC_BAKEFILE_PROG_SUNCC], -[ - _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX], -[ - _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes) -]) - -dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++ -AC_DEFUN([AC_BAKEFILE_PROG_INTELCC], -[ - _AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX], -[ - _AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes) -]) - -dnl Intel compiler command line options changed in incompatible ways sometimes -dnl before v8 (-KPIC was replaced with gcc-compatible -fPIC) and again in v10 -dnl (-create-pch deprecated in favour of -pch-create) so we need to test for -dnl its exact version too -AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_8], -[ - _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 800, 8, INTELCC8=yes) -]) -AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_8], -[ - _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 800, 8, INTELCXX8=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_10], -[ - _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 1000, 10, INTELCC10=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_10], -[ - _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 1000, 10, INTELCXX10=yes) -]) - -dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef -AC_DEFUN([AC_BAKEFILE_PROG_HPCC], -[ - _AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_HPCXX], -[ - _AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes) -]) - -dnl Tru64 cc and cxx -AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC], -[ - _AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX], -[ - _AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes) -]) - -dnl =========================================================================== -dnl macros to detect specialty compiler options -dnl =========================================================================== - -dnl Figure out if we need to pass -ext o to compiler (MetroWerks) -AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO], -[AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto, -dnl First create an empty conf test -[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) -dnl Now remove .o and .c.o or .cc.o -rm -f conftest.$ac_objext conftest.$ac_ext.o -dnl Now compile the test -AS_IF([AC_TRY_EVAL(ac_compile)], -dnl If the test succeeded look for conftest.c.o or conftest.cc.o -[for ac_file in `(ls conftest.* 2>/dev/null)`; do - case $ac_file in - conftest.$ac_ext.o) - bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o" - ;; - *) - ;; - esac -done], -[AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile]) -]) dnl AS_IF - -rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext -]) dnl AC_CACHE_CHECK - -if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then - if test "[]_AC_LANG_ABBREV[]" = "c"; then - CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS" - fi - if test "[]_AC_LANG_ABBREV[]" = "cxx"; then - CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS" - fi -fi -]) dnl AC_DEFUN - - -dnl =========================================================================== -dnl Macros to do all of the compiler detections as one macro -dnl =========================================================================== - -dnl check for different proprietary compilers depending on target platform -dnl _AC_BAKEFILE_PROG_COMPILER(LANG) -AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER], -[ - AC_REQUIRE([AC_PROG_$1]) - - dnl Intel compiler can be used under several different OS and even - dnl different architectures (x86, amd64 and Itanium) so it's easier to just - dnl always test for it - AC_BAKEFILE_PROG_INTEL$1 - - dnl If we use Intel compiler we also need to know its version - if test "$INTEL$1" = "yes"; then - AC_BAKEFILE_PROG_INTEL$1_8 - AC_BAKEFILE_PROG_INTEL$1_10 - fi - - dnl if we're using gcc, we can't be using any of incompatible compilers - if test "x$G$1" != "xyes"; then - if test "x$1" = "xC"; then - AC_BAKEFILE_METROWERKS_EXTO - if test "x$bakefile_cv_c_exto" '!=' "x"; then - unset ac_cv_prog_cc_g - _AC_PROG_CC_G - fi - fi - - dnl most of these compilers are only used under well-defined OS so - dnl don't waste time checking for them on other ones - case `uname -s` in - AIX*) - AC_BAKEFILE_PROG_XL$1 - ;; - - Darwin) - AC_BAKEFILE_PROG_MW$1 - if test "$MW$1" != "yes"; then - AC_BAKEFILE_PROG_XL$1 - fi - ;; - - IRIX*) - AC_BAKEFILE_PROG_SGI$1 - ;; - - Linux*) - dnl Sun CC is now available under Linux too, test for it unless - dnl we already found that we were using a different compiler - if test "$INTEL$1" != "yes"; then - AC_BAKEFILE_PROG_SUN$1 - fi - ;; - - HP-UX*) - AC_BAKEFILE_PROG_HP$1 - ;; - - OSF1) - AC_BAKEFILE_PROG_COMPAQ$1 - ;; - - SunOS) - AC_BAKEFILE_PROG_SUN$1 - ;; - esac - fi -]) - -AC_DEFUN([AC_BAKEFILE_PROG_CC], -[ - _AC_BAKEFILE_PROG_COMPILER(CC) -]) - -AC_DEFUN([AC_BAKEFILE_PROG_CXX], -[ - _AC_BAKEFILE_PROG_COMPILER(CXX) -]) - - -dnl -dnl This file is part of Bakefile (http://www.bakefile.org) -dnl -dnl Copyright (C) 2003-2007 Vaclav Slavik and others -dnl -dnl Permission is hereby granted, free of charge, to any person obtaining a -dnl copy of this software and associated documentation files (the "Software"), -dnl to deal in the Software without restriction, including without limitation -dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, -dnl and/or sell copies of the Software, and to permit persons to whom the -dnl Software is furnished to do so, subject to the following conditions: -dnl -dnl The above copyright notice and this permission notice shall be included in -dnl all copies or substantial portions of the Software. -dnl -dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -dnl DEALINGS IN THE SOFTWARE. -dnl -dnl $Id: bakefile.m4 1346 2011-02-01 14:03:00Z vaclavslavik $ -dnl -dnl Support macros for makefiles generated by BAKEFILE. -dnl - - -dnl --------------------------------------------------------------------------- -dnl Lots of compiler & linker detection code contained here was taken from -dnl wxWidgets configure.in script (see http://www.wxwidgets.org) -dnl --------------------------------------------------------------------------- - - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_GNUMAKE -dnl -dnl Detects GNU make -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_GNUMAKE], -[ - dnl does make support "-include" (only GNU make does AFAIK)? - AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu, - [ - if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null | - egrep -s GNU > /dev/null); then - bakefile_cv_prog_makeisgnu="yes" - else - bakefile_cv_prog_makeisgnu="no" - fi - ]) - - if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then - IF_GNU_MAKE="" - else - IF_GNU_MAKE="#" - fi - AC_SUBST(IF_GNU_MAKE) -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_PLATFORM -dnl -dnl Detects platform and sets PLATFORM_XXX variables accordingly -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_PLATFORM], -[ - PLATFORM_UNIX=0 - PLATFORM_WIN32=0 - PLATFORM_MSDOS=0 - PLATFORM_MAC=0 - PLATFORM_MACOS=0 - PLATFORM_MACOSX=0 - PLATFORM_OS2=0 - PLATFORM_BEOS=0 - - if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then - case "${BAKEFILE_HOST}" in - *-*-mingw32* ) - PLATFORM_WIN32=1 - ;; - *-pc-msdosdjgpp ) - PLATFORM_MSDOS=1 - ;; - *-pc-os2_emx | *-pc-os2-emx ) - PLATFORM_OS2=1 - ;; - *-*-darwin* ) - PLATFORM_MAC=1 - PLATFORM_MACOSX=1 - ;; - *-*-beos* ) - PLATFORM_BEOS=1 - ;; - powerpc-apple-macos* ) - PLATFORM_MAC=1 - PLATFORM_MACOS=1 - ;; - * ) - PLATFORM_UNIX=1 - ;; - esac - else - case "$BAKEFILE_FORCE_PLATFORM" in - win32 ) - PLATFORM_WIN32=1 - ;; - msdos ) - PLATFORM_MSDOS=1 - ;; - os2 ) - PLATFORM_OS2=1 - ;; - darwin ) - PLATFORM_MAC=1 - PLATFORM_MACOSX=1 - ;; - unix ) - PLATFORM_UNIX=1 - ;; - beos ) - PLATFORM_BEOS=1 - ;; - * ) - AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM]) - ;; - esac - fi - - AC_SUBST(PLATFORM_UNIX) - AC_SUBST(PLATFORM_WIN32) - AC_SUBST(PLATFORM_MSDOS) - AC_SUBST(PLATFORM_MAC) - AC_SUBST(PLATFORM_MACOS) - AC_SUBST(PLATFORM_MACOSX) - AC_SUBST(PLATFORM_OS2) - AC_SUBST(PLATFORM_BEOS) -]) - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_PLATFORM_SPECIFICS -dnl -dnl Sets misc platform-specific settings -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS], -[ - AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf], - [use OMF object format (OS/2)]), - [bk_os2_use_omf="$enableval"]) - - case "${BAKEFILE_HOST}" in - *-*-darwin* ) - dnl For Unix to MacOS X porting instructions, see: - dnl http://fink.sourceforge.net/doc/porting/porting.html - if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fno-common" - CXXFLAGS="$CXXFLAGS -fno-common" - fi - if test "x$XLCC" = "xyes"; then - CFLAGS="$CFLAGS -qnocommon" - CXXFLAGS="$CXXFLAGS -qnocommon" - fi - ;; - - *-pc-os2_emx | *-pc-os2-emx ) - if test "x$bk_os2_use_omf" = "xyes" ; then - AR=emxomfar - RANLIB=: - LDFLAGS="-Zomf $LDFLAGS" - CFLAGS="-Zomf $CFLAGS" - CXXFLAGS="-Zomf $CXXFLAGS" - OS2_LIBEXT="lib" - else - OS2_LIBEXT="a" - fi - ;; - - i*86-*-beos* ) - LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS" - ;; - esac -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SUFFIXES -dnl -dnl Detects shared various suffixes for shared libraries, libraries, programs, -dnl plugins etc. -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_SUFFIXES], -[ - SO_SUFFIX="so" - SO_SUFFIX_MODULE="so" - EXEEXT="" - LIBPREFIX="lib" - LIBEXT=".a" - DLLPREFIX="lib" - DLLPREFIX_MODULE="" - DLLIMP_SUFFIX="" - dlldir="$libdir" - - case "${BAKEFILE_HOST}" in - dnl PA-RISC HP systems used .sl but IA64 use ELF-64 and so use the - dnl standard .so extension - ia64-hp-hpux* ) - ;; - *-hp-hpux* ) - SO_SUFFIX="sl" - SO_SUFFIX_MODULE="sl" - ;; - *-*-aix* ) - dnl quoting from - dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html: - dnl Both archive libraries and shared libraries on AIX have an - dnl .a extension. This will explain why you can't link with an - dnl .so and why it works with the name changed to .a. - SO_SUFFIX="a" - SO_SUFFIX_MODULE="a" - ;; - *-*-cygwin* ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX="dll.a" - EXEEXT=".exe" - DLLPREFIX="cyg" - dlldir="$bindir" - ;; - *-*-mingw32* ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX="dll.a" - EXEEXT=".exe" - DLLPREFIX="" - dlldir="$bindir" - ;; - *-pc-msdosdjgpp ) - EXEEXT=".exe" - DLLPREFIX="" - dlldir="$bindir" - ;; - *-pc-os2_emx | *-pc-os2-emx ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX=$OS2_LIBEXT - EXEEXT=".exe" - DLLPREFIX="" - LIBPREFIX="" - LIBEXT=".$OS2_LIBEXT" - dlldir="$bindir" - ;; - *-*-darwin* ) - SO_SUFFIX="dylib" - SO_SUFFIX_MODULE="bundle" - ;; - esac - - if test "x$DLLIMP_SUFFIX" = "x" ; then - DLLIMP_SUFFIX="$SO_SUFFIX" - fi - - AC_SUBST(SO_SUFFIX) - AC_SUBST(SO_SUFFIX_MODULE) - AC_SUBST(DLLIMP_SUFFIX) - AC_SUBST(EXEEXT) - AC_SUBST(LIBPREFIX) - AC_SUBST(LIBEXT) - AC_SUBST(DLLPREFIX) - AC_SUBST(DLLPREFIX_MODULE) - AC_SUBST(dlldir) -]) - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHARED_LD -dnl -dnl Detects command for making shared libraries, substitutes SHARED_LD_CC -dnl and SHARED_LD_CXX. -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_SHARED_LD], -[ - dnl the extra compiler flags needed for compilation of shared library - PIC_FLAG="" - if test "x$GCC" = "xyes"; then - dnl the switch for gcc is the same under all platforms - PIC_FLAG="-fPIC" - fi - - dnl Defaults for GCC and ELF .so shared libs: - SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o" - SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o" - WINDOWS_IMPLIB=0 - - case "${BAKEFILE_HOST}" in - *-hp-hpux* ) - dnl default settings are good for gcc but not for the native HP-UX - if test "x$GCC" != "xyes"; then - dnl no idea why it wants it, but it does - LDFLAGS="$LDFLAGS -L/usr/lib" - - SHARED_LD_CC="${CC} -b -o" - SHARED_LD_CXX="${CXX} -b -o" - PIC_FLAG="+Z" - fi - ;; - - *-*-linux* ) - dnl newer icc versions use -fPIC just as gcc does and, in fact, the - dnl newest (v10+) ones don't even understand -KPIC any longer - if test "$INTELCC" = "yes" -a "$INTELCC8" != "yes"; then - PIC_FLAG="-KPIC" - elif test "x$SUNCXX" = "xyes"; then - SHARED_LD_CC="${CC} -G -o" - SHARED_LD_CXX="${CXX} -G -o" - PIC_FLAG="-KPIC" - fi - ;; - - *-*-solaris2* ) - if test "x$SUNCXX" = xyes ; then - SHARED_LD_CC="${CC} -G -o" - SHARED_LD_CXX="${CXX} -G -o" - PIC_FLAG="-KPIC" - fi - ;; - - *-*-darwin* ) - AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH - chmod +x shared-ld-sh - - SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o" - SHARED_LD_MODULE_CXX="CXX=\"\$(CXX)\" $SHARED_LD_MODULE_CC" - - dnl Most apps benefit from being fully binded (its faster and static - dnl variables initialized at startup work). - dnl This can be done either with the exe linker flag -Wl,-bind_at_load - dnl or with a double stage link in order to create a single module - dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved - - dnl If using newer dev tools then there is a -single_module flag that - dnl we can use to do this for dylibs, otherwise we'll need to use a helper - dnl script. Check the version of gcc to see which way we can go: - AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [ - AC_TRY_COMPILE([], - [ - #if (__GNUC__ < 3) || \ - ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1)) - This is old gcc - #endif - ], - [ - bakefile_cv_gcc31=yes - ], - [ - bakefile_cv_gcc31=no - ] - ) - ]) - if test "$bakefile_cv_gcc31" = "no"; then - dnl Use the shared-ld-sh helper script - SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o" - SHARED_LD_CXX="$SHARED_LD_CC" - else - dnl Use the -single_module flag and let the linker do it for us - SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o" - SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o" - fi - - if test "x$GCC" == "xyes"; then - PIC_FLAG="-dynamic -fPIC" - fi - if test "x$XLCC" = "xyes"; then - PIC_FLAG="-dynamic -DPIC" - fi - ;; - - *-*-aix* ) - if test "x$GCC" = "xyes"; then - dnl at least gcc 2.95 warns that -fPIC is ignored when - dnl compiling each and every file under AIX which is annoying, - dnl so don't use it there (it's useless as AIX runs on - dnl position-independent architectures only anyhow) - PIC_FLAG="" - - dnl -bexpfull is needed by AIX linker to export all symbols (by - dnl default it doesn't export any and even with -bexpall it - dnl doesn't export all C++ support symbols, e.g. vtable - dnl pointers) but it's only available starting from 5.1 (with - dnl maintenance pack 2, whatever this is), see - dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html - case "${BAKEFILE_HOST}" in - *-*-aix5* ) - LD_EXPFULL="-Wl,-bexpfull" - ;; - esac - - SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o" - SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o" - else - dnl FIXME: makeC++SharedLib is obsolete, what should we do for - dnl recent AIX versions? - AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib, - makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib) - SHARED_LD_CC="$AIX_CC_LD -p 0 -o" - SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o" - fi - ;; - - *-*-beos* ) - dnl can't use gcc under BeOS for shared library creation because it - dnl complains about missing 'main' - SHARED_LD_CC="${LD} -nostart -o" - SHARED_LD_CXX="${LD} -nostart -o" - ;; - - *-*-irix* ) - dnl default settings are ok for gcc - if test "x$GCC" != "xyes"; then - PIC_FLAG="-KPIC" - fi - ;; - - *-*-cygwin* | *-*-mingw32* ) - PIC_FLAG="" - SHARED_LD_CC="\$(CC) -shared -o" - SHARED_LD_CXX="\$(CXX) -shared -o" - WINDOWS_IMPLIB=1 - ;; - - *-pc-os2_emx | *-pc-os2-emx ) - SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" - SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" - PIC_FLAG="" - AC_BAKEFILE_CREATE_FILE_DLLAR_SH - chmod +x dllar.sh - ;; - - powerpc-apple-macos* | \ - *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \ - *-*-mirbsd* | \ - *-*-sunos4* | \ - *-*-osf* | \ - *-*-dgux5* | \ - *-*-sysv5* | \ - *-pc-msdosdjgpp ) - dnl defaults are ok - ;; - - *) - AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.) - esac - - if test "x$PIC_FLAG" != "x" ; then - PIC_FLAG="$PIC_FLAG -DPIC" - fi - - if test "x$SHARED_LD_MODULE_CC" = "x" ; then - SHARED_LD_MODULE_CC="$SHARED_LD_CC" - fi - if test "x$SHARED_LD_MODULE_CXX" = "x" ; then - SHARED_LD_MODULE_CXX="$SHARED_LD_CXX" - fi - - AC_SUBST(SHARED_LD_CC) - AC_SUBST(SHARED_LD_CXX) - AC_SUBST(SHARED_LD_MODULE_CC) - AC_SUBST(SHARED_LD_MODULE_CXX) - AC_SUBST(PIC_FLAG) - AC_SUBST(WINDOWS_IMPLIB) -]) - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHARED_VERSIONS -dnl -dnl Detects linker options for attaching versions (sonames) to shared libs. -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS], -[ - USE_SOVERSION=0 - USE_SOVERLINUX=0 - USE_SOVERSOLARIS=0 - USE_SOVERCYGWIN=0 - USE_SOTWOSYMLINKS=0 - USE_MACVERSION=0 - SONAME_FLAG= - - case "${BAKEFILE_HOST}" in - *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \ - *-*-k*bsd*-gnu | *-*-mirbsd* ) - if test "x$SUNCXX" = "xyes"; then - SONAME_FLAG="-h " - else - SONAME_FLAG="-Wl,-soname," - fi - USE_SOVERSION=1 - USE_SOVERLINUX=1 - USE_SOTWOSYMLINKS=1 - ;; - - *-*-solaris2* ) - SONAME_FLAG="-h " - USE_SOVERSION=1 - USE_SOVERSOLARIS=1 - ;; - - *-*-darwin* ) - USE_MACVERSION=1 - USE_SOVERSION=1 - USE_SOTWOSYMLINKS=1 - ;; - - *-*-cygwin* ) - USE_SOVERSION=1 - USE_SOVERCYGWIN=1 - ;; - esac - - AC_SUBST(USE_SOVERSION) - AC_SUBST(USE_SOVERLINUX) - AC_SUBST(USE_SOVERSOLARIS) - AC_SUBST(USE_SOVERCYGWIN) - AC_SUBST(USE_MACVERSION) - AC_SUBST(USE_SOTWOSYMLINKS) - AC_SUBST(SONAME_FLAG) -]) - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_DEPS -dnl -dnl Detects available C/C++ dependency tracking options -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_DEPS], -[ - AC_ARG_ENABLE([dependency-tracking], - AS_HELP_STRING([--disable-dependency-tracking], - [don't use dependency tracking even if the compiler can]), - [bk_use_trackdeps="$enableval"]) - - AC_MSG_CHECKING([for dependency tracking method]) - - BK_DEPS="" - if test "x$bk_use_trackdeps" = "xno" ; then - DEPS_TRACKING=0 - AC_MSG_RESULT([disabled]) - else - DEPS_TRACKING=1 - - if test "x$GCC" = "xyes"; then - DEPSMODE=gcc - case "${BAKEFILE_HOST}" in - *-*-darwin* ) - dnl -cpp-precomp (the default) conflicts with -MMD option - dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html) - DEPSFLAG="-no-cpp-precomp -MMD" - ;; - * ) - DEPSFLAG="-MMD" - ;; - esac - AC_MSG_RESULT([gcc]) - elif test "x$MWCC" = "xyes"; then - DEPSMODE=mwcc - DEPSFLAG="-MM" - AC_MSG_RESULT([mwcc]) - elif test "x$SUNCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-xM1" - AC_MSG_RESULT([Sun cc]) - elif test "x$SGICC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-M" - AC_MSG_RESULT([SGI cc]) - elif test "x$HPCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="+make" - AC_MSG_RESULT([HP cc]) - elif test "x$COMPAQCC" = "xyes"; then - DEPSMODE=gcc - DEPSFLAG="-MD" - AC_MSG_RESULT([Compaq cc]) - else - DEPS_TRACKING=0 - AC_MSG_RESULT([none]) - fi - - if test $DEPS_TRACKING = 1 ; then - AC_BAKEFILE_CREATE_FILE_BK_DEPS - chmod +x bk-deps - dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60 - dnl is required (and so top_builddir is never empty): - BK_DEPS="`pwd`/bk-deps" - fi - fi - - AC_SUBST(DEPS_TRACKING) - AC_SUBST(BK_DEPS) -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_CHECK_BASIC_STUFF -dnl -dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib" -dnl or "install" -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF], -[ - AC_PROG_RANLIB - AC_PROG_INSTALL - AC_PROG_LN_S - - AC_PROG_MAKE_SET - AC_SUBST(MAKE_SET) - - if test "x$SUNCXX" = "xyes"; then - dnl Sun C++ compiler requires special way of creating static libs; - dnl see here for more details: - dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863 - AR=$CXX - AROPTIONS="-xar -o" - AC_SUBST(AR) - elif test "x$SGICC" = "xyes"; then - dnl Almost the same as above for SGI mipsPro compiler - AR=$CXX - AROPTIONS="-ar -o" - AC_SUBST(AR) - else - AC_CHECK_TOOL(AR, ar, ar) - AROPTIONS=rcu - fi - AC_SUBST(AROPTIONS) - - AC_CHECK_TOOL(STRIP, strip, :) - AC_CHECK_TOOL(NM, nm, :) - - dnl This check is necessary because "install -d" doesn't exist on - dnl all platforms (e.g. HP/UX), see http://www.bakefile.org/ticket/80 - AC_MSG_CHECKING([for command to install directories]) - INSTALL_TEST_DIR=acbftest$$ - $INSTALL -d $INSTALL_TEST_DIR > /dev/null 2>&1 - if test $? = 0 -a -d $INSTALL_TEST_DIR; then - rmdir $INSTALL_TEST_DIR - dnl we must refer to makefile's $(INSTALL) variable and not - dnl current value of shell variable, hence the single quoting: - INSTALL_DIR='$(INSTALL) -d' - AC_MSG_RESULT([$INSTALL -d]) - else - INSTALL_DIR="mkdir -p" - AC_MSG_RESULT([mkdir -p]) - fi - AC_SUBST(INSTALL_DIR) - - LDFLAGS_GUI= - case ${BAKEFILE_HOST} in - *-*-cygwin* | *-*-mingw32* ) - LDFLAGS_GUI="-mwindows" - esac - AC_SUBST(LDFLAGS_GUI) -]) - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_RES_COMPILERS -dnl -dnl Checks for presence of resource compilers for win32 or mac -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_RES_COMPILERS], -[ - case ${BAKEFILE_HOST} in - *-*-cygwin* | *-*-mingw32* ) - dnl Check for win32 resources compiler: - AC_CHECK_TOOL(WINDRES, windres) - ;; - - *-*-darwin* | powerpc-apple-macos* ) - AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez) - AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile) - ;; - esac - - AC_SUBST(WINDRES) - AC_SUBST(REZ) - AC_SUBST(SETFILE) -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_PRECOMP_HEADERS -dnl -dnl Check for precompiled headers support (GCC >= 3.4) -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], -[ - - AC_ARG_ENABLE([precomp-headers], - AS_HELP_STRING([--disable-precomp-headers], - [don't use precompiled headers even if compiler can]), - [bk_use_pch="$enableval"]) - - GCC_PCH=0 - ICC_PCH=0 - USE_PCH=0 - BK_MAKE_PCH="" - - case ${BAKEFILE_HOST} in - *-*-cygwin* ) - dnl PCH support is broken in cygwin gcc because of unportable - dnl assumptions about mmap() in gcc code which make PCH generation - dnl fail erratically; disable PCH completely until this is fixed - bk_use_pch="no" - ;; - esac - - if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then - if test "x$GCC" = "xyes"; then - dnl test if we have gcc-3.4: - AC_MSG_CHECKING([if the compiler supports precompiled headers]) - AC_TRY_COMPILE([], - [ - #if !defined(__GNUC__) || !defined(__GNUC_MINOR__) - There is no PCH support - #endif - #if (__GNUC__ < 3) - There is no PCH support - #endif - #if (__GNUC__ == 3) && \ - ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \ - ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \ - ( defined(__INTEL_COMPILER) ) - There is no PCH support - #endif - ], - [ - AC_MSG_RESULT([yes]) - GCC_PCH=1 - ], - [ - if test "$INTELCXX8" = "yes"; then - AC_MSG_RESULT([yes]) - ICC_PCH=1 - if test "$INTELCXX10" = "yes"; then - ICC_PCH_CREATE_SWITCH="-pch-create" - ICC_PCH_USE_SWITCH="-pch-use" - else - ICC_PCH_CREATE_SWITCH="-create-pch" - ICC_PCH_USE_SWITCH="-use-pch" - fi - else - AC_MSG_RESULT([no]) - fi - ]) - if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then - USE_PCH=1 - AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH - chmod +x bk-make-pch - dnl FIXME: make this $(top_builddir)/bk-make-pch once - dnl autoconf-2.60 is required (and so top_builddir is - dnl never empty): - BK_MAKE_PCH="`pwd`/bk-make-pch" - fi - fi - fi - - AC_SUBST(GCC_PCH) - AC_SUBST(ICC_PCH) - AC_SUBST(ICC_PCH_CREATE_SWITCH) - AC_SUBST(ICC_PCH_USE_SWITCH) - AC_SUBST(BK_MAKE_PCH) -]) - - - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE([autoconf_inc.m4 inclusion]) -dnl -dnl To be used in configure.in of any project using Bakefile-generated mks -dnl -dnl Behaviour can be modified by setting following variables: -dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to -dnl to perform check for basic tools like ranlib -dnl BAKEFILE_HOST set this to override host detection, defaults -dnl to ${host} -dnl BAKEFILE_FORCE_PLATFORM set to override platform detection -dnl -dnl Example usage: -dnl -dnl AC_BAKEFILE([FOO(autoconf_inc.m4)]) -dnl -dnl (replace FOO with m4_include above, aclocal would die otherwise) -dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing -dnl we can do...) -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE], -[ - AC_PREREQ([2.58]) - - dnl We need to always run C/C++ compiler tests, but it's also possible - dnl for the user to call these macros manually, hence this instead of - dnl simply calling these macros. See http://www.bakefile.org/ticket/64 - AC_REQUIRE([AC_BAKEFILE_PROG_CC]) - AC_REQUIRE([AC_BAKEFILE_PROG_CXX]) - - if test "x$BAKEFILE_HOST" = "x"; then - if test "x${host}" = "x" ; then - AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.]) - fi - - BAKEFILE_HOST="${host}" - fi - - if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then - AC_BAKEFILE_CHECK_BASIC_STUFF - fi - AC_BAKEFILE_GNUMAKE - AC_BAKEFILE_PLATFORM - AC_BAKEFILE_PLATFORM_SPECIFICS - AC_BAKEFILE_SUFFIXES - AC_BAKEFILE_SHARED_LD - AC_BAKEFILE_SHARED_VERSIONS - AC_BAKEFILE_DEPS - AC_BAKEFILE_RES_COMPILERS - - dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not: - AC_SUBST(OBJCXXFLAGS) - - - BAKEFILE_BAKEFILE_M4_VERSION="0.2.9" - - dnl includes autoconf_inc.m4: - $1 - - if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then - AC_MSG_ERROR([No version found in autoconf_inc.m4 - bakefile macro was changed to take additional argument, perhaps configure.in wasn't updated (see the documentation)?]) - fi - - if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then - AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.]) - fi -]) - - -dnl --------------------------------------------------------------------------- -dnl Embedded copies of helper scripts follow: -dnl --------------------------------------------------------------------------- - -AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS], -[ -dnl ===================== bk-deps begins here ===================== -dnl (Created by merge-scripts.py from bk-deps -dnl file do not edit here!) -D='$' -cat <bk-deps -#!/bin/sh - -# This script is part of Bakefile (http://www.bakefile.org) autoconf -# script. It is used to track C/C++ files dependencies in portable way. -# -# Permission is given to use this file in any way. - -DEPSMODE=${DEPSMODE} -DEPSFLAG="${DEPSFLAG}" -DEPSDIRBASE=.deps - -if test ${D}DEPSMODE = gcc ; then - ${D}* ${D}{DEPSFLAG} - status=${D}? - - # determine location of created files: - while test ${D}# -gt 0; do - case "${D}1" in - -o ) - shift - objfile=${D}1 - ;; - -* ) - ;; - * ) - srcfile=${D}1 - ;; - esac - shift - done - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\` - depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - # if the compiler failed, we're done: - if test ${D}{status} != 0 ; then - rm -f ${D}depfile - exit ${D}{status} - fi - - # move created file to the location we want it in: - if test -f ${D}depfile ; then - sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d - rm -f ${D}depfile - else - # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d - depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\` - if test ! -f ${D}depfile ; then - # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++) - depfile="${D}objfile.d" - fi - if test -f ${D}depfile ; then - sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d - rm -f ${D}depfile - fi - fi - exit 0 - -elif test ${D}DEPSMODE = mwcc ; then - ${D}* || exit ${D}? - # Run mwcc again with -MM and redirect into the dep file we want - # NOTE: We can't use shift here because we need ${D}* to be valid - prevarg= - for arg in ${D}* ; do - if test "${D}prevarg" = "-o"; then - objfile=${D}arg - else - case "${D}arg" in - -* ) - ;; - * ) - srcfile=${D}arg - ;; - esac - fi - prevarg="${D}arg" - done - - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d - exit 0 - -elif test ${D}DEPSMODE = unixcc; then - ${D}* || exit ${D}? - # Run compiler again with deps flag and redirect into the dep file. - # It doesn't work if the '-o FILE' option is used, but without it the - # dependency file will contain the wrong name for the object. So it is - # removed from the command line, and the dep file is fixed with sed. - cmd="" - while test ${D}# -gt 0; do - case "${D}1" in - -o ) - shift - objfile=${D}1 - ;; - * ) - eval arg${D}#=\\${D}1 - cmd="${D}cmd \\${D}arg${D}#" - ;; - esac - shift - done - - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d - exit 0 - -else - ${D}* - exit ${D}? -fi -EOF -dnl ===================== bk-deps ends here ===================== -]) - -AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH], -[ -dnl ===================== shared-ld-sh begins here ===================== -dnl (Created by merge-scripts.py from shared-ld-sh -dnl file do not edit here!) -D='$' -cat <shared-ld-sh -#!/bin/sh -#----------------------------------------------------------------------------- -#-- Name: distrib/mac/shared-ld-sh -#-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X -#-- Author: Gilles Depeyrot -#-- Copyright: (c) 2002 Gilles Depeyrot -#-- Licence: any use permitted -#----------------------------------------------------------------------------- - -verbose=0 -args="" -objects="" -linking_flag="-dynamiclib" -ldargs="-r -keep_private_externs -nostdlib" - -if test "x${D}CXX" = "x"; then - CXX="c++" -fi - -while test ${D}# -gt 0; do - case ${D}1 in - - -v) - verbose=1 - ;; - - -o|-compatibility_version|-current_version|-framework|-undefined|-install_name) - # collect these options and values - args="${D}{args} ${D}1 ${D}2" - shift - ;; - - -arch|-isysroot) - # collect these options and values - ldargs="${D}{ldargs} ${D}1 ${D}2" - shift - ;; - - -s|-Wl,*) - # collect these load args - ldargs="${D}{ldargs} ${D}1" - ;; - - -l*|-L*|-flat_namespace|-headerpad_max_install_names) - # collect these options - args="${D}{args} ${D}1" - ;; - - -dynamiclib|-bundle) - linking_flag="${D}1" - ;; - - -*) - echo "shared-ld: unhandled option '${D}1'" - exit 1 - ;; - - *.o | *.a | *.dylib) - # collect object files - objects="${D}{objects} ${D}1" - ;; - - *) - echo "shared-ld: unhandled argument '${D}1'" - exit 1 - ;; - - esac - shift -done - -status=0 - -# -# Link one module containing all the others -# -if test ${D}{verbose} = 1; then - echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o" -fi -${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o -status=${D}? - -# -# Link the shared library from the single module created, but only if the -# previous command didn't fail: -# -if test ${D}{status} = 0; then - if test ${D}{verbose} = 1; then - echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}" - fi - ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args} - status=${D}? -fi - -# -# Remove intermediate module -# -rm -f master.${D}${D}.o - -exit ${D}status -EOF -dnl ===================== shared-ld-sh ends here ===================== -]) - -AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH], -[ -dnl ===================== bk-make-pch begins here ===================== -dnl (Created by merge-scripts.py from bk-make-pch -dnl file do not edit here!) -D='$' -cat <bk-make-pch -#!/bin/sh - -# This script is part of Bakefile (http://www.bakefile.org) autoconf -# script. It is used to generated precompiled headers. -# -# Permission is given to use this file in any way. - -outfile="${D}{1}" -header="${D}{2}" -shift -shift - -builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\` - -compiler="" -headerfile="" - -while test ${D}{#} -gt 0; do - add_to_cmdline=1 - case "${D}{1}" in - -I* ) - incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\` - if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then - headerfile="${D}{incdir}/${D}{header}" - fi - ;; - -use-pch|-use_pch|-pch-use ) - shift - add_to_cmdline=0 - ;; - esac - if test ${D}add_to_cmdline = 1 ; then - compiler="${D}{compiler} ${D}{1}" - fi - shift -done - -if test "x${D}{headerfile}" = "x" ; then - echo "error: can't find header ${D}{header} in include paths" >&2 -else - if test -f ${D}{outfile} ; then - rm -f ${D}{outfile} - else - mkdir -p \`dirname ${D}{outfile}\` - fi - depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d" - mkdir -p ${D}{builddir}/.deps - if test "x${GCC_PCH}" = "x1" ; then - # can do this because gcc is >= 3.4: - ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}" - elif test "x${ICC_PCH}" = "x1" ; then - filename=pch_gen-${D}${D} - file=${D}{filename}.c - dfile=${D}{filename}.d - cat > ${D}file < ${D}depsfile && \\ - rm -f ${D}file ${D}dfile ${D}{filename}.o - fi - exit ${D}{?} -fi -EOF -dnl ===================== bk-make-pch ends here ===================== -]) - diff --git a/src/external/muparser_v225/build/autoconf/acregen.sh b/src/external/muparser_v225/build/autoconf/acregen.sh deleted file mode 100644 index ef0ed37bd..000000000 --- a/src/external/muparser_v225/build/autoconf/acregen.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# -# Author: Francesco Montorsi -# RCS-ID: $Id: acregen.sh 236 2009-11-24 23:12:00Z frm $ -# Creation date: 14/9/2005 -# -# A simple script to generate the configure script -# Some features of this version: -# - automatic test for aclocal version -# - able to be called from any folder -# (i.e. you can call it typing 'build/autoconf/acregen.sh', not only './acregen.sh') - - -# called when an old version of aclocal is found -function aclocalold() -{ - echo "Your aclocal version is $aclocal_maj.$aclocal_min.$aclocal_rel" - echo "Your automake installation is too old; please install automake >= $aclocal_minimal_maj.$aclocal_minimal_min.$aclocal_minimal_rel" - echo "You can download automake from ftp://sources.redhat.com/pub/automake/" - exit 1 -} - -# first check if we have an ACLOCAL version recent enough -aclocal_verfull=$(aclocal --version) -aclocal_maj=`echo $aclocal_verfull | sed 's/aclocal (GNU automake) \([0-9]*\).\([0-9]*\).\([0-9]*\).*/\1/'` -aclocal_min=`echo $aclocal_verfull | sed 's/aclocal (GNU automake) \([0-9]*\).\([0-9]*\).\([0-9]*\).*/\2/'` -aclocal_rel=`echo $aclocal_verfull | sed 's/aclocal (GNU automake) \([0-9]*\).\([0-9]*\).\([0-9]*\).*/\3/'` -if [[ "$aclocal_rel" = "" ]]; then aclocal_rel="0"; fi - -#echo "Your aclocal version is $aclocal_maj.$aclocal_min.$aclocal_rel" # for debugging - -aclocal_minimal_maj=1 -aclocal_minimal_min=9 -aclocal_minimal_rel=6 - -majok=$(($aclocal_maj > $aclocal_minimal_maj)) -minok=$(($aclocal_maj == $aclocal_minimal_maj && $aclocal_min > $aclocal_minimal_min)) -relok=$(($aclocal_maj == $aclocal_minimal_maj && $aclocal_min == $aclocal_minimal_min && \ - $aclocal_rel >= $aclocal_minimal_rel)) - -versionok=$(($majok == 1 || $minok == 1 || $relok == 1)) -if [[ "$versionok" = "0" ]]; then aclocalold; fi - -# we can safely proceed -me=$(basename $0) -path=${0%%/$me} # path from which the script has been launched -current=$(pwd) -cd $path -aclocal && autoconf && mv configure ../.. -cd $current diff --git a/src/external/muparser_v225/build/autoconf/autoconf_inc.m4 b/src/external/muparser_v225/build/autoconf/autoconf_inc.m4 deleted file mode 100644 index cc17b060b..000000000 --- a/src/external/muparser_v225/build/autoconf/autoconf_inc.m4 +++ /dev/null @@ -1,134 +0,0 @@ -dnl ### begin block 00_header[muparser.bkl] ### -dnl -dnl This macro was generated by -dnl Bakefile 0.2.9 (http://www.bakefile.org) -dnl Do not modify, all changes will be overwritten! - -BAKEFILE_AUTOCONF_INC_M4_VERSION="0.2.9" - -dnl ### begin block 20_COND_DEBUG_0[muparser.bkl] ### - COND_DEBUG_0="#" - if test "x$DEBUG" = "x0" ; then - COND_DEBUG_0="" - fi - AC_SUBST(COND_DEBUG_0) -dnl ### begin block 20_COND_DEBUG_1[muparser.bkl] ### - COND_DEBUG_1="#" - if test "x$DEBUG" = "x1" ; then - COND_DEBUG_1="" - fi - AC_SUBST(COND_DEBUG_1) -dnl ### begin block 20_COND_DEPS_TRACKING_0[muparser.bkl] ### - COND_DEPS_TRACKING_0="#" - if test "x$DEPS_TRACKING" = "x0" ; then - COND_DEPS_TRACKING_0="" - fi - AC_SUBST(COND_DEPS_TRACKING_0) -dnl ### begin block 20_COND_DEPS_TRACKING_1[muparser.bkl] ### - COND_DEPS_TRACKING_1="#" - if test "x$DEPS_TRACKING" = "x1" ; then - COND_DEPS_TRACKING_1="" - fi - AC_SUBST(COND_DEPS_TRACKING_1) -dnl ### begin block 20_COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1[muparser.bkl] ### - COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x0" -a "x$USE_SOVERCYGWIN" = "x0" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1="" - fi - AC_SUBST(COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1) -dnl ### begin block 20_COND_PLATFORM_MACOSX_0_USE_SOVERSION_1[muparser.bkl] ### - COND_PLATFORM_MACOSX_0_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x0" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_0_USE_SOVERSION_1="" - fi - AC_SUBST(COND_PLATFORM_MACOSX_0_USE_SOVERSION_1) -dnl ### begin block 20_COND_PLATFORM_MACOSX_1[muparser.bkl] ### - COND_PLATFORM_MACOSX_1="#" - if test "x$PLATFORM_MACOSX" = "x1" ; then - COND_PLATFORM_MACOSX_1="" - fi - AC_SUBST(COND_PLATFORM_MACOSX_1) -dnl ### begin block 20_COND_PLATFORM_MACOSX_1_USE_SOVERSION_1[muparser.bkl] ### - COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x1" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="" - fi - AC_SUBST(COND_PLATFORM_MACOSX_1_USE_SOVERSION_1) -dnl ### begin block 20_COND_PLATFORM_MAC_0[muparser.bkl] ### - COND_PLATFORM_MAC_0="#" - if test "x$PLATFORM_MAC" = "x0" ; then - COND_PLATFORM_MAC_0="" - fi - AC_SUBST(COND_PLATFORM_MAC_0) -dnl ### begin block 20_COND_PLATFORM_MAC_1[muparser.bkl] ### - COND_PLATFORM_MAC_1="#" - if test "x$PLATFORM_MAC" = "x1" ; then - COND_PLATFORM_MAC_1="" - fi - AC_SUBST(COND_PLATFORM_MAC_1) -dnl ### begin block 20_COND_PLATFORM_OS2_1[muparser.bkl] ### - COND_PLATFORM_OS2_1="#" - if test "x$PLATFORM_OS2" = "x1" ; then - COND_PLATFORM_OS2_1="" - fi - AC_SUBST(COND_PLATFORM_OS2_1) -dnl ### begin block 20_COND_SAMPLES_1[muparser.bkl] ### - COND_SAMPLES_1="#" - if test "x$SAMPLES" = "x1" ; then - COND_SAMPLES_1="" - fi - AC_SUBST(COND_SAMPLES_1) -dnl ### begin block 20_COND_SHARED_0[muparser.bkl] ### - COND_SHARED_0="#" - if test "x$SHARED" = "x0" ; then - COND_SHARED_0="" - fi - AC_SUBST(COND_SHARED_0) -dnl ### begin block 20_COND_SHARED_1[muparser.bkl] ### - COND_SHARED_1="#" - if test "x$SHARED" = "x1" ; then - COND_SHARED_1="" - fi - AC_SUBST(COND_SHARED_1) -dnl ### begin block 20_COND_USE_SOTWOSYMLINKS_1[muparser.bkl] ### - COND_USE_SOTWOSYMLINKS_1="#" - if test "x$USE_SOTWOSYMLINKS" = "x1" ; then - COND_USE_SOTWOSYMLINKS_1="" - fi - AC_SUBST(COND_USE_SOTWOSYMLINKS_1) -dnl ### begin block 20_COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1[muparser.bkl] ### - COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1="#" - if test "x$USE_SOVERCYGWIN" = "x1" -a "x$USE_SOVERSION" = "x1" ; then - COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1="" - fi - AC_SUBST(COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1) -dnl ### begin block 20_COND_USE_SOVERLINUX_1[muparser.bkl] ### - COND_USE_SOVERLINUX_1="#" - if test "x$USE_SOVERLINUX" = "x1" ; then - COND_USE_SOVERLINUX_1="" - fi - AC_SUBST(COND_USE_SOVERLINUX_1) -dnl ### begin block 20_COND_USE_SOVERSION_0[muparser.bkl] ### - COND_USE_SOVERSION_0="#" - if test "x$USE_SOVERSION" = "x0" ; then - COND_USE_SOVERSION_0="" - fi - AC_SUBST(COND_USE_SOVERSION_0) -dnl ### begin block 20_COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1[muparser.bkl] ### - COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1="#" - if test "x$USE_SOVERSION" = "x1" -a "x$USE_SOVERSOLARIS" = "x1" ; then - COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1="" - fi - AC_SUBST(COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1) -dnl ### begin block 20_COND_USE_SOVERSOLARIS_1[muparser.bkl] ### - COND_USE_SOVERSOLARIS_1="#" - if test "x$USE_SOVERSOLARIS" = "x1" ; then - COND_USE_SOVERSOLARIS_1="" - fi - AC_SUBST(COND_USE_SOVERSOLARIS_1) -dnl ### begin block 20_COND_WINDOWS_IMPLIB_1[muparser.bkl] ### - COND_WINDOWS_IMPLIB_1="#" - if test "x$WINDOWS_IMPLIB" = "x1" ; then - COND_WINDOWS_IMPLIB_1="" - fi - AC_SUBST(COND_WINDOWS_IMPLIB_1) diff --git a/src/external/muparser_v225/build/autoconf/bakefile-presets.m4 b/src/external/muparser_v225/build/autoconf/bakefile-presets.m4 deleted file mode 100644 index 5d3159ee5..000000000 --- a/src/external/muparser_v225/build/autoconf/bakefile-presets.m4 +++ /dev/null @@ -1,156 +0,0 @@ -dnl --------------------------------------------------------------------------- -dnl Support macros for makefiles generated with Bakefile presets -dnl --------------------------------------------------------------------------- - - -dnl --------------------------------------------------------------------------- -dnl AM_YESNO_OPTCHECK([name of the boolean variable to set], -dnl [name of the variable with yes/no values], -dnl [name of the --enable/--with option]) -dnl -dnl Converts the $3 variable, supposed to contain a yes/no value to a 1/0 -dnl boolean variable and saves the result into $1. -dnl Outputs also the standard checking-option message. -dnl Used by the m4 macros of the presets. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_YESNO_OPTCHECK], -[ - AC_MSG_CHECKING([for the $3 option]) - if [[ "x$$2" = "xyes" ]]; then - AC_MSG_RESULT([yes]) - $1=1 - else - AC_MSG_RESULT([no]) - $1=0 - fi -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_UNICODEOPT([default value for the --enable-unicode option]) -dnl -dnl Adds the --enable-unicode option to the configure script and sets the -dnl UNICODE=0/1 variable accordingly to the value of the option. -dnl To be used with unicodeopt.bkl preset. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_UNICODEOPT], -[ - default="$1" - if [[ -z "$default" ]]; then - default="no" - fi - - AC_ARG_ENABLE([unicode], - AC_HELP_STRING([--enable-unicode], [Builds in Unicode mode]), - [], [enableval="$default"]) - - AC_BAKEFILE_YESNO_OPTCHECK([UNICODE], [enableval], [--enable-unicode]) -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_DEBUGOPT([default value for the --enable-debug option]) -dnl -dnl Adds the --enable-debug option to the configure script and sets the -dnl DEBUG=0/1 variable accordingly to the value of the option. -dnl To be used with debugopt.bkl preset. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_DEBUGOPT], -[ - default="$1" - if [[ -z "$default" ]]; then - default="no" - fi - - AC_ARG_ENABLE([debug], - AC_HELP_STRING([--enable-debug], [Builds in debug mode]), - [], [enableval="$default"]) - - AC_BAKEFILE_YESNO_OPTCHECK([DEBUG], [enableval], [--enable-debug]) - - dnl add the optimize/debug flags - if [[ "x$DEBUG" = "x1" ]]; then - - dnl NOTE: the -Wundef and -Wno-ctor-dtor-privacy are not enabled automatically by -Wall - dnl NOTE2: the '-Wno-ctor-dtor-privacy' has sense only when compiling C++ source files - dnl and thus we must be careful to add it only to CXXFLAGS and not to CFLAGS - dnl (remember that CPPFLAGS is reserved for both C and C++ compilers while - dnl CFLAGS is intended as flags for C compiler only and CXXFLAGS for C++ only) - my_CXXFLAGS="$my_CXXFLAGS -g -O0 -Wall -Wundef -Wno-ctor-dtor-privacy" - my_CFLAGS="$my_CFLAGS -g -O0 -Wall -Wundef" - else - my_CXXFLAGS="$my_CXXFLAGS -O2" - my_CFLAGS="$my_CFLAGS -O2" - fi - # User-supplied CXXFLAGS must always take precedence. - # This still sucks because using `make CFLAGS=-foobar` kills - # the project-supplied flags again. - CXXFLAGS="$my_CXXFLAGS $CXXFLAGS" - CFLAGS="$my_CFLAGS $CFLAGS" -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHAREDOPT([default value for the --enable-shared option]) -dnl -dnl Adds the --enable-shared option to the configure script and sets the -dnl SHARED=0/1 variable accordingly to the value of the option. -dnl To be used with sharedopt.bkl preset. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_SHAREDOPT], -[ - default="$1" - if [[ -z "$default" ]]; then - default="no" - fi - - AC_ARG_ENABLE([shared], - AC_HELP_STRING([--enable-shared], [Builds in shared mode]), - [], [enableval="$default"]) - - AC_BAKEFILE_YESNO_OPTCHECK([SHARED], [enableval], [--enable-shared]) -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHOW_DEBUGOPT -dnl -dnl Prints a message on stdout about the value of the DEBUG variable. -dnl This macro is useful to show summary messages at the end of the configure scripts. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_SHOW_DEBUGOPT], -[ - if [[ "$DEBUG" = "1" ]]; then - echo " - DEBUG build" - else - echo " - RELEASE build" - fi -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHOW_SHAREDOPT -dnl -dnl Prints a message on stdout about the value of the SHARED variable. -dnl This macro is useful to show summary messages at the end of the configure scripts. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_SHOW_SHAREDOPT], -[ - if [[ "$SHARED" = "1" ]]; then - echo " - SHARED mode" - else - echo " - STATIC mode" - fi -]) - -dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE_SHOW_UNICODEOPT -dnl -dnl Prints a message on stdout about the value of the UNICODE variable. -dnl This macro is useful to show summary messages at the end of the configure scripts. -dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_SHOW_UNICODEOPT], -[ - if [[ "$UNICODE" = "1" ]]; then - echo " - UNICODE mode" - else - echo " - ANSI mode" - fi -]) - - diff --git a/src/external/muparser_v225/build/autoconf/config.guess b/src/external/muparser_v225/build/autoconf/config.guess deleted file mode 100644 index c38553dc7..000000000 --- a/src/external/muparser_v225/build/autoconf/config.guess +++ /dev/null @@ -1,1497 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2006-02-23' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS_NT-*:*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - x86:Interix*:[345]*) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T:Interix*:[345]*) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/external/muparser_v225/build/autoconf/config.sub b/src/external/muparser_v225/build/autoconf/config.sub deleted file mode 100644 index ad9f39571..000000000 --- a/src/external/muparser_v225/build/autoconf/config.sub +++ /dev/null @@ -1,1608 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2006-02-23' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m32c) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - m32c-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/external/muparser_v225/build/autoconf/configure.ac b/src/external/muparser_v225/build/autoconf/configure.ac deleted file mode 100644 index 85ddd2a22..000000000 --- a/src/external/muparser_v225/build/autoconf/configure.ac +++ /dev/null @@ -1,82 +0,0 @@ -# ====================================================================================== -# Author: Francesco Montorsi -# RCS-ID: $Id: configure.ac 634 2012-12-22 10:34:32Z ibg $ -# ====================================================================================== - - -# NOTE: -# the version of the project must be updated also in docs/Doxyfile ! -AC_INIT([muparser], [2.2.4], [muparser@beltoforion.de]) - -AC_PREREQ([2.57]) -AC_CONFIG_AUX_DIR([build/autoconf]) -AC_LANG(C++) - -# some helpers -m4_include(bakefile-presets.m4) - - - -## CONFIGURE CHECKS -##################################################################### - -dnl This allows us to use Bakefile, recognizing the system type -dnl (and sets the AC_CANONICAL_BUILD, AC_CANONICAL_HOST and -dnl AC_CANONICAL_TARGET variables) -AC_CANONICAL_SYSTEM - -# We want to inhibit AC_PROG_C* macros adding the default "-g -O2" flags. -# To do so, make sure that the variables are not unset - it is ok if they are -# empty. However, their value MUST be retained, since one may have -# called ./configure CFLAGS=-foobar. -CFLAGS="$CFLAGS" -CPPFLAGS="$CPPFLAGS" -CXXFLAGS="$CXXFLAGS" - -dnl Checks for basic programs used to compile/install. -AC_PROG_AWK -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_RANLIB -AC_PROG_CC -AC_PROG_CXX -AC_PROG_CXXCPP - - -AC_BAKEFILE_DEBUGOPT([no]) -AC_BAKEFILE_SHAREDOPT([yes]) - -AC_ARG_ENABLE([samples], - AC_HELP_STRING([--enable-samples], [Builds the library samples, too]), - [], [enableval="yes"]) -AC_BAKEFILE_YESNO_OPTCHECK([SAMPLES], [enableval], [--enable-samples]) - -dnl Create the output folders in the current build directory -dnl (this handles cases like: -dnl mkdir mybuild && cd mybuild && ../configure && make ) -AS_MKDIR_P(lib) -AS_MKDIR_P(samples/example1) - -AC_BAKEFILE([m4_include(autoconf_inc.m4)]) -AC_CONFIG_FILES([Makefile build/autoconf/muparser.pc]) -AC_OUTPUT - - - -## CONFIGURE END MESSAGE -##################################################################### - -echo -echo " ----------------------------------------------------------------" -echo " Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed." -echo " Summary of main configuration settings for $PACKAGE_NAME:" -AC_BAKEFILE_SHOW_SHAREDOPT -AC_BAKEFILE_SHOW_DEBUGOPT -if [[ "$SAMPLES" = "1" ]]; then - echo " - SAMPLES enabled" -else - echo " - SAMPLES disabled" -fi -echo " Now, just run make." -echo " ----------------------------------------------------------------" -echo diff --git a/src/external/muparser_v225/build/autoconf/install-sh b/src/external/muparser_v225/build/autoconf/install-sh deleted file mode 100644 index 1b3f51d65..000000000 --- a/src/external/muparser_v225/build/autoconf/install-sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh - diff --git a/src/external/muparser_v225/build/autoconf/muparser.pc.in b/src/external/muparser_v225/build/autoconf/muparser.pc.in deleted file mode 100644 index 4c16a24e2..000000000 --- a/src/external/muparser_v225/build/autoconf/muparser.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: @PACKAGE_NAME@ -Description: Mathematical expressions parser library -Version: @PACKAGE_VERSION@ -Requires: -Libs: -L${libdir} -lmuparser -Cflags: -I${includedir} diff --git a/src/external/muparser_v225/build/bakefiles/Bakefiles.bkgen b/src/external/muparser_v225/build/bakefiles/Bakefiles.bkgen deleted file mode 100644 index 41fcfb7da..000000000 --- a/src/external/muparser_v225/build/bakefiles/Bakefiles.bkgen +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - muparser.bkl - - dmars,dmars_smake,cbx_unix,cbuilderx,msevc4prj - - autoconf,mingw,msvc - - -o ../makefile.mingw - -o ../makefile.vc - - - - - - -o../../Makefile.in - - - - - -DAUTOCONF_MACROS_FILE=../autoconf/autoconf_inc.m4 - - - diff --git a/src/external/muparser_v225/build/bakefiles/howto.txt b/src/external/muparser_v225/build/bakefiles/howto.txt deleted file mode 100644 index 4e246bb0c..000000000 --- a/src/external/muparser_v225/build/bakefiles/howto.txt +++ /dev/null @@ -1,28 +0,0 @@ -These are basic instructions for recreating the project files: - -Changing the version number: ----------------------------- -build/autoconf/configure.ac -Line 9: -AC_INIT .... - -Change SO version ------------------ -muparser.bkl / tag - -Updating the make- and projectfiles: ------------------------------------- -Clearing old project and makefiles: -bakefile_gen -c - -Remaking Projects and Makefiles: -bakefile_gen - -In addition to that automake must be started to create the new configure script: -rm -rf autoconf/autom4te.cache autoconf/aclocal.m4 -../autoconf/acregen.sh - -!!! IMPORTANT !!! -When building bakefile from the tar.gz archive make sure to -use the option --prefix=/usr wit the config file since its -path will default to /usr/local. This would cause strange errors! diff --git a/src/external/muparser_v225/build/bakefiles/muparser.bkl b/src/external/muparser_v225/build/bakefiles/muparser.bkl deleted file mode 100644 index a0cc8df07..000000000 --- a/src/external/muparser_v225/build/bakefiles/muparser.bkl +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - obj$(DIRSEP)$(BUILDDIR) - - - - - d - - - - - - - - - $(top_builddir)/lib - $(top_builddir)/samples - - - - ../.. - - - .. - - - $(SRCDIR)/lib - $(SRCDIR)/samples - - - - - - - - - - - muparser$(DEBUG_BUILD_POSTFIX) - - - muparser$(DEBUG_BUILD_POSTFIX) - muparser$(DEBUG_BUILD_POSTFIX) - - 2.2 - 2.2.4 - 1 - - - - muParser=muParser_lib+muParser_dll - - - - build/autoconf/muparser.pc - - - - - - - - - - - - - - 1 - - - - - - - $(fileList('samples/example1/*.cpp')) - $(SAMPLEOUTPATH)/example1 - $(substituteFromDict(SHARED, {'1':'USINGDLL', '0':''})) - - - - - - $(fileList('samples/example1/*.cpp')) - $(SAMPLEOUTPATH)/example1 - - - - - - - $(fileList('samples/example2/*.c')) - $(SAMPLEOUTPATH)/example2 - $(substituteFromDict(SHARED, {'1':'USINGDLL', '0':''})) - - - - - - - - - - muParser_lib - muParser_dll - - - - example1 - - example2 - - - - - ( cd $(SRCDIR)$(DIRSEP)docs && doxygen ) - - - - - diff --git a/src/external/muparser_v225/build/bakefiles/presets/debugopt.bkl b/src/external/muparser_v225/build/bakefiles/presets/debugopt.bkl deleted file mode 100644 index eb47bc45e..000000000 --- a/src/external/muparser_v225/build/bakefiles/presets/debugopt.bkl +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - 0 - - - - - - - - rel - dbg - - - diff --git a/src/external/muparser_v225/build/bakefiles/presets/setbuilddir.bkl b/src/external/muparser_v225/build/bakefiles/presets/setbuilddir.bkl deleted file mode 100644 index 9e7eef0b7..000000000 --- a/src/external/muparser_v225/build/bakefiles/presets/setbuilddir.bkl +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - _$(SHAREDBUILDPOSTFIX) - _$(DEBUGBUILDPOSTFIX) - _$(UNICODEBUILDPOSTFIX) - - - - $(COMPILER)$(SHRDSTR)$(DBGSTR)$(UNICSTR) - - - - diff --git a/src/external/muparser_v225/build/bakefiles/presets/sharedopt.bkl b/src/external/muparser_v225/build/bakefiles/presets/sharedopt.bkl deleted file mode 100644 index 461437bfa..000000000 --- a/src/external/muparser_v225/build/bakefiles/presets/sharedopt.bkl +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - 0 - - - - - - static - shared - - - diff --git a/src/external/muparser_v225/build/bakefiles/presets/unicodeopt.bkl b/src/external/muparser_v225/build/bakefiles/presets/unicodeopt.bkl deleted file mode 100644 index 5fe3ac25d..000000000 --- a/src/external/muparser_v225/build/bakefiles/presets/unicodeopt.bkl +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - 0 - - - - - - - - a - u - - - diff --git a/src/external/muparser_v225/build/makefile.mingw b/src/external/muparser_v225/build/makefile.mingw deleted file mode 100644 index 2521f7d43..000000000 --- a/src/external/muparser_v225/build/makefile.mingw +++ /dev/null @@ -1,283 +0,0 @@ -# ========================================================================= -# This makefile was generated by -# Bakefile 0.2.9 (http://www.bakefile.org) -# Do not modify, all changes will be overwritten! -# ========================================================================= - - - -# ------------------------------------------------------------------------- -# These are configurable options: -# ------------------------------------------------------------------------- - -# Compiler flags to link shared library -LINK_DLL_FLAGS ?= -shared - -# C compiler -CC = gcc - -# C++ compiler -CXX = g++ - -# Standard flags for CC -CFLAGS ?= - -# Standard flags for C++ -CXXFLAGS ?= - -# Standard preprocessor flags (common for CC and CXX) -CPPFLAGS ?= - -# Standard linker flags -LDFLAGS ?= - -# Set to 1 to build debug version [0,1] -DEBUG ?= 0 - -# Set to 1 to build shared (DLL) version [0,1] -SHARED ?= 0 - -# Set to 1 to compile samples [0,1] -SAMPLES ?= 1 - - - -# ------------------------------------------------------------------------- -# Do not modify the rest of this file! -# ------------------------------------------------------------------------- - -### Variables: ### - -CPPDEPS = -MT$@ -MF$@.d -MD -MP -MUPARSER_LIB_CXXFLAGS = $(____DEBUG) $(____DEBUG_3) $(____DEBUG_9) \ - $(____DEBUG_8) $(____SHARED) $(____SHARED_0) -D_WIN32 -I..\include \ - $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_LIB_OBJECTS = \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParser.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBase.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBytecode.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserCallback.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserDLL.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserError.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserInt.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTest.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTokenReader.o -MUPARSER_DLL_CXXFLAGS = $(____DEBUG) $(____DEBUG_3) $(____DEBUG_9) \ - $(____DEBUG_8) $(____SHARED) $(____SHARED_0) -D_WIN32 -I..\include \ - $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_DLL_OBJECTS = \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParser.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBase.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBytecode.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserCallback.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserDLL.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserError.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserInt.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTest.o \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTokenReader.o -EXAMPLE1_CXXFLAGS = $(____DEBUG) $(____DEBUG_3) $(____DEBUG_9) $(____DEBUG_8) \ - -I..\include $(____SHARED_1) $(CPPFLAGS) $(CXXFLAGS) -EXAMPLE1_OBJECTS = \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example1_example1.o -EXAMPLE2_CFLAGS = $(____DEBUG) $(____DEBUG_3) $(____DEBUG_9) $(____DEBUG_8) \ - -I..\include $(____SHARED_1) $(CPPFLAGS) $(CFLAGS) -EXAMPLE2_OBJECTS = \ - obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example2_example2.o - -### Conditionally set variables: ### - -ifeq ($(DEBUG),0) -DEBUGBUILDPOSTFIX = rel -endif -ifeq ($(DEBUG),1) -DEBUGBUILDPOSTFIX = dbg -endif -ifeq ($(SHARED),0) -SHAREDBUILDPOSTFIX = static -endif -ifeq ($(SHARED),1) -SHAREDBUILDPOSTFIX = shared -endif -ifeq ($(DEBUG),0) -DEBUG_BUILD_POSTFIX = -endif -ifeq ($(DEBUG),1) -DEBUG_BUILD_POSTFIX = d -endif -ifeq ($(SHARED),0) -__muParser_lib___depname = ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a -endif -ifeq ($(SHARED),1) -__muParser_dll___depname = ..\lib\muparser$(DEBUG_BUILD_POSTFIX).dll -endif -ifeq ($(SAMPLES),1) -ifeq ($(SHARED),0) -__example1___depname = ..\samples\example1\example1.exe -endif -endif -ifeq ($(SAMPLES),1) -ifeq ($(SHARED),1) -__example2___depname = ..\samples\example2\example2.exe -endif -endif -ifeq ($(SHARED),0) -____SHARED = -endif -ifeq ($(SHARED),1) -____SHARED = -DMUPARSER_DLL -endif -ifeq ($(SHARED),0) -____SHARED_0 = -endif -ifeq ($(SHARED),1) -____SHARED_0 = -DMUPARSERLIB_EXPORTS -endif -ifeq ($(DEBUG),0) -____DEBUG = -DNDEBUG -endif -ifeq ($(DEBUG),1) -____DEBUG = -endif -ifeq ($(DEBUG),0) -____DEBUG_3 = -O2 -endif -ifeq ($(DEBUG),1) -____DEBUG_3 = -O0 -endif -ifeq ($(DEBUG),0) -____DEBUG_8 = -endif -ifeq ($(DEBUG),1) -____DEBUG_8 = -W -Wall -endif -ifeq ($(SHARED),0) -____SHARED_1 = -endif -ifeq ($(SHARED),1) -____SHARED_1 = -DUSINGDLL -endif -ifeq ($(DEBUG),0) -____DEBUG_9 = -endif -ifeq ($(DEBUG),1) -____DEBUG_9 = -g -endif - - -all: obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX): - -if not exist obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) mkdir obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) - -### Targets: ### - -all: $(__muParser_lib___depname) $(__muParser_dll___depname) $(__example1___depname) $(__example2___depname) - -clean: - -if exist obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.o del obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.o - -if exist obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.d del obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.d - -if exist ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a del ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a - -if exist ..\lib\muparser$(DEBUG_BUILD_POSTFIX).dll del ..\lib\muparser$(DEBUG_BUILD_POSTFIX).dll - -if exist ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a del ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a - -if exist ..\samples\example1\example1.exe del ..\samples\example1\example1.exe - -if exist ..\samples\example2\example2.exe del ..\samples\example2\example2.exe - -ifeq ($(SHARED),0) -..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a: $(MUPARSER_LIB_OBJECTS) - if exist $@ del $@ - ar rcu $@ $(MUPARSER_LIB_OBJECTS) - ranlib $@ -endif - -ifeq ($(SHARED),1) -..\lib\muparser$(DEBUG_BUILD_POSTFIX).dll: $(MUPARSER_DLL_OBJECTS) - $(CXX) $(LINK_DLL_FLAGS) -fPIC -o $@ $(MUPARSER_DLL_OBJECTS) $(____DEBUG_9) -Wl,--out-implib=..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a $(LDFLAGS) -endif - -ifeq ($(SAMPLES),1) -ifeq ($(SHARED),0) -..\samples\example1\example1.exe: $(EXAMPLE1_OBJECTS) $(__muParser_lib___depname) - $(CXX) -o $@ $(EXAMPLE1_OBJECTS) $(____DEBUG_9) -L..\lib $(LDFLAGS) ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a -endif -endif - -ifeq ($(SAMPLES),1) -ifeq ($(SHARED),1) -..\samples\example2\example2.exe: $(EXAMPLE2_OBJECTS) $(__muParser_lib___depname) - $(CC) -o $@ $(EXAMPLE2_OBJECTS) $(____DEBUG_9) -L..\lib $(LDFLAGS) ..\lib\libmuparser$(DEBUG_BUILD_POSTFIX).a -endif -endif - -lib: $(__muParser_lib___depname) $(__muParser_dll___depname) - -samples: $(__example1___depname) $(__example2___depname) - -documentation: - ( cd ..\docs && doxygen ) - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParser.o: ../src/muParser.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBase.o: ../src/muParserBase.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBytecode.o: ../src/muParserBytecode.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserCallback.o: ../src/muParserCallback.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserDLL.o: ../src/muParserDLL.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserError.o: ../src/muParserError.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserInt.o: ../src/muParserInt.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTest.o: ../src/muParserTest.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTokenReader.o: ../src/muParserTokenReader.cpp - $(CXX) -c -o $@ $(MUPARSER_LIB_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParser.o: ../src/muParser.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBase.o: ../src/muParserBase.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBytecode.o: ../src/muParserBytecode.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserCallback.o: ../src/muParserCallback.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserDLL.o: ../src/muParserDLL.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserError.o: ../src/muParserError.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserInt.o: ../src/muParserInt.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTest.o: ../src/muParserTest.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTokenReader.o: ../src/muParserTokenReader.cpp - $(CXX) -c -o $@ $(MUPARSER_DLL_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example1_example1.o: ../samples/example1/example1.cpp - $(CXX) -c -o $@ $(EXAMPLE1_CXXFLAGS) $(CPPDEPS) $< - -obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example2_example2.o: ../samples/example2/example2.c - $(CC) -c -o $@ $(EXAMPLE2_CFLAGS) $(CPPDEPS) $< - -.PHONY: all clean lib samples - - -SHELL := $(COMSPEC) - -# Dependencies tracking: --include obj\gcc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)/*.d diff --git a/src/external/muparser_v225/build/makefile.vc b/src/external/muparser_v225/build/makefile.vc deleted file mode 100644 index 9fe9d391a..000000000 --- a/src/external/muparser_v225/build/makefile.vc +++ /dev/null @@ -1,322 +0,0 @@ -# ========================================================================= -# This makefile was generated by -# Bakefile 0.2.9 (http://www.bakefile.org) -# Do not modify, all changes will be overwritten! -# ========================================================================= - - - -# ------------------------------------------------------------------------- -# These are configurable options: -# ------------------------------------------------------------------------- - -# C compiler -CC = cl - -# C++ compiler -CXX = cl - -# Standard flags for CC -CFLAGS = - -# Standard flags for C++ -CXXFLAGS = - -# Standard preprocessor flags (common for CC and CXX) -CPPFLAGS = - -# Standard linker flags -LDFLAGS = - -# Set to 1 to build debug version [0,1] -# 0 - Release -# 1 - Debug -DEBUG = 0 - -# Set to 1 to build shared (DLL) version [0,1] -# 0 - Static -# 1 - DLL -SHARED = 0 - -# Set to 1 to compile samples [0,1] -SAMPLES = 1 - - - -# ------------------------------------------------------------------------- -# Do not modify the rest of this file! -# ------------------------------------------------------------------------- - -### Variables: ### - -MUPARSER_LIB_CXXFLAGS = /MD$(DEBUG_3) /DWIN32 $(____DEBUG_8) $(____DEBUG) \ - $(____DEBUG_9) /Fd..\lib\muparser$(DEBUG_3).pdb $(____DEBUG_6) \ - $(______DEBUG) $(____SHARED) $(____SHARED_0) /D_WIN32 /I..\include /GR /EHsc \ - $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_LIB_OBJECTS = \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParser.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBase.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBytecode.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserCallback.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserDLL.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserError.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserInt.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTest.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTokenReader.obj -MUPARSER_DLL_CXXFLAGS = /MD$(DEBUG_3) /DWIN32 $(____DEBUG_8) $(____DEBUG) \ - $(____DEBUG_9) /Fd..\lib\muparser$(DEBUG_3).pdb $(____DEBUG_6) \ - $(______DEBUG) $(____SHARED) $(____SHARED_0) /D_WIN32 /I..\include /GR /EHsc \ - $(CPPFLAGS) $(CXXFLAGS) -MUPARSER_DLL_OBJECTS = \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParser.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBase.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBytecode.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserCallback.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserDLL.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserError.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserInt.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTest.obj \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTokenReader.obj -EXAMPLE1_CXXFLAGS = /MD$(DEBUG_3) /DWIN32 $(____DEBUG_8) $(____DEBUG) \ - $(____DEBUG_9) /Fd..\samples\example1\example1.pdb $(____DEBUG_6) \ - $(______DEBUG) /I..\include $(____SHARED_1) /GR /EHsc $(CPPFLAGS) $(CXXFLAGS) -EXAMPLE1_OBJECTS = \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example1_example1.obj -EXAMPLE2_CFLAGS = /MD$(DEBUG_3) /DWIN32 $(____DEBUG_8) $(____DEBUG) \ - $(____DEBUG_9) /Fd..\samples\example2\example2.pdb $(____DEBUG_6) \ - $(______DEBUG) /I..\include $(____SHARED_1) $(CPPFLAGS) $(CFLAGS) -EXAMPLE2_OBJECTS = \ - obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example2_example2.obj - -### Conditionally set variables: ### - -!if "$(DEBUG)" == "0" -DEBUGBUILDPOSTFIX = rel -!endif -!if "$(DEBUG)" == "1" -DEBUGBUILDPOSTFIX = dbg -!endif -!if "$(SHARED)" == "0" -SHAREDBUILDPOSTFIX = static -!endif -!if "$(SHARED)" == "1" -SHAREDBUILDPOSTFIX = shared -!endif -!if "$(SHARED)" == "0" -__muParser_lib___depname = ..\lib\muparser$(DEBUG_3).lib -!endif -!if "$(SHARED)" == "1" -__muParser_dll___depname = ..\lib\muparser$(DEBUG_3).dll -!endif -!if "$(DEBUG)" == "0" -____DEBUG_23_26 = -!endif -!if "$(DEBUG)" == "1" -____DEBUG_23_26 = $(____DEBUG_10) -!endif -!if "$(SAMPLES)" == "1" && "$(SHARED)" == "0" -__example1___depname = ..\samples\example1\example1.exe -!endif -!if "$(DEBUG)" == "0" -____DEBUG_40_43 = -!endif -!if "$(DEBUG)" == "1" -____DEBUG_40_43 = $(____DEBUG_10) -!endif -!if "$(SAMPLES)" == "1" && "$(SHARED)" == "1" -__example2___depname = ..\samples\example2\example2.exe -!endif -!if "$(DEBUG)" == "0" -____DEBUG_56_59 = -!endif -!if "$(DEBUG)" == "1" -____DEBUG_56_59 = $(____DEBUG_10) -!endif -!if "$(SHARED)" == "0" -____SHARED = -!endif -!if "$(SHARED)" == "1" -____SHARED = /DMUPARSER_DLL -!endif -!if "$(SHARED)" == "0" -____SHARED_0 = -!endif -!if "$(SHARED)" == "1" -____SHARED_0 = /DMUPARSERLIB_EXPORTS -!endif -!if "$(DEBUG)" == "0" -____DEBUG_8 = /DNDEBUG -!endif -!if "$(DEBUG)" == "1" -____DEBUG_8 = -!endif -!if "$(DEBUG)" == "0" -____DEBUG = /O2 -!endif -!if "$(DEBUG)" == "1" -____DEBUG = /Od -!endif -!if "$(DEBUG)" == "0" -____DEBUG_9 = -!endif -!if "$(DEBUG)" == "1" -____DEBUG_9 = /Zi -!endif -!if "$(DEBUG)" == "0" -____DEBUG_5 = -!endif -!if "$(DEBUG)" == "1" -____DEBUG_5 = /DEBUG -!endif -!if "$(DEBUG)" == "0" -____DEBUG_6 = /w -!endif -!if "$(DEBUG)" == "1" -____DEBUG_6 = /W4 -!endif -!if "$(DEBUG)" == "0" -______DEBUG = -!endif -!if "$(DEBUG)" == "1" -______DEBUG = /D_DEBUG -!endif -!if "$(DEBUG)" == "0" -DEBUG_3 = -!endif -!if "$(DEBUG)" == "1" -DEBUG_3 = d -!endif -!if "$(DEBUG)" == "0" -____DEBUG_10 = /opt:ref /opt:icf -!endif -!if "$(DEBUG)" == "1" -____DEBUG_10 = -!endif -!if "$(SHARED)" == "0" -____SHARED_1 = -!endif -!if "$(SHARED)" == "1" -____SHARED_1 = /DUSINGDLL -!endif - - -all: obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX): - -if not exist obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) mkdir obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX) - -### Targets: ### - -all: $(__muParser_lib___depname) $(__muParser_dll___depname) $(__example1___depname) $(__example2___depname) - -clean: - -if exist obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.obj del obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.obj - -if exist obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.res del obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.res - -if exist obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.pch del obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\*.pch - -if exist ..\lib\muparser$(DEBUG_3).lib del ..\lib\muparser$(DEBUG_3).lib - -if exist ..\lib\muparser$(DEBUG_3).dll del ..\lib\muparser$(DEBUG_3).dll - -if exist ..\lib\muparser$(DEBUG_3).ilk del ..\lib\muparser$(DEBUG_3).ilk - -if exist ..\lib\muparser$(DEBUG_3).pdb del ..\lib\muparser$(DEBUG_3).pdb - -if exist ..\lib\muparser$(DEBUG_3).lib del ..\lib\muparser$(DEBUG_3).lib - -if exist ..\samples\example1\example1.exe del ..\samples\example1\example1.exe - -if exist ..\samples\example1\example1.ilk del ..\samples\example1\example1.ilk - -if exist ..\samples\example1\example1.pdb del ..\samples\example1\example1.pdb - -if exist ..\samples\example2\example2.exe del ..\samples\example2\example2.exe - -if exist ..\samples\example2\example2.ilk del ..\samples\example2\example2.ilk - -if exist ..\samples\example2\example2.pdb del ..\samples\example2\example2.pdb - -!if "$(SHARED)" == "0" -..\lib\muparser$(DEBUG_3).lib: $(MUPARSER_LIB_OBJECTS) - if exist $@ del $@ - link /LIB /NOLOGO /OUT:$@ @<< - $(MUPARSER_LIB_OBJECTS) -<< -!endif - -!if "$(SHARED)" == "1" -..\lib\muparser$(DEBUG_3).dll: $(MUPARSER_DLL_OBJECTS) - link /DLL /NOLOGO /OUT:$@ $(____DEBUG_5) /pdb:"..\lib\muparser$(DEBUG_3).pdb" $(____DEBUG_23_26) $(LDFLAGS) @<< - $(MUPARSER_DLL_OBJECTS) /IMPLIB:..\lib\muparser$(DEBUG_3).lib -<< -!endif - -!if "$(SAMPLES)" == "1" && "$(SHARED)" == "0" -..\samples\example1\example1.exe: $(EXAMPLE1_OBJECTS) $(__muParser_lib___depname) - link /NOLOGO /OUT:$@ $(____DEBUG_5) /pdb:"..\samples\example1\example1.pdb" $(____DEBUG_40_43) /LIBPATH:..\lib $(LDFLAGS) @<< - $(EXAMPLE1_OBJECTS) ..\lib\muparser$(DEBUG_3).lib -<< -!endif - -!if "$(SAMPLES)" == "1" && "$(SHARED)" == "1" -..\samples\example2\example2.exe: $(EXAMPLE2_OBJECTS) $(__muParser_lib___depname) - link /NOLOGO /OUT:$@ $(____DEBUG_5) /pdb:"..\samples\example2\example2.pdb" $(____DEBUG_56_59) /LIBPATH:..\lib $(LDFLAGS) @<< - $(EXAMPLE2_OBJECTS) ..\lib\muparser$(DEBUG_3).lib -<< -!endif - -lib: $(__muParser_lib___depname) $(__muParser_dll___depname) - -samples: $(__example1___depname) $(__example2___depname) - -documentation: - ( cd ..\docs && doxygen ) - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParser.obj: ..\src\muParser.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParser.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBase.obj: ..\src\muParserBase.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserBase.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserBytecode.obj: ..\src\muParserBytecode.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserBytecode.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserCallback.obj: ..\src\muParserCallback.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserCallback.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserDLL.obj: ..\src\muParserDLL.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserDLL.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserError.obj: ..\src\muParserError.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserError.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserInt.obj: ..\src\muParserInt.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserInt.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTest.obj: ..\src\muParserTest.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserTest.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_lib_muParserTokenReader.obj: ..\src\muParserTokenReader.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_LIB_CXXFLAGS) ..\src\muParserTokenReader.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParser.obj: ..\src\muParser.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParser.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBase.obj: ..\src\muParserBase.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserBase.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserBytecode.obj: ..\src\muParserBytecode.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserBytecode.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserCallback.obj: ..\src\muParserCallback.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserCallback.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserDLL.obj: ..\src\muParserDLL.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserDLL.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserError.obj: ..\src\muParserError.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserError.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserInt.obj: ..\src\muParserInt.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserInt.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTest.obj: ..\src\muParserTest.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserTest.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\muParser_dll_muParserTokenReader.obj: ..\src\muParserTokenReader.cpp - $(CXX) /c /nologo /TP /Fo$@ $(MUPARSER_DLL_CXXFLAGS) ..\src\muParserTokenReader.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example1_example1.obj: ..\samples\example1\example1.cpp - $(CXX) /c /nologo /TP /Fo$@ $(EXAMPLE1_CXXFLAGS) ..\samples\example1\example1.cpp - -obj\vc_$(SHAREDBUILDPOSTFIX)_$(DEBUGBUILDPOSTFIX)\example2_example2.obj: ..\samples\example2\example2.c - $(CC) /c /nologo /TC /Fo$@ $(EXAMPLE2_CFLAGS) ..\samples\example2\example2.c - diff --git a/src/external/muparser_v225/build/msvc2013/muparser.sln b/src/external/muparser_v225/build/msvc2013/muparser.sln deleted file mode 100644 index f4c088cf6..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser.sln +++ /dev/null @@ -1,119 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "muparser", "muparser_muParser.vcxproj", "{2A1F639A-7642-57CC-BF97-3EC5B5C89D91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example1", "muparser_example1.vcxproj", "{A1DCD664-8803-54E2-B35F-84D96B9CA6DF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example2", "muparser_example2.vcxproj", "{B405983E-B929-5BCF-8CC8-03CF34796A23}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug DLL|Any CPU = Debug DLL|Any CPU - Debug DLL|Mixed Platforms = Debug DLL|Mixed Platforms - Debug DLL|Win32 = Debug DLL|Win32 - Debug DLL|x64 = Debug DLL|x64 - Debug Static|Any CPU = Debug Static|Any CPU - Debug Static|Mixed Platforms = Debug Static|Mixed Platforms - Debug Static|Win32 = Debug Static|Win32 - Debug Static|x64 = Debug Static|x64 - Release DLL|Any CPU = Release DLL|Any CPU - Release DLL|Mixed Platforms = Release DLL|Mixed Platforms - Release DLL|Win32 = Release DLL|Win32 - Release DLL|x64 = Release DLL|x64 - Release Static|Any CPU = Release Static|Any CPU - Release Static|Mixed Platforms = Release Static|Mixed Platforms - Release Static|Win32 = Release Static|Win32 - Release Static|x64 = Release Static|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Any CPU.ActiveCfg = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Any CPU.Build.0 = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|x64.ActiveCfg = Debug DLL|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug DLL|x64.Build.0 = Debug DLL|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Any CPU.ActiveCfg = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Any CPU.Build.0 = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|Win32.Build.0 = Debug Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|x64.ActiveCfg = Debug Static|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Debug Static|x64.Build.0 = Debug Static|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Any CPU.ActiveCfg = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Any CPU.Build.0 = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|x64.ActiveCfg = Release DLL|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release DLL|x64.Build.0 = Release DLL|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Any CPU.ActiveCfg = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Any CPU.Build.0 = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Win32.ActiveCfg = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|Win32.Build.0 = Release Static|Win32 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|x64.ActiveCfg = Release Static|x64 - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91}.Release Static|x64.Build.0 = Release Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug DLL|Any CPU.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug DLL|Mixed Platforms.Build.0 = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug DLL|Win32.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug DLL|x64.ActiveCfg = Debug Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Any CPU.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Any CPU.Build.0 = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|Win32.Build.0 = Debug Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|x64.ActiveCfg = Debug Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Debug Static|x64.Build.0 = Debug Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release DLL|Any CPU.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release DLL|Mixed Platforms.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release DLL|Mixed Platforms.Build.0 = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release DLL|Win32.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release DLL|x64.ActiveCfg = Release Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Any CPU.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Any CPU.Build.0 = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Win32.ActiveCfg = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|Win32.Build.0 = Release Static|Win32 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|x64.ActiveCfg = Release Static|x64 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF}.Release Static|x64.Build.0 = Release Static|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Any CPU.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Any CPU.Build.0 = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|x64.ActiveCfg = Debug DLL|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug DLL|x64.Build.0 = Debug DLL|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug Static|Any CPU.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug Static|Mixed Platforms.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug Static|Mixed Platforms.Build.0 = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug Static|Win32.ActiveCfg = Debug DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Debug Static|x64.ActiveCfg = Debug DLL|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Any CPU.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Any CPU.Build.0 = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|x64.ActiveCfg = Release DLL|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release DLL|x64.Build.0 = Release DLL|x64 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release Static|Any CPU.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release Static|Mixed Platforms.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release Static|Mixed Platforms.Build.0 = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release Static|Win32.ActiveCfg = Release DLL|Win32 - {B405983E-B929-5BCF-8CC8-03CF34796A23}.Release Static|x64.ActiveCfg = Release DLL|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj b/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj deleted file mode 100644 index 852000547..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj +++ /dev/null @@ -1,238 +0,0 @@ - - - - - Debug Static - Win32 - - - Debug Static - x64 - - - Release Static - Win32 - - - Release Static - x64 - - - - example1 - {A1DCD664-8803-54E2-B35F-84D96B9CA6DF} - - - - Application - false - Unicode - v120 - - - Application - false - v120 - Unicode - - - Application - Unicode - v120 - - - Application - v120 - Unicode - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\samples\example1\ - obj\vc_static_rel\example1\ - false - true - ..\..\samples\example1\ - obj\vc_static_dbg\example1\ - true - true - ..\..\samples\example1\ - obj\vc_static_rel\example1\ - false - ..\..\samples\example1\ - obj\vc_static_dbg\example1\ - true - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - WIN32;_CONSOLE;NDEBUG;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - MaxSpeed - AnySuitable - true - Speed - true - true - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_CONSOLE;NDEBUG;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - obj\vc_static_rel\example1\ - ..\..\samples\example1\example1.pdb - TurnOffAllWarnings - true - - - - - _CONSOLE;NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - ..\..\lib\muparser32.lib;%(AdditionalDependencies) - ..\..\samples\example1\example1.exe - true - ..\..\lib;%(AdditionalLibraryDirectories) - ..\..\samples\example1\example1.pdb - Console - MachineX86 - - - true - ..\..\samples\example1\muparser_example1.bsc - - - - - WIN32;_CONSOLE;_DEBUG;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_CONSOLE;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - Sync - EnableFastChecks - MultiThreadedDebugDLL - true - true - obj\vc_static_dbg\example1\ - ..\..\samples\example1\example1.pdb - Level4 - true - ProgramDatabase - - - _CONSOLE;_DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - ..\..\lib\muparserd32.lib;%(AdditionalDependencies) - ..\..\samples\example1\example1.exe - true - ..\..\lib;%(AdditionalLibraryDirectories) - true - ..\..\samples\example1\example1.pdb - Console - MachineX86 - - - true - ..\..\samples\example1\muparser_example1.bsc - - - - - MaxSpeed - AnySuitable - true - Speed - true - true - ..\..\include;%(AdditionalIncludeDirectories) - _CONSOLE;NDEBUG;%(PreprocessorDefinitions) - MultiThreadedDLL - obj\vc_static_rel\example1\ - ..\..\samples\example1\example1.pdb - TurnOffAllWarnings - - - ..\..\lib\muparser64.lib;%(AdditionalDependencies) - ..\..\samples\example1\example1.exe - ..\..\lib;%(AdditionalLibraryDirectories) - Console - - - - - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - _CONSOLE;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - NotSet - obj\vc_static_dbg\example1\ - ..\..\samples\example1\example1.pdb - Level4 - ProgramDatabase - - - ..\..\lib\muparserd64.lib;%(AdditionalDependencies) - ..\..\samples\example1\example1.exe - ..\..\lib;%(AdditionalLibraryDirectories) - false - true - ..\..\samples\example1\example1.pdb - Console - NotSet - - - - - - - - {2a1f639a-7642-57cc-bf97-3ec5b5c89d91} - false - - - - - - \ No newline at end of file diff --git a/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj.filters b/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj.filters deleted file mode 100644 index 036d03381..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_example1.vcxproj.filters +++ /dev/null @@ -1,14 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - Source Files - - - \ No newline at end of file diff --git a/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj b/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj deleted file mode 100644 index c8c7e914d..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj +++ /dev/null @@ -1,208 +0,0 @@ - - - - - Debug DLL - Win32 - - - Debug DLL - x64 - - - Release DLL - Win32 - - - Release DLL - x64 - - - - example2 - {B405983E-B929-5BCF-8CC8-03CF34796A23} - - - - Application - false - v120 - Unicode - - - Application - false - v120 - Unicode - - - Application - v120 - - - Application - v120 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\samples\example2\ - obj\vc_shared_rel\example2\ - false - true - ..\..\samples\example2\ - obj\vc_shared_rel\example2\ - ..\..\samples\example2\ - obj\vc_shared_dbg\example2\ - true - true - ..\..\samples\example2\ - obj\vc_shared_dbg\example2\ - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - WIN32;_CONSOLE;NDEBUG;USINGDLL;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - MaxSpeed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_CONSOLE;NDEBUG;USINGDLL;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - obj\vc_shared_rel\example2\ - ..\..\samples\example2\example2.pdb - TurnOffAllWarnings - true - - - - - _CONSOLE;NDEBUG;USINGDLL;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - ..\..\lib\muparser32.lib;%(AdditionalDependencies) - ..\..\samples\example2\example2.exe - true - ..\..\lib;%(AdditionalLibraryDirectories) - ..\..\samples\example2\example2.pdb - Console - MachineX86 - - - true - ..\..\samples\example2\muparser_example2.bsc - - - - - MaxSpeed - AnySuitable - true - Speed - true - ..\..\include;%(AdditionalIncludeDirectories) - MultiThreadedDLL - - - ..\..\lib\muparser64.lib;%(AdditionalDependencies) - ..\..\samples\example2\example2.exe - - - - - WIN32;_CONSOLE;_DEBUG;USINGDLL;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_CONSOLE;_DEBUG;USINGDLL;%(PreprocessorDefinitions) - Sync - EnableFastChecks - MultiThreadedDebugDLL - true - true - obj\vc_shared_dbg\example2\ - ..\..\samples\example2\example2.pdb - Level4 - true - ProgramDatabase - - - _CONSOLE;_DEBUG;USINGDLL;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - ..\..\lib\muparserd32.lib;%(AdditionalDependencies) - ..\..\samples\example2\example2.exe - true - ..\..\lib;%(AdditionalLibraryDirectories) - true - ..\..\samples\example2\example2.pdb - Console - MachineX86 - - - true - ..\..\samples\example2\muparser_example2.bsc - - - - - ..\..\include;%(AdditionalIncludeDirectories) - MultiThreadedDebugDLL - - - ..\..\lib\muparserd64.lib;%(AdditionalDependencies) - ..\..\samples\example2\example2.exe - - - - - - - - {2a1f639a-7642-57cc-bf97-3ec5b5c89d91} - false - - - - - - \ No newline at end of file diff --git a/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj.filters b/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj.filters deleted file mode 100644 index 72e09fc27..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_example2.vcxproj.filters +++ /dev/null @@ -1,14 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - Source Files - - - \ No newline at end of file diff --git a/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj b/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj deleted file mode 100644 index 3b859cf8d..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj +++ /dev/null @@ -1,411 +0,0 @@ - - - - - Debug DLL - Win32 - - - Debug DLL - x64 - - - Debug Static - Win32 - - - Debug Static - x64 - - - Release DLL - Win32 - - - Release DLL - x64 - - - Release Static - Win32 - - - Release Static - x64 - - - - muparser - {2A1F639A-7642-57CC-BF97-3EC5B5C89D91} - muParser - - - - DynamicLibrary - false - v120 - Unicode - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - v120 - Unicode - - - StaticLibrary - false - v120 - Unicode - - - DynamicLibrary - v120 - - - StaticLibrary - Unicode - v120 - - - DynamicLibrary - v120 - - - StaticLibrary - v120 - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\lib\ - obj\vc_static_rel\muParser\ - ..\..\lib\ - obj\vc_shared_rel\muParser\ - false - true - ..\..\lib\ - obj\vc_static_dbg\muParser\ - ..\..\lib\ - obj\vc_shared_dbg\muParser\ - true - true - ..\..\lib\ - obj\vc_static_rel\muParser\ - ..\..\lib\ - obj\vc_shared_rel\muParser\ - ..\..\lib\ - obj\vc_static_dbg\muParser\ - ..\..\lib\ - obj\vc_shared_dbg\muParser\ - true - true - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - WIN32;_LIB;NDEBUG;_WIN32;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - MaxSpeed - AnySuitable - true - Speed - true - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_LIB;NDEBUG;_WIN32;MUP_USE_OPENMP;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - obj\vc_static_rel\muParser\ - ..\..\lib\muparser.pdb - TurnOffAllWarnings - true - - - - - NDEBUG;_WIN32;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - ..\..\lib\muparser32.lib - true - - - true - ..\..\lib\muparser_muParser.bsc - - - - - WIN32;_USRDLL;DLL_EXPORTS;NDEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - MaxSpeed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_USRDLL;DLL_EXPORTS;NDEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;MUP_USE_OPENMP;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - true - obj\vc_shared_rel\muParser\ - ..\..\lib\muparser32.pdb - TurnOffAllWarnings - true - - - - - NDEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - %(AdditionalDependencies) - ..\..\lib\muparser32.dll - true - %(AdditionalLibraryDirectories) - ..\..\lib\muparser.pdb - ..\..\lib\muparser32.lib - MachineX86 - - - true - ..\..\lib\muparser_muParser.bsc - - - - - WIN32;_LIB;_DEBUG;_WIN32;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_LIB;_DEBUG;_WIN32;MUP_USE_OPENMP;%(PreprocessorDefinitions) - Sync - EnableFastChecks - true - MultiThreadedDebugDLL - true - true - obj\vc_static_dbg\muParser\ - ..\..\lib\muparserd.pdb - Level4 - true - ProgramDatabase - - - _DEBUG;_WIN32;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - ..\..\lib\muparserd32.lib - true - - - true - ..\..\lib\muparser_muParser.bsc - - - - - WIN32;_USRDLL;DLL_EXPORTS;_DEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;%(PreprocessorDefinitions) - ..\..\include;%(AdditionalIncludeDirectories) - - - /MP %(AdditionalOptions) - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_USRDLL;DLL_EXPORTS;_DEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;_CRT_SECURE_NO_WARNINGS;MUP_USE_OPENMP;%(PreprocessorDefinitions) - Sync - EnableFastChecks - MultiThreadedDebugDLL - true - true - true - obj\vc_shared_dbg\muParser\ - ..\..\lib\muparserd32.pdb - Level4 - true - ProgramDatabase - - - _DEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_WIN32;%(PreprocessorDefinitions) - 0x0409 - ..\..\include;%(AdditionalIncludeDirectories) - - - %(AdditionalOptions) - %(AdditionalDependencies) - ..\..\lib\muparserd32.dll - true - %(AdditionalLibraryDirectories) - true - ..\..\lib\muparserd32.pdb - ..\..\lib\muparserd32.lib - MachineX86 - - - true - ..\..\lib\muparser_muParser.bsc - - - - - MaxSpeed - AnySuitable - true - Speed - true - true - ..\..\include;%(AdditionalIncludeDirectories) - _LIB;NDEBUG;%(PreprocessorDefinitions) - MultiThreadedDLL - - - ..\..\lib\muparser64.lib - - - - - ..\..\include;%(AdditionalIncludeDirectories) - _USRDLL;DLL_EXPORTS;NDEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;MUP_USE_OPENMP;%(PreprocessorDefinitions) - MultiThreadedDLL - obj\vc_shared_rel\muParser\ - ..\..\lib\muparser64.pdb - TurnOffAllWarnings - - - ..\..\lib\muparser64.dll - ..\..\lib\muparser64.lib - - - - - ..\..\include;%(AdditionalIncludeDirectories) - _LIB;_DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebugDLL - Level4 - ProgramDatabase - Disabled - - - ..\..\lib\muparserd64.lib - - - - - ..\..\include;%(AdditionalIncludeDirectories) - _USRDLL;DLL_EXPORTS;_DEBUG;MUPARSER_DLL;MUPARSERLIB_EXPORTS;_CRT_SECURE_NO_WARNINGS;MUP_USE_OPENMP;%(PreprocessorDefinitions) - MultiThreadedDebugDLL - obj\vc_shared_dbg\muParser\ - ..\..\lib\muparserd64.pdb - Level4 - ProgramDatabase - - - ..\..\lib\muparserd64.dll - true - ..\..\lib\muparserd64.pdb - ..\..\lib\muparserd64.lib - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj.filters b/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj.filters deleted file mode 100644 index aef656e7e..000000000 --- a/src/external/muparser_v225/build/msvc2013/muparser_muParser.vcxproj.filters +++ /dev/null @@ -1,86 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/src/external/muparser_v225/configure b/src/external/muparser_v225/configure deleted file mode 100644 index 1a16abdc2..000000000 --- a/src/external/muparser_v225/configure +++ /dev/null @@ -1,8354 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for muparser 2.2.4. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: muparser@beltoforion.de about your system, including -$0: any error possibly output before this message. Then -$0: install a modern shell, or manually run the script -$0: under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='muparser' -PACKAGE_TARNAME='muparser' -PACKAGE_VERSION='2.2.4' -PACKAGE_STRING='muparser 2.2.4' -PACKAGE_BUGREPORT='muparser@beltoforion.de' -PACKAGE_URL='' - -ac_subst_vars='LTLIBOBJS -LIBOBJS -COND_WINDOWS_IMPLIB_1 -COND_USE_SOVERSOLARIS_1 -COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1 -COND_USE_SOVERSION_0 -COND_USE_SOVERLINUX_1 -COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1 -COND_USE_SOTWOSYMLINKS_1 -COND_SHARED_1 -COND_SHARED_0 -COND_SAMPLES_1 -COND_PLATFORM_OS2_1 -COND_PLATFORM_MAC_1 -COND_PLATFORM_MAC_0 -COND_PLATFORM_MACOSX_1_USE_SOVERSION_1 -COND_PLATFORM_MACOSX_1 -COND_PLATFORM_MACOSX_0_USE_SOVERSION_1 -COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1 -COND_DEPS_TRACKING_1 -COND_DEPS_TRACKING_0 -COND_DEBUG_1 -COND_DEBUG_0 -OBJCXXFLAGS -SETFILE -REZ -WINDRES -BK_DEPS -DEPS_TRACKING -SONAME_FLAG -USE_SOTWOSYMLINKS -USE_MACVERSION -USE_SOVERCYGWIN -USE_SOVERSOLARIS -USE_SOVERLINUX -USE_SOVERSION -WINDOWS_IMPLIB -PIC_FLAG -SHARED_LD_MODULE_CXX -SHARED_LD_MODULE_CC -SHARED_LD_CXX -SHARED_LD_CC -AIX_CXX_LD -dlldir -DLLPREFIX_MODULE -DLLPREFIX -LIBEXT -LIBPREFIX -DLLIMP_SUFFIX -SO_SUFFIX_MODULE -SO_SUFFIX -PLATFORM_BEOS -PLATFORM_OS2 -PLATFORM_MACOSX -PLATFORM_MACOS -PLATFORM_MAC -PLATFORM_MSDOS -PLATFORM_WIN32 -PLATFORM_UNIX -IF_GNU_MAKE -LDFLAGS_GUI -INSTALL_DIR -NM -STRIP -AROPTIONS -AR -MAKE_SET -SET_MAKE -CXXCPP -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -RANLIB -LN_S -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -AWK -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_debug -enable_shared -enable_samples -enable_omf -enable_dependency_tracking -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures muparser 2.2.4 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/muparser] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of muparser 2.2.4:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-debug Builds in debug mode - --enable-shared Builds in shared mode - --enable-samples Builds the library samples, too - --enable-omf use OMF object format (OS/2) - --disable-dependency-tracking - don't use dependency tracking even if the compiler - can - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -muparser configure 2.2.4 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by muparser $as_me 2.2.4, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -ac_aux_dir= -for ac_dir in build/autoconf "$srcdir"/build/autoconf; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build/autoconf \"$srcdir\"/build/autoconf" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -# some helpers - - - - - - - - - - - - - - - - - - - - - -## CONFIGURE CHECKS -##################################################################### - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -# We want to inhibit AC_PROG_C* macros adding the default "-g -O2" flags. -# To do so, make sure that the variables are not unset - it is ok if they are -# empty. However, their value MUST be retained, since one may have -# called ./configure CFLAGS=-foobar. -CFLAGS="$CFLAGS" -CPPFLAGS="$CPPFLAGS" -CXXFLAGS="$CXXFLAGS" - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - default="no" - if [ -z "$default" ]; then - default="no" - fi - - # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; -else - enableval="$default" -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the --enable-debug option" >&5 -$as_echo_n "checking for the --enable-debug option... " >&6; } - if [ "x$enableval" = "xyes" ]; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - DEBUG=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - DEBUG=0 - fi - - - if [ "x$DEBUG" = "x1" ]; then - - my_CXXFLAGS="$my_CXXFLAGS -g -O0 -Wall -Wundef -Wno-ctor-dtor-privacy" - my_CFLAGS="$my_CFLAGS -g -O0 -Wall -Wundef" - else - my_CXXFLAGS="$my_CXXFLAGS -O2" - my_CFLAGS="$my_CFLAGS -O2" - fi - # User-supplied CXXFLAGS must always take precedence. - # This still sucks because using `make CFLAGS=-foobar` kills - # the project-supplied flags again. - CXXFLAGS="$my_CXXFLAGS $CXXFLAGS" - CFLAGS="$my_CFLAGS $CFLAGS" - - - default="yes" - if [ -z "$default" ]; then - default="no" - fi - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; -else - enableval="$default" -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the --enable-shared option" >&5 -$as_echo_n "checking for the --enable-shared option... " >&6; } - if [ "x$enableval" = "xyes" ]; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SHARED=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SHARED=0 - fi - - - -# Check whether --enable-samples was given. -if test "${enable_samples+set}" = set; then : - enableval=$enable_samples; -else - enableval="yes" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the --enable-samples option" >&5 -$as_echo_n "checking for the --enable-samples option... " >&6; } - if [ "x$enableval" = "xyes" ]; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SAMPLES=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SAMPLES=0 - fi - - -as_dir=lib; as_fn_mkdir_p -as_dir=samples/example1; as_fn_mkdir_p - - - - - - - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Intel C compiler" >&5 -$as_echo_n "checking whether we are using the Intel C compiler... " >&6; } -if ${bakefile_cv_c_compiler___INTEL_COMPILER+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___INTEL_COMPILER=yes -else - bakefile_cv_c_compiler___INTEL_COMPILER=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___INTEL_COMPILER" >&5 -$as_echo "$bakefile_cv_c_compiler___INTEL_COMPILER" >&6; } - if test "x$bakefile_cv_c_compiler___INTEL_COMPILER" = "xyes"; then - :; INTELCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - if test "$INTELCC" = "yes"; then - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using Intel C compiler v8 or later" >&5 -$as_echo_n "checking whether we are using Intel C compiler v8 or later... " >&6; } -if ${bakefile_cv_c_compiler___INTEL_COMPILER_lt_800+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER || __INTEL_COMPILER < 800 - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___INTEL_COMPILER_lt_800=yes -else - bakefile_cv_c_compiler___INTEL_COMPILER_lt_800=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___INTEL_COMPILER_lt_800" >&5 -$as_echo "$bakefile_cv_c_compiler___INTEL_COMPILER_lt_800" >&6; } - if test "x$bakefile_cv_c_compiler___INTEL_COMPILER_lt_800" = "xyes"; then - :; INTELCC8=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using Intel C compiler v10 or later" >&5 -$as_echo_n "checking whether we are using Intel C compiler v10 or later... " >&6; } -if ${bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER || __INTEL_COMPILER < 1000 - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000=yes -else - bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000" >&5 -$as_echo "$bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000" >&6; } - if test "x$bakefile_cv_c_compiler___INTEL_COMPILER_lt_1000" = "xyes"; then - :; INTELCC10=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - - if test "x$GCC" != "xyes"; then - if test "xCC" = "xC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler requires -ext o" >&5 -$as_echo_n "checking if the C++ compiler requires -ext o... " >&6; } -if ${bakefile_cv_cxx_exto+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest.$ac_ext.o -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in `(ls conftest.* 2>/dev/null)`; do - case $ac_file in - conftest.$ac_ext.o) - bakefile_cv_cxx_exto="-ext o" - ;; - *) - ;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot figure out if compiler needs -ext o: cannot compile -See \`config.log' for more details" "$LINENO" 5; } - -fi -rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_exto" >&5 -$as_echo "$bakefile_cv_cxx_exto" >&6; } -if test "x$bakefile_cv_cxx_exto" '!=' "x"; then - if test "cxx" = "c"; then - CFLAGS="$bakefile_cv_cxx_exto $CFLAGS" - fi - if test "cxx" = "cxx"; then - CXXFLAGS="$bakefile_cv_cxx_exto $CXXFLAGS" - fi -fi - - if test "x$bakefile_cv_c_exto" '!=' "x"; then - unset ac_cv_prog_cc_g - ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi - fi - fi - - case `uname -s` in - AIX*) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the IBM xlC C compiler" >&5 -$as_echo_n "checking whether we are using the IBM xlC C compiler... " >&6; } -if ${bakefile_cv_c_compiler___xlC__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __xlC__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___xlC__=yes -else - bakefile_cv_c_compiler___xlC__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___xlC__" >&5 -$as_echo "$bakefile_cv_c_compiler___xlC__" >&6; } - if test "x$bakefile_cv_c_compiler___xlC__" = "xyes"; then - :; XLCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - Darwin) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Metrowerks C compiler" >&5 -$as_echo_n "checking whether we are using the Metrowerks C compiler... " >&6; } -if ${bakefile_cv_c_compiler___MWERKS__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __MWERKS__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___MWERKS__=yes -else - bakefile_cv_c_compiler___MWERKS__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___MWERKS__" >&5 -$as_echo "$bakefile_cv_c_compiler___MWERKS__" >&6; } - if test "x$bakefile_cv_c_compiler___MWERKS__" = "xyes"; then - :; MWCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - if test "$MWCC" != "yes"; then - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the IBM xlC C compiler" >&5 -$as_echo_n "checking whether we are using the IBM xlC C compiler... " >&6; } -if ${bakefile_cv_c_compiler___xlC__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __xlC__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___xlC__=yes -else - bakefile_cv_c_compiler___xlC__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___xlC__" >&5 -$as_echo "$bakefile_cv_c_compiler___xlC__" >&6; } - if test "x$bakefile_cv_c_compiler___xlC__" = "xyes"; then - :; XLCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - ;; - - IRIX*) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the SGI C compiler" >&5 -$as_echo_n "checking whether we are using the SGI C compiler... " >&6; } -if ${bakefile_cv_c_compiler__SGI_COMPILER_VERSION+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef _SGI_COMPILER_VERSION - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler__SGI_COMPILER_VERSION=yes -else - bakefile_cv_c_compiler__SGI_COMPILER_VERSION=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler__SGI_COMPILER_VERSION" >&5 -$as_echo "$bakefile_cv_c_compiler__SGI_COMPILER_VERSION" >&6; } - if test "x$bakefile_cv_c_compiler__SGI_COMPILER_VERSION" = "xyes"; then - :; SGICC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - Linux*) - if test "$INTELCC" != "yes"; then - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Sun C compiler" >&5 -$as_echo_n "checking whether we are using the Sun C compiler... " >&6; } -if ${bakefile_cv_c_compiler___SUNPRO_C+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __SUNPRO_C - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___SUNPRO_C=yes -else - bakefile_cv_c_compiler___SUNPRO_C=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___SUNPRO_C" >&5 -$as_echo "$bakefile_cv_c_compiler___SUNPRO_C" >&6; } - if test "x$bakefile_cv_c_compiler___SUNPRO_C" = "xyes"; then - :; SUNCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - ;; - - HP-UX*) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the HP C compiler" >&5 -$as_echo_n "checking whether we are using the HP C compiler... " >&6; } -if ${bakefile_cv_c_compiler___HP_cc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __HP_cc - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___HP_cc=yes -else - bakefile_cv_c_compiler___HP_cc=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___HP_cc" >&5 -$as_echo "$bakefile_cv_c_compiler___HP_cc" >&6; } - if test "x$bakefile_cv_c_compiler___HP_cc" = "xyes"; then - :; HPCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - OSF1) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Compaq C compiler" >&5 -$as_echo_n "checking whether we are using the Compaq C compiler... " >&6; } -if ${bakefile_cv_c_compiler___DECC+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __DECC - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___DECC=yes -else - bakefile_cv_c_compiler___DECC=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___DECC" >&5 -$as_echo "$bakefile_cv_c_compiler___DECC" >&6; } - if test "x$bakefile_cv_c_compiler___DECC" = "xyes"; then - :; COMPAQCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - SunOS) - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Sun C compiler" >&5 -$as_echo_n "checking whether we are using the Sun C compiler... " >&6; } -if ${bakefile_cv_c_compiler___SUNPRO_C+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __SUNPRO_C - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bakefile_cv_c_compiler___SUNPRO_C=yes -else - bakefile_cv_c_compiler___SUNPRO_C=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_c_compiler___SUNPRO_C" >&5 -$as_echo "$bakefile_cv_c_compiler___SUNPRO_C" >&6; } - if test "x$bakefile_cv_c_compiler___SUNPRO_C" = "xyes"; then - :; SUNCC=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - esac - fi - - - - - - - - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Intel C++ compiler" >&5 -$as_echo_n "checking whether we are using the Intel C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___INTEL_COMPILER+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___INTEL_COMPILER=yes -else - bakefile_cv_cxx_compiler___INTEL_COMPILER=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___INTEL_COMPILER" >&5 -$as_echo "$bakefile_cv_cxx_compiler___INTEL_COMPILER" >&6; } - if test "x$bakefile_cv_cxx_compiler___INTEL_COMPILER" = "xyes"; then - :; INTELCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - if test "$INTELCXX" = "yes"; then - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using Intel C++ compiler v8 or later" >&5 -$as_echo_n "checking whether we are using Intel C++ compiler v8 or later... " >&6; } -if ${bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER || __INTEL_COMPILER < 800 - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800=yes -else - bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800" >&5 -$as_echo "$bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800" >&6; } - if test "x$bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_800" = "xyes"; then - :; INTELCXX8=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using Intel C++ compiler v10 or later" >&5 -$as_echo_n "checking whether we are using Intel C++ compiler v10 or later... " >&6; } -if ${bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __INTEL_COMPILER || __INTEL_COMPILER < 1000 - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000=yes -else - bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000" >&5 -$as_echo "$bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000" >&6; } - if test "x$bakefile_cv_cxx_compiler___INTEL_COMPILER_lt_1000" = "xyes"; then - :; INTELCXX10=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - - if test "x$GCXX" != "xyes"; then - if test "xCXX" = "xC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler requires -ext o" >&5 -$as_echo_n "checking if the C++ compiler requires -ext o... " >&6; } -if ${bakefile_cv_cxx_exto+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest.$ac_ext.o -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in `(ls conftest.* 2>/dev/null)`; do - case $ac_file in - conftest.$ac_ext.o) - bakefile_cv_cxx_exto="-ext o" - ;; - *) - ;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot figure out if compiler needs -ext o: cannot compile -See \`config.log' for more details" "$LINENO" 5; } - -fi -rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_exto" >&5 -$as_echo "$bakefile_cv_cxx_exto" >&6; } -if test "x$bakefile_cv_cxx_exto" '!=' "x"; then - if test "cxx" = "c"; then - CFLAGS="$bakefile_cv_cxx_exto $CFLAGS" - fi - if test "cxx" = "cxx"; then - CXXFLAGS="$bakefile_cv_cxx_exto $CXXFLAGS" - fi -fi - - if test "x$bakefile_cv_c_exto" '!=' "x"; then - unset ac_cv_prog_cc_g - ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi - fi - fi - - case `uname -s` in - AIX*) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the IBM xlC C++ compiler" >&5 -$as_echo_n "checking whether we are using the IBM xlC C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___xlC__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __xlC__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___xlC__=yes -else - bakefile_cv_cxx_compiler___xlC__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___xlC__" >&5 -$as_echo "$bakefile_cv_cxx_compiler___xlC__" >&6; } - if test "x$bakefile_cv_cxx_compiler___xlC__" = "xyes"; then - :; XLCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - Darwin) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Metrowerks C++ compiler" >&5 -$as_echo_n "checking whether we are using the Metrowerks C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___MWERKS__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __MWERKS__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___MWERKS__=yes -else - bakefile_cv_cxx_compiler___MWERKS__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___MWERKS__" >&5 -$as_echo "$bakefile_cv_cxx_compiler___MWERKS__" >&6; } - if test "x$bakefile_cv_cxx_compiler___MWERKS__" = "xyes"; then - :; MWCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - if test "$MWCXX" != "yes"; then - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the IBM xlC C++ compiler" >&5 -$as_echo_n "checking whether we are using the IBM xlC C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___xlC__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __xlC__ - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___xlC__=yes -else - bakefile_cv_cxx_compiler___xlC__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___xlC__" >&5 -$as_echo "$bakefile_cv_cxx_compiler___xlC__" >&6; } - if test "x$bakefile_cv_cxx_compiler___xlC__" = "xyes"; then - :; XLCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - ;; - - IRIX*) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the SGI C++ compiler" >&5 -$as_echo_n "checking whether we are using the SGI C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef _SGI_COMPILER_VERSION - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION=yes -else - bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION" >&5 -$as_echo "$bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION" >&6; } - if test "x$bakefile_cv_cxx_compiler__SGI_COMPILER_VERSION" = "xyes"; then - :; SGICXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - Linux*) - if test "$INTELCXX" != "yes"; then - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Sun C++ compiler" >&5 -$as_echo_n "checking whether we are using the Sun C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___SUNPRO_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __SUNPRO_CC - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___SUNPRO_CC=yes -else - bakefile_cv_cxx_compiler___SUNPRO_CC=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___SUNPRO_CC" >&5 -$as_echo "$bakefile_cv_cxx_compiler___SUNPRO_CC" >&6; } - if test "x$bakefile_cv_cxx_compiler___SUNPRO_CC" = "xyes"; then - :; SUNCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - fi - ;; - - HP-UX*) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the HP C++ compiler" >&5 -$as_echo_n "checking whether we are using the HP C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___HP_aCC+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __HP_aCC - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___HP_aCC=yes -else - bakefile_cv_cxx_compiler___HP_aCC=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___HP_aCC" >&5 -$as_echo "$bakefile_cv_cxx_compiler___HP_aCC" >&6; } - if test "x$bakefile_cv_cxx_compiler___HP_aCC" = "xyes"; then - :; HPCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - OSF1) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Compaq C++ compiler" >&5 -$as_echo_n "checking whether we are using the Compaq C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___DECCXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __DECCXX - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___DECCXX=yes -else - bakefile_cv_cxx_compiler___DECCXX=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___DECCXX" >&5 -$as_echo "$bakefile_cv_cxx_compiler___DECCXX" >&6; } - if test "x$bakefile_cv_cxx_compiler___DECCXX" = "xyes"; then - :; COMPAQCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - - SunOS) - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the Sun C++ compiler" >&5 -$as_echo_n "checking whether we are using the Sun C++ compiler... " >&6; } -if ${bakefile_cv_cxx_compiler___SUNPRO_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #ifndef __SUNPRO_CC - choke me - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - bakefile_cv_cxx_compiler___SUNPRO_CC=yes -else - bakefile_cv_cxx_compiler___SUNPRO_CC=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_cxx_compiler___SUNPRO_CC" >&5 -$as_echo "$bakefile_cv_cxx_compiler___SUNPRO_CC" >&6; } - if test "x$bakefile_cv_cxx_compiler___SUNPRO_CC" = "xyes"; then - :; SUNCXX=yes - else - :; - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - ;; - esac - fi - - - - - - - - - if test "x$BAKEFILE_HOST" = "x"; then - if test "x${host}" = "x" ; then - as_fn_error $? "You must call the autoconf \"CANONICAL_HOST\" macro in your configure.ac (or .in) file." "$LINENO" 5 - fi - - BAKEFILE_HOST="${host}" - fi - - if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - - - - if test "x$SUNCXX" = "xyes"; then - AR=$CXX - AROPTIONS="-xar -o" - - elif test "x$SGICC" = "xyes"; then - AR=$CXX - AROPTIONS="-ar -o" - - else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="ar" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - - AROPTIONS=rcu - fi - - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - ac_cv_prog_NM="$NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NM="${ac_tool_prefix}nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NM=$ac_cv_prog_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NM"; then - ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NM"; then - ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NM="nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NM=$ac_cv_prog_ac_ct_NM -if test -n "$ac_ct_NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 -$as_echo "$ac_ct_NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NM" = x; then - NM=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NM=$ac_ct_NM - fi -else - NM="$ac_cv_prog_NM" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to install directories" >&5 -$as_echo_n "checking for command to install directories... " >&6; } - INSTALL_TEST_DIR=acbftest$$ - $INSTALL -d $INSTALL_TEST_DIR > /dev/null 2>&1 - if test $? = 0 -a -d $INSTALL_TEST_DIR; then - rmdir $INSTALL_TEST_DIR - INSTALL_DIR='$(INSTALL) -d' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL -d" >&5 -$as_echo "$INSTALL -d" >&6; } - else - INSTALL_DIR="mkdir -p" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: mkdir -p" >&5 -$as_echo "mkdir -p" >&6; } - fi - - - LDFLAGS_GUI= - case ${BAKEFILE_HOST} in - *-*-cygwin* | *-*-mingw32* ) - LDFLAGS_GUI="-mwindows" - esac - - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if make is GNU make" >&5 -$as_echo_n "checking if make is GNU make... " >&6; } -if ${bakefile_cv_prog_makeisgnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - - if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null | - egrep -s GNU > /dev/null); then - bakefile_cv_prog_makeisgnu="yes" - else - bakefile_cv_prog_makeisgnu="no" - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_prog_makeisgnu" >&5 -$as_echo "$bakefile_cv_prog_makeisgnu" >&6; } - - if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then - IF_GNU_MAKE="" - else - IF_GNU_MAKE="#" - fi - - - - PLATFORM_UNIX=0 - PLATFORM_WIN32=0 - PLATFORM_MSDOS=0 - PLATFORM_MAC=0 - PLATFORM_MACOS=0 - PLATFORM_MACOSX=0 - PLATFORM_OS2=0 - PLATFORM_BEOS=0 - - if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then - case "${BAKEFILE_HOST}" in - *-*-mingw32* ) - PLATFORM_WIN32=1 - ;; - *-pc-msdosdjgpp ) - PLATFORM_MSDOS=1 - ;; - *-pc-os2_emx | *-pc-os2-emx ) - PLATFORM_OS2=1 - ;; - *-*-darwin* ) - PLATFORM_MAC=1 - PLATFORM_MACOSX=1 - ;; - *-*-beos* ) - PLATFORM_BEOS=1 - ;; - powerpc-apple-macos* ) - PLATFORM_MAC=1 - PLATFORM_MACOS=1 - ;; - * ) - PLATFORM_UNIX=1 - ;; - esac - else - case "$BAKEFILE_FORCE_PLATFORM" in - win32 ) - PLATFORM_WIN32=1 - ;; - msdos ) - PLATFORM_MSDOS=1 - ;; - os2 ) - PLATFORM_OS2=1 - ;; - darwin ) - PLATFORM_MAC=1 - PLATFORM_MACOSX=1 - ;; - unix ) - PLATFORM_UNIX=1 - ;; - beos ) - PLATFORM_BEOS=1 - ;; - * ) - as_fn_error $? "Unknown platform: $BAKEFILE_FORCE_PLATFORM" "$LINENO" 5 - ;; - esac - fi - - - - - - - - - - - - # Check whether --enable-omf was given. -if test "${enable_omf+set}" = set; then : - enableval=$enable_omf; bk_os2_use_omf="$enableval" -fi - - - case "${BAKEFILE_HOST}" in - *-*-darwin* ) - if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fno-common" - CXXFLAGS="$CXXFLAGS -fno-common" - fi - if test "x$XLCC" = "xyes"; then - CFLAGS="$CFLAGS -qnocommon" - CXXFLAGS="$CXXFLAGS -qnocommon" - fi - ;; - - *-pc-os2_emx | *-pc-os2-emx ) - if test "x$bk_os2_use_omf" = "xyes" ; then - AR=emxomfar - RANLIB=: - LDFLAGS="-Zomf $LDFLAGS" - CFLAGS="-Zomf $CFLAGS" - CXXFLAGS="-Zomf $CXXFLAGS" - OS2_LIBEXT="lib" - else - OS2_LIBEXT="a" - fi - ;; - - i*86-*-beos* ) - LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS" - ;; - esac - - - SO_SUFFIX="so" - SO_SUFFIX_MODULE="so" - EXEEXT="" - LIBPREFIX="lib" - LIBEXT=".a" - DLLPREFIX="lib" - DLLPREFIX_MODULE="" - DLLIMP_SUFFIX="" - dlldir="$libdir" - - case "${BAKEFILE_HOST}" in - ia64-hp-hpux* ) - ;; - *-hp-hpux* ) - SO_SUFFIX="sl" - SO_SUFFIX_MODULE="sl" - ;; - *-*-aix* ) - SO_SUFFIX="a" - SO_SUFFIX_MODULE="a" - ;; - *-*-cygwin* ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX="dll.a" - EXEEXT=".exe" - DLLPREFIX="cyg" - dlldir="$bindir" - ;; - *-*-mingw32* ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX="dll.a" - EXEEXT=".exe" - DLLPREFIX="" - dlldir="$bindir" - ;; - *-pc-msdosdjgpp ) - EXEEXT=".exe" - DLLPREFIX="" - dlldir="$bindir" - ;; - *-pc-os2_emx | *-pc-os2-emx ) - SO_SUFFIX="dll" - SO_SUFFIX_MODULE="dll" - DLLIMP_SUFFIX=$OS2_LIBEXT - EXEEXT=".exe" - DLLPREFIX="" - LIBPREFIX="" - LIBEXT=".$OS2_LIBEXT" - dlldir="$bindir" - ;; - *-*-darwin* ) - SO_SUFFIX="dylib" - SO_SUFFIX_MODULE="bundle" - ;; - esac - - if test "x$DLLIMP_SUFFIX" = "x" ; then - DLLIMP_SUFFIX="$SO_SUFFIX" - fi - - - - - - - - - - - - - PIC_FLAG="" - if test "x$GCC" = "xyes"; then - PIC_FLAG="-fPIC" - fi - - SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o" - SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o" - WINDOWS_IMPLIB=0 - - case "${BAKEFILE_HOST}" in - *-hp-hpux* ) - if test "x$GCC" != "xyes"; then - LDFLAGS="$LDFLAGS -L/usr/lib" - - SHARED_LD_CC="${CC} -b -o" - SHARED_LD_CXX="${CXX} -b -o" - PIC_FLAG="+Z" - fi - ;; - - *-*-linux* ) - if test "$INTELCC" = "yes" -a "$INTELCC8" != "yes"; then - PIC_FLAG="-KPIC" - elif test "x$SUNCXX" = "xyes"; then - SHARED_LD_CC="${CC} -G -o" - SHARED_LD_CXX="${CXX} -G -o" - PIC_FLAG="-KPIC" - fi - ;; - - *-*-solaris2* ) - if test "x$SUNCXX" = xyes ; then - SHARED_LD_CC="${CC} -G -o" - SHARED_LD_CXX="${CXX} -G -o" - PIC_FLAG="-KPIC" - fi - ;; - - *-*-darwin* ) - -D='$' -cat <shared-ld-sh -#!/bin/sh -#----------------------------------------------------------------------------- -#-- Name: distrib/mac/shared-ld-sh -#-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X -#-- Author: Gilles Depeyrot -#-- Copyright: (c) 2002 Gilles Depeyrot -#-- Licence: any use permitted -#----------------------------------------------------------------------------- - -verbose=0 -args="" -objects="" -linking_flag="-dynamiclib" -ldargs="-r -keep_private_externs -nostdlib" - -if test "x${D}CXX" = "x"; then - CXX="c++" -fi - -while test ${D}# -gt 0; do - case ${D}1 in - - -v) - verbose=1 - ;; - - -o|-compatibility_version|-current_version|-framework|-undefined|-install_name) - # collect these options and values - args="${D}{args} ${D}1 ${D}2" - shift - ;; - - -arch|-isysroot) - # collect these options and values - ldargs="${D}{ldargs} ${D}1 ${D}2" - shift - ;; - - -s|-Wl,*) - # collect these load args - ldargs="${D}{ldargs} ${D}1" - ;; - - -l*|-L*|-flat_namespace|-headerpad_max_install_names) - # collect these options - args="${D}{args} ${D}1" - ;; - - -dynamiclib|-bundle) - linking_flag="${D}1" - ;; - - -*) - echo "shared-ld: unhandled option '${D}1'" - exit 1 - ;; - - *.o | *.a | *.dylib) - # collect object files - objects="${D}{objects} ${D}1" - ;; - - *) - echo "shared-ld: unhandled argument '${D}1'" - exit 1 - ;; - - esac - shift -done - -status=0 - -# -# Link one module containing all the others -# -if test ${D}{verbose} = 1; then - echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o" -fi -${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o -status=${D}? - -# -# Link the shared library from the single module created, but only if the -# previous command didn't fail: -# -if test ${D}{status} = 0; then - if test ${D}{verbose} = 1; then - echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}" - fi - ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args} - status=${D}? -fi - -# -# Remove intermediate module -# -rm -f master.${D}${D}.o - -exit ${D}status -EOF - - chmod +x shared-ld-sh - - SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o" - SHARED_LD_MODULE_CXX="CXX=\"\$(CXX)\" $SHARED_LD_MODULE_CC" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc 3.1 or later" >&5 -$as_echo_n "checking for gcc 3.1 or later... " >&6; } -if ${bakefile_cv_gcc31+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - #if (__GNUC__ < 3) || \ - ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1)) - This is old gcc - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - - bakefile_cv_gcc31=yes - -else - - bakefile_cv_gcc31=no - - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bakefile_cv_gcc31" >&5 -$as_echo "$bakefile_cv_gcc31" >&6; } - if test "$bakefile_cv_gcc31" = "no"; then - SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o" - SHARED_LD_CXX="$SHARED_LD_CC" - else - SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o" - SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o" - fi - - if test "x$GCC" == "xyes"; then - PIC_FLAG="-dynamic -fPIC" - fi - if test "x$XLCC" = "xyes"; then - PIC_FLAG="-dynamic -DPIC" - fi - ;; - - *-*-aix* ) - if test "x$GCC" = "xyes"; then - PIC_FLAG="" - - case "${BAKEFILE_HOST}" in - *-*-aix5* ) - LD_EXPFULL="-Wl,-bexpfull" - ;; - esac - - SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o" - SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o" - else - # Extract the first word of "makeC++SharedLib", so it can be a program name with args. -set dummy makeC++SharedLib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AIX_CXX_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AIX_CXX_LD"; then - ac_cv_prog_AIX_CXX_LD="$AIX_CXX_LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AIX_CXX_LD="makeC++SharedLib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_AIX_CXX_LD" && ac_cv_prog_AIX_CXX_LD="/usr/lpp/xlC/bin/makeC++SharedLib" -fi -fi -AIX_CXX_LD=$ac_cv_prog_AIX_CXX_LD -if test -n "$AIX_CXX_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AIX_CXX_LD" >&5 -$as_echo "$AIX_CXX_LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - SHARED_LD_CC="$AIX_CC_LD -p 0 -o" - SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o" - fi - ;; - - *-*-beos* ) - SHARED_LD_CC="${LD} -nostart -o" - SHARED_LD_CXX="${LD} -nostart -o" - ;; - - *-*-irix* ) - if test "x$GCC" != "xyes"; then - PIC_FLAG="-KPIC" - fi - ;; - - *-*-cygwin* | *-*-mingw32* ) - PIC_FLAG="" - SHARED_LD_CC="\$(CC) -shared -o" - SHARED_LD_CXX="\$(CXX) -shared -o" - WINDOWS_IMPLIB=1 - ;; - - *-pc-os2_emx | *-pc-os2-emx ) - SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" - SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" - PIC_FLAG="" - -D='$' -cat <dllar.sh -#!/bin/sh -# -# dllar - a tool to build both a .dll and an .a file -# from a set of object (.o) files for EMX/OS2. -# -# Written by Andrew Zabolotny, bit@freya.etu.ru -# Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de -# -# This script will accept a set of files on the command line. -# All the public symbols from the .o files will be exported into -# a .DEF file, then linker will be run (through gcc) against them to -# build a shared library consisting of all given .o files. All libraries -# (.a) will be first decompressed into component .o files then act as -# described above. You can optionally give a description (-d "description") -# which will be put into .DLL. To see the list of accepted options (as well -# as command-line format) simply run this program without options. The .DLL -# is built to be imported by name (there is no guarantee that new versions -# of the library you build will have same ordinals for same symbols). -# -# dllar is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# dllar is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with dllar; see the file COPYING. If not, write to the Free -# Software Foundation, 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# To successfuly run this program you will need: -# - Current drive should have LFN support (HPFS, ext2, network, etc) -# (Sometimes dllar generates filenames which won't fit 8.3 scheme) -# - gcc -# (used to build the .dll) -# - emxexp -# (used to create .def file from .o files) -# - emximp -# (used to create .a file from .def file) -# - GNU text utilites (cat, sort, uniq) -# used to process emxexp output -# - GNU file utilities (mv, rm) -# - GNU sed -# - lxlite (optional, see flag below) -# (used for general .dll cleanup) -# - -flag_USE_LXLITE=1; - -# -# helper functions -# basnam, variant of basename, which does _not_ remove the path, _iff_ -# second argument (suffix to remove) is given -basnam(){ - case ${D}# in - 1) - echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//' - ;; - 2) - echo ${D}1 | sed 's/'${D}2'${D}//' - ;; - *) - echo "error in basnam ${D}*" - exit 8 - ;; - esac -} - -# Cleanup temporary files and output -CleanUp() { - cd ${D}curDir - for i in ${D}inputFiles ; do - case ${D}i in - *!) - rm -rf \`basnam ${D}i !\` - ;; - *) - ;; - esac - done - - # Kill result in case of failure as there is just to many stupid make/nmake - # things out there which doesn't do this. - if [ ${D}# -eq 0 ]; then - rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile - fi -} - -# Print usage and exit script with rc=1. -PrintHelp() { - echo 'Usage: dllar.sh [-o[utput] output_file] [-i[mport] importlib_name]' - echo ' [-name-mangler-script script.sh]' - echo ' [-d[escription] "dll descrption"] [-cc "CC"] [-f[lags] "CFLAGS"]' - echo ' [-ord[inals]] -ex[clude] "symbol(s)"' - echo ' [-libf[lags] "{INIT|TERM}{GLOBAL|INSTANCE}"] [-nocrt[dll]] [-nolxl[ite]]' - echo ' [*.o] [*.a]' - echo '*> "output_file" should have no extension.' - echo ' If it has the .o, .a or .dll extension, it is automatically removed.' - echo ' The import library name is derived from this and is set to "name".a,' - echo ' unless overridden by -import' - echo '*> "importlib_name" should have no extension.' - echo ' If it has the .o, or .a extension, it is automatically removed.' - echo ' This name is used as the import library name and may be longer and' - echo ' more descriptive than the DLL name which has to follow the old ' - echo ' 8.3 convention of FAT.' - echo '*> "script.sh may be given to override the output_file name by a' - echo ' different name. It is mainly useful if the regular make process' - echo ' of some package does not take into account OS/2 restriction of' - echo ' DLL name lengths. It takes the importlib name as input and is' - echo ' supposed to procude a shorter name as output. The script should' - echo ' expect to get importlib_name without extension and should produce' - echo ' a (max.) 8 letter name without extension.' - echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)' - echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)' - echo ' These flags will be put at the start of GCC command line.' - echo '*> -ord[inals] tells dllar to export entries by ordinals. Be careful.' - echo '*> -ex[clude] defines symbols which will not be exported. You can define' - echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".' - echo ' If the last character of a symbol is "*", all symbols beginning' - echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).' - echo '*> -libf[lags] can be used to add INITGLOBAL/INITINSTANCE and/or' - echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.' - echo '*> -nocrt[dll] switch will disable linking the library against emx''s' - echo ' C runtime DLLs.' - echo '*> -nolxl[ite] switch will disable running lxlite on the resulting DLL.' - echo '*> All other switches (for example -L./ or -lmylib) will be passed' - echo ' unchanged to GCC at the end of command line.' - echo '*> If you create a DLL from a library and you do not specify -o,' - echo ' the basename for DLL and import library will be set to library name,' - echo ' the initial library will be renamed to 'name'_s.a (_s for static)' - echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial' - echo ' library will be renamed into gcc_s.a.' - echo '--------' - echo 'Example:' - echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord' - echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"' - CleanUp - exit 1 -} - -# Execute a command. -# If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script. -# @Uses Whatever CleanUp() uses. -doCommand() { - echo "${D}*" - eval ${D}* - rcCmd=${D}? - - if [ ${D}rcCmd -ne 0 ]; then - echo "command failed, exit code="${D}rcCmd - CleanUp - exit ${D}rcCmd - fi -} - -# main routine -# setup globals -cmdLine=${D}* -outFile="" -outimpFile="" -inputFiles="" -renameScript="" -description="" -CC=gcc.exe -CFLAGS="-s -Zcrtdll" -EXTRA_CFLAGS="" -EXPORT_BY_ORDINALS=0 -exclude_symbols="" -library_flags="" -curDir=\`pwd\` -curDirS=curDir -case ${D}curDirS in -*/) - ;; -*) - curDirS=${D}{curDirS}"/" - ;; -esac -# Parse commandline -libsToLink=0 -omfLinking=0 -while [ ${D}1 ]; do - case ${D}1 in - -ord*) - EXPORT_BY_ORDINALS=1; - ;; - -o*) - shift - outFile=${D}1 - ;; - -i*) - shift - outimpFile=${D}1 - ;; - -name-mangler-script) - shift - renameScript=${D}1 - ;; - -d*) - shift - description=${D}1 - ;; - -f*) - shift - CFLAGS=${D}1 - ;; - -c*) - shift - CC=${D}1 - ;; - -h*) - PrintHelp - ;; - -ex*) - shift - exclude_symbols=${D}{exclude_symbols}${D}1" " - ;; - -libf*) - shift - library_flags=${D}{library_flags}${D}1" " - ;; - -nocrt*) - CFLAGS="-s" - ;; - -nolxl*) - flag_USE_LXLITE=0 - ;; - -* | /*) - case ${D}1 in - -L* | -l*) - libsToLink=1 - ;; - -Zomf) - omfLinking=1 - ;; - *) - ;; - esac - EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 - ;; - *.dll) - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`" - if [ ${D}omfLinking -eq 1 ]; then - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib" - else - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a" - fi - ;; - *) - found=0; - if [ ${D}libsToLink -ne 0 ]; then - EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 - else - for file in ${D}1 ; do - if [ -f ${D}file ]; then - inputFiles="${D}{inputFiles} ${D}file" - found=1 - fi - done - if [ ${D}found -eq 0 ]; then - echo "ERROR: No file(s) found: "${D}1 - exit 8 - fi - fi - ;; - esac - shift -done # iterate cmdline words - -# -if [ -z "${D}inputFiles" ]; then - echo "dllar: no input files" - PrintHelp -fi - -# Now extract all .o files from .a files -newInputFiles="" -for file in ${D}inputFiles ; do - case ${D}file in - *.a | *.lib) - case ${D}file in - *.a) - suffix=".a" - AR="ar" - ;; - *.lib) - suffix=".lib" - AR="emxomfar" - EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf" - ;; - *) - ;; - esac - dirname=\`basnam ${D}file ${D}suffix\`"_%" - mkdir ${D}dirname - if [ ${D}? -ne 0 ]; then - echo "Failed to create subdirectory ./${D}dirname" - CleanUp - exit 8; - fi - # Append '!' to indicate archive - newInputFiles="${D}newInputFiles ${D}{dirname}!" - doCommand "cd ${D}dirname; ${D}AR x ../${D}file" - cd ${D}curDir - found=0; - for subfile in ${D}dirname/*.o* ; do - if [ -f ${D}subfile ]; then - found=1 - if [ -s ${D}subfile ]; then - # FIXME: This should be: is file size > 32 byte, _not_ > 0! - newInputFiles="${D}newInputFiles ${D}subfile" - fi - fi - done - if [ ${D}found -eq 0 ]; then - echo "WARNING: there are no files in archive \\'${D}file\\'" - fi - ;; - *) - newInputFiles="${D}{newInputFiles} ${D}file" - ;; - esac -done -inputFiles="${D}newInputFiles" - -# Output filename(s). -do_backup=0; -if [ -z ${D}outFile ]; then - do_backup=1; - set outFile ${D}inputFiles; outFile=${D}2 -fi - -# If it is an archive, remove the '!' and the '_%' suffixes -case ${D}outFile in -*_%!) - outFile=\`basnam ${D}outFile _%!\` - ;; -*) - ;; -esac -case ${D}outFile in -*.dll) - outFile=\`basnam ${D}outFile .dll\` - ;; -*.DLL) - outFile=\`basnam ${D}outFile .DLL\` - ;; -*.o) - outFile=\`basnam ${D}outFile .o\` - ;; -*.obj) - outFile=\`basnam ${D}outFile .obj\` - ;; -*.a) - outFile=\`basnam ${D}outFile .a\` - ;; -*.lib) - outFile=\`basnam ${D}outFile .lib\` - ;; -*) - ;; -esac -case ${D}outimpFile in -*.a) - outimpFile=\`basnam ${D}outimpFile .a\` - ;; -*.lib) - outimpFile=\`basnam ${D}outimpFile .lib\` - ;; -*) - ;; -esac -if [ -z ${D}outimpFile ]; then - outimpFile=${D}outFile -fi -defFile="${D}{outFile}.def" -arcFile="${D}{outimpFile}.a" -arcFile2="${D}{outimpFile}.lib" - -#create ${D}dllFile as something matching 8.3 restrictions, -if [ -z ${D}renameScript ] ; then - dllFile="${D}outFile" -else - dllFile=\`${D}renameScript ${D}outimpFile\` -fi - -if [ ${D}do_backup -ne 0 ] ; then - if [ -f ${D}arcFile ] ; then - doCommand "mv ${D}arcFile ${D}{outFile}_s.a" - fi - if [ -f ${D}arcFile2 ] ; then - doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib" - fi -fi - -# Extract public symbols from all the object files. -tmpdefFile=${D}{defFile}_% -rm -f ${D}tmpdefFile -for file in ${D}inputFiles ; do - case ${D}file in - *!) - ;; - *) - doCommand "emxexp -u ${D}file >> ${D}tmpdefFile" - ;; - esac -done - -# Create the def file. -rm -f ${D}defFile -echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile -dllFile="${D}{dllFile}.dll" -if [ ! -z ${D}description ]; then - echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile -fi -echo "EXPORTS" >> ${D}defFile - -doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%" -grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile - -# Checks if the export is ok or not. -for word in ${D}exclude_symbols; do - grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}% - mv ${D}{tmpdefFile}% ${D}tmpdefFile -done - - -if [ ${D}EXPORT_BY_ORDINALS -ne 0 ]; then - sed "=" < ${D}tmpdefFile | \\ - sed ' - N - : loop - s/^\\([0-9]\\+\\)\\([^;]*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/ - t loop - ' > ${D}{tmpdefFile}% - grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile -else - rm -f ${D}{tmpdefFile}% -fi -cat ${D}tmpdefFile >> ${D}defFile -rm -f ${D}tmpdefFile - -# Do linking, create implib, and apply lxlite. -gccCmdl=""; -for file in ${D}inputFiles ; do - case ${D}file in - *!) - ;; - *) - gccCmdl="${D}gccCmdl ${D}file" - ;; - esac -done -doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS" -touch "${D}{outFile}.dll" - -doCommand "emximp -o ${D}arcFile ${D}defFile" -if [ ${D}flag_USE_LXLITE -ne 0 ]; then - add_flags=""; - if [ ${D}EXPORT_BY_ORDINALS -ne 0 ]; then - add_flags="-ynd" - fi - doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile" -fi -doCommand "emxomf -s -l ${D}arcFile" - -# Successful exit. -CleanUp 1 -exit 0 -EOF - - chmod +x dllar.sh - ;; - - powerpc-apple-macos* | \ - *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \ - *-*-mirbsd* | \ - *-*-sunos4* | \ - *-*-osf* | \ - *-*-dgux5* | \ - *-*-sysv5* | \ - *-pc-msdosdjgpp ) - ;; - - *) - as_fn_error $? "unknown system type $BAKEFILE_HOST." "$LINENO" 5 - esac - - if test "x$PIC_FLAG" != "x" ; then - PIC_FLAG="$PIC_FLAG -DPIC" - fi - - if test "x$SHARED_LD_MODULE_CC" = "x" ; then - SHARED_LD_MODULE_CC="$SHARED_LD_CC" - fi - if test "x$SHARED_LD_MODULE_CXX" = "x" ; then - SHARED_LD_MODULE_CXX="$SHARED_LD_CXX" - fi - - - - - - - - - - USE_SOVERSION=0 - USE_SOVERLINUX=0 - USE_SOVERSOLARIS=0 - USE_SOVERCYGWIN=0 - USE_SOTWOSYMLINKS=0 - USE_MACVERSION=0 - SONAME_FLAG= - - case "${BAKEFILE_HOST}" in - *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \ - *-*-k*bsd*-gnu | *-*-mirbsd* ) - if test "x$SUNCXX" = "xyes"; then - SONAME_FLAG="-h " - else - SONAME_FLAG="-Wl,-soname," - fi - USE_SOVERSION=1 - USE_SOVERLINUX=1 - USE_SOTWOSYMLINKS=1 - ;; - - *-*-solaris2* ) - SONAME_FLAG="-h " - USE_SOVERSION=1 - USE_SOVERSOLARIS=1 - ;; - - *-*-darwin* ) - USE_MACVERSION=1 - USE_SOVERSION=1 - USE_SOTWOSYMLINKS=1 - ;; - - *-*-cygwin* ) - USE_SOVERSION=1 - USE_SOVERCYGWIN=1 - ;; - esac - - - - - - - - - - - # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; bk_use_trackdeps="$enableval" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dependency tracking method" >&5 -$as_echo_n "checking for dependency tracking method... " >&6; } - - BK_DEPS="" - if test "x$bk_use_trackdeps" = "xno" ; then - DEPS_TRACKING=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 -$as_echo "disabled" >&6; } - else - DEPS_TRACKING=1 - - if test "x$GCC" = "xyes"; then - DEPSMODE=gcc - case "${BAKEFILE_HOST}" in - *-*-darwin* ) - DEPSFLAG="-no-cpp-precomp -MMD" - ;; - * ) - DEPSFLAG="-MMD" - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: gcc" >&5 -$as_echo "gcc" >&6; } - elif test "x$MWCC" = "xyes"; then - DEPSMODE=mwcc - DEPSFLAG="-MM" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: mwcc" >&5 -$as_echo "mwcc" >&6; } - elif test "x$SUNCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-xM1" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Sun cc" >&5 -$as_echo "Sun cc" >&6; } - elif test "x$SGICC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-M" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: SGI cc" >&5 -$as_echo "SGI cc" >&6; } - elif test "x$HPCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="+make" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: HP cc" >&5 -$as_echo "HP cc" >&6; } - elif test "x$COMPAQCC" = "xyes"; then - DEPSMODE=gcc - DEPSFLAG="-MD" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Compaq cc" >&5 -$as_echo "Compaq cc" >&6; } - else - DEPS_TRACKING=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } - fi - - if test $DEPS_TRACKING = 1 ; then - -D='$' -cat <bk-deps -#!/bin/sh - -# This script is part of Bakefile (http://www.bakefile.org) autoconf -# script. It is used to track C/C++ files dependencies in portable way. -# -# Permission is given to use this file in any way. - -DEPSMODE=${DEPSMODE} -DEPSFLAG="${DEPSFLAG}" -DEPSDIRBASE=.deps - -if test ${D}DEPSMODE = gcc ; then - ${D}* ${D}{DEPSFLAG} - status=${D}? - - # determine location of created files: - while test ${D}# -gt 0; do - case "${D}1" in - -o ) - shift - objfile=${D}1 - ;; - -* ) - ;; - * ) - srcfile=${D}1 - ;; - esac - shift - done - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\` - depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - # if the compiler failed, we're done: - if test ${D}{status} != 0 ; then - rm -f ${D}depfile - exit ${D}{status} - fi - - # move created file to the location we want it in: - if test -f ${D}depfile ; then - sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d - rm -f ${D}depfile - else - # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d - depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\` - if test ! -f ${D}depfile ; then - # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++) - depfile="${D}objfile.d" - fi - if test -f ${D}depfile ; then - sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d - rm -f ${D}depfile - fi - fi - exit 0 - -elif test ${D}DEPSMODE = mwcc ; then - ${D}* || exit ${D}? - # Run mwcc again with -MM and redirect into the dep file we want - # NOTE: We can't use shift here because we need ${D}* to be valid - prevarg= - for arg in ${D}* ; do - if test "${D}prevarg" = "-o"; then - objfile=${D}arg - else - case "${D}arg" in - -* ) - ;; - * ) - srcfile=${D}arg - ;; - esac - fi - prevarg="${D}arg" - done - - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d - exit 0 - -elif test ${D}DEPSMODE = unixcc; then - ${D}* || exit ${D}? - # Run compiler again with deps flag and redirect into the dep file. - # It doesn't work if the '-o FILE' option is used, but without it the - # dependency file will contain the wrong name for the object. So it is - # removed from the command line, and the dep file is fixed with sed. - cmd="" - while test ${D}# -gt 0; do - case "${D}1" in - -o ) - shift - objfile=${D}1 - ;; - * ) - eval arg${D}#=\\${D}1 - cmd="${D}cmd \\${D}arg${D}#" - ;; - esac - shift - done - - objfilebase=\`basename ${D}objfile\` - builddir=\`dirname ${D}objfile\` - depsdir=${D}builddir/${D}DEPSDIRBASE - mkdir -p ${D}depsdir - - eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d - exit 0 - -else - ${D}* - exit ${D}? -fi -EOF - - chmod +x bk-deps - BK_DEPS="`pwd`/bk-deps" - fi - fi - - - - - - case ${BAKEFILE_HOST} in - *-*-cygwin* | *-*-mingw32* ) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. -set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_WINDRES+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINDRES"; then - ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_WINDRES="${ac_tool_prefix}windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -WINDRES=$ac_cv_prog_WINDRES -if test -n "$WINDRES"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 -$as_echo "$WINDRES" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_WINDRES"; then - ac_ct_WINDRES=$WINDRES - # Extract the first word of "windres", so it can be a program name with args. -set dummy windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_WINDRES"; then - ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_WINDRES="windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES -if test -n "$ac_ct_WINDRES"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 -$as_echo "$ac_ct_WINDRES" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_WINDRES" = x; then - WINDRES="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - WINDRES=$ac_ct_WINDRES - fi -else - WINDRES="$ac_cv_prog_WINDRES" -fi - - ;; - - *-*-darwin* | powerpc-apple-macos* ) - # Extract the first word of "Rez", so it can be a program name with args. -set dummy Rez; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_REZ+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$REZ"; then - ac_cv_prog_REZ="$REZ" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_REZ="Rez" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_REZ" && ac_cv_prog_REZ="/Developer/Tools/Rez" -fi -fi -REZ=$ac_cv_prog_REZ -if test -n "$REZ"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $REZ" >&5 -$as_echo "$REZ" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Extract the first word of "SetFile", so it can be a program name with args. -set dummy SetFile; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_SETFILE+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$SETFILE"; then - ac_cv_prog_SETFILE="$SETFILE" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_SETFILE="SetFile" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_SETFILE" && ac_cv_prog_SETFILE="/Developer/Tools/SetFile" -fi -fi -SETFILE=$ac_cv_prog_SETFILE -if test -n "$SETFILE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 -$as_echo "$SETFILE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - ;; - esac - - - - - - - - - - BAKEFILE_BAKEFILE_M4_VERSION="0.2.9" - - -BAKEFILE_AUTOCONF_INC_M4_VERSION="0.2.9" - - COND_DEBUG_0="#" - if test "x$DEBUG" = "x0" ; then - COND_DEBUG_0="" - fi - - COND_DEBUG_1="#" - if test "x$DEBUG" = "x1" ; then - COND_DEBUG_1="" - fi - - COND_DEPS_TRACKING_0="#" - if test "x$DEPS_TRACKING" = "x0" ; then - COND_DEPS_TRACKING_0="" - fi - - COND_DEPS_TRACKING_1="#" - if test "x$DEPS_TRACKING" = "x1" ; then - COND_DEPS_TRACKING_1="" - fi - - COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x0" -a "x$USE_SOVERCYGWIN" = "x0" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1="" - fi - - COND_PLATFORM_MACOSX_0_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x0" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_0_USE_SOVERSION_1="" - fi - - COND_PLATFORM_MACOSX_1="#" - if test "x$PLATFORM_MACOSX" = "x1" ; then - COND_PLATFORM_MACOSX_1="" - fi - - COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="#" - if test "x$PLATFORM_MACOSX" = "x1" -a "x$USE_SOVERSION" = "x1" ; then - COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="" - fi - - COND_PLATFORM_MAC_0="#" - if test "x$PLATFORM_MAC" = "x0" ; then - COND_PLATFORM_MAC_0="" - fi - - COND_PLATFORM_MAC_1="#" - if test "x$PLATFORM_MAC" = "x1" ; then - COND_PLATFORM_MAC_1="" - fi - - COND_PLATFORM_OS2_1="#" - if test "x$PLATFORM_OS2" = "x1" ; then - COND_PLATFORM_OS2_1="" - fi - - COND_SAMPLES_1="#" - if test "x$SAMPLES" = "x1" ; then - COND_SAMPLES_1="" - fi - - COND_SHARED_0="#" - if test "x$SHARED" = "x0" ; then - COND_SHARED_0="" - fi - - COND_SHARED_1="#" - if test "x$SHARED" = "x1" ; then - COND_SHARED_1="" - fi - - COND_USE_SOTWOSYMLINKS_1="#" - if test "x$USE_SOTWOSYMLINKS" = "x1" ; then - COND_USE_SOTWOSYMLINKS_1="" - fi - - COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1="#" - if test "x$USE_SOVERCYGWIN" = "x1" -a "x$USE_SOVERSION" = "x1" ; then - COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1="" - fi - - COND_USE_SOVERLINUX_1="#" - if test "x$USE_SOVERLINUX" = "x1" ; then - COND_USE_SOVERLINUX_1="" - fi - - COND_USE_SOVERSION_0="#" - if test "x$USE_SOVERSION" = "x0" ; then - COND_USE_SOVERSION_0="" - fi - - COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1="#" - if test "x$USE_SOVERSION" = "x1" -a "x$USE_SOVERSOLARIS" = "x1" ; then - COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1="" - fi - - COND_USE_SOVERSOLARIS_1="#" - if test "x$USE_SOVERSOLARIS" = "x1" ; then - COND_USE_SOVERSOLARIS_1="" - fi - - COND_WINDOWS_IMPLIB_1="#" - if test "x$WINDOWS_IMPLIB" = "x1" ; then - COND_WINDOWS_IMPLIB_1="" - fi - - - - if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then - as_fn_error $? "No version found in autoconf_inc.m4 - bakefile macro was changed to take additional argument, perhaps configure.in wasn't updated (see the documentation)?" "$LINENO" 5 - fi - - if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then - as_fn_error $? "Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match." "$LINENO" 5 - fi - -ac_config_files="$ac_config_files Makefile build/autoconf/muparser.pc" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by muparser $as_me 2.2.4, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -muparser config.status 2.2.4 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "build/autoconf/muparser.pc") CONFIG_FILES="$CONFIG_FILES build/autoconf/muparser.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - - -## CONFIGURE END MESSAGE -##################################################################### - -echo -echo " ----------------------------------------------------------------" -echo " Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed." -echo " Summary of main configuration settings for $PACKAGE_NAME:" - - if [ "$SHARED" = "1" ]; then - echo " - SHARED mode" - else - echo " - STATIC mode" - fi - - - if [ "$DEBUG" = "1" ]; then - echo " - DEBUG build" - else - echo " - RELEASE build" - fi - -if [ "$SAMPLES" = "1" ]; then - echo " - SAMPLES enabled" -else - echo " - SAMPLES disabled" -fi -echo " Now, just run make." -echo " ----------------------------------------------------------------" -echo diff --git a/src/external/muparser_v225/docs/Doxyfile b/src/external/muparser_v225/docs/Doxyfile deleted file mode 100644 index 9793afe34..000000000 --- a/src/external/muparser_v225/docs/Doxyfile +++ /dev/null @@ -1,1563 +0,0 @@ -# Doxyfile 1.6.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "muParser API -" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 1.35 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = html/ - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 16 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set -# FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = NO - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = html/misc/Main.txt \ - html/misc/example.txt \ - ../src/ \ - ../include/ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = html/misc/ - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = NO - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = classdocu/ - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = html/misc/footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = NO - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = jpg - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = "C:\Program Files (x86)\Graphviz2.20\bin" - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/src/external/muparser_v225/docs/muparser_doc.html b/src/external/muparser_v225/docs/muparser_doc.html deleted file mode 100644 index 09dbba143..000000000 --- a/src/external/muparser_v225/docs/muparser_doc.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - -
- -
- - - diff --git a/src/external/muparser_v225/include/muParser.h b/src/external/muparser_v225/include/muParser.h deleted file mode 100644 index 39fe137fe..000000000 --- a/src/external/muparser_v225/include/muParser.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#ifndef MU_PARSER_H -#define MU_PARSER_H - -//--- Standard includes ------------------------------------------------------------------------ -#include - -//--- Parser includes -------------------------------------------------------------------------- -#include "muParserBase.h" -#include "muParserTemplateMagic.h" - -/** \file - \brief Definition of the standard floating point parser. -*/ - -namespace mu -{ - /** \brief Mathematical expressions parser. - - Standard implementation of the mathematical expressions parser. - Can be used as a reference implementation for subclassing the parser. - - - (C) 2011 Ingo Berg
- muparser(at)beltoforion.de -
- */ - /* final */ class Parser : public ParserBase - { - public: - - Parser(); - - virtual void InitCharSets(); - virtual void InitFun(); - virtual void InitConst(); - virtual void InitOprt(); - virtual void OnDetectVar(string_type *pExpr, int &nStart, int &nEnd); - - value_type Diff(value_type *a_Var, - value_type a_fPos, - value_type a_fEpsilon = 0) const; - - protected: - - // Trigonometric functions - static value_type Sin(value_type); - static value_type Cos(value_type); - static value_type Tan(value_type); - static value_type Tan2(value_type, value_type); - // arcus functions - static value_type ASin(value_type); - static value_type ACos(value_type); - static value_type ATan(value_type); - static value_type ATan2(value_type, value_type); - - // hyperbolic functions - static value_type Sinh(value_type); - static value_type Cosh(value_type); - static value_type Tanh(value_type); - // arcus hyperbolic functions - static value_type ASinh(value_type); - static value_type ACosh(value_type); - static value_type ATanh(value_type); - // Logarithm functions - static value_type Log2(value_type); // Logarithm Base 2 - static value_type Log10(value_type); // Logarithm Base 10 - static value_type Ln(value_type); // Logarithm Base e (natural logarithm) - // misc - static value_type Exp(value_type); - static value_type Abs(value_type); - static value_type Sqrt(value_type); - static value_type Rint(value_type); - static value_type Sign(value_type); - - // Prefix operators - // !!! Unary Minus is a MUST if you want to use negative signs !!! - static value_type UnaryMinus(value_type); - static value_type UnaryPlus(value_type); - - // Functions with variable number of arguments - static value_type Sum(const value_type*, int); // sum - static value_type Avg(const value_type*, int); // mean value - static value_type Min(const value_type*, int); // minimum - static value_type Max(const value_type*, int); // maximum - - static int IsVal(const char_type* a_szExpr, int *a_iPos, value_type *a_fVal); - }; -} // namespace mu - -#endif - diff --git a/src/external/muparser_v225/include/muParserBase.h b/src/external/muparser_v225/include/muParserBase.h deleted file mode 100644 index beb15bb19..000000000 --- a/src/external/muparser_v225/include/muParserBase.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#ifndef MU_PARSER_BASE_H -#define MU_PARSER_BASE_H - -//--- Standard includes ------------------------------------------------------------------------ -#include -#include -#include -#include -#include -#include -#include - -//--- Parser includes -------------------------------------------------------------------------- -#include "muParserDef.h" -#include "muParserStack.h" -#include "muParserTokenReader.h" -#include "muParserBytecode.h" -#include "muParserError.h" - - -namespace mu -{ -/** \file - \brief This file contains the class definition of the muparser engine. -*/ - -//-------------------------------------------------------------------------------------------------- -/** \brief Mathematical expressions parser (base parser engine). - \author (C) 2013 Ingo Berg - - This is the implementation of a bytecode based mathematical expressions parser. - The formula will be parsed from string and converted into a bytecode. - Future calculations will be done with the bytecode instead the formula string - resulting in a significant performance increase. - Complementary to a set of internally implemented functions the parser is able to handle - user defined functions and variables. -*/ -class ParserBase -{ -friend class ParserTokenReader; - -private: - - /** \brief Typedef for the parse functions. - - The parse function do the actual work. The parser exchanges - the function pointer to the parser function depending on - which state it is in. (i.e. bytecode parser vs. string parser) - */ - typedef value_type (ParserBase::*ParseFunction)() const; - - /** \brief Type used for storing an array of values. */ - typedef std::vector valbuf_type; - - /** \brief Type for a vector of strings. */ - typedef std::vector stringbuf_type; - - /** \brief Typedef for the token reader. */ - typedef ParserTokenReader token_reader_type; - - /** \brief Type used for parser tokens. */ - typedef ParserToken token_type; - - /** \brief Maximum number of threads spawned by OpenMP when using the bulk mode. */ - static const int s_MaxNumOpenMPThreads = 16; - - public: - - /** \brief Type of the error class. - - Included for backwards compatibility. - */ - typedef ParserError exception_type; - - static void EnableDebugDump(bool bDumpCmd, bool bDumpStack); - - ParserBase(); - ParserBase(const ParserBase &a_Parser); - ParserBase& operator=(const ParserBase &a_Parser); - - virtual ~ParserBase(); - - value_type Eval() const; - value_type* Eval(int &nStackSize) const; - void Eval(value_type *results, int nBulkSize); - - int GetNumResults() const; - - void SetExpr(const string_type &a_sExpr); - void SetVarFactory(facfun_type a_pFactory, void *pUserData = NULL); - - void SetDecSep(char_type cDecSep); - void SetThousandsSep(char_type cThousandsSep = 0); - void ResetLocale(); - - void EnableOptimizer(bool a_bIsOn=true); - void EnableBuiltInOprt(bool a_bIsOn=true); - - bool HasBuiltInOprt() const; - void AddValIdent(identfun_type a_pCallback); - - /** \fn void mu::ParserBase::DefineFun(const string_type &a_strName, fun_type0 a_pFun, bool a_bAllowOpt = true) - \brief Define a parser function without arguments. - \param a_strName Name of the function - \param a_pFun Pointer to the callback function - \param a_bAllowOpt A flag indicating this function may be optimized - */ - template - void DefineFun(const string_type &a_strName, T a_pFun, bool a_bAllowOpt = true) - { - AddCallback( a_strName, ParserCallback(a_pFun, a_bAllowOpt), m_FunDef, ValidNameChars() ); - } - - void DefineOprt(const string_type &a_strName, - fun_type2 a_pFun, - unsigned a_iPri=0, - EOprtAssociativity a_eAssociativity = oaLEFT, - bool a_bAllowOpt = false); - void DefineConst(const string_type &a_sName, value_type a_fVal); - void DefineStrConst(const string_type &a_sName, const string_type &a_strVal); - void DefineVar(const string_type &a_sName, value_type *a_fVar); - void DefinePostfixOprt(const string_type &a_strFun, fun_type1 a_pOprt, bool a_bAllowOpt=true); - void DefineInfixOprt(const string_type &a_strName, fun_type1 a_pOprt, int a_iPrec=prINFIX, bool a_bAllowOpt=true); - - // Clear user defined variables, constants or functions - void ClearVar(); - void ClearFun(); - void ClearConst(); - void ClearInfixOprt(); - void ClearPostfixOprt(); - void ClearOprt(); - - void RemoveVar(const string_type &a_strVarName); - const varmap_type& GetUsedVar() const; - const varmap_type& GetVar() const; - const valmap_type& GetConst() const; - const string_type& GetExpr() const; - const funmap_type& GetFunDef() const; - string_type GetVersion(EParserVersionInfo eInfo = pviFULL) const; - - const char_type ** GetOprtDef() const; - void DefineNameChars(const char_type *a_szCharset); - void DefineOprtChars(const char_type *a_szCharset); - void DefineInfixOprtChars(const char_type *a_szCharset); - - const char_type* ValidNameChars() const; - const char_type* ValidOprtChars() const; - const char_type* ValidInfixOprtChars() const; - - void SetArgSep(char_type cArgSep); - char_type GetArgSep() const; - - void Error(EErrorCodes a_iErrc, - int a_iPos = (int)mu::string_type::npos, - const string_type &a_strTok = string_type() ) const; - - protected: - - void Init(); - - virtual void InitCharSets() = 0; - virtual void InitFun() = 0; - virtual void InitConst() = 0; - virtual void InitOprt() = 0; - - virtual void OnDetectVar(string_type *pExpr, int &nStart, int &nEnd); - - static const char_type *c_DefaultOprt[]; - static std::locale s_locale; ///< The locale used by the parser - static bool g_DbgDumpCmdCode; - static bool g_DbgDumpStack; - - /** \brief A facet class used to change decimal and thousands separator. */ - template - class change_dec_sep : public std::numpunct - { - public: - - explicit change_dec_sep(char_type cDecSep, char_type cThousandsSep = 0, int nGroup = 3) - :std::numpunct() - ,m_nGroup(nGroup) - ,m_cDecPoint(cDecSep) - ,m_cThousandsSep(cThousandsSep) - {} - - protected: - - virtual char_type do_decimal_point() const - { - return m_cDecPoint; - } - - virtual char_type do_thousands_sep() const - { - return m_cThousandsSep; - } - - virtual std::string do_grouping() const - { - // fix for issue 4: https://code.google.com/p/muparser/issues/detail?id=4 - // courtesy of Jens Bartsch - // original code: - // return std::string(1, (char)m_nGroup); - // new code: - return std::string(1, (char)(m_cThousandsSep > 0 ? m_nGroup : CHAR_MAX)); - } - - private: - - int m_nGroup; - char_type m_cDecPoint; - char_type m_cThousandsSep; - }; - - private: - - void Assign(const ParserBase &a_Parser); - void InitTokenReader(); - void ReInit() const; - - void AddCallback( const string_type &a_strName, - const ParserCallback &a_Callback, - funmap_type &a_Storage, - const char_type *a_szCharSet ); - - void ApplyRemainingOprt(ParserStack &a_stOpt, - ParserStack &a_stVal) const; - void ApplyBinOprt(ParserStack &a_stOpt, - ParserStack &a_stVal) const; - - void ApplyIfElse(ParserStack &a_stOpt, - ParserStack &a_stVal) const; - - void ApplyFunc(ParserStack &a_stOpt, - ParserStack &a_stVal, - int iArgCount) const; - - token_type ApplyStrFunc(const token_type &a_FunTok, - const std::vector &a_vArg) const; - - int GetOprtPrecedence(const token_type &a_Tok) const; - EOprtAssociativity GetOprtAssociativity(const token_type &a_Tok) const; - - void CreateRPN() const; - - value_type ParseString() const; - value_type ParseCmdCode() const; - value_type ParseCmdCodeBulk(int nOffset, int nThreadID) const; - - void CheckName(const string_type &a_strName, const string_type &a_CharSet) const; - void CheckOprt(const string_type &a_sName, - const ParserCallback &a_Callback, - const string_type &a_szCharSet) const; - - void StackDump(const ParserStack &a_stVal, - const ParserStack &a_stOprt) const; - - /** \brief Pointer to the parser function. - - Eval() calls the function whose address is stored there. - */ - mutable ParseFunction m_pParseFormula; - mutable ParserByteCode m_vRPN; ///< The Bytecode class. - mutable stringbuf_type m_vStringBuf; ///< String buffer, used for storing string function arguments - stringbuf_type m_vStringVarBuf; - - std::auto_ptr m_pTokenReader; ///< Managed pointer to the token reader object. - - funmap_type m_FunDef; ///< Map of function names and pointers. - funmap_type m_PostOprtDef; ///< Postfix operator callbacks - funmap_type m_InfixOprtDef; ///< unary infix operator. - funmap_type m_OprtDef; ///< Binary operator callbacks - valmap_type m_ConstDef; ///< user constants. - strmap_type m_StrVarDef; ///< user defined string constants - varmap_type m_VarDef; ///< user defind variables. - - bool m_bBuiltInOp; ///< Flag that can be used for switching built in operators on and off - - string_type m_sNameChars; ///< Charset for names - string_type m_sOprtChars; ///< Charset for postfix/ binary operator tokens - string_type m_sInfixOprtChars; ///< Charset for infix operator tokens - - mutable int m_nIfElseCounter; ///< Internal counter for keeping track of nested if-then-else clauses - - // items merely used for caching state information - mutable valbuf_type m_vStackBuffer; ///< This is merely a buffer used for the stack in the cmd parsing routine - mutable int m_nFinalResultIdx; -}; - -} // namespace mu - -#endif - diff --git a/src/external/muparser_v225/include/muParserBytecode.h b/src/external/muparser_v225/include/muParserBytecode.h deleted file mode 100644 index 39ab39d52..000000000 --- a/src/external/muparser_v225/include/muParserBytecode.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#ifndef MU_PARSER_BYTECODE_H -#define MU_PARSER_BYTECODE_H - -#include -#include -#include -#include - -#include "muParserDef.h" -#include "muParserError.h" -#include "muParserToken.h" - -/** \file - \brief Definition of the parser bytecode class. -*/ - - -namespace mu -{ - struct SToken - { - ECmdCode Cmd; - int StackPos; - - union - { - struct //SValData - { - value_type *ptr; - value_type data; - value_type data2; - } Val; - - struct //SFunData - { - // Note: generic_fun_type is merely a placeholder. The real type could be - // anything between gun_type1 and fun_type9. I can't use a void - // pointer due to constraints in the ANSI standard which allows - // data pointers and function pointers to differ in size. - generic_fun_type ptr; - int argc; - int idx; - } Fun; - - struct //SOprtData - { - value_type *ptr; - int offset; - } Oprt; - }; - }; - - - /** \brief Bytecode implementation of the Math Parser. - - The bytecode contains the formula converted to revers polish notation stored in a continious - memory area. Associated with this data are operator codes, variable pointers, constant - values and function pointers. Those are necessary in order to calculate the result. - All those data items will be casted to the underlying datatype of the bytecode. - - \author (C) 2004-2013 Ingo Berg -*/ -class ParserByteCode -{ -private: - - /** \brief Token type for internal use only. */ - typedef ParserToken token_type; - - /** \brief Token vector for storing the RPN. */ - typedef std::vector rpn_type; - - /** \brief Position in the Calculation array. */ - unsigned m_iStackPos; - - /** \brief Maximum size needed for the stack. */ - std::size_t m_iMaxStackSize; - - /** \brief The actual rpn storage. */ - rpn_type m_vRPN; - - bool m_bEnableOptimizer; - - void ConstantFolding(ECmdCode a_Oprt); - -public: - - ParserByteCode(); - ParserByteCode(const ParserByteCode &a_ByteCode); - ParserByteCode& operator=(const ParserByteCode &a_ByteCode); - void Assign(const ParserByteCode &a_ByteCode); - - void AddVar(value_type *a_pVar); - void AddVal(value_type a_fVal); - void AddOp(ECmdCode a_Oprt); - void AddIfElse(ECmdCode a_Oprt); - void AddAssignOp(value_type *a_pVar); - void AddFun(generic_fun_type a_pFun, int a_iArgc); - void AddBulkFun(generic_fun_type a_pFun, int a_iArgc); - void AddStrFun(generic_fun_type a_pFun, int a_iArgc, int a_iIdx); - - void EnableOptimizer(bool bStat); - - void Finalize(); - void clear(); - std::size_t GetMaxStackSize() const; - std::size_t GetSize() const; - - const SToken* GetBase() const; - void AsciiDump(); -}; - -} // namespace mu - -#endif - - diff --git a/src/external/muparser_v225/include/muParserCallback.h b/src/external/muparser_v225/include/muParserCallback.h deleted file mode 100644 index ef32b4989..000000000 --- a/src/external/muparser_v225/include/muParserCallback.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_CALLBACK_H -#define MU_PARSER_CALLBACK_H - -#include "muParserDef.h" - -/** \file - \brief Definition of the parser callback class. -*/ - -namespace mu -{ - -/** \brief Encapsulation of prototypes for a numerical parser function. - - Encapsulates the prototyp for numerical parser functions. The class - stores the number of arguments for parser functions as well - as additional flags indication the function is non optimizeable. - The pointer to the callback function pointer is stored as void* - and needs to be casted according to the argument count. - Negative argument counts indicate a parser function with a variable number - of arguments. - - \author (C) 2004-2011 Ingo Berg -*/ -class ParserCallback -{ -public: - ParserCallback(fun_type0 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type1 a_pFun, bool a_bAllowOpti, int a_iPrec = -1, ECmdCode a_iCode=cmFUNC); - ParserCallback(fun_type2 a_pFun, bool a_bAllowOpti, int a_iPrec, EOprtAssociativity a_eAssociativity); - ParserCallback(fun_type2 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type3 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type4 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type5 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type6 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type7 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type8 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type9 a_pFun, bool a_bAllowOpti); - ParserCallback(fun_type10 a_pFun, bool a_bAllowOpti); - - ParserCallback(bulkfun_type0 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type1 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type2 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type3 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type4 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type5 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type6 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type7 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type8 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type9 a_pFun, bool a_bAllowOpti); - ParserCallback(bulkfun_type10 a_pFun, bool a_bAllowOpti); - - ParserCallback(multfun_type a_pFun, bool a_bAllowOpti); - ParserCallback(strfun_type1 a_pFun, bool a_bAllowOpti); - ParserCallback(strfun_type2 a_pFun, bool a_bAllowOpti); - ParserCallback(strfun_type3 a_pFun, bool a_bAllowOpti); - ParserCallback(); - ParserCallback(const ParserCallback &a_Fun); - - ParserCallback* Clone() const; - - bool IsOptimizable() const; - void* GetAddr() const; - ECmdCode GetCode() const; - ETypeCode GetType() const; - int GetPri() const; - EOprtAssociativity GetAssociativity() const; - int GetArgc() const; - -private: - void *m_pFun; ///< Pointer to the callback function, casted to void - - /** \brief Number of numeric function arguments - - This number is negative for functions with variable number of arguments. in this cases - they represent the actual number of arguments found. - */ - int m_iArgc; - int m_iPri; ///< Valid only for binary and infix operators; Operator precedence. - EOprtAssociativity m_eOprtAsct; ///< Operator associativity; Valid only for binary operators - ECmdCode m_iCode; - ETypeCode m_iType; - bool m_bAllowOpti; ///< Flag indication optimizeability -}; - -//------------------------------------------------------------------------------ -/** \brief Container for Callback objects. */ -typedef std::map funmap_type; - -} // namespace mu - -#endif - diff --git a/src/external/muparser_v225/include/muParserDLL.h b/src/external/muparser_v225/include/muParserDLL.h deleted file mode 100644 index 155ef8a06..000000000 --- a/src/external/muparser_v225/include/muParserDLL.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#ifndef MU_PARSER_DLL_H -#define MU_PARSER_DLL_H - -#if defined(WIN32) || defined(_WIN32) - #ifdef MUPARSERLIB_EXPORTS - #define API_EXPORT(TYPE) __declspec(dllexport) TYPE __cdecl - #else - #define API_EXPORT(TYPE) __declspec(dllimport) TYPE __cdecl - #endif -#else - #define API_EXPORT(TYPE) TYPE -#endif - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** \file - \brief This file contains the DLL interface of muparser. -*/ - -// Basic types -typedef void* muParserHandle_t; // parser handle - -#ifndef _UNICODE - typedef char muChar_t; // character type -#else - typedef wchar_t muChar_t; // character type -#endif - -typedef int muBool_t; // boolean type -typedef int muInt_t; // integer type -typedef double muFloat_t; // floating point type - -// function types for calculation -typedef muFloat_t (*muFun0_t )(); -typedef muFloat_t (*muFun1_t )(muFloat_t); -typedef muFloat_t (*muFun2_t )(muFloat_t, muFloat_t); -typedef muFloat_t (*muFun3_t )(muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun4_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun5_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun6_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun7_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun8_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun9_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muFun10_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); - -// Function prototypes for bulkmode functions -typedef muFloat_t (*muBulkFun0_t )(int, int); -typedef muFloat_t (*muBulkFun1_t )(int, int, muFloat_t); -typedef muFloat_t (*muBulkFun2_t )(int, int, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun3_t )(int, int, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun4_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun5_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun6_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun7_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun8_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun9_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); -typedef muFloat_t (*muBulkFun10_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t); - -typedef muFloat_t (*muMultFun_t)(const muFloat_t*, muInt_t); -typedef muFloat_t (*muStrFun1_t)(const muChar_t*); -typedef muFloat_t (*muStrFun2_t)(const muChar_t*, muFloat_t); -typedef muFloat_t (*muStrFun3_t)(const muChar_t*, muFloat_t, muFloat_t); - -// Functions for parser management -typedef void (*muErrorHandler_t)(muParserHandle_t a_hParser); // [optional] callback to an error handler -typedef muFloat_t* (*muFacFun_t)(const muChar_t*, void*); // [optional] callback for creating new variables -typedef muInt_t (*muIdentFun_t)(const muChar_t*, muInt_t*, muFloat_t*); // [optional] value identification callbacks - -//----------------------------------------------------------------------------------------------------- -// Constants -static const int muOPRT_ASCT_LEFT = 0; -static const int muOPRT_ASCT_RIGHT = 1; - -static const int muBASETYPE_FLOAT = 0; -static const int muBASETYPE_INT = 1; - -//----------------------------------------------------------------------------------------------------- -// -// -// muParser C compatible bindings -// -// -//----------------------------------------------------------------------------------------------------- - - -// Basic operations / initialization -API_EXPORT(muParserHandle_t) mupCreate(int nBaseType); -API_EXPORT(void) mupRelease(muParserHandle_t a_hParser); -API_EXPORT(const muChar_t*) mupGetExpr(muParserHandle_t a_hParser); -API_EXPORT(void) mupSetExpr(muParserHandle_t a_hParser, const muChar_t *a_szExpr); -API_EXPORT(void) mupSetVarFactory(muParserHandle_t a_hParser, muFacFun_t a_pFactory, void* pUserData); -API_EXPORT(const muChar_t*) mupGetVersion(muParserHandle_t a_hParser); -API_EXPORT(muFloat_t) mupEval(muParserHandle_t a_hParser); -API_EXPORT(muFloat_t*) mupEvalMulti(muParserHandle_t a_hParser, int *nNum); -API_EXPORT(void) mupEvalBulk(muParserHandle_t a_hParser, muFloat_t *a_fResult, int nSize); - -// Defining callbacks / variables / constants -API_EXPORT(void) mupDefineFun0(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun0_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun1_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun2_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun3_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun4(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun4_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun5(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun5_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun6(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun6_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun7(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun7_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun8(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun8_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun9(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun9_t a_pFun, muBool_t a_bOptimize); -API_EXPORT(void) mupDefineFun10(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun10_t a_pFun, muBool_t a_bOptimize); - -// Defining bulkmode functions -API_EXPORT(void) mupDefineBulkFun0(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun0_t a_pFun); -API_EXPORT(void) mupDefineBulkFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun1_t a_pFun); -API_EXPORT(void) mupDefineBulkFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun2_t a_pFun); -API_EXPORT(void) mupDefineBulkFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun3_t a_pFun); -API_EXPORT(void) mupDefineBulkFun4(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun4_t a_pFun); -API_EXPORT(void) mupDefineBulkFun5(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun5_t a_pFun); -API_EXPORT(void) mupDefineBulkFun6(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun6_t a_pFun); -API_EXPORT(void) mupDefineBulkFun7(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun7_t a_pFun); -API_EXPORT(void) mupDefineBulkFun8(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun8_t a_pFun); -API_EXPORT(void) mupDefineBulkFun9(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun9_t a_pFun); -API_EXPORT(void) mupDefineBulkFun10(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun10_t a_pFun); - -// string functions -API_EXPORT(void) mupDefineStrFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun1_t a_pFun); -API_EXPORT(void) mupDefineStrFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun2_t a_pFun); -API_EXPORT(void) mupDefineStrFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun3_t a_pFun); - -API_EXPORT(void) mupDefineMultFun( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muMultFun_t a_pFun, - muBool_t a_bOptimize); - -API_EXPORT(void) mupDefineOprt( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun2_t a_pFun, - muInt_t a_nPrec, - muInt_t a_nOprtAsct, - muBool_t a_bOptimize); - -API_EXPORT(void) mupDefineConst( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFloat_t a_fVal ); - -API_EXPORT(void) mupDefineStrConst( muParserHandle_t a_hParser, - const muChar_t* a_szName, - const muChar_t *a_sVal ); - -API_EXPORT(void) mupDefineVar( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFloat_t *a_fVar); - -API_EXPORT(void) mupDefineBulkVar( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFloat_t *a_fVar); - -API_EXPORT(void) mupDefinePostfixOprt( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun1_t a_pOprt, - muBool_t a_bOptimize); - - -API_EXPORT(void) mupDefineInfixOprt( muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun1_t a_pOprt, - muBool_t a_bOptimize); - -// Define character sets for identifiers -API_EXPORT(void) mupDefineNameChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset); -API_EXPORT(void) mupDefineOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset); -API_EXPORT(void) mupDefineInfixOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset); - -// Remove all / single variables -API_EXPORT(void) mupRemoveVar(muParserHandle_t a_hParser, const muChar_t* a_szName); -API_EXPORT(void) mupClearVar(muParserHandle_t a_hParser); -API_EXPORT(void) mupClearConst(muParserHandle_t a_hParser); -API_EXPORT(void) mupClearOprt(muParserHandle_t a_hParser); -API_EXPORT(void) mupClearFun(muParserHandle_t a_hParser); - -// Querying variables / expression variables / constants -API_EXPORT(int) mupGetExprVarNum(muParserHandle_t a_hParser); -API_EXPORT(int) mupGetVarNum(muParserHandle_t a_hParser); -API_EXPORT(int) mupGetConstNum(muParserHandle_t a_hParser); -API_EXPORT(void) mupGetExprVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar); -API_EXPORT(void) mupGetVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar); -API_EXPORT(void) mupGetConst(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t* a_pVar); -API_EXPORT(void) mupSetArgSep(muParserHandle_t a_hParser, const muChar_t cArgSep); -API_EXPORT(void) mupSetDecSep(muParserHandle_t a_hParser, const muChar_t cArgSep); -API_EXPORT(void) mupSetThousandsSep(muParserHandle_t a_hParser, const muChar_t cArgSep); -API_EXPORT(void) mupResetLocale(muParserHandle_t a_hParser); - -// Add value recognition callbacks -API_EXPORT(void) mupAddValIdent(muParserHandle_t a_hParser, muIdentFun_t); - -// Error handling -API_EXPORT(muBool_t) mupError(muParserHandle_t a_hParser); -API_EXPORT(void) mupErrorReset(muParserHandle_t a_hParser); -API_EXPORT(void) mupSetErrorHandler(muParserHandle_t a_hParser, muErrorHandler_t a_pErrHandler); -API_EXPORT(const muChar_t*) mupGetErrorMsg(muParserHandle_t a_hParser); -API_EXPORT(muInt_t) mupGetErrorCode(muParserHandle_t a_hParser); -API_EXPORT(muInt_t) mupGetErrorPos(muParserHandle_t a_hParser); -API_EXPORT(const muChar_t*) mupGetErrorToken(muParserHandle_t a_hParser); -//API_EXPORT(const muChar_t*) mupGetErrorExpr(muParserHandle_t a_hParser); - -// This is used for .NET only. It creates a new variable allowing the dll to -// manage the variable rather than the .NET garbage collector. -API_EXPORT(muFloat_t*) mupCreateVar(); -API_EXPORT(void) mupReleaseVar(muFloat_t*); - -#ifdef __cplusplus -} -#endif - -#endif // include guard diff --git a/src/external/muparser_v225/include/muParserDef.h b/src/external/muparser_v225/include/muParserDef.h deleted file mode 100644 index 437f2eaf5..000000000 --- a/src/external/muparser_v225/include/muParserDef.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2014 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#ifndef MUP_DEF_H -#define MUP_DEF_H - -#include -#include -#include -#include - -#include "muParserFixes.h" - -/** \file - \brief This file contains standard definitions used by the parser. -*/ - -#define MUP_VERSION _T("2.2.5") -#define MUP_VERSION_DATE _T("20150427; GC") - -#define MUP_CHARS _T("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - -/** \brief If this macro is defined mathematical exceptions (div by zero) will be thrown as exceptions. */ -//#define MUP_MATH_EXCEPTIONS - -/** \brief Define the base datatype for values. - - This datatype must be a built in value type. You can not use custom classes. - It should be working with all types except "int"! -*/ -#define MUP_BASETYPE double - -/** \brief Activate this option in order to compile with OpenMP support. - - OpenMP is used only in the bulk mode it may increase the performance a bit. -*/ -//#define MUP_USE_OPENMP - -#if defined(_UNICODE) - /** \brief Definition of the basic parser string type. */ - #define MUP_STRING_TYPE std::wstring - - #if !defined(_T) - #define _T(x) L##x - #endif // not defined _T -#else - #ifndef _T - #define _T(x) x - #endif - - /** \brief Definition of the basic parser string type. */ - #define MUP_STRING_TYPE std::string -#endif - -#if defined(_DEBUG) - /** \brief Debug macro to force an abortion of the programm with a certain message. - */ - #define MUP_FAIL(MSG) \ - { \ - bool MSG=false; \ - assert(MSG); \ - } - - /** \brief An assertion that does not kill the program. - - This macro is neutralised in UNICODE builds. It's - too difficult to translate. - */ - #define MUP_ASSERT(COND) \ - if (!(COND)) \ - { \ - stringstream_type ss; \ - ss << _T("Assertion \"") _T(#COND) _T("\" failed: ") \ - << __FILE__ << _T(" line ") \ - << __LINE__ << _T("."); \ - throw ParserError( ss.str() ); \ - } -#else - #define MUP_FAIL(MSG) - #define MUP_ASSERT(COND) -#endif - - -namespace mu -{ -#if defined(_UNICODE) - - //------------------------------------------------------------------------------ - /** \brief Encapsulate wcout. */ - inline std::wostream& console() - { - return std::wcout; - } - - /** \brief Encapsulate cin. */ - inline std::wistream& console_in() - { - return std::wcin; - } - -#else - - /** \brief Encapsulate cout. - - Used for supporting UNICODE more easily. - */ - inline std::ostream& console() - { - return std::cout; - } - - /** \brief Encapsulate cin. - - Used for supporting UNICODE more easily. - */ - inline std::istream& console_in() - { - return std::cin; - } - -#endif - - //------------------------------------------------------------------------------ - /** \brief Bytecode values. - - \attention The order of the operator entries must match the order in ParserBase::c_DefaultOprt! - */ - enum ECmdCode - { - // The following are codes for built in binary operators - // apart from built in operators the user has the opportunity to - // add user defined operators. - cmLE = 0, ///< Operator item: less or equal - cmGE = 1, ///< Operator item: greater or equal - cmNEQ = 2, ///< Operator item: not equal - cmEQ = 3, ///< Operator item: equals - cmLT = 4, ///< Operator item: less than - cmGT = 5, ///< Operator item: greater than - cmADD = 6, ///< Operator item: add - cmSUB = 7, ///< Operator item: subtract - cmMUL = 8, ///< Operator item: multiply - cmDIV = 9, ///< Operator item: division - cmPOW = 10, ///< Operator item: y to the power of ... - cmLAND = 11, - cmLOR = 12, - cmASSIGN = 13, ///< Operator item: Assignment operator - cmBO = 14, ///< Operator item: opening bracket - cmBC = 15, ///< Operator item: closing bracket - cmIF = 16, ///< For use in the ternary if-then-else operator - cmELSE = 17, ///< For use in the ternary if-then-else operator - cmENDIF = 18, ///< For use in the ternary if-then-else operator - cmARG_SEP = 19, ///< function argument separator - cmVAR = 20, ///< variable item - cmVAL = 21, ///< value item - - // For optimization purposes - cmVARPOW2, - cmVARPOW3, - cmVARPOW4, - cmVARMUL, - cmPOW2, - - // operators and functions - cmFUNC, ///< Code for a generic function item - cmFUNC_STR, ///< Code for a function with a string parameter - cmFUNC_BULK, ///< Special callbacks for Bulk mode with an additional parameter for the bulk index - cmSTRING, ///< Code for a string token - cmOPRT_BIN, ///< user defined binary operator - cmOPRT_POSTFIX, ///< code for postfix operators - cmOPRT_INFIX, ///< code for infix operators - cmEND, ///< end of formula - cmUNKNOWN ///< uninitialized item - }; - - //------------------------------------------------------------------------------ - /** \brief Types internally used by the parser. - */ - enum ETypeCode - { - tpSTR = 0, ///< String type (Function arguments and constants only, no string variables) - tpDBL = 1, ///< Floating point variables - tpVOID = 2 ///< Undefined type. - }; - - //------------------------------------------------------------------------------ - enum EParserVersionInfo - { - pviBRIEF, - pviFULL - }; - - //------------------------------------------------------------------------------ - /** \brief Parser operator precedence values. */ - enum EOprtAssociativity - { - oaLEFT = 0, - oaRIGHT = 1, - oaNONE = 2 - }; - - //------------------------------------------------------------------------------ - /** \brief Parser operator precedence values. */ - enum EOprtPrecedence - { - // binary operators - prLOR = 1, - prLAND = 2, - prLOGIC = 3, ///< logic operators - prCMP = 4, ///< comparsion operators - prADD_SUB = 5, ///< addition - prMUL_DIV = 6, ///< multiplication/division - prPOW = 7, ///< power operator priority (highest) - - // infix operators - prINFIX = 6, ///< Signs have a higher priority than ADD_SUB, but lower than power operator - prPOSTFIX = 6 ///< Postfix operator priority (currently unused) - }; - - //------------------------------------------------------------------------------ - // basic types - - /** \brief The numeric datatype used by the parser. - - Normally this is a floating point type either single or double precision. - */ - typedef MUP_BASETYPE value_type; - - /** \brief The stringtype used by the parser. - - Depends on wether UNICODE is used or not. - */ - typedef MUP_STRING_TYPE string_type; - - /** \brief The character type used by the parser. - - Depends on wether UNICODE is used or not. - */ - typedef string_type::value_type char_type; - - /** \brief Typedef for easily using stringstream that respect the parser stringtype. */ - typedef std::basic_stringstream, - std::allocator > stringstream_type; - - // Data container types - - /** \brief Type used for storing variables. */ - typedef std::map varmap_type; - - /** \brief Type used for storing constants. */ - typedef std::map valmap_type; - - /** \brief Type for assigning a string name to an index in the internal string table. */ - typedef std::map strmap_type; - - // Parser callbacks - - /** \brief Callback type used for functions without arguments. */ - typedef value_type (*generic_fun_type)(); - - /** \brief Callback type used for functions without arguments. */ - typedef value_type (*fun_type0)(); - - /** \brief Callback type used for functions with a single arguments. */ - typedef value_type (*fun_type1)(value_type); - - /** \brief Callback type used for functions with two arguments. */ - typedef value_type (*fun_type2)(value_type, value_type); - - /** \brief Callback type used for functions with three arguments. */ - typedef value_type (*fun_type3)(value_type, value_type, value_type); - - /** \brief Callback type used for functions with four arguments. */ - typedef value_type (*fun_type4)(value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type5)(value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type6)(value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type7)(value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type8)(value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type9)(value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*fun_type10)(value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions without arguments. */ - typedef value_type (*bulkfun_type0)(int, int); - - /** \brief Callback type used for functions with a single arguments. */ - typedef value_type (*bulkfun_type1)(int, int, value_type); - - /** \brief Callback type used for functions with two arguments. */ - typedef value_type (*bulkfun_type2)(int, int, value_type, value_type); - - /** \brief Callback type used for functions with three arguments. */ - typedef value_type (*bulkfun_type3)(int, int, value_type, value_type, value_type); - - /** \brief Callback type used for functions with four arguments. */ - typedef value_type (*bulkfun_type4)(int, int, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type5)(int, int, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type6)(int, int, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type7)(int, int, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type8)(int, int, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type9)(int, int, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with five arguments. */ - typedef value_type (*bulkfun_type10)(int, int, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type, value_type); - - /** \brief Callback type used for functions with a variable argument list. */ - typedef value_type (*multfun_type)(const value_type*, int); - - /** \brief Callback type used for functions taking a string as an argument. */ - typedef value_type (*strfun_type1)(const char_type*); - - /** \brief Callback type used for functions taking a string and a value as arguments. */ - typedef value_type (*strfun_type2)(const char_type*, value_type); - - /** \brief Callback type used for functions taking a string and two values as arguments. */ - typedef value_type (*strfun_type3)(const char_type*, value_type, value_type); - - /** \brief Callback used for functions that identify values in a string. */ - typedef int (*identfun_type)(const char_type *sExpr, int *nPos, value_type *fVal); - - /** \brief Callback used for variable creation factory functions. */ - typedef value_type* (*facfun_type)(const char_type*, void*); -} // end of namespace - -#endif - diff --git a/src/external/muparser_v225/include/muParserError.h b/src/external/muparser_v225/include/muParserError.h deleted file mode 100644 index 7f88e9919..000000000 --- a/src/external/muparser_v225/include/muParserError.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_ERROR_H -#define MU_PARSER_ERROR_H - -#include -#include -#include -#include -#include -#include - -#include "muParserDef.h" - -/** \file - \brief This file defines the error class used by the parser. -*/ - -namespace mu -{ - -/** \brief Error codes. */ -enum EErrorCodes -{ - // Formula syntax errors - ecUNEXPECTED_OPERATOR = 0, ///< Unexpected binary operator found - ecUNASSIGNABLE_TOKEN = 1, ///< Token cant be identified. - ecUNEXPECTED_EOF = 2, ///< Unexpected end of formula. (Example: "2+sin(") - ecUNEXPECTED_ARG_SEP = 3, ///< An unexpected comma has been found. (Example: "1,23") - ecUNEXPECTED_ARG = 4, ///< An unexpected argument has been found - ecUNEXPECTED_VAL = 5, ///< An unexpected value token has been found - ecUNEXPECTED_VAR = 6, ///< An unexpected variable token has been found - ecUNEXPECTED_PARENS = 7, ///< Unexpected Parenthesis, opening or closing - ecUNEXPECTED_STR = 8, ///< A string has been found at an inapropriate position - ecSTRING_EXPECTED = 9, ///< A string function has been called with a different type of argument - ecVAL_EXPECTED = 10, ///< A numerical function has been called with a non value type of argument - ecMISSING_PARENS = 11, ///< Missing parens. (Example: "3*sin(3") - ecUNEXPECTED_FUN = 12, ///< Unexpected function found. (Example: "sin(8)cos(9)") - ecUNTERMINATED_STRING = 13, ///< unterminated string constant. (Example: "3*valueof("hello)") - ecTOO_MANY_PARAMS = 14, ///< Too many function parameters - ecTOO_FEW_PARAMS = 15, ///< Too few function parameters. (Example: "ite(1<2,2)") - ecOPRT_TYPE_CONFLICT = 16, ///< binary operators may only be applied to value items of the same type - ecSTR_RESULT = 17, ///< result is a string - - // Invalid Parser input Parameters - ecINVALID_NAME = 18, ///< Invalid function, variable or constant name. - ecINVALID_BINOP_IDENT = 19, ///< Invalid binary operator identifier - ecINVALID_INFIX_IDENT = 20, ///< Invalid function, variable or constant name. - ecINVALID_POSTFIX_IDENT = 21, ///< Invalid function, variable or constant name. - - ecBUILTIN_OVERLOAD = 22, ///< Trying to overload builtin operator - ecINVALID_FUN_PTR = 23, ///< Invalid callback function pointer - ecINVALID_VAR_PTR = 24, ///< Invalid variable pointer - ecEMPTY_EXPRESSION = 25, ///< The Expression is empty - ecNAME_CONFLICT = 26, ///< Name conflict - ecOPT_PRI = 27, ///< Invalid operator priority - // - ecDOMAIN_ERROR = 28, ///< catch division by zero, sqrt(-1), log(0) (currently unused) - ecDIV_BY_ZERO = 29, ///< Division by zero (currently unused) - ecGENERIC = 30, ///< Generic error - ecLOCALE = 31, ///< Conflict with current locale - - ecUNEXPECTED_CONDITIONAL = 32, - ecMISSING_ELSE_CLAUSE = 33, - ecMISPLACED_COLON = 34, - - ecUNREASONABLE_NUMBER_OF_COMPUTATIONS = 35, - - // internal errors - ecINTERNAL_ERROR = 36, ///< Internal error of any kind. - - // The last two are special entries - ecCOUNT, ///< This is no error code, It just stores just the total number of error codes - ecUNDEFINED = -1 ///< Undefined message, placeholder to detect unassigned error messages -}; - -//--------------------------------------------------------------------------- -/** \brief A class that handles the error messages. -*/ -class ParserErrorMsg -{ -public: - typedef ParserErrorMsg self_type; - - ParserErrorMsg& operator=(const ParserErrorMsg &); - ParserErrorMsg(const ParserErrorMsg&); - ParserErrorMsg(); - - ~ParserErrorMsg(); - - static const ParserErrorMsg& Instance(); - string_type operator[](unsigned a_iIdx) const; - -private: - std::vector m_vErrMsg; ///< A vector with the predefined error messages - static const self_type m_Instance; ///< The instance pointer -}; - -//--------------------------------------------------------------------------- -/** \brief Error class of the parser. - \author Ingo Berg - - Part of the math parser package. -*/ -class ParserError -{ -private: - - /** \brief Replace all ocuurences of a substring with another string. */ - void ReplaceSubString( string_type &strSource, - const string_type &strFind, - const string_type &strReplaceWith); - void Reset(); - -public: - - ParserError(); - explicit ParserError(EErrorCodes a_iErrc); - explicit ParserError(const string_type &sMsg); - ParserError( EErrorCodes a_iErrc, - const string_type &sTok, - const string_type &sFormula = string_type(), - int a_iPos = -1); - ParserError( EErrorCodes a_iErrc, - int a_iPos, - const string_type &sTok); - ParserError( const char_type *a_szMsg, - int a_iPos = -1, - const string_type &sTok = string_type()); - ParserError(const ParserError &a_Obj); - ParserError& operator=(const ParserError &a_Obj); - ~ParserError(); - - void SetFormula(const string_type &a_strFormula); - const string_type& GetExpr() const; - const string_type& GetMsg() const; - int GetPos() const; - const string_type& GetToken() const; - EErrorCodes GetCode() const; - -private: - string_type m_strMsg; ///< The message string - string_type m_strFormula; ///< Formula string - string_type m_strTok; ///< Token related with the error - int m_iPos; ///< Formula position related to the error - EErrorCodes m_iErrc; ///< Error code - const ParserErrorMsg &m_ErrMsg; -}; - -} // namespace mu - -#endif - diff --git a/src/external/muparser_v225/include/muParserFixes.h b/src/external/muparser_v225/include/muParserFixes.h deleted file mode 100644 index 1cd15e02e..000000000 --- a/src/external/muparser_v225/include/muParserFixes.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_FIXES_H -#define MU_PARSER_FIXES_H - -/** \file - \brief This file contains compatibility fixes for some platforms. -*/ - -// -// Compatibility fixes -// - -//--------------------------------------------------------------------------- -// -// Intel Compiler -// -//--------------------------------------------------------------------------- - -#ifdef __INTEL_COMPILER - -// remark #981: operands are evaluated in unspecified order -// disabled -> completely pointless if the functions do not have side effects -// -#pragma warning(disable:981) - -// remark #383: value copied to temporary, reference to temporary used -#pragma warning(disable:383) - -// remark #1572: floating-point equality and inequality comparisons are unreliable -// disabled -> everyone knows it, the parser passes this problem -// deliberately to the user -#pragma warning(disable:1572) - -#endif - -#endif // include guard - - diff --git a/src/external/muparser_v225/include/muParserInt.h b/src/external/muparser_v225/include/muParserInt.h deleted file mode 100644 index 136de3397..000000000 --- a/src/external/muparser_v225/include/muParserInt.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_INT_H -#define MU_PARSER_INT_H - -#include "muParserBase.h" -#include - - -/** \file - \brief Definition of a parser using integer value. -*/ - - -namespace mu -{ - -/** \brief Mathematical expressions parser. - - This version of the parser handles only integer numbers. It disables the built in operators thus it is - slower than muParser. Integer values are stored in the double value_type and converted if needed. -*/ -class ParserInt : public ParserBase -{ -private: - static int Round(value_type v) { return (int)(v + ((v>=0) ? 0.5 : -0.5) ); }; - - static value_type Abs(value_type); - static value_type Sign(value_type); - static value_type Ite(value_type, value_type, value_type); - // !! The unary Minus is a MUST, otherwise you cant use negative signs !! - static value_type UnaryMinus(value_type); - // Functions with variable number of arguments - static value_type Sum(const value_type* a_afArg, int a_iArgc); // sum - static value_type Min(const value_type* a_afArg, int a_iArgc); // minimum - static value_type Max(const value_type* a_afArg, int a_iArgc); // maximum - // binary operator callbacks - static value_type Add(value_type v1, value_type v2); - static value_type Sub(value_type v1, value_type v2); - static value_type Mul(value_type v1, value_type v2); - static value_type Div(value_type v1, value_type v2); - static value_type Mod(value_type v1, value_type v2); - static value_type Pow(value_type v1, value_type v2); - static value_type Shr(value_type v1, value_type v2); - static value_type Shl(value_type v1, value_type v2); - static value_type LogAnd(value_type v1, value_type v2); - static value_type LogOr(value_type v1, value_type v2); - static value_type And(value_type v1, value_type v2); - static value_type Or(value_type v1, value_type v2); - static value_type Xor(value_type v1, value_type v2); - static value_type Less(value_type v1, value_type v2); - static value_type Greater(value_type v1, value_type v2); - static value_type LessEq(value_type v1, value_type v2); - static value_type GreaterEq(value_type v1, value_type v2); - static value_type Equal(value_type v1, value_type v2); - static value_type NotEqual(value_type v1, value_type v2); - static value_type Not(value_type v1); - - static int IsHexVal(const char_type* a_szExpr, int *a_iPos, value_type *a_iVal); - static int IsBinVal(const char_type* a_szExpr, int *a_iPos, value_type *a_iVal); - static int IsVal (const char_type* a_szExpr, int *a_iPos, value_type *a_iVal); - - /** \brief A facet class used to change decimal and thousands separator. */ - template - class change_dec_sep : public std::numpunct - { - public: - - explicit change_dec_sep(char_type cDecSep, char_type cThousandsSep = 0, int nGroup = 3) - :std::numpunct() - ,m_cDecPoint(cDecSep) - ,m_cThousandsSep(cThousandsSep) - ,m_nGroup(nGroup) - {} - - protected: - - virtual char_type do_decimal_point() const - { - return m_cDecPoint; - } - - virtual char_type do_thousands_sep() const - { - return m_cThousandsSep; - } - - virtual std::string do_grouping() const - { - // fix for issue 4: https://code.google.com/p/muparser/issues/detail?id=4 - // courtesy of Jens Bartsch - // original code: - // return std::string(1, (char)m_nGroup); - // new code: - return std::string(1, (char)(m_cThousandsSep > 0 ? m_nGroup : CHAR_MAX)); - } - - private: - - int m_nGroup; - char_type m_cDecPoint; - char_type m_cThousandsSep; - }; - -public: - ParserInt(); - - virtual void InitFun(); - virtual void InitOprt(); - virtual void InitConst(); - virtual void InitCharSets(); -}; - -} // namespace mu - -#endif - diff --git a/src/external/muparser_v225/include/muParserStack.h b/src/external/muparser_v225/include/muParserStack.h deleted file mode 100644 index f8437e30e..000000000 --- a/src/external/muparser_v225/include/muParserStack.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_STACK_H -#define MU_PARSER_STACK_H - -#include -#include -#include -#include - -#include "muParserError.h" -#include "muParserToken.h" - -/** \file - \brief This file defines the stack used by muparser. -*/ - -namespace mu -{ - - /** \brief Parser stack implementation. - - Stack implementation based on a std::stack. The behaviour of pop() had been - slightly changed in order to get an error code if the stack is empty. - The stack is used within the Parser both as a value stack and as an operator stack. - - \author (C) 2004-2011 Ingo Berg - */ - template - class ParserStack - { - private: - - /** \brief Type of the underlying stack implementation. */ - typedef std::stack > impl_type; - - impl_type m_Stack; ///< This is the actual stack. - - public: - - //--------------------------------------------------------------------------- - ParserStack() - :m_Stack() - {} - - //--------------------------------------------------------------------------- - virtual ~ParserStack() - {} - - //--------------------------------------------------------------------------- - /** \brief Pop a value from the stack. - - Unlike the standard implementation this function will return the value that - is going to be taken from the stack. - - \throw ParserException in case the stack is empty. - \sa pop(int &a_iErrc) - */ - TValueType pop() - { - if (empty()) - throw ParserError( _T("stack is empty.") ); - - TValueType el = top(); - m_Stack.pop(); - return el; - } - - /** \brief Push an object into the stack. - - \param a_Val object to push into the stack. - \throw nothrow - */ - void push(const TValueType& a_Val) - { - m_Stack.push(a_Val); - } - - /** \brief Return the number of stored elements. */ - unsigned size() const - { - return (unsigned)m_Stack.size(); - } - - /** \brief Returns true if stack is empty false otherwise. */ - bool empty() const - { - return m_Stack.empty(); - } - - /** \brief Return reference to the top object in the stack. - - The top object is the one pushed most recently. - */ - TValueType& top() - { - return m_Stack.top(); - } - }; -} // namespace MathUtils - -#endif diff --git a/src/external/muparser_v225/include/muParserTemplateMagic.h b/src/external/muparser_v225/include/muParserTemplateMagic.h deleted file mode 100644 index 1626caea4..000000000 --- a/src/external/muparser_v225/include/muParserTemplateMagic.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef MU_PARSER_TEMPLATE_MAGIC_H -#define MU_PARSER_TEMPLATE_MAGIC_H - -#include -#include "muParserError.h" - - -namespace mu -{ - //----------------------------------------------------------------------------------------------- - // - // Compile time type detection - // - //----------------------------------------------------------------------------------------------- - - /** \brief A class singling out integer types at compile time using - template meta programming. - */ - template - struct TypeInfo - { - static bool IsInteger() { return false; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - template<> - struct TypeInfo - { - static bool IsInteger() { return true; } - }; - - - //----------------------------------------------------------------------------------------------- - // - // Standard math functions with dummy overload for integer types - // - //----------------------------------------------------------------------------------------------- - - /** \brief A template class for providing wrappers for essential math functions. - - This template is spezialized for several types in order to provide a unified interface - for parser internal math function calls regardless of the data type. - */ - template - struct MathImpl - { - static T Sin(T v) { return sin(v); } - static T Cos(T v) { return cos(v); } - static T Tan(T v) { return tan(v); } - static T ASin(T v) { return asin(v); } - static T ACos(T v) { return acos(v); } - static T ATan(T v) { return atan(v); } - static T ATan2(T v1, T v2) { return atan2(v1, v2); } - static T Sinh(T v) { return sinh(v); } - static T Cosh(T v) { return cosh(v); } - static T Tanh(T v) { return tanh(v); } - static T ASinh(T v) { return log(v + sqrt(v * v + 1)); } - static T ACosh(T v) { return log(v + sqrt(v * v - 1)); } - static T ATanh(T v) { return ((T)0.5 * log((1 + v) / (1 - v))); } - static T Log(T v) { return log(v); } - static T Log2(T v) { return log(v)/log((T)2); } // Logarithm base 2 - static T Log10(T v) { return log10(v); } // Logarithm base 10 - static T Exp(T v) { return exp(v); } - static T Abs(T v) { return (v>=0) ? v : -v; } - static T Sqrt(T v) { return sqrt(v); } - static T Rint(T v) { return floor(v + (T)0.5); } - static T Sign(T v) { return (T)((v<0) ? -1 : (v>0) ? 1 : 0); } - static T Pow(T v1, T v2) { return std::pow(v1, v2); } - }; -} - -#endif diff --git a/src/external/muparser_v225/include/muParserTest.h b/src/external/muparser_v225/include/muParserTest.h deleted file mode 100644 index c02b0218a..000000000 --- a/src/external/muparser_v225/include/muParserTest.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_TEST_H -#define MU_PARSER_TEST_H - -#include -#include -#include // for accumulate -#include "muParser.h" -#include "muParserInt.h" - -/** \file - \brief This file contains the parser test class. -*/ - -namespace mu -{ - /** \brief Namespace for test cases. */ - namespace Test - { - //------------------------------------------------------------------------------ - /** \brief Test cases for unit testing. - - (C) 2004-2011 Ingo Berg - */ - class ParserTester // final - { - private: - static int c_iCount; - - // Multiarg callbacks - static value_type f1of1(value_type v) { return v;}; - - static value_type f1of2(value_type v, value_type ) {return v;}; - static value_type f2of2(value_type , value_type v) {return v;}; - - static value_type f1of3(value_type v, value_type , value_type ) {return v;}; - static value_type f2of3(value_type , value_type v, value_type ) {return v;}; - static value_type f3of3(value_type , value_type , value_type v) {return v;}; - - static value_type f1of4(value_type v, value_type, value_type , value_type ) {return v;} - static value_type f2of4(value_type , value_type v, value_type , value_type ) {return v;} - static value_type f3of4(value_type , value_type, value_type v, value_type ) {return v;} - static value_type f4of4(value_type , value_type, value_type , value_type v) {return v;} - - static value_type f1of5(value_type v, value_type, value_type , value_type , value_type ) { return v; } - static value_type f2of5(value_type , value_type v, value_type , value_type , value_type ) { return v; } - static value_type f3of5(value_type , value_type, value_type v, value_type , value_type ) { return v; } - static value_type f4of5(value_type , value_type, value_type , value_type v, value_type ) { return v; } - static value_type f5of5(value_type , value_type, value_type , value_type , value_type v) { return v; } - - static value_type Min(value_type a_fVal1, value_type a_fVal2) { return (a_fVal1a_fVal2) ? a_fVal1 : a_fVal2; } - - static value_type plus2(value_type v1) { return v1+2; } - static value_type times3(value_type v1) { return v1*3; } - static value_type sqr(value_type v1) { return v1*v1; } - static value_type sign(value_type v) { return -v; } - static value_type add(value_type v1, value_type v2) { return v1+v2; } - static value_type land(value_type v1, value_type v2) { return (int)v1 & (int)v2; } - - - static value_type FirstArg(const value_type* a_afArg, int a_iArgc) - { - if (!a_iArgc) - throw mu::Parser::exception_type( _T("too few arguments for function FirstArg.") ); - - return a_afArg[0]; - } - - static value_type LastArg(const value_type* a_afArg, int a_iArgc) - { - if (!a_iArgc) - throw mu::Parser::exception_type( _T("too few arguments for function LastArg.") ); - - return a_afArg[a_iArgc-1]; - } - - static value_type Sum(const value_type* a_afArg, int a_iArgc) - { - if (!a_iArgc) - throw mu::Parser::exception_type( _T("too few arguments for function sum.") ); - - value_type fRes=0; - for (int i=0; i> val; - return (value_type)val; - } - - static value_type StrFun2(const char_type* v1, value_type v2) - { - int val(0); - stringstream_type(v1) >> val; - return (value_type)(val + v2); - } - - static value_type StrFun3(const char_type* v1, value_type v2, value_type v3) - { - int val(0); - stringstream_type(v1) >> val; - return val + v2 + v3; - } - - static value_type StrToFloat(const char_type* a_szMsg) - { - value_type val(0); - stringstream_type(a_szMsg) >> val; - return val; - } - - // postfix operator callback - static value_type Mega(value_type a_fVal) { return a_fVal * (value_type)1e6; } - static value_type Micro(value_type a_fVal) { return a_fVal * (value_type)1e-6; } - static value_type Milli(value_type a_fVal) { return a_fVal / (value_type)1e3; } - - // Custom value recognition - static int IsHexVal(const char_type *a_szExpr, int *a_iPos, value_type *a_fVal); - - int TestNames(); - int TestSyntax(); - int TestMultiArg(); - int TestPostFix(); - int TestExpression(); - int TestInfixOprt(); - int TestBinOprt(); - int TestVarConst(); - int TestInterface(); - int TestException(); - int TestStrArg(); - int TestIfThenElse(); - int TestBulkMode(); - - void Abort() const; - - public: - typedef int (ParserTester::*testfun_type)(); - - ParserTester(); - void Run(); - - private: - std::vector m_vTestFun; - void AddTest(testfun_type a_pFun); - - // Test Double Parser - int EqnTest(const string_type& a_str, double a_fRes, bool a_fPass); - int EqnTestWithVarChange(const string_type& a_str, - double a_fRes1, - double a_fVar1, - double a_fRes2, - double a_fVar2); - int ThrowTest(const string_type& a_str, int a_iErrc, bool a_bFail = true); - - // Test Int Parser - int EqnTestInt(const string_type& a_str, double a_fRes, bool a_fPass); - - // Test Bulkmode - int EqnTestBulk(const string_type& a_str, double a_fRes[4], bool a_fPass); - }; - } // namespace Test -} // namespace mu - -#endif - - diff --git a/src/external/muparser_v225/include/muParserToken.h b/src/external/muparser_v225/include/muParserToken.h deleted file mode 100644 index fc91d7818..000000000 --- a/src/external/muparser_v225/include/muParserToken.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_TOKEN_H -#define MU_PARSER_TOKEN_H - -#include -#include -#include -#include -#include - -#include "muParserError.h" -#include "muParserCallback.h" - -/** \file - \brief This file contains the parser token definition. -*/ - -namespace mu -{ - /** \brief Encapsulation of the data for a single formula token. - - Formula token implementation. Part of the Math Parser Package. - Formula tokens can be either one of the following: -
    -
  • value
  • -
  • variable
  • -
  • function with numerical arguments
  • -
  • functions with a string as argument
  • -
  • prefix operators
  • -
  • infix operators
  • -
  • binary operator
  • -
- - \author (C) 2004-2013 Ingo Berg - */ - template - class ParserToken - { - private: - - ECmdCode m_iCode; ///< Type of the token; The token type is a constant of type #ECmdCode. - ETypeCode m_iType; - void *m_pTok; ///< Stores Token pointer; not applicable for all tokens - int m_iIdx; ///< An otional index to an external buffer storing the token data - TString m_strTok; ///< Token string - TString m_strVal; ///< Value for string variables - value_type m_fVal; ///< the value - std::auto_ptr m_pCallback; - - public: - - //--------------------------------------------------------------------------- - /** \brief Constructor (default). - - Sets token to an neutral state of type cmUNKNOWN. - \throw nothrow - \sa ECmdCode - */ - ParserToken() - :m_iCode(cmUNKNOWN) - ,m_iType(tpVOID) - ,m_pTok(0) - ,m_iIdx(-1) - ,m_strTok() - ,m_strVal() - ,m_fVal(0) - ,m_pCallback() - {} - - //------------------------------------------------------------------------------ - /** \brief Create token from another one. - - Implemented by calling Assign(...) - \throw nothrow - \post m_iType==cmUNKNOWN - \sa #Assign - */ - ParserToken(const ParserToken &a_Tok) - { - Assign(a_Tok); - } - - //------------------------------------------------------------------------------ - /** \brief Assignement operator. - - Copy token state from another token and return this. - Implemented by calling Assign(...). - \throw nothrow - */ - ParserToken& operator=(const ParserToken &a_Tok) - { - Assign(a_Tok); - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief Copy token information from argument. - - \throw nothrow - */ - void Assign(const ParserToken &a_Tok) - { - m_iCode = a_Tok.m_iCode; - m_pTok = a_Tok.m_pTok; - m_strTok = a_Tok.m_strTok; - m_iIdx = a_Tok.m_iIdx; - m_strVal = a_Tok.m_strVal; - m_iType = a_Tok.m_iType; - m_fVal = a_Tok.m_fVal; - // create new callback object if a_Tok has one - m_pCallback.reset(a_Tok.m_pCallback.get() ? a_Tok.m_pCallback->Clone() : 0); - } - - //------------------------------------------------------------------------------ - /** \brief Assign a token type. - - Token may not be of type value, variable or function. Those have seperate set functions. - - \pre [assert] a_iType!=cmVAR - \pre [assert] a_iType!=cmVAL - \pre [assert] a_iType!=cmFUNC - \post m_fVal = 0 - \post m_pTok = 0 - */ - ParserToken& Set(ECmdCode a_iType, const TString &a_strTok=TString()) - { - // The following types cant be set this way, they have special Set functions - assert(a_iType!=cmVAR); - assert(a_iType!=cmVAL); - assert(a_iType!=cmFUNC); - - m_iCode = a_iType; - m_iType = tpVOID; - m_pTok = 0; - m_strTok = a_strTok; - m_iIdx = -1; - - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief Set Callback type. */ - ParserToken& Set(const ParserCallback &a_pCallback, const TString &a_sTok) - { - assert(a_pCallback.GetAddr()); - - m_iCode = a_pCallback.GetCode(); - m_iType = tpVOID; - m_strTok = a_sTok; - m_pCallback.reset(new ParserCallback(a_pCallback)); - - m_pTok = 0; - m_iIdx = -1; - - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief Make this token a value token. - - Member variables not necessary for value tokens will be invalidated. - \throw nothrow - */ - ParserToken& SetVal(TBase a_fVal, const TString &a_strTok=TString()) - { - m_iCode = cmVAL; - m_iType = tpDBL; - m_fVal = a_fVal; - m_strTok = a_strTok; - m_iIdx = -1; - - m_pTok = 0; - m_pCallback.reset(0); - - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief make this token a variable token. - - Member variables not necessary for variable tokens will be invalidated. - \throw nothrow - */ - ParserToken& SetVar(TBase *a_pVar, const TString &a_strTok) - { - m_iCode = cmVAR; - m_iType = tpDBL; - m_strTok = a_strTok; - m_iIdx = -1; - m_pTok = (void*)a_pVar; - m_pCallback.reset(0); - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief Make this token a variable token. - - Member variables not necessary for variable tokens will be invalidated. - \throw nothrow - */ - ParserToken& SetString(const TString &a_strTok, std::size_t a_iSize) - { - m_iCode = cmSTRING; - m_iType = tpSTR; - m_strTok = a_strTok; - m_iIdx = static_cast(a_iSize); - - m_pTok = 0; - m_pCallback.reset(0); - return *this; - } - - //------------------------------------------------------------------------------ - /** \brief Set an index associated with the token related data. - - In cmSTRFUNC - This is the index to a string table in the main parser. - \param a_iIdx The index the string function result will take in the bytecode parser. - \throw exception_type if #a_iIdx<0 or #m_iType!=cmSTRING - */ - void SetIdx(int a_iIdx) - { - if (m_iCode!=cmSTRING || a_iIdx<0) - throw ParserError(ecINTERNAL_ERROR); - - m_iIdx = a_iIdx; - } - - //------------------------------------------------------------------------------ - /** \brief Return Index associated with the token related data. - - In cmSTRFUNC - This is the index to a string table in the main parser. - - \throw exception_type if #m_iIdx<0 or #m_iType!=cmSTRING - \return The index the result will take in the Bytecode calculatin array (#m_iIdx). - */ - int GetIdx() const - { - if (m_iIdx<0 || m_iCode!=cmSTRING ) - throw ParserError(ecINTERNAL_ERROR); - - return m_iIdx; - } - - //------------------------------------------------------------------------------ - /** \brief Return the token type. - - \return #m_iType - \throw nothrow - */ - ECmdCode GetCode() const - { - if (m_pCallback.get()) - { - return m_pCallback->GetCode(); - } - else - { - return m_iCode; - } - } - - //------------------------------------------------------------------------------ - ETypeCode GetType() const - { - if (m_pCallback.get()) - { - return m_pCallback->GetType(); - } - else - { - return m_iType; - } - } - - //------------------------------------------------------------------------------ - int GetPri() const - { - if ( !m_pCallback.get()) - throw ParserError(ecINTERNAL_ERROR); - - if ( m_pCallback->GetCode()!=cmOPRT_BIN && m_pCallback->GetCode()!=cmOPRT_INFIX) - throw ParserError(ecINTERNAL_ERROR); - - return m_pCallback->GetPri(); - } - - //------------------------------------------------------------------------------ - EOprtAssociativity GetAssociativity() const - { - if (m_pCallback.get()==NULL || m_pCallback->GetCode()!=cmOPRT_BIN) - throw ParserError(ecINTERNAL_ERROR); - - return m_pCallback->GetAssociativity(); - } - - //------------------------------------------------------------------------------ - /** \brief Return the address of the callback function assoziated with - function and operator tokens. - - \return The pointer stored in #m_pTok. - \throw exception_type if token type is non of: -
    -
  • cmFUNC
  • -
  • cmSTRFUNC
  • -
  • cmPOSTOP
  • -
  • cmINFIXOP
  • -
  • cmOPRT_BIN
  • -
- \sa ECmdCode - */ - generic_fun_type GetFuncAddr() const - { - return (m_pCallback.get()) ? (generic_fun_type)m_pCallback->GetAddr() : 0; - } - - //------------------------------------------------------------------------------ - /** \biref Get value of the token. - - Only applicable to variable and value tokens. - \throw exception_type if token is no value/variable token. - */ - TBase GetVal() const - { - switch (m_iCode) - { - case cmVAL: return m_fVal; - case cmVAR: return *((TBase*)m_pTok); - default: throw ParserError(ecVAL_EXPECTED); - } - } - - //------------------------------------------------------------------------------ - /** \brief Get address of a variable token. - - Valid only if m_iType==CmdVar. - \throw exception_type if token is no variable token. - */ - TBase* GetVar() const - { - if (m_iCode!=cmVAR) - throw ParserError(ecINTERNAL_ERROR); - - return (TBase*)m_pTok; - } - - //------------------------------------------------------------------------------ - /** \brief Return the number of function arguments. - - Valid only if m_iType==CmdFUNC. - */ - int GetArgCount() const - { - assert(m_pCallback.get()); - - if (!m_pCallback->GetAddr()) - throw ParserError(ecINTERNAL_ERROR); - - return m_pCallback->GetArgc(); - } - - //------------------------------------------------------------------------------ - /** \brief Return the token identifier. - - If #m_iType is cmSTRING the token identifier is the value of the string argument - for a string function. - \return #m_strTok - \throw nothrow - \sa m_strTok - */ - const TString& GetAsString() const - { - return m_strTok; - } - }; -} // namespace mu - -#endif diff --git a/src/external/muparser_v225/include/muParserTokenReader.h b/src/external/muparser_v225/include/muParserTokenReader.h deleted file mode 100644 index 9d96225d9..000000000 --- a/src/external/muparser_v225/include/muParserTokenReader.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef MU_PARSER_TOKEN_READER_H -#define MU_PARSER_TOKEN_READER_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "muParserDef.h" -#include "muParserToken.h" - -/** \file - \brief This file contains the parser token reader definition. -*/ - - -namespace mu -{ - // Forward declaration - class ParserBase; - - /** \brief Token reader for the ParserBase class. - - */ - class ParserTokenReader - { - private: - - typedef ParserToken token_type; - - public: - - ParserTokenReader(ParserBase *a_pParent); - ParserTokenReader* Clone(ParserBase *a_pParent) const; - - void AddValIdent(identfun_type a_pCallback); - void SetVarCreator(facfun_type a_pFactory, void *pUserData); - void SetFormula(const string_type &a_strFormula); - void SetArgSep(char_type cArgSep); - - int GetPos() const; - const string_type& GetExpr() const; - varmap_type& GetUsedVar(); - char_type GetArgSep() const; - - void IgnoreUndefVar(bool bIgnore); - void ReInit(); - token_type ReadNextToken(); - - private: - - /** \brief Syntax codes. - - The syntax codes control the syntax check done during the first time parsing of - the expression string. They are flags that indicate which tokens are allowed next - if certain tokens are identified. - */ - enum ESynCodes - { - noBO = 1 << 0, ///< to avoid i.e. "cos(7)(" - noBC = 1 << 1, ///< to avoid i.e. "sin)" or "()" - noVAL = 1 << 2, ///< to avoid i.e. "tan 2" or "sin(8)3.14" - noVAR = 1 << 3, ///< to avoid i.e. "sin a" or "sin(8)a" - noARG_SEP = 1 << 4, ///< to avoid i.e. ",," or "+," ... - noFUN = 1 << 5, ///< to avoid i.e. "sqrt cos" or "(1)sin" - noOPT = 1 << 6, ///< to avoid i.e. "(+)" - noPOSTOP = 1 << 7, ///< to avoid i.e. "(5!!)" "sin!" - noINFIXOP = 1 << 8, ///< to avoid i.e. "++4" "!!4" - noEND = 1 << 9, ///< to avoid unexpected end of formula - noSTR = 1 << 10, ///< to block numeric arguments on string functions - noASSIGN = 1 << 11, ///< to block assignement to constant i.e. "4=7" - noIF = 1 << 12, - noELSE = 1 << 13, - sfSTART_OF_LINE = noOPT | noBC | noPOSTOP | noASSIGN | noIF | noELSE | noARG_SEP, - noANY = ~0 ///< All of he above flags set - }; - - ParserTokenReader(const ParserTokenReader &a_Reader); - ParserTokenReader& operator=(const ParserTokenReader &a_Reader); - void Assign(const ParserTokenReader &a_Reader); - - void SetParent(ParserBase *a_pParent); - int ExtractToken(const char_type *a_szCharSet, - string_type &a_strTok, - int a_iPos) const; - int ExtractOperatorToken(string_type &a_sTok, int a_iPos) const; - - bool IsBuiltIn(token_type &a_Tok); - bool IsArgSep(token_type &a_Tok); - bool IsEOF(token_type &a_Tok); - bool IsInfixOpTok(token_type &a_Tok); - bool IsFunTok(token_type &a_Tok); - bool IsPostOpTok(token_type &a_Tok); - bool IsOprt(token_type &a_Tok); - bool IsValTok(token_type &a_Tok); - bool IsVarTok(token_type &a_Tok); - bool IsStrVarTok(token_type &a_Tok); - bool IsUndefVarTok(token_type &a_Tok); - bool IsString(token_type &a_Tok); - void Error(EErrorCodes a_iErrc, - int a_iPos = -1, - const string_type &a_sTok = string_type() ) const; - - token_type& SaveBeforeReturn(const token_type &tok); - - ParserBase *m_pParser; - string_type m_strFormula; - int m_iPos; - int m_iSynFlags; - bool m_bIgnoreUndefVar; - - const funmap_type *m_pFunDef; - const funmap_type *m_pPostOprtDef; - const funmap_type *m_pInfixOprtDef; - const funmap_type *m_pOprtDef; - const valmap_type *m_pConstDef; - const strmap_type *m_pStrVarDef; - varmap_type *m_pVarDef; ///< The only non const pointer to parser internals - facfun_type m_pFactory; - void *m_pFactoryData; - std::list m_vIdentFun; ///< Value token identification function - varmap_type m_UsedVar; - value_type m_fZero; ///< Dummy value of zero, referenced by undefined variables - int m_iBrackets; - token_type m_lastTok; - char_type m_cArgSep; ///< The character used for separating function arguments - }; -} // namespace mu - -#endif - - diff --git a/src/external/muparser_v225/lib/Readme.txt b/src/external/muparser_v225/lib/Readme.txt deleted file mode 100644 index 7240cc374..000000000 --- a/src/external/muparser_v225/lib/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -Here goes the libraries (both static and shared) for this component. \ No newline at end of file diff --git a/src/external/muparser_v225/samples/example1/example1.cpp b/src/external/muparser_v225/samples/example1/example1.cpp deleted file mode 100644 index 5f7d95e1d..000000000 --- a/src/external/muparser_v225/samples/example1/example1.cpp +++ /dev/null @@ -1,592 +0,0 @@ -//--------------------------------------------------------------------------- -// -// __________ -// _____ __ __\______ \_____ _______ ______ ____ _______ -// / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ -// | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ -// |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| -// \/ \/ \/ \/ -// (C) 2015 Ingo Berg -// -// example1.cpp - using the parser as a static library -// -//--------------------------------------------------------------------------- - -#include "muParserTest.h" - -#if defined(_WIN32) && defined(_DEBUG) - #define _CRTDBG_MAP_ALLOC - #include - #include - #define CREATE_LEAKAGE_REPORT -#endif - -#if defined( USINGDLL ) && defined( _WIN32 ) -#error This sample can be used only with STATIC builds of muParser (on win32) -#endif - -/** \brief This macro will enable mathematical constants like M_PI. */ -#define _USE_MATH_DEFINES - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "muParser.h" - -using namespace std; -using namespace mu; - - -#if defined(CREATE_LEAKAGE_REPORT) - -// Dumping memory leaks in the destructor of the static guard -// guarantees i won't get false positives from the ParserErrorMsg -// class wich is a singleton with a static instance. -struct DumpLeaks -{ - ~DumpLeaks() - { - _CrtDumpMemoryLeaks(); - } -} static LeakDumper; - -#endif - -// Forward declarations -void CalcBulk(); - -// Operator callback functions -value_type Mega(value_type a_fVal) { return a_fVal * 1e6; } -value_type Milli(value_type a_fVal) { return a_fVal / (value_type)1e3; } -value_type Rnd(value_type v) { return v*std::rand()/(value_type)(RAND_MAX+1.0); } -value_type Not(value_type v) { return v==0; } -value_type Add(value_type v1, value_type v2) { return v1+v2; } -value_type Mul(value_type v1, value_type v2) { return v1*v2; } - -//--------------------------------------------------------------------------- -value_type ThrowAnException(value_type) -{ - throw std::runtime_error("This function does throw an exception."); -} - -//--------------------------------------------------------------------------- -value_type BulkFun1(int nBulkIdx, int nThreadIdx, value_type v1) -{ - // Note: I'm just doing something with all three parameters to shut - // compiler warnings up! - return nBulkIdx + nThreadIdx + v1; -} - -//--------------------------------------------------------------------------- -value_type Ping() -{ - mu::console() << "ping\n"; - return 0; -} - -//--------------------------------------------------------------------------- -value_type StrFun0(const char_type *szMsg) -{ - if (szMsg) - mu::console() << szMsg << std::endl; - - return 999; -} - -//--------------------------------------------------------------------------- -value_type StrFun2(const char_type *v1, value_type v2,value_type v3) -{ - mu::console() << v1 << std::endl; - return v2+v3; -} - -//--------------------------------------------------------------------------- -value_type Debug(mu::value_type v1, mu::value_type v2) -{ - ParserBase::EnableDebugDump(v1!=0, v2!=0); - mu::console() << _T("Bytecode dumping ") << ((v1!=0) ? _T("active") : _T("inactive")) << _T("\n"); - return 1; -} - -//--------------------------------------------------------------------------- -// Factory function for creating new parser variables -// This could as well be a function performing database queries. -value_type* AddVariable(const char_type *a_szName, void *a_pUserData) -{ - // I don't want dynamic allocation here, so i used this static buffer - // If you want dynamic allocation you must allocate all variables dynamically - // in order to delete them later on. Or you find other ways to keep track of - // variables that have been created implicitely. - static value_type afValBuf[100]; - static int iVal = -1; - - ++iVal; - - mu::console() << _T("Generating new variable \"") - << a_szName << std::dec << _T("\" (slots left: ") - << 99-iVal << _T(")") - << _T(" User data pointer is:") - << std::hex << a_pUserData <=99) - throw mu::ParserError( _T("Variable buffer overflow.") ); - else - return &afValBuf[iVal]; -} - -int IsHexValue(const char_type *a_szExpr, int *a_iPos, value_type *a_fVal) -{ - if (a_szExpr[1]==0 || (a_szExpr[0]!='0' || a_szExpr[1]!='x') ) - return 0; - - unsigned iVal(0); - - // New code based on streams for UNICODE compliance: - stringstream_type::pos_type nPos(0); - stringstream_type ss(a_szExpr + 2); - ss >> std::hex >> iVal; - nPos = ss.tellg(); - - if (nPos==(stringstream_type::pos_type)0) - return 1; - - *a_iPos += (int)(2 + nPos); - *a_fVal = (value_type)iVal; - - return 1; -} - -//--------------------------------------------------------------------------- -void Splash() -{ - mu::console() << _T(" __________ \n"); - mu::console() << _T(" _____ __ __\\______ \\_____ _______ ______ ____ _______\n"); - mu::console() << _T(" / \\ | | \\| ___/\\__ \\ \\_ __ \\/ ___/_/ __ \\\\_ __ \\ \n"); - mu::console() << _T(" | Y Y \\| | /| | / __ \\_| | \\/\\___ \\ \\ ___/ | | \\/ \n"); - mu::console() << _T(" |__|_| /|____/ |____| (____ /|__| /____ > \\___ >|__| \n"); - mu::console() << _T(" \\/ \\/ \\/ \\/ \n"); - mu::console() << _T(" Version ") << Parser().GetVersion(pviFULL) << _T("\n"); - mu::console() << _T(" (C) 2015 Ingo Berg\n"); -} - -//--------------------------------------------------------------------------- -value_type SelfTest() -{ - mu::console() << _T( "-----------------------------------------------------------\n"); - mu::console() << _T( "Running test suite:\n\n"); - - // Skip the self test if the value type is set to an integer type. - if (mu::TypeInfo::IsInteger()) - { - mu::console() << _T( " Test skipped: integer data type are not compatible with the unit test!\n\n"); - } - else - { - mu::Test::ParserTester pt; - pt.Run(); - } - - return 0; -} - -//--------------------------------------------------------------------------- -value_type Help() -{ - mu::console() << _T( "-----------------------------------------------------------\n"); - mu::console() << _T( "Commands:\n\n"); - mu::console() << _T( " list var - list parser variables\n"); - mu::console() << _T( " list exprvar - list expression variables\n"); - mu::console() << _T( " list const - list all numeric parser constants\n"); - mu::console() << _T( " opt on - enable optimizer (default)\n"); - mu::console() << _T( " opt off - disable optimizer\n"); - mu::console() << _T( " locale de - switch to german locale\n"); - mu::console() << _T( " locale en - switch to english locale\n"); - mu::console() << _T( " locale reset - reset locale\n"); - mu::console() << _T( " test bulk - test bulk mode\n"); - mu::console() << _T( " quit - exits the parser\n"); - mu::console() << _T( "\nConstants:\n\n"); - mu::console() << _T( " \"_e\" 2.718281828459045235360287\n"); - mu::console() << _T( " \"_pi\" 3.141592653589793238462643\n"); - mu::console() << _T( "-----------------------------------------------------------\n"); - return 0; -} - -//--------------------------------------------------------------------------- -/* -void CheckLocale() -{ - // Local names: - // "C" - the classic C locale - // "de_DE" - not for Windows? - // "en_US" - not for Windows? - // "German_germany" - For MSVC8 - try - { - std::locale loc("German_germany"); - console() << _T("Locale settings:\n"); - console() << _T(" Decimal point: '") << std::use_facet >(loc).decimal_point() << _T("'\n"); - console() << _T(" Thousands sep: '") << std::use_facet >(loc).thousands_sep() << _T("'\n"); - console() << _T(" Grouping: '") << std::use_facet >(loc).grouping() << _T("'\n"); - console() << _T(" True is named: '") << std::use_facet >(loc).truename() << _T("'\n"); - console() << _T(" False is named: '") << std::use_facet >(loc).falsename() << _T("'\n"); - console() << _T("-----------------------------------------------------------\n"); - } - catch(...) - { - console() << _T("Locale settings:\n"); - console() << _T(" invalid locale name\n"); - console() << _T("-----------------------------------------------------------\n"); - } -} - -//--------------------------------------------------------------------------- -void CheckDiff() -{ - mu::Parser parser; - value_type x = 1, - v1, - v2, - v3, - eps(pow(std::numeric_limits::epsilon(), 0.2)); - parser.DefineVar(_T("x"), &x); - parser.SetExpr(_T("_e^-x*sin(x)")); - - v1 = parser.Diff(&x, 1), - v2 = parser.Diff(&x, 1, eps); - v3 = cos((value_type)1.0)/exp((value_type)1) - sin((value_type)1.0)/exp((value_type)1); //-0.110793765307; - mu::console() << parser.GetExpr() << _T("\n"); - mu::console() << _T("v1 = ") << v1 << _T("; v1-v3 = ") << v1-v3 << _T("\n"); - mu::console() << _T("v2 = ") << v2 << _T("; v2-v3 = ") << v2-v3 << _T("\n"); -} -*/ - -//--------------------------------------------------------------------------- -void ListVar(const mu::ParserBase &parser) -{ - // Query the used variables (must be done after calc) - mu::varmap_type variables = parser.GetVar(); - if (!variables.size()) - return; - - cout << "\nParser variables:\n"; - cout << "-----------------\n"; - cout << "Number: " << (int)variables.size() << "\n"; - varmap_type::const_iterator item = variables.begin(); - for (; item!=variables.end(); ++item) - mu::console() << _T("Name: ") << item->first << _T(" Address: [0x") << item->second << _T("]\n"); -} - -//--------------------------------------------------------------------------- -void ListConst(const mu::ParserBase &parser) -{ - mu::console() << _T("\nParser constants:\n"); - mu::console() << _T("-----------------\n"); - - mu::valmap_type cmap = parser.GetConst(); - if (!cmap.size()) - { - mu::console() << _T("Expression does not contain constants\n"); - } - else - { - valmap_type::const_iterator item = cmap.begin(); - for (; item!=cmap.end(); ++item) - mu::console() << _T(" ") << item->first << _T(" = ") << item->second << _T("\n"); - } -} - -//--------------------------------------------------------------------------- -void ListExprVar(const mu::ParserBase &parser) -{ - string_type sExpr = parser.GetExpr(); - if (sExpr.length()==0) - { - cout << _T("Expression string is empty\n"); - return; - } - - // Query the used variables (must be done after calc) - mu::console() << _T("\nExpression variables:\n"); - mu::console() << _T("---------------------\n"); - mu::console() << _T("Expression: ") << parser.GetExpr() << _T("\n"); - - varmap_type variables = parser.GetUsedVar(); - if (!variables.size()) - { - mu::console() << _T("Expression does not contain variables\n"); - } - else - { - mu::console() << _T("Number: ") << (int)variables.size() << _T("\n"); - mu::varmap_type::const_iterator item = variables.begin(); - for (; item!=variables.end(); ++item) - mu::console() << _T("Name: ") << item->first << _T(" Address: [0x") << item->second << _T("]\n"); - } -} - -//--------------------------------------------------------------------------- -/** \brief Check for external keywords. -*/ -int CheckKeywords(const mu::char_type *a_szLine, mu::Parser &a_Parser) -{ - string_type sLine(a_szLine); - - if ( sLine == _T("quit") ) - { - return -1; - } - else if ( sLine == _T("list var") ) - { - ListVar(a_Parser); - return 1; - } - else if ( sLine == _T("opt on") ) - { - a_Parser.EnableOptimizer(true); - mu::console() << _T("Optimizer enabled\n"); - return 1; - } - else if ( sLine == _T("opt off") ) - { - a_Parser.EnableOptimizer(false); - mu::console() << _T("Optimizer disabled\n"); - return 1; - } - else if ( sLine == _T("list const") ) - { - ListConst(a_Parser); - return 1; - } - else if ( sLine == _T("list exprvar") ) - { - ListExprVar(a_Parser); - return 1; - } - else if ( sLine == _T("locale de") ) - { - mu::console() << _T("Setting german locale: ArgSep=';' DecSep=',' ThousandsSep='.'\n"); - a_Parser.SetArgSep(';'); - a_Parser.SetDecSep(','); - a_Parser.SetThousandsSep('.'); - return 1; - } - else if ( sLine == _T("locale en") ) - { - mu::console() << _T("Setting english locale: ArgSep=',' DecSep='.' ThousandsSep=''\n"); - a_Parser.SetArgSep(','); - a_Parser.SetDecSep('.'); - a_Parser.SetThousandsSep(); - return 1; - } - else if ( sLine == _T("locale reset") ) - { - mu::console() << _T("Resetting locale\n"); - a_Parser.ResetLocale(); - return 1; - } - else if ( sLine == _T("test bulk") ) - { - mu::console() << _T("Testing bulk mode\n"); - CalcBulk(); - return 1; - } - - return 0; -} - -//--------------------------------------------------------------------------- -void CalcBulk() -{ - const int nBulkSize = 200; - value_type *x = new value_type[nBulkSize]; - value_type *y = new value_type[nBulkSize]; - value_type *result = new value_type[nBulkSize]; - - try - { - for (int i=0; i1) - { - mu::console() << _T("Multiple return values detected! Complete list:\n"); - - // this is the hard way if you need to retrieve multiple subexpression - // results - value_type *v = parser.Eval(nNum); - mu::console() << std::setprecision(12); - for (int i=0; i> sBuf; - } - catch(std::exception & /*exc*/) - { - // there is no unicode compliant way to query exc.what() - // so i'll leave it for this example. - console() << _T("aborting...\n"); - } - - return 0; -} diff --git a/src/external/muparser_v225/samples/example2/Readme.txt b/src/external/muparser_v225/samples/example2/Readme.txt deleted file mode 100644 index 981434292..000000000 --- a/src/external/muparser_v225/samples/example2/Readme.txt +++ /dev/null @@ -1,18 +0,0 @@ - - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - - Copyright (C) 2010 - Ingo Berg - - -This sample demonstrates using muParsers C-interface. The C-Interface -is usefull when interfacing muParser from different languages such -as C#. This sample is intended for use with the MS-Windows OS. - -You may need to copy the muparser.dll file from the ..\..\lib -folder in this directory in order to run this sample. diff --git a/src/external/muparser_v225/samples/example2/example2.c b/src/external/muparser_v225/samples/example2/example2.c deleted file mode 100644 index b14a541da..000000000 --- a/src/external/muparser_v225/samples/example2/example2.c +++ /dev/null @@ -1,442 +0,0 @@ -#include -#include -#include -#include - -#include "muParserDLL.h" - -#define PARSER_CONST_PI 3.141592653589793238462643 -#define PARSER_CONST_E 2.718281828459045235360287 -#define PARSER_MAXVARS 10 - -#ifndef _UNICODE - #define _T(x) x - #define myprintf printf - #define mystrlen strlen - #define myfgets fgets - #define mystrcmp strcmp -#else - #define _T(x) L ##x - #define myprintf wprintf - #define mystrlen wcslen - #define myfgets fgetws - #define mystrcmp wcscmp -#endif - -extern void CalcBulk(); - -//--------------------------------------------------------------------------- -// Callbacks for postfix operators -muFloat_t Mega(muFloat_t a_fVal) -{ - return a_fVal * 1.0e6; -} - -muFloat_t Milli(muFloat_t a_fVal) -{ - return a_fVal / 1.0e3; -} - -muFloat_t ZeroArg() -{ - myprintf(_T("i'm a function without arguments.\n")); - return 123; -} - -muFloat_t BulkTest(int nBulkIdx, int nThreadIdx, muFloat_t v1) -{ - (void*)&nThreadIdx; // STFU compiler warning... - myprintf(_T("%d,%2.2f\n"), nBulkIdx, v1); - return v1 / (nBulkIdx + 1); -} - -//--------------------------------------------------------------------------- -// Callbacks for infix operators -muFloat_t Not(muFloat_t v) { return v == 0; } - -//--------------------------------------------------------------------------- -// Function callbacks -muFloat_t Rnd(muFloat_t v) { return v * rand() / (muFloat_t)(RAND_MAX + 1.0); } - -muFloat_t SampleQuery(const muChar_t *szMsg) -{ - if (szMsg) - { - myprintf(_T("%s\n"), szMsg); - } - - return 999; -} - -muFloat_t Sum(const muFloat_t *a_afArg, int a_iArgc) -{ - muFloat_t fRes = 0; - int i = 0; - - for (i = 0; i < a_iArgc; ++i) - fRes += a_afArg[i]; - - return fRes; -} - -//--------------------------------------------------------------------------- -// Binarty operator callbacks -muFloat_t Add(muFloat_t v1, muFloat_t v2) -{ - return v1 + v2; -} - -muFloat_t Mul(muFloat_t v1, muFloat_t v2) -{ - return v1*v2; -} - -//--------------------------------------------------------------------------- -// Factory function for creating new parser variables -// This could as well be a function performing database queries. -muFloat_t* AddVariable(const muChar_t* a_szName, void *pUserData) -{ - static muFloat_t afValBuf[PARSER_MAXVARS]; // I don't want dynamic allocation here - static int iVal = 0; // so i used this buffer - - myprintf(_T("Generating new variable \"%s\" (slots left: %d; context pointer: 0x%x)\n"), a_szName, PARSER_MAXVARS - iVal, (int)pUserData); - - afValBuf[iVal] = 0; - if (iVal >= PARSER_MAXVARS - 1) - { - myprintf(_T("Variable buffer overflow.")); - return NULL; - } - - return &afValBuf[iVal++]; -} - -//--------------------------------------------------------------------------- -void Intro(muParserHandle_t hParser) -{ - myprintf(_T(" __________ \n")); - myprintf(_T(" _____ __ __\\______ \\_____ _______ ______ ____ _______\n")); - myprintf(_T(" / \\ | | \\| ___/\\__ \\ \\_ __ \\/ ___/_/ __ \\\\_ __ \\ \n")); - myprintf(_T(" | Y Y \\| | /| | / __ \\_| | \\/\\___ \\ \\ ___/ | | \\/ \n")); - myprintf(_T(" |__|_| /|____/ |____| (____ /|__| /____ > \\___ >|__| \n")); - myprintf(_T(" \\/ \\/ \\/ \\/ \n")); - myprintf(_T(" Version %s (DLL)\n"), mupGetVersion(hParser)); -#ifdef _UNICODE - myprintf(_T(" Sample build with UNICODE support\n")); -#else - myprintf(_T(" Sample build with ASCII support\n")); -#endif - myprintf(_T(" (C) 2015 Ingo Berg\n")); - myprintf(_T("---------------------------------------\n")); - myprintf(_T("Commands:\n")); - myprintf(_T(" list var - list parser variables\n")); - myprintf(_T(" list exprvar - list expression variables\n")); - myprintf(_T(" list const - list all numeric parser constants\n")); - myprintf(_T(" locale de - switch to german locale\n")); - myprintf(_T(" locale en - switch to english locale\n")); - myprintf(_T(" locale reset - reset locale\n")); - myprintf(_T(" test bulk - test bulk mode\n")); - myprintf(_T(" quit - exits the parser\n\n")); - myprintf(_T("---------------------------------------\n")); - myprintf(_T("Constants:\n")); - myprintf(_T(" \"_e\" 2.718281828459045235360287\n")); - myprintf(_T(" \"_pi\" 3.141592653589793238462643\n")); - myprintf(_T("---------------------------------------\n")); - myprintf(_T("Please enter an expression:\n")); -} - -//--------------------------------------------------------------------------- -// Callback function for parser errors -void OnError(muParserHandle_t hParser) -{ - myprintf(_T("\nError:\n")); - myprintf(_T("------\n")); - myprintf(_T("Message: \"%s\"\n"), mupGetErrorMsg(hParser)); - myprintf(_T("Token: \"%s\"\n"), mupGetErrorToken(hParser)); - myprintf(_T("Position: %d\n"), mupGetErrorPos(hParser)); - myprintf(_T("Errc: %d\n"), mupGetErrorCode(hParser)); -} - -//--------------------------------------------------------------------------- -void ListVar(muParserHandle_t a_hParser) -{ - int iNumVar = mupGetVarNum(a_hParser); - int i = 0; - - if (iNumVar == 0) - { - myprintf(_T("No variables defined\n")); - return; - } - - myprintf(_T("\nExpression variables:\n")); - myprintf(_T("---------------------\n")); - myprintf(_T("Number: %d\n"), iNumVar); - - for (i = 0; i < iNumVar; ++i) - { - const muChar_t* szName = 0; - muFloat_t* pVar = 0; - - mupGetVar(a_hParser, i, &szName, &pVar); - myprintf(_T("Name: %s Address: [0x%x]\n"), szName, (long long)pVar); - } -} - -//--------------------------------------------------------------------------- -void ListExprVar(muParserHandle_t a_hParser) -{ - muInt_t iNumVar = mupGetExprVarNum(a_hParser), - i = 0; - - if (iNumVar == 0) - { - myprintf(_T("Expression dos not contain variables\n")); - return; - } - - myprintf(_T("\nExpression variables:\n")); - myprintf(_T("---------------------\n")); - myprintf(_T("Expression: %s\n"), mupGetExpr(a_hParser)); - myprintf(_T("Number: %d\n"), iNumVar); - - for (i = 0; i < iNumVar; ++i) - { - const muChar_t* szName = 0; - muFloat_t* pVar = 0; - - mupGetExprVar(a_hParser, i, &szName, &pVar); - myprintf(_T("Name: %s Address: [0x%x]\n"), szName, (long long)pVar); - } -} - -//--------------------------------------------------------------------------- -void ListConst(muParserHandle_t a_hParser) -{ - muInt_t iNumVar = mupGetConstNum(a_hParser), - i = 0; - - if (iNumVar == 0) - { - myprintf(_T("No constants defined\n")); - return; - } - - myprintf(_T("\nParser constants:\n")); - myprintf(_T("---------------------\n")); - myprintf(_T("Number: %d"), iNumVar); - - for (i = 0; i < iNumVar; ++i) - { - const muChar_t* szName = 0; - muFloat_t fVal = 0; - - mupGetConst(a_hParser, i, &szName, &fVal); - myprintf(_T(" %s = %f\n"), szName, fVal); - } -} - -//--------------------------------------------------------------------------- -/** \brief Check for external keywords. -*/ -int CheckKeywords(const muChar_t *a_szLine, muParserHandle_t a_hParser) -{ - if (!mystrcmp(a_szLine, _T("quit"))) - { - return -1; - } - else if (!mystrcmp(a_szLine, _T("list var"))) - { - ListVar(a_hParser); - return 1; - } - else if (!mystrcmp(a_szLine, _T("list exprvar"))) - { - ListExprVar(a_hParser); - return 1; - } - else if (!mystrcmp(a_szLine, _T("list const"))) - { - ListConst(a_hParser); - return 1; - } - else if (!mystrcmp(a_szLine, _T("locale de"))) - { - myprintf(_T("Setting german locale: ArgSep=';' DecSep=',' ThousandsSep='.'\n")); - mupSetArgSep(a_hParser, ';'); - mupSetDecSep(a_hParser, ','); - mupSetThousandsSep(a_hParser, '.'); - return 1; - } - else if (!mystrcmp(a_szLine, _T("locale en"))) - { - myprintf(_T("Setting english locale: ArgSep=',' DecSep='.' ThousandsSep=''\n")); - mupSetArgSep(a_hParser, ','); - mupSetDecSep(a_hParser, '.'); - mupSetThousandsSep(a_hParser, 0); - return 1; - } - else if (!mystrcmp(a_szLine, _T("locale reset"))) - { - myprintf(_T("Resetting locale\n")); - mupResetLocale(a_hParser); - return 1; - } - else if (!mystrcmp(a_szLine, _T("test bulk"))) - { - myprintf(_T("Testing bulk mode\n")); - CalcBulk(); - return 1; - } - - return 0; -} - -//--------------------------------------------------------------------------- -void CalcBulk() -{ - int nBulkSize = 200, i; - muFloat_t *x = (muFloat_t*)malloc(nBulkSize * sizeof(muFloat_t)); - muFloat_t *y = (muFloat_t*)malloc(nBulkSize * sizeof(muFloat_t)); - muFloat_t *r = (muFloat_t*)malloc(nBulkSize * sizeof(muFloat_t)); - - muParserHandle_t hParser = mupCreate(muBASETYPE_FLOAT); // initialize the parser - - for (i = 0; i < nBulkSize; ++i) - { - x[i] = i; - y[i] = i; - r[i] = 0; - } - - mupDefineVar(hParser, _T("x"), x); - mupDefineVar(hParser, _T("y"), y); - mupDefineBulkFun1(hParser, _T("bulktest"), BulkTest); - mupSetExpr(hParser, _T("bulktest(x+y)")); - mupEvalBulk(hParser, r, nBulkSize); - if (mupError(hParser)) - { - myprintf(_T("\nError:\n")); - myprintf(_T("------\n")); - myprintf(_T("Message: %s\n"), mupGetErrorMsg(hParser)); - myprintf(_T("Token: %s\n"), mupGetErrorToken(hParser)); - myprintf(_T("Position: %d\n"), mupGetErrorPos(hParser)); - myprintf(_T("Errc: %d\n"), mupGetErrorCode(hParser)); - return; - } - - for (i = 0; i < nBulkSize; ++i) - { - myprintf(_T("%d: bulkfun(%2.2f + %2.2f) = %2.2f\n"), i, x[i], y[i], r[i]); - x[i] = i; - y[i] = (muFloat_t)i / 10; - } - - free(x); - free(y); - free(r); -} - -//--------------------------------------------------------------------------- -void Calc() -{ - muChar_t szLine[100]; - muFloat_t fVal = 0, - afVarVal[] = { 1, 2 }; // Values of the parser variables - muParserHandle_t hParser; - - hParser = mupCreate(muBASETYPE_FLOAT); // initialize the parser - Intro(hParser); - - // Set an error handler [optional] - // the only function that does not take a parser instance handle - mupSetErrorHandler(hParser, OnError); - - //#define GERMAN_LOCALS -#ifdef GERMAN_LOCALS - mupSetArgSep(hParser, ';'); - mupSetDecSep(hParser, ','); - mupSetThousandsSep(hParser, '.'); -#else - mupSetArgSep(hParser, ','); - mupSetDecSep(hParser, '.'); -#endif - - // Set a variable factory - mupSetVarFactory(hParser, AddVariable, NULL); - - // Define parser variables and bind them to C++ variables [optional] - mupDefineConst(hParser, _T("const1"), 1); - mupDefineConst(hParser, _T("const2"), 2); - mupDefineStrConst(hParser, _T("strBuf"), _T("Hallo welt")); - - // Define parser variables and bind them to C++ variables [optional] - mupDefineVar(hParser, _T("a"), &afVarVal[0]); - mupDefineVar(hParser, _T("b"), &afVarVal[1]); - - // Define postfix operators [optional] - mupDefinePostfixOprt(hParser, _T("M"), Mega, 0); - mupDefinePostfixOprt(hParser, _T("m"), Milli, 0); - - // Define infix operator [optional] - mupDefineInfixOprt(hParser, _T("!"), Not, 0); - - // Define functions [optional] - // mupDefineStrFun(hParser, "query", SampleQuery, 0); // Add an unoptimizeable function - mupDefineFun0(hParser, _T("zero"), ZeroArg, 0); - mupDefineFun1(hParser, _T("rnd"), Rnd, 0); // Add an unoptimizeable function - mupDefineFun1(hParser, _T("rnd2"), Rnd, 1); - mupDefineMultFun(hParser, _T("_sum"), Sum, 0); // "sum" is already a default function - - // Define binary operators [optional] - mupDefineOprt(hParser, _T("add"), Add, 0, muOPRT_ASCT_LEFT, 0); - mupDefineOprt(hParser, _T("mul"), Mul, 1, muOPRT_ASCT_LEFT, 0); - - while (myfgets(szLine, 99, stdin)) - { - szLine[mystrlen(szLine) - 1] = 0; // overwrite the newline - - switch (CheckKeywords(szLine, hParser)) - { - case 0: break; // no keyword found; parse the line - case 1: continue; // A Keyword was found do not parse the line - case -1: return; // abort the application - } - - mupSetExpr(hParser, szLine); - - fVal = mupEval(hParser); - - - // Without an Error handler function - // you must use this for error treatment: - //if (mupError(hParser)) - //{ - // printf("\nError:\n"); - // printf("------\n"); - // printf("Message: %s\n", mupGetErrorMsg(hParser) ); - // printf("Token: %s\n", mupGetErrorToken(hParser) ); - // printf("Position: %s\n", mupGetErrorPos(hParser) ); - // printf("Errc: %d\n", mupGetErrorCode(hParser) ); - // continue; - //} - - if (!mupError(hParser)) - myprintf(_T("%f\n"), fVal); - - } // while - - // finalle free the parser ressources - mupRelease(hParser); -} - -//--------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - // The next line is just for shutting up the compiler warning - // about unused variables without getting another warning about not - // beeing able to use type lists in function declarations. - myprintf(_T("Executing \"%s\" (argc=%d)\n"), argv[0], argc); - Calc(); - printf(_T("done...")); -} diff --git a/src/external/muparser_v225/samples/example2/muparser32.dll b/src/external/muparser_v225/samples/example2/muparser32.dll deleted file mode 100644 index 58d4f6e8fb2685b7c63ae97ef457df99d736a948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154624 zcmeFa3wTu3)i*wqIV1xNnE?_Af)X?;HE09z5}c?BVUlo3m=H*?+`M2KQ>q9vfXda$ z2#4)a+S*szY8xx{MeBvPl^QMT1ZXB)%0;P$DoU+wcTB25Ed-&=_gj0PGjk@HAohLx zJ#n`G2kZ!M+cTU(=4kAJ*f!X~&ok9}?GrAFdVGE5-F&3sXLPK*0b0 z!-2SNXu9&lhsD+P;e+BjRKE@q*XeiOUQ4)*l6XB9%T#M0%kq?iGmLk~EJ>sKTOBC8 z)neHv-}ddi%S|cgJ!c5`Xd=ybuoqX<31{RQ6T4ZpYR1S75OeTqVIQEjdW=>VmmGo&msxu3Efg@$CQ+ zWks1GB;@V^S8&zhI~LvzKvDJvq+bBI2|eH@;O+nZ{SQi@_TcZVF8<4))pGOBefX_JuuD<>ong-zdKWz58(C*z`}sX+fZ^m_?^s>o;taAu;o=cj;nJRzdjhZ#`b%#) zXmv$$BI(<41)8VwXC}FVC!F=q0Fd1<`VijUWbt2BXVJ%-9X8#B;$tVV9Qq$4Eg#2vVq9#QoDnFb=$%{yzqNB4ciy#Xn&s1G*No*SxS$HT>GFffp! zC`yf*Tr)n&KPY#1#dHY!rBRSq^Srq`6bsu^t=*fXZ5AfDhFJqmNj1Tc{~y^04xO4W zfY-%C%HlrQOU+~u)e|FzJbgd@!C=GcIIL&b=JtB zD8}fGUTw@;1?kta0wp{#Z_^kmX~`y5s%V9q)QRIC)uwF?mu&4Iu_TSKSnwE0&w`$6 z(;6e`rKGUS@lQ>8(uYg6ni5Gbkcu~d-p=evXWDK6qj3s?`XSXw7ARjFPI8kNPk8KB zU*9VJyEQ^6x^C_!i@B}1itbY@21}GQz3cZi;2RiJZIb9w* zUj_Mo<{aqhI_l{%8Um$%)MbEt=Da!dnR8B`gKtA1s|ENhWV};mRI-jLSw=>kCo}%6 z^Ta<(;vX5s-}jvOk9zD!J+8TJKS43$%JV8-Bq$FGJAeux3jLXLRuf881`*6_;v`p; zu}_Og9!QAo@dm+Eo*L(jKAk#XRAfkpJ-+|v(e@YUSgtof)zev39W%;orXx2LeAAy7 z_G~15Ry_~ZsKFJeWz};=D|=iM_g-L|Me29^XqX_&DX5<3aW44f~4Kpv9F$%~63e`+NmKWrzgA^ye+X$4|^lP>K*zs-x7$vNcUTAGqK5u~Y;H|D3UKgpe);4^@f((tk{Rmz{K5W02 zkNj2wfhdx7v$X4b5_<{$r094^2>eBsj=(VOb^p`Mf`8dV1%F!t)F%5dOC#7S<^fHn2#BYnElqM-X-x`zNpJpW}Q}cbY zOeRVVJt-|UD52xE@UACKWm=?DDl$=8mWa}vo|K;JNy%YQLQiku51T0!q{}iLc_&t; z0f{JmcCRc`pP2L-ds6y&hAurC%JD2o$y%GEQ~9-t%70cTklaH$6_ez4^`w$-P@$H} zUvDr;E~IOCUlXMp5>dLiC#8cuDZM#VFOQul%`j6ssB8Go-i}G`t*QiNYFyq!8{X?l zsn(#>mnePwGgFy5bq&A9MCr~%l*)BVraIz1DV-gnm#H67S`$Y}*So!ch?OZaGeMa? zTGm4wzUWEmQG-%{qBO)zX`@c*RuiQkCZcp-PfC`acK-^45&{ku{@hPZ(z`|1y_1Jy zWy(%O$)!^=>7Jt}rBJ#qJsNHB32~GzlWj>eQEGyN-lMyDdT9^oW%Q&}Wl%~bO07?r z%2c3Jy2M1OIuWIOos!AAX7!}hk*1f4TzGz$nNp@s>6N!)())X5f-=47mt_)NsO+D| z^rZBFL5apaTuDS}nu$^%5v5w4lBrBr_oS3zP#Q>-e*CyeddKvZ`Yz3fva{-cL;2-=gEZ z+=O#>BAf*}&KWw+%M6^5jD@c^ z-tJbLaQ?a?LD@IyIBRvBs|=iI(-wa0$D-`k+D@IvPv461czYszr8>SvI=-t6e6X+< zzR|#khAe!cpPBFtPK2*(u`Kg)9pC$(>SabRWZ?w{zRt@fKC}Mr^d>0p79HOjfp0s1 z*uaNg+QK`3q?flrw7kPSBI|iO`D#l9zJtQQ+|K7qL<#(R4@6*cFu#s}ZH@Ksn`D8_ z{`C&D+d6Aqa;+sBrS-t~J_DvLUJPwtUXq}!+wYMrNMMzY_2U9-oMXMvz?vzrBJB)$ zl!WzGfz|M+zbnz1O00X-Ga!msfn|C7#Kv!HJH7zEm`hz5KZZl7hplutt3zzA3;sWq zh=xEd`ar`Z0E+%7xx3p(uszy6N$trRG#*0_Q@m&Yp;Hyp;gs{oU`#cw7Gn%uNZ}wR z10p$yPK1Ll+~wgel72N}4hXabGw`Mv<@RbCfq@MYK_q=5(wWE!H01qKl%u{6!H7VI zNYY~+^#jhFjYK3a)}ne2M$)$;JM}-Pt2#@>&z(h{R!t*fUQn}z1zi!x7z%fQAo047 z92G_G7L^xOh(JdM4YJrST_8HABmqmffV@~-$Wg+D`e9s9u~dkBa8XN9K+SX5D@!9Y zqcFCXNO}$xvg~lesE_7p(Pa`z&jXz1*&2N=pnNm8vOUb-Xxq;`FAer=zoaE_DuPNn z(LR`h11*{|#G3Lt2@`c{lf=JThC)Op>FkDECgrBbjA=BpFlBxbgF6NJ=o?Hi9*L-&dsn%1Eb?X)D?mZxC->We66?AV4&(VT71u`*6qF zM_hcPTjOvbym3A0fDCZV>@C32Kmm>ihMEH$f4vLE_SkdZ1#gJWARK`}hx4HaP#1cz zV>yByBes!}0HmZ-E9tCpezQp{dz2o#oFy$<35wzBi#L>j+Z2I^Qal7?N-2>foF!qr zw`(PKnFCY-9SCO6 ze)!#3mHzwWIc|tqp8r8Kb$JS#_u78RjYicn^Yicfz_LiGTaBxjM5 zivmi?Sp`J7f3uX_WkPaM`{(>7$uBB9nRl}PZ@tLw>4h=b>G32G_Sl8e&x#A&9UYOy z{|4~DE>jE-@&Fgh1xVBRGsRE&6qzL!DV6pAZ-^J>rkSh%vF|`^B3>xeIC0QWTabnF^b#)= z`4BX8#v+E|Rrh+5Rtpg$X|>GqngJ$ylUFA)nCr8~S>4BiIU9mEM`3mOM#K10ep}7< z$N?*)_t)O&6qtHPCrx{B=pgF~9B>9AXO}9htNn5|FRk&H&p!L?$-l9^huRK(?B26< za3i|Hh?YMryUE?Uw9gyjX_{5s>j~=SNJJA*~$)L#Lof3<~oA!`bx#D$XJ%z{!P4&PLaG^E1e+B zj+iG&>MWQh;X6Q??MLSRl@(r|1PNkpE1GqM%*s3+fK`*#RcY!xS0LhAoWwetm5VGU zPl!63zs%iXM-51M9{jrUOj#R&lvbZxq^sjZx>_rVigdSH2I=|AZh+iZFH5t9y!_>F zqi`)WQ;DSA=Me0d@N7u1H(jXhRJ$pvYT6chb}t@Kx1lx$L+u;r_J^=&2*=UQ)B-G}SbUX%hMhyO!8aj;9>YKl8XMq2x3r zRh&otwOX7XeAiiz(T^o?EIB{fS^o%b*Pf=zcdk=$Uu}E0l5e{MY;~cMf)U@c%81`y z%`XyicW7zu6UF(8T9xM?%!(aoxTn-SRy>0KjZy8aIDbo$fBcpVc7PSToSr?|M{FNZ zTIQkCl$xVv0636m@uwrV$ayFd23dH>$e$M|&$psU%-!LD|4Gf+R34N9q^-UI$QjAu zL%}0B#DkH4gmE**xN#XbnZ`|yyb09gpVdVYoxp^Cz%u0SMr*hr&=pzc^z!Ey=q&-w zAX&FBO@^A7;4hM`XCSqndwa_RcvOZRI&~aX&hB@)Pc7+RyH%*vR1`J))cBPy=Y*9m z_vij{O>vGdcEzQWc~Og9i-)lx6|`!gSxK_+|AcLuj~PoLGWK>X;bC(EncSY*n+5G< z`>T2GmlzsDEhE0V!2OsYPGZA_DZ2tKcQiEaW1(@b#i=ZLelse{pw^6*UkbrIuk#n(=B{wU1$fj2;Yo^C2)6p6>tc_59D>KUpC(9LR3w7J%-2PbEJW~GA`#eSnS==F9=ZBgS9kW=O?OS}~Av!~QNe>4kg|<8o)H|fWO>DYPzA^2fT#V`G)NAW6})iI?D;K96Xgx^>9@vQisiCj>qxv~94rGLoKw6&NuiG@FcfzR{f?{d-s;*Zq-O{jlbX_P}e&!ZPQkJA4!^H?f)q;5h}D&x7NMloBqDWg?L zK4Xm{%Bd78_^qgdQtQsKR14;}3(a_S7s~JS9E^8f;f}7k-r`TwS3+$d!{1Cxg-9Z_ z7RtK8T38?QpUOTUmp|2-Axw2iw?v&(q z%DkbPqY!u5d*D*RRmx;8==tTWJcsqw9FyILmJFo@OQR94g4Si!u${AYoCx(Oxsi7G zq&W<(mctgw&a-`aD8ddLY73moT$1uiCj6^*1r!H^$;fInwD1z;P@Dfa{F>DHv(21q z%6P96LuYT)0Iu&!BmsJD7^jn3Z+0m1k_b z)p>d3;ANr&xa3eV9Ku~Bug^EgaKgsG8O&(=0hl5%cxx2rYYX5XE6!u(uIwF$2%n}D zsd$DYEc8Z8D`M8{FmCYPO0UbhY`e4fs4m-H5F@D(E#FWO6>jFC(@}zI28Np?Qt$z6 zgv3zoL9Z8426yU_|7}X_w%)Zt9&hY{e^P}h%aorAw@zmA&l@Doi*{tF18 zxqJFhkQu;kSVS??>)2|gJsH^n6pT0@x)imz+73Do496WSaxgn6WH$k~`%C8|$#}WK z?(TH1qsfQtvNNn`%%M}Z{c2g-H|%W62ry;~S*<5L8A;CiKNF`YR=?nGXZ_ov7-%BY zKu{b@c8i+CibRdKy@EvWE5|f!kUBFX_@=X7qb%nv={PFs5Gv%3^DpFziK~_1iN!Z| zE8OZUS19hzWtV4{WeB#YP#ILHOy&*?-t~DW|w6Fvs9HVA`hu%38^YDO~)Za5}-Ou>0O4IBtv!xP3683?7H9y zzkR;6c{?lFx5lvknxou(d`U_TOP-C@qbDZhEB4oDbkbo!T zu?czEDTlgL8=Ei!@MyElvU9e9G1^K|UsxYzf6BBzE~~frSeYaDgzEoDtB7{MdnjUt zPz8c1Ni^TGL-ibEv$ELoOb9Fk0*m+tVd&qw!m(O$pIVxneQJ1Xd#Z@74)z>ma}TqX z2U*!Mb>=}fDG!$4P78AtU}Qk8`){N2mM~h;L_5Dbt@LlbBtna-bng;unA&zir;=Q6s_zSjHl{(k5YkK zt_x-@xJ_nOtP4h;0hYi6n`lqFGz3(Et^(gRDBM_4xNMQ=e0hewfK9dMO^>7>0|DpD zEu!LT+)c>uUlQ1l<@6sR7=-nduslIb!&=7s`HDM$BjlTJ5P(H|kLJKU4(D$y;Po)s zud-I>%OO1U#M?;4b5868-ase<0*Dm`X7WhH<7od;ARGz26=|zPM+#=M1+$m-!fZ%) z0b2YQf>S9}TJG%11OW@KS#)jBMp-1<_U8bEsai#sek7fP)y9Sb3b3J|GihZc)dEYZ zvs8%+k|1~uhA_2NPet<|L@n8=+v=ppR5nRrQ^%4T^kD-d)9o}4=pHEBDfP9$tgmUk z>8nTRE3X-!BPLeUSc_JXWS&rk6NAthX>SViDz(%C-PCt1HMWqU{+N!V~S8C<#=_E>$Trq5d43AoPbL zo1s5eRFAGg2NJ5#v9C~}a8C`2nm%zO^=Z-h>Qe+Bv$~QquZ!8#nH|t=HgQ-M^9{=k zhE}9Oa3_4Js^=s3XG>FX$^MM?#;~cw^3=Jtkt)F|Z4-q_} z9yZ_(tQeL+H{K9-?PH-E!{T*g>_#v!n%QKvWxyz9Brr<;I|2t3lmdQn4#jm5Z$|v2 zFS8lyQ9=1)%5f8v!>z9u2mWim5`TZ-Z%-|6yBiu&-o8&TEHZ^BX6TxbaV|~xcp_=S zTsvFI4NU-V)nrNb{!41GvsX2c_5Vz){woq$ld#+#g|!@hyB_t9Z7zYsgcbQ>kl9IA zuLe7s*esWBa}M;hIhrzz;_a==MvpH}^IcMBrPV08u-x?_U%D8%&x^(s#lU(NR#=Nr z;eLJw0}vw6J9Y}F@gLU1a&%uWK&$d)dH)nEZ=l1KsKl6;;ssk`?NZjf%<*)kQEvA~qgHN7R)xRkE)=LUZ6n8JMUm&R{*;BgPJ}N&J&C zF_5XV)LD4HX>zWQ8mQ!V;AWG5(ks8NW#_~1<>%yg1o&k|8S1%sonYd1UU`hy7{7(* z#c#vX^Wirenw7h|E>gj0k}rkqsIjjpl@@N*eH@9vqv}<@n52MwAD$YM@3Y`v7{91| z?>R4ixBAbA-z&a?-&fnP1gV%7xLFdZgJk!EDKU0WgLQ*lT_2t~FMijY7r)>93V!>6 zU#&cYx?i69{JEIE!o+m3&NTEF&5I`Jj!>tY!g8x3ixmDBlwK`X*kD$os6`5!tgN|r zfW?0uv#wc=Yd_W^?|diJegK-RutK{?f&ZZ2`u;J0o;uksrV-RZ%!Z)0T7aOoIT|b4 zPa^s>4F11GALEOI=K8YtVsB{vT?Bt`6eTSWgs>xXDrWu2k07_$utY`5hC;{sB1gpU zTC;k9r7|+s={e2zt1BH`Lyv1B;t+!0vC1Xq(CpQUce%s55Q|Y6x#hZ^=1T16t;5>4K{<=XJx^7jy%A7Frnk#;|%^1lv$O1&3#C(-;4*! zc0FriUOVfjmg1jiU?K(QVnyjehgswvI_gC-1%(uOb4o1LxcZHo^+36L9q13T-_ag3y zPydBPp?N}gDuqfL&AEf4eDLpLlkKV<|9a=&N&KU@D2%;5Ngb$8u%Dv@i|trrFd6?6 zmY@$x0D*w_fe^@82n6g8Q88~;3NuN zU)Fh|TGvxw>SW^o>dXJ5`m$r^PFpwoQeAWoeYsvH{;$6LzojqmXI#H9jYoQ2Pk0Jr zrod{&qWdlW?1(=Nj!ERYIxAKl`R!HwA~Dm~(=l;bm=g{U%x?}W&4eQqST4rs7VILZ z@Up#;C0N+cH)6aK3^~=l=!$?EOQ0O>o6)Da0mWz^w@WOIP?)VfiS0xlZ{!}zH%rfV z2o@gsSPJ<`b(Xeo!&5p3xltn9y+vS5E5nc%JN!qWi}7Qt%iv0_7|z-OJYx(yiWS@0 z0pf@pIiI}>xCa0?_^Y$F*@z0E7+fhlydTRUsCY@v>JGSNqxe~4!qPn6gD7&m37$Zaexn1fRN&e=)}556tV4u zWB@1dzv^@+a6>`NiIU^bod2Qvp7-CX?*@!#{+0T!)$@JL`W`E?nd|$J3*zhh13Z82 z`hHesGSxR9max9pO2B`izF)>tqOY#+rdqwee|%&2`u6@0)%Q>TTlKva8db;{i@7ls_(9$3G4fN67XNB@9Oia??W|ueLtJuy}lQn zPkpOpoDIX`p_SOkbq1!>vL1`GmndsiVZc6@1`h0fUshmsnq9-f8w@I7bi-Hyt{dGy z-y(=c?av@!>OllC$D9lbI*K~TSUfUt(V8ofzJ z`_I_Qw7_aH*jnb|ldm_Np%Uplmt>L{s%z8|7rzpTu&^|rmIF3mz`L(;)(tJ^rFZBR zG0GjQ2tC3h?d`^Ye|=Og`pWvqksx2UKJNYeyy{~@`nl`lS9cSG=c!a~@y*|D-zL)yg`tPrgop*g@eKbgruUj9(zBsS?_|@QZ*T=xhJ$jD~=LkU6^sabR+yt&C}(r z);wn_F^#+t^L>F`X~EE{6kBU?c9;JHU@Fet&6;1uHVMng51kvEP9EvsQo-NFk!E6Y z9FuWh5D_3e;mZ>EzVJr;ot4#Qbaq>7Ae>YVe6%{fMs*?_i6wjbd~MRxCV#ot_#a|+ zn2q&!=;pQEhWLsbn`i6)0P?DzR_)X`;uiK5VWaNHoN4n$hl@mfTrG0ds5Z5@6hWP2 zR)Y1$*s|wB09SFh`1;XYikDyg7L=mIp%y!|lF{x~pF_N6d--sYpddJkX^WBq3ab~e zX{DH*%jP#d1~Ig@XEDSn;hdiIIX7aiN62ToN}$zlKU62xn;Jomdw5C@t)oJ$EN!W^@5R6wj;chsErej>F`A2UH3x9x7-e-%hJCa1}F{ zSQ2Z@H+{og{|V>o=|I2^c_1LWa3US*H-HWc)Kx*9+ZjoJj#deDLBFt!ce!H;R`uH1 z)vsV;dlAjDu34UD@ePcmAEX&=B==(lNNz-O1y<@S?DO_XSP-mvI=y`Pd{o#jECh}C zN7Rl$a8N5d2J|3TySyK5BtGWl4_=Mt>hDBU`5M8^kjQkUiraHVqY$jFA$HEE{xDwr zTIGMTKomdARD6$7d^GzmW{WTWUFR*s!Teg6jvrx#gpBa56d_B@K*y}hEo?}_PqMOBZzhT?ohYIf!j zBt@*l#rf0_v7QtY%6KsvHVjHDrk;L4>y^yv)^lwqF%q_30t{px6*B0U7z`K6ee;E4 zA8WW!5-rR`DjIvCOD)U`7Ye#~8V!3_SfCb`8iz(2SEG=6`_Bzkvr`G|Pnvzn5G=JV z@Ld1{RAsV0uoo~s!onb37@suV_{7g?CdV%%mHPDam^{~ZG=TBgc?(ssJ)B~homch0 z6iJ^&jd=z3hiYYObQ=;*uE%pE{ZTXkSR2n8h*iwIPntth>Z?*M{yVhb3|M8fl7|4) z>dC8HNtK}t+F50ww)Tk|7k}qEt(1q_q0o9UxZQ4X6 z;zZbqGO<)7z9Us!a5X#P5s5soJy|NK6iw%#ew*M513L&d{dKL1Id{ z1S$m1OKuT~T{DU19BtYHB-+Cz3uI!gNbE0iF3_eeL}K4?$wHa9NF;tDaxQEx@zJR! z>mI^O(KD}GPs#YhP-}U3-DcbgL$R(wyj!;sm+(4LRr#8lpQp#G;o)K6y9Vc^uZ-JC?9EnRFMdHgA1@Be@ zxlMf*3K+jhNF1EHs1=R3m=Vh8xdL6j)J+qD@(RN)<05FcrY@sKMmOfcw2mX`821h5iVl`kejNAnlt3+h#bE!X#rQYR9d zEmb9u-tiD@CUHq!kFmitGM3*CD0#RvC|0qtaQorZ@edJXsp7>Fg#o?~-2fIfxKs;# zZ7dosQ3#=XsBc)6JimsGo6ZNxJnU`vb^cH1!LC^4i}@%L*r!PsbqmYq?LLNlS>P zJ9WWtZ}YYO%Rp~shV{6kKUg-hQmkYl4(&#rc6s?@x1vs$E#!TXkCnjoEkOG=67Lg<3wX!n zlnARi$CNl%B+lUnL?Z0%3{zr(NSwicB@$t&rqukj9>4d$Vq(3HDGQ(l(i<<1YF0n5hlQ350_ zTrvhZ&@JT1i|DPe6Cy4f&W&w-pR#50k1vxJAW_f9N?gbWbMrd^gqG%#NYmscgD&%X z>MOOEVmj&?SvTler8l6PD1F_9(PBh%1` z_|K3XHhs(sghq=UGP*+-PyeTtUq%19+2=(+_)a(a6aR8P^e_5K`eV+I{vF-R|I%L* z(`ScRl33m~0mFB(`eTH?=FKVk@3@6;J9c7$hkzc$`ngMKAq#CY5wnV);C9DO?3a=F zuyv#Wt7hKd18v46=iJLPd*5@E9)_#J*1v=qQN! zhiIv2X8Knu;A!AQ3Qrnlq!6@J%UV?bVb!yXp9)YD@n`Bs>Zu-1N6FEW>;v%oa6o$9 zQ2v*1hyjB8xNjsIt9cIM0EF8zt(NiFmtF~g3ouE%10c+Q7#)QfD!&`l;|A1JKzX&2 z8SYNs#Rf`eH{iR?z?Z;|BF_i|_`{L$^d|r~;@?GH>pM@N@%V8JS*y3Ik{!T^$O`+& zLx@oKIPi5FXu^hKM4F6a?s7wwG%S5dmjy7$)jNPp*b#7P#X1zty^>37MzhEGLZH8OsqcFcFY0u zy;bRPS{Xanfgmj_?Sg?%;j>HkJuQY9^CFGegQ5l4+EJaJ^VXhBZ% z|9idsSwwrZU>=%AL#=iPk@5dX^!k3$!!)EJSL#9 zKf8rrCSiyHddq%DC2hCMEBi7K8Q`BPr2Ee`kS-{YcmiE%zRcPgB1qE8Z~qCFIeS`B zB!!v`PK4lFFM}jC0_A^!Cxac=cK*<9KrjR>_XXJ(fsGxUPVXmTP7fWpJU-u~ZU~}_ zuQiY^!*K@sK3ds&h*8Pnoi|B+CNavf7{5>`v*uav)ut%?CaSfv^*jYLYMMr6;%6|~ zsq=JP+)}mkzv8y--G8Fw<#}3g3toBo1JFos9gST0rLm7}Nd3IxnP_}sZN~~ovp4;u zF)8f78f*Yg4Efx}c4z%RG034ME~K%}`cLu1{i~@So%J8$LGv`wy8MgLb7H<$S3*&h zs{w^qP;XBIsdu_o*1%tdlxbeKQx%N2_l12^w^14RNP*RVQC*g%Jx4EY+>L>|_{c+$ zp1u472n?BdAHqD7tHI59js0j&wug_E?^xO9_CEN>nsVO-i;wQKJ)r|R0OZhtTJWuj z-E2QLQDRT5X2P-;A2nd&h0gW}ED3GSZoCLS!i?fv#35Bco-D|r)s$S^HoFHv^+X?lfU()#Zv06O9faSz;MVJylw|-Z!$69 zj|$BKcbxMfVa-c&m#D#XB!-sZG_)0v#ow49DG#gGaMw9B96ns$Mw71 zcfoMdcp;)yeimUG)x0K-LiO_Uo2eOSgn*Qm{}dj8JZ+S6@%eNdus~{9v*%YzYxWYA zC*&WlGxr~Ot(R#t>LmDm@KEFyL|14!%=8#cLx2wtbR|32O^2#RvVxme;Hx~_OpHNH zzeZpx#+t%y@vQBllYpO~^0Fz?&<>KU6}<$$z5yMQ_F;wK*8{G6X-3uLouZc1ukBVL z2`W6K4K4R-!L4}k@@hMYf$sSn&}n-a#gW8BERyZb79u;@77IN}Wk*qmgZJw|6<(Tb zxD|*B^54w^AK%U0?G;Zi)6;y?91Rsr^EMX-ULz&IDIo@vKj9R;55mqi4b5Nv)WJJNgR;efTf6d=c&_6-h?y8 zjKLt8VK4u6hA^6e*Qh08wssS72Yu{=puje2i2QpJLK8G##d;CDmeyxiDdzaKv%ZfF)u)?cI1d-yC)Agmhk?!@hu5G5 zZ$U}O9)BNEKPiEzUvPl06fZ510|X}gg7459PXo1Qauep@5!M=ywg6A_rItE_F9I#9 z(sQgmg?YB%4j#kq8s}9_KRdB&qO=tEB^$Dyrto_a@s%xw*ys<0b%V4i)D}6C|S{~$YRzLNUXyFae^h{izv^hIE|HpO6B(4P(U=&&Vm!uU z?K9A^s5j^62s!U?jy#XcCOXZYJxwtid1w7=Xxk>|e$~=w`%HD#H^e928cTFJ>jRXy z4C3giUl`hjrG8?Z2d^9sIcLRNwX&_Mr-2nWs-7)cafn)QY`w?C|ALH)w`&+RdY;pY zTVp9#h?JL9&t^2`Vtfm0AkMHTr#`YTFZY89IsM_`80o>p$SLLY;QH+jRUFBltE5t-L65>PDC5+ujLDpRPT-UVF|>hk%CQwf_b(Y+9lhs zR4v(vb-kh^Llf!M1c*TD717)z8l>k@lo*D{Q?GgI$+StIZ!iDO1+adTEU&D!xH|BA z7@{D^*k4jok`=$$pC!qpk+Q$I>sgb({4wUtMEfkC zpmw8fTY>**-S|&T7@pdnmqb=G7%y%o zTqyo?FqiaF^&H02F486(>hTdPFNM}Zrv~uJAfyV*(B3cRcLD%Xv+^-Wg+nG>{syqf zr@R(zvGnZa9Rnf#@=`tskO7X(Q0SX2rOtZVeOBrdF8M+LidqTQ>ZOE1nT191 z$;(SFf}EX4TltN+IojHWBGF*+YZA3ZiM~8GG0|t7I#K?I3yDyB_1CA86s1xTqY^Dv ziB6$J(VYmkd^?VnTK@t{6j;9XB4=RzXT#8$Vq^# z_C~f*F9N@S_l4)qo>-12a9<>sYZPSyE%d9%6)qC3oM){&=FJ}a^joJzeQd^;28W>mev40oC z0NA?6hC~O{XrFR>^Kq7fb$O=sb}bV;=9QR=X%BJ>*=&Z zWIw-SGU^ZG1Z-Ww$zyaxXDXI&@2?4r&sm(SA7oq;xN-cl%gE$)ik9N(kaa>0T*MmR zqeeA|-HIn%6YCc+rHdO(?&4noRx;c|CB_UMLG2Jw3oxT9pcW9+0zhe=NVuey0KNLMj>xhs zn%+9Tlhhy+qprX%tN_a5nKeK*EsrA#-T zd&zs!Ux=wyQGP*xp+SEk(O+oLUzC9UvhMVsUZ9u%eCWd;ob}6S`&!$v9^;?hT*6Z% z)hP5U`R4aq+&fh#&oeE0K&s!>>Lg* zf{7G>y^Q|RE0%3U2*5x@f#rty7;?PtN*RvPoP{2XCQ=khiH+OTAdTA~w2*jhi~?0L z{KIP+`T>j9iK`myB3KiyTSO*f0HKPp12WO@LV6!mH>&80@tOuDgsTBp8KPka(7UAY zU6;@xwhN*Qi~l5igqui~d~^w1C;fXx6pqn@Wq-1uAL(SNaHQ0-2HLY;wgo;q(Ai^s z!*jnt(?GAF`{ko!Dc=_|E!E5aI4G|DkaAC*s1UWzlCNuE?I2Nh2am zObVwuu(AO@!o_{a$#bs109P80Xr#KDr@_n1iXmqD3emJoUIDSTjZ^3aLTv(uUx{?! zNOK0?M?%EEg<@EqB0)joQ5&Tkg-+h=uskWjf&&L$wrs3E{S37zo4| z5>x0$qc+d`6#)nzrXssysOE!sC*!vKmzY2eoVKp|&R0@9YofO8+fi!6eK`gXKa0J+ z5c4uRXKL*22xqX7uzXd)^1;55eR3@OC};h}rj(pm%1CFu-AKU%1zIQn5WOo+Nzj>8 zm2H2(|HwM3bf!h6nn989YR)E_e5ifHqyNpbCI{sd&H?9HqmDvSdj zN5Genyr8+%8b{#;mKk?%y%&g;9}SuaGOMDkAxv2Zb53Dn7#H}M{F(+ZPL_uPWt28Y zq_t4mFre+;_2sR;J1y2HR5yMjbvax?3 za8V0ce;W0^=7wvqRt6*1cd$A@3SC$oGCy8EJqyK!&6zw6MrIozXoMnyR;3tS>9bxk zXw?Q{WV|;aV+s&sN(XniA=jcFx1txK8`^NwmoGbJ!6^P>sNK=Na^$%tnsY@g=RzYV z-B8Yc{05QJhMZ67Ia{JRcg1qPWaOk9%GsaWL{0@c??g^2*xD)*!PO)J9~oqROF7i` zjgSR@aw@G?+**(j1MdJDVnBO&8jwos$qLTMCA>7hq-l=>ke^ryHtPD)q#H7&^1s@_ zf<|)Yv!OL6$bAAbQa4OMI{9`$GL0N4ZPHf0e}HIMJ_GMhb?AWt+QlCxyeP?1c)d-> z6z!2+D2tb`BhA%rAtjyq2Vjy@LxpsUE@`}YMSTFjO57eMzMeWvfP%#qaZC1^zlPhm zv6TLav^U7NzydMSf~^3QTJRk1NSe?B5`!lGLjVqMolQ(Yz7IGSnXu8~dh2@@*S3c( zu6*2=;QAnbUuYKBg}5%pZwu}%-?zAaf_o?Wb3z;YvnJUTN1x;r2mRUY_P&;W_Wr_Q z*TbNG@YvX$c$t+&v);bgpn6a2(7{K!&#Wh0Xp z(!^77CT90(yjGmW7onCZ5MV!nCih@S7e}J%$wW2CFoPIhj=++r!0Qwuvuh7-!G-oc zV}IIIZ`~-`P+0a6HXUP`Hh*C@)CYSJP=G(bi*KY54)bagxgKjKoo8PY5Z?$0X%7=Z ze7fU-$B}{7A+a6R+VUj52diQBKq#pON67ypJ1k-6AL;^lr2#I-S;l|xi^E9``~!1C zTKRH7Uur;0n07Ve$e_wkwy=|z7q$+|cI%Rfk8pho(qJh7GrM~3KOF6>UfIF}5E9)-p-0)m#SHpZP1YE}QP|Mmbr zUoqbYyw2clXy7>Gm(ASA%3Aa#$C_A6ENj1HhPP@u7CcpGWn1_)hobwjvIi3?>2smIqJHaBVyZbq>~?4(-7&ircXxNKI1pT<`ZanM1?xOb8sw%+ErTy1*ZBT9+LSr?R^8>eM;*;cR7d-aI%@i6Tpi7c z*3lJ-Xn~L}b5To({#rpXK|O8oQ#;&8j8%zxLUmgBE}RrHBi z=p7Cxs)b9pcB_RM7+F#+bbR_%wV+@%Nvswi{|z2HzNmsP*sU-2VQF=@Ug)2obuQ^jw68?BKjk-^#ZwBb{Fws`p_ z6kN7*vL6V^c4T1a^l$)(tF%RtADvu@Or3}-z*u$Q_XU1k_~9_7IxCJh;y)nw7x{K& zK?krbqZpgEyRcdN3w5r`J-5?2@htnC);VH{$JO{?3oA>*mt}I`JslnKd9nNCDvl$Y zY;!woIKK#AA;9svb6x)M{Mq~(;Eme@1O6%~TFY-oL&H~#fh^GFBE>5^^XeKrIm-{R zarpdFKJKega+J5K_Le6st~#a8%8x@y0=qIrj8(J)obHF?z>h_Z9Pp#_!%DZvL1_BX zR`wqUAq3UM9wgT;5V9MB)^l{1H)Y10#vQPH5W`TqzZ3WPwnFaj=W+W`nWIHYeNEm}6Z(F*67w-3nm z%1}Oita`K>gBCHm9l0zU5uKNQCL%hUanV0?(nw}b`WgFqIqE>%H&UY#cbMzE572Az zWB5IWACmMx%4_TXmtV;I{-n6~Ec|U4{2WxR&AyYWTBaM%$+J zN$%f2C8fW;f9$Vs|Gxdq)lK@BSl_SW6*Gmt<5M^8nJ6%thrS!NNeUJJGj8F69t49(OFE#K8`?WO= z&kTV_D_j^SQ7O;YV)9(u(Fg_6JE+*o1!yBF&Xdcr(KQ?_KugRyOm{R)&cmIG5Dp@> z6vBZR2^3)<0z*b>bdmIlw4+?))cpb&_Hcb4f*At@G6{QMw8Bkl{eXPD)-*yFN#81H z(tQU$9v1d&B=ljqq9eLu&W3ljA7QaL&d99J3kb$MPlNON+UTYngWAXBt z5(MWr%Nx1Yur>{eb(yszaH-AN2aA;61=?PInS`QmV_2}e#LLt1LPwY-5Gt`3dE&+A z7_jINQ^ku9V=v|iHV@%NVAp8s@P(v!!8j;}At5UHc}hsG2qoF@3pd2XmIc;jlnr0C zBjFG5(Hr;^nCOV47oZ^MLTOc3%utf0HM^htHWd2e^aWG4aZOgV0J3g6l+>rLm_7wM zuuQY(_pI3=b!KN^CBB%4ZzPInDEl$>;O!T&4K284Z=k29Q?{ly#ra|jdw?Fb5iQze zdv1hR6+=?+cRDD}d$F_rAUME;82YwA*M-h?xo}*ttcky1!S}aa%IRt1ljzE6=MO?P z&bzRg;;$iu6qM6#4km&CH0pf`+5 z3_VOjo7j1*8#^b_eRN|7pK*_;`IdwM7JSHDIW5cadMx8-&N*OPzWz@W?9B%3_sy{L zqOkXyU%RHBw(}#O5H}>IIk7Zj9qIjE!Kgj@T#!IMm-o!)-0%{@Zt;1Y8yfJA>d0I- zAES@O(%EU)&nCf%mlnLilhPs?YX%HGo)&COqq^GgE0NF9bgYl9v+WlWNr^;aWP3zr zE6ym9Xjb=tx;Z3M?ubiqwA469H+|;3S^tr23eE{ZkOW0DX<*&N$IZpi%~{3t-3g@2 zEgOzNS3l>vPoO@~-dk|s1Z9aFY&!xsL=+PV7!e|1U^j;bmS4xXnG~M?v+wr+v{;zQ?NUavgS}$ zQIcM07PJN9GTH+jrIay`GK$ij2ldjn0s~3l)4r$y*g8T|KuAQ1zmgAc+dt7eVl4N_ zl|WTu>pI!$r4MmkeY%Pj*dqszUWBu}sG^Sm44;t{jV!y#)`dfA0&Nyw?IhndlbpfV zk*YZg7>-pd$PBD#!5NQA3q?Yx9(A?wf<~8uKEk~8^O9h3KLL(&kp$E@LfWoAT=P*u15izdA2zy|N^vEZ20|2=Pa2WUL zVA}ykCm+=%)n)0vC|{t1HcHT!bkNNLbhDVB0Vveh!p8%2oG zs}R3C@VgJc@8S0}ey`zo1iyh>EUt3=w!&kv{Xq3F&&_hFd=eOXEA`~}WQ`s+XN z6!R+evle04SZN-=cPDH`8TWETedGx0mA^zsP-6T<@wU_KI9BR)3$~TR%Z>}St-O)U zVjfR_FD}?d!z)=L;H#`+M-XYUQ`GSHg8+|6=fXshPP-B5eCGlq(rKq?^g`8xKrbEZ zSG3SK$xG)a5Ux>JEKF!U{q+bi<|9N1cnci+xDfC=H-IXFk9WTdE(0ObE&S23g$QdH zl8^F>cuJ*N{t3so>_}avJ|^Q+{|xk9G_}3bs1F>#I1+ngu|Me77=oqj!hi#(SfGo+ zX&)o5!iCnY*4?BZLDq>{r11v-1XF5}9KB6M(zj#0K;wf>pu18YcqorK^j0H+7ZRxs z{eTX9f~a;m$VAe&h_OaK=8@g|eHYOeGwFN}JHFDv|2mpggupAyMDOURsK3ZMoavRx3*Nu&{~Llg zi<`!Z-PKo@Z=+eh6Qj}Y&bZAG?1(y-g1B`!4t8H8eIKa}#&j)gHg?>$cn!-k`2{hW zm(q8zz0Q}r_+@Xv-s5{dqp1@R``=C5yI9#lTB3%zp^=zdw{n$Z!R9R(gVUr9W*PXF zjfBy`<^ryjRzoCF<9q-nL_oaLtvMfgtXp%o(*zN6G`xcV7|mfvo3xy7-0=b4?@|)Y ziWpkmo7%^nNi7aF@E-%Qn56#|{msBC_Ne|kr2b}r$DTGr>hEYwX(Z6!WzgS}Ui5d{ zum1m|zi?1t>^&}o_OW9ioSY6DfQ}7r8+=!swi{al`pEq-uEp})O8p4KVhUekE5PeV zg$}UhaB(RzQtVwsP7Hgbpeu;kqqDL0vbKYKp5B@azDuFe{zKX=5K_Ey$04mo=1b5_ zv|?l12ZC?;0F(O`MS3ODYkkxTt{H>Kk7yawRA73705QaHKS7~5XZ;r-uX$({S00}E zY4nBYt*MoWm2daoB$rKL2e$w6+DCzq8e8q-QOx|*dV$Z&3oxAo#O)sD!47e`IhCAO z5^!vDs%V-R*owh`Y^Q=l{$COg1>F=8bZd|=h;^(1;Iq+Sq1J)uMzhKC1+}~0H=124 zfn>4uG6$&&Yd6P=@L&*vd5r`O{@J!MxN)C#)>qOfN35E>lvl#@Xdguz7pIb#CayPP zwn2LK^1px%R(k?G&^2JSTgYxC<)Jm8wT(pU>L5*~)P`boUtgz-ZkxPm^FixG){o#q zh^zsg8t6)QuETNNG|FoHt;JRQUKB&yM7*x$v1c3;Y^nVM&suTFTYDy&z$*<>KZX*Z zlx=KSxI zUY;vCL`%>#+Scpk$A?k}!TFz$bkn;x<%@Ic-SZMiYE@LFg3n_em`;ApEvU*^)S2}D z3$TI{EiaC2yBaKL!70Q@WE(ZqO5TKStdh?Zc+=paVQ;(%s;Zhd0HB&*EdjcDN}_KW z_DATb7)))v{Z)%=5q>N2+koF=_-)3|_lm_;k00H4|2>NL`FQ`jo<2y2;dq{e`zrhb zuWU!n+O@S?aG{7qTr_##zQ8Lq9<^(QV&TS4Ja3lp6y#3;5BnM2pA0ZM-ESoOjQM^#A`1+V-Io_TU10K3#)Sm<4Y|3wwx#`R?a^=dRcrZc zn*OF#^Vi5Nz@dC0-yk&^XVcokIN*J&Rc;B3q|bn=>BOWzdVchtefHUY-RTuH{moX* z%f1f1x*UF?0q;+aTuR(%_}Cv=nIzS!mD=S^O&H&;v+mpnKl|@kmmtb>Uhot7YhMSx zs%{KB&Nmb{{TeibE3=s0Gs>?zC$^VV~6Oq5) zznowCW8+^ijhFKi&3CAGbc*kX)>+2At9!P(%PXc}aDbcG?uXS_*lW@lN#8`?u;(KU z%d}~yxYg-tX{6!RhJn{(^>+Q6zCjx*tk-+3{?tHI5>^n_zv=%dH`Lx|cqq_fg`O(E zwzj9?wAyQN*fVg#tnC6u#MlIOI^9`!MeE=7-GFb~cORvh&b6gsJH8s$6 z^O!&!C1{>N(%Wn7jMrZr7TN@38F#$6{37OhnP_T|$dBoYG=ed=RxtcDD}>#W}Z z;}CFLoWZrYsmtK6z6H6+5jl=?I3sLF#5V(TT?}gMPiedlRoUK;6=E5W-=-Cg@M>k- z<XYv?p|c{ch>&7SR7A(Dt#p?<)+7p*Dmd5Ku|M&5S5 z>}kX%XPn*~LIOdL`3h)E_aZ}Tx4IEKpS3qZT=d1P>?Ky1<9rzr%_0XYyc&1yyII** zz6M>AXm%=KWBpYn8&+j}=jj^ylyk42P@-k%_+(EX`e>8F-e=cRgYq53YO9?_D2mzx ztuMwGP?OaO_$Q9Hw9&UxC(u4 zfuBAOQyb4!Ap^s^hWuqdYy_h`w+KN9u%jwn#z}e{z#&a5gXAzd!Tpv zT?y&iqV!vkSI~byM!&f`eZ=>UncH8&_#X8abbd+h2?SZ8@0YEOkjJqsLsQ&tmfasSDJR>QjZW0q)6_Q7wnr`NfVXlX zWiIPqfh=CW0PZg`p4<;%lwk%c4RqC9P_{LzMUbkh-M9lN}lX@@zM;HN8`F|fP|7tZ? zQ)KBUiJM-_-h^C6*^h!xz3gSZ)LxY<<%sI=w~0m&XVl0^7xle8cFRbO|HJ~ zDVbpsu-$g@4Fgo}Wn~8seVqNJyKBkd+>pB&vTDW`=sghDauU{#xL0=wX&FYsBr##H zz%OY|cYcjcvpT;7a`KZ#Qq$OK@kIOzK;qW`{R)0tdh)yN9Q+FVJq}ZQIBvMup3r`$ zlKrl-%p%bPIKw zGK}q~?)$g5Mt?LQQ$uHv-eothvPIhDImP;@+w>?V}EXL;vD%exo* zQc&J0-O363i*gpbsznLk-qTA7XB$NnRP_?hrXuR=y2$>_v}09usmr}5u4XE$viG3k z9PR_o38!M;^G$P~W}iDJoWx8GPV#VRY2F%^RD(mQFAVHR!q}tS|0#~<4EZl{pI(xI znuT+%JV_YiZirKSgkg>e}5nUCE-BrWx~h zHLP%iIb?umhxr-hsbCdY{7i!c-4hKLcl%@yZBa|h-CZ#qi$71-pet+^TV1dfYfrUy zZ`_`>1BXt{7jSQx;SB8;_OqfUaPLKy$|{}O(mw3wjP^diT@CMncqmSD;!d9xYfiSH zBCSgtXe`iYD|gJJVG9O(x=yXnV9oRlcyjg^r?S*}vzxK7K*s!=i?P1G`}yqXK;laq zPjHRccqU8xceI}P(prr#kQ|WZ+-ru|w-55Y$Shwxr<$Loys>X7o&zy!UMyUC1XRrO zW_NVwAhEn}H^artn}$s@DICvIp?A6NL-@WZdXD}41KNb2Ovk$<%ygWSll~&cgX!{WDZ%2zleG5Ywp8`QHSg2sejYhQGQTAul+>(2_$Y4x@_4$FMyv|C6ve^HeLEmmrH`KwgM#Q_HVX%diQ;QO$q! zB)A?-n0kzY}7Y`3Ya?0B8wzgP@!A({3e_~^+2Vfy=F;>=2Sz7s47-STPTTeZ5U*!>DS-hP4L>K@6JdLv4p zVhu9>mzsGjRoYWokpj*X)ebiCLA)ZQcd3QSh9bv?NsjdsP_t*&PjRfdpVsQ)%OrH* z{c;6cu)z@R2VAq75_S`NsqRz$l{ltj&Akqbe@Jto!^-wlHRD4zyabj52|z_B_B(?# z9H&A%tT@7f3gWQ({Q8YQomnfI5!?a-w12*rmYS5?HxxV87dn8=3OMLCYL?~WVP_cqn!o>q}!q{G@15qwBNB4px zOEocsp?{R05g;gX+wd-Mzxed+5*MGgQ+S++s>B`0Rf!>_i;qJhcFe#dg>u2sS4wFh zM<0Kf4TTV6&S--Z{R6G|paYj&?t@EiX7kemr>X08YK}s+%s~(O*Mrd+xDPG44t+X$ z;=#a3v$NxBaBBTLp2xj>GRXt#T5u*% zXg^~bjAPjW&LFc3xu{tKZt~RN&Q=VV%q|B9r$$HXtlf)r-dPS zWaBn0{J?37fi^F%{SWjxCHAe|K9VL&n@&`q1Nuz<|KaXy;G-(8zBkDxSs<_r1PBr( z3TQM@f>8`EVglJDB7sF936-x_joXM7VHe^@FmaQIESJ@^#hO}FEIyT1Y_WdD8tpDo zHV9(CRD+;KrFz$-HGV-*%D(?IbH8@?E`mPq!~1*Tm%Vf6&N(ylpEEOOX3oqYzi4Qg z0*BMY`&UguwR>|-R@O0pC?1E4y9QLnq2Zm(Dx496?u%f(VQlflxr>ar6NT8Qp)5)$ z$cr|JB5kaFL?NYaSH^?bJr=e3fc9(|p;KCqt-4J}vIf@tJgc8;{h!mw;9LLaV-vo$ z&X!Zx%;V)F<%A?CTpngmLhvKWHM#pEZyB6xk**l@%*C;Fb2B}2>9oTHd(SMD>vYal z;YO2e;5HEj9Cc@*%&h?23Nk$f#4Wj8ybXpS0LrcrIlj|PHKXA2cHJrCv54VO20YlP z0(itn;gLrvPx7YR1EWv?spLSyqnz+y8dFv1x|5fQVPs>nRaXi- z%d>DF;8oP)--RAd2xKMr`xCO-ohi^9L!q$=yKqawlbGZX{QOJbQm^p~FbKD@g6_m; zLFR^?)U2pDNDpkFl^T9r*cY&M6HqLPGp8Q$$Gff+re_G4NOMjSX69Mj&C}b3=@!9| zyFaTP7amhx$H51f(LF5POkC+%a9DH$k)DZ1{6^PEVR|}E17qXV^lSlky9L7Zl%Bs+ zL&1m@Dop?5WKL)p7kGhY4UYZ8k*kNr8(wB@J@yV^2!lN=+?-5i`$>!_GMUKcXi8pxLjpH zkNUbol~2-cbgC@PUy*$vYOUT%8qM4#`}-5^Vh<*OG2Y1to4HbMcq~QYzwd@e&#!P6 z3noUzl>kOgr~KsU{hgZLSofXc7>V$Nl8DoOFaBVY);o(*Nj=DlL&_z1-TjxYO0K$8 z+=y(1wXf2ySi}!`3JpLBlzDH*)@%_yG4At)RN?FrgSCBC5l$dm&~1Hv%~j>Xw^_&3 z=JQ+_o=~^_X?MajshE4pFfPtpU=)T6W+1GucII4&*;XUPK! zYZCG_26-}1--}G)PB5nbz@A>oM+v4%ct)o2j96R)G4qd`LmnDVaHddB){-G(v2IpU zIH;5rg>o6Ej9CyVntje1d4;?v($dYPglnweC+FQc-6LGXQOTilw+v#& zue?P(11GaoR`}vU_?;w=xw?A({?pLX6T2(JX~9um1+q58#s)8HyG} z4){M#6bf^@aWRc+sP~Q&{!bGVPPnfgVXp6_;Qb?9S*mZUxgPDZfrlTV4L{mk|2PXj z8W*f+x!k9OPjy`>f0>f(8VDxs*1}xTd7B*l82PjN>d~6-bNKhs7-%3LYM4|_m@FmC z08N-F$>xS*H2jjHGB@<#Es)Fxw=*$R5DEv00}2PV=lZZ~FIkvr!h8-D!k~Vy(S}wU zhdTbE9XsoG@$FF+g@d|a(S=`OI&C^COz5L>kv}GM(8q)hX=($-EqsB}78XtGc7K=Z z8q5VKA>hs%;T-1vZiH)z>XYiaI$)5~B@_-pvWB1sX0aq8(u%^Qe&U|gfs?P9Kipju zyF8OZ3^h@VrYJ_cs?;b(xE3o>Xku{RodhW!LfN4x79xtC6!wN_@z%$qMVw1DVel&v(ax5d{zIz&yaGhMi@T^VG|*$~M$2v&Z@{FIQj3I8*CB(2 z{wBX~uvDOe7Q?N!ztAUGy9-qgEp0mFIBSPzK`;8bvN)WFXYttjz@Iw587XMX@`YB`X60W}*+6NaGZ6_F)o18NhIF$3!b0TFsZ z3e}HJut@F%Sr@M91(#6bPO%Hu_JZegx>%W#yKopCC~KAqB_+QjNY8=Y!mi zO`1bX`}BJ6mR$w!Si#5_0Dgl^tFH5prmz3`9>@3w>6ya>xXzRmj*;zj3+nFOQR-Jfn=Hwt95 zIrCH4>b0t=NMw;xK&p9pX^wV$Q;b?W)PRQ;vpmU0tw9lenWIzv-iq&(##c>@MaY?F za#%h`WZi0*W|aqRPbXeEST+f6B3@r3T+d$}rh|Aq=}4!?r(cZ;%dua%@%KZ=m<> z>iax;Z&BZ8(7R84&!zWv^?e+@cdGBh>AhQhPoQ^EeaFEcIFvzs|Crv7tM4$MGB`|V z$9Mq*+vq)2eSe1DGn9AnzkZ@%DZwEXM5Y?%X9y#SBo#!@&mB|ovFBy2Y48$9iApdj zim6Fk3x}!v2;-h}9TlLpJC>;&K3}Lr$))mr$)hM`Miwf0AOo$Fwaa{O<#$*qbkvdo zaIH$dT_q<&;Oo&4hW_?XgXMMneTKhx@%Iq^{)E48@psWD2FsQBn~A@l;BO%Q&cff{ z@%NqdSB2-3`1`B$e%Z$cOV39JOD&%3@OK~n9>5=kzxuGj@*(~d=s1XJ{rVq4x$tC^ zOJY)jE$N)%^V=})iHx}EfM~EJ1Pzvp@mGq!2E6|Tf49QD9)C~Z?^XPLh`(g`Ux`0i z#vosqU+PllYp_3AZ+;2Oz}|&0SHgWZ+s;F40IhPeFvz=L8zxdN7QW2-!a9Rb2k#aS zpj(6j2q{g-g+yKfjU-8$6DhLvj8g+{=K*D{Ynv3v*2tL|HxEA(j-C%~@K->QaocNBgJ#@%_F6RF`JTND0++Y+kl6AG61bpG7?jl^xDI3V?U`@FI$K}x9~8jWXWh9f2P=Fuf3xNS z;aFBb&F#BHQsIz6ap6IbyAD(0kKpcL%)DdDyb*qp)s0+Ba* zk`XyVvBY(Vtx70-kN1pn2e9k46X;K;S>Hq;W$iF;IDl%RfS&2*lXF<+Tn=Iy7n zz7js$$hVI*V1i_+w8Nl|2Gz-7CjXdlC>NJJ!LozAoWk}3YOhhB3{NZTEAC!e-HTdc zVfKce#Udu+A)GZZDRfS#1B#(!T;Q@3MTs3ve?X?CZN^BbWTziCZwrH+a&B?BF^CdK zfTf{uy)lbA0@Q*(fdMT-+C=xq-5BjB98LIuOpYpyp1iPy0%=x&%m`O=8aBWCE96{7 zmb<7winOOo)Y!8n`%fgsv}a3O8G9*t6P(df^%SIHYJk@6r>7tvf?rt(lz=9BjNIea+ps>KCiv9}aU>uV zC`f@yjEq}o#u!UMghSW~Qabb$CQxAd!Sp=FA5M=}{zt`+5#W!aPyCVeNk5XFEk^$c z{2{li2LQj)Wka8O&-lCCZE{l>7OVS%=pr#|gy7EV>3n!C*P5ddE_@&x2 zR!jYT@$1U(_rDv!#zfXf+xBi?4J*6?K|A>`;-ZRJUx5hDMsg$Oj1!;!1vZ{3K z2mJP7s5*Q{H%>lFX}8Z42L zcG`MzEGo1uX-yj{9Y!5-V)tC=7(1giGuSiZew8?TD2I;15f{EKt-pT>)Uy7@(xLQJdZy6>E^_{c$j*zy-sl8|}gX+1_IP zT|g~-Y{52oZQI1h41#N8$kjxboOjQKPf^9rqD9!T=}ao4GtP`H#m8`}RL{$F1a-6c zuVMsoZDfa(5Xn;@fj=vrb9Kp+h+HiNj(^Lk=LeaQav}^6*WRa}m+s$1<|S1(F~h&r z(H04ug3(rphNMu=iZnj>2RuZ{h zeoB5|e*PRIKP!G4nV-jX6XZUw$aFMZdVTm)5 z4q0!jx=}pvAn5rfMZWvjK_&p=4tS#u({NX47nk7-cx=$c6)i?jlKAB{=(dXB1F*BI+aunZ%0~J|--1Vvf*& zZc6^n+lN}Uyy|+J!RI7R9_)W$J+|1w?O25zvRgY&aYrA=CtnRT8dn3|5f77`YjD3y z95#(qV#CNcS=ehq_XBl`H(w4hCbL!8Tfa<=^*k>v?1Y4V@opIWm3zyk3VW}E@o%SH zyv2#paE-`p;X1|g-|#5~o%VJrAxg(=KX*52OwU#0hnmo;S$akP@(Gfh7pT>(71vBh z5JpA~Zvs(W1}c2QYrMGiT0IV{iG$SN`OYk!qi_z0gy*K#a6FgyMc_GRl@`zB2V&yc zi%)uZo~4V%U_+dW=LH2(cpjdq;#mQAbmPA>q~d9KMrj|D1TA{`B=3m9ca~7c1lg~R#^zeKtUW4a4oXZq}XCbI$JX=U{iPF<5iGze^ z?U}{%f*b|UZ7tz=9>-!uSo@iEn-g2*W4Eq&qaV*Pd?X^ z+82fA!$}%EAEW~u!~6I7ppx-ypP|R0j5x^c=b6RxifjeX)@Q@<+=F$OFg&fdXz{$j z8xzkIK&^-8mAYvBD_MhQ@sub$ji8e8tR{6Tszm-k9OU-%%;Nbe_DD$j((-4*@oW_% z@a*}y7SDHtn0U5s(8u#LQih_?xN3j~&!bmF;rT46WIQu2yPo)2EA;Fabs$nB?!r@Qy=?;UKqahWPbZHcTkAg}DaJVjqLBt^%Kc9-d+VLS#d^5(hP?7%ypviSZ1;uP3CplNK2zV$Yj37_Xfag|QV>GRA)) zy(x;rZNx#wn9HZ(`7_#HjvA-nyXi?8->NY{xGJQ@_yg=54Qo7y;P4d{<8R$DG5(-l zALGHg2%R-lgYj88Q5e4i{Yl37TGFMWFn-G-Va)N(KePD0aIS*y)IZ7iM#}HU5!n89 znHJke?v0798?fui@6&mD$gCcw!SZwk zW8izk2NC#Qw^WPow7Qu1jsx_1_|DZu=k4Jde3x7th3^^m`x2;Rd?)I1 z_&hZVU&9M$wEcbXYz5!+Kg7WIhW8@y{S{{XReaa3jfw9KfL>32e@Plv6u!S1sloS= zi=yzo9#k^EZ|3T8m_r=G-Ey}+zWYe|ibAJsv8$FZwzA#e3cj}`t@NIi10^h$b(Bk{Znwa>y0ll95K26G36gsQV z*5LcfxF~$@0+o#K=h=E3CK88m`K?v)JrnaY z%bH;XWx7GwO)?JQHb3vf%@1ji@Q^FD+%8rk<*F{Ra#c*M%TWw^QrE!7m`vJRaUQ^$B^djg`nbB*SisF z#rI5^TLc`(-*96H)m#f<xKaQ6R$BV_Mkl2_`ohV@kCJk$hXs3ebyB zdKKU-U2F!QFJlaQx(mh-z;{akGkdzjdS8Q`+k@(O(8q6g+1= z5RT`ey%Bis#vNU1)BVD&G4b5=3w=CaCmk+I))rr&!SkKbQFv|ymE541bUBP94icXB zGmGb%K? zLZs}#zx5i*3xFSi#CI3mKMHS}-34>NPPUM4%h1a-W36rScz#+=JwG8A?zN&V6T$%H ziq`;aQ1w!K$1OayYKEWEP1T(jQDI73CjK@uJX3dqM9$Q|N#}`@g(*ZXWs2uVJoWrU z?f>`*GNUb{Z*}9mI16#+`t)+`uHw1oWz;hwJUdTlXr5l6+9#^fWrb*t{@-yViTlyd!Y+5fi>_&;vA)@ux1&u4S?R;AizR;ea zCYYJqu`--2PWwIDd{@1=-NCADa4Wh(oSeGfIfI=|ex*=?)4XvC`$(La&RrMCF6WV+ zF+z!veYVh1&x7#g8usq&6Z|t>FS~sf`I-WU!Gx(6$1+zuu9p9)j4K$VgtVXhh^gtv>ct7J;%k#{&Lx(bS(EGcLJk z*prt}iMD*y^RD&ECv5-6UKksDOMgve(kOnhi)vA$*R~P4o*SA3KfBn9`Ja%hQM}}4 z-f-@eM6;d%S*n}J_KRbRrU)*Y{12!6tDBQ(6S$Ip(y5}bW~?LgkMb=G&o;Mjsp)A8S++j^B@RGyFg@=#Ft8RGcV=GjACCwRnsC1GzqtO&LDv19&vtG7$x`c2Aelsv)grqXdW2V>+i&94=LwR||BKbOycF!^()j}^PWn-Wm5#jsHM3RI|DJ|?&c@~krG0<;RUP>}^bnWN*+12h z&wF%}xivSYe40>@DgrA869TGy=761yz~iK4MIpdghate_vqGEyliB-~;`+zVsyL6A z4Hnf+wF_w1LN&Vq3jO?coRQ|Bt|2rcb3g0s)e)C%83Tf~>ODDp)TwU%x>YyXf4dBb zw6uV$rXQfgPua%ZufS0TrB=K?1#ik&HlDiCG%)33g*b5oscTWVun08m)vvX9I8HK| zBV8wPoZ428tBFqK5r$w&A`ZvLCkb&?aUly*01tyW3^A99MN7FH=rq4sQa+eAy@B=r zx`}PS9B9be^zuQ-50?QpZqEh@mw|Y3GwDB3d0j{3iVOswTN1V@oXbOpHvcD+2e#Sp zf5v_>{y!%$2_@Nl?iD}2Lp!cCBb9VCkq&HM;}aEsq$r)IoBPBo2s~*Y;lzO;Rb++X z*9)CV9#``7!6Wy7zcN{iAIHn|vZnnwjq&22kx9KgWypC__M*=xT`sCD-(tCu239{E zfFPRY;9Qm!z8C$0VS41hB639(H1eN!>iNM`ewfOeb*FxoN*5yqR7^^i>U7iehde4E zDNFZZ*r3hQY>>z;+z!%Dq7b=>$TeBw<>UC_`MD)V5!Eb;%+J%h30gfxlb=_hJ!*Wq$z@Ssp$j{U%BtY(%c)MlOHTE2rH4;HEZAiCh;x!IKo@ zOpNA*k(t_~o2u)lYBF`e7@n!$f<(^LU|sUFh@58%6BBYKILff{J#5B%EQiV3GkBw#kPCc zJ(1(1&)=IYj)G2zdvbAc3a-kH!(A6Thq&PK!_r>y4eZQgXQNE6;N3Kr-y78Q>E6e5 z%u~}xCk6VdLiRv0$F7)RhkM+U#Wi1}>dv8+C;4(9oDfII+ABSA-l8;R;%_z!NIMdA z1LlzO9VccYlu%USDaIuovpmJKgg~I!eq&91xVDDMf!n8e`j4pTuj}nY#EOd5hrko-C}D@UIv(;;Dd4&aoL{gD=NAO__1o!6$*o8q zvQU(b))yQy86$osLZzoDtt#YQn?o6qkP_asdx|Z%nk`wJ{S|VC%S*k`^Fs&{?)xE(Rgr7^qLAFxgwuXG!83DZxV}f2*YkkiBg|JK0b#;Cn#CpyvyC(P zp~8Hq=f?>7Bv)A6OosgGvzJMj)I8$z-3p6&z!RenqJPymt{dlRDUE zJps|D%clp1t`I++BbQ}Z!h|@`TQG~Y!Ue1qRyA^7 zpECch=;N{Ov%`IOP2WJdn;`6!SMYo^bv2}F5-taH_zvM()X!1b;W4DnzbpY=_xShV zcaZyCQRm+dUBXd9egW>6UFUBnzZUX)hWlmJ`Mb$4?S1$?%Ka{`^Y@eA3i1=U--J4U zW<2~l$ZrkzORe))kYD--@VkNgrPulM$*+X`=5W7UM6DTAf+L--y2jO9DW?XPxJlgB6ABe%}qM1 zb^Dh&N`-h`PF_5zXt9Hq+2L=DTm>A zJNHYe^KT}xy zeuKH+#5#W-rKO+zjs;onudMTTQMigv;P+4NH>J)`+OngA{PuCbsdfHZqAmFpelK%B zlu|SKy-I$6BVNV>c?Ot0*ir(rR@xqyMb5z7?T%af)xrLHi zl;d8T%>t!~Mm3ODp(pi8(SW+IVT>f5ign|x8PluPh;_vR_X zo8$9@(d;HzER|>N4%pf$e@BCKc`4ltyTdPzrK=tjcHnB?9Na8y>z2An<2{w0(miv% z#x~qTKtxzl-Xs3`6Ke7Iyo9ng^w4Fm{Dx9!^@m?Vxf-OaN^wmot{oO@F)DEHHXdn< zcV@aj{*QWN>C+`L?ol_K9%+kn4t3XbGgW+#xQ>TpcbhIq6<({yNbK6=$}w9 zOKl94w;(6%owt`2e^=T|ckg%wt%$*(4FgIOSx(wIa($lCPH9M^8OlJ7&J8gs zz?Jho@xso~Y75MDuK+$mm#{nQ&AC9g6T_c!@hhxgxW5ZIM^pKRTpjQfKY*XG7O`|D zeAm;0j?CKcJdX|_SPd+NIhZ&Rp_dD`UJuS!os;S*h8;$4PXY$&?qdv~F0rzhL8;dR zT?_0qBMAnVG=G5>UlpqZhfjnQF(UcIea|dUlOd-}(-|V*{&-K4XB0m~9v6Yn6VAzZ z4o>jd%ge-ttc+4TW3QJ!mzvynq?%S)=9Y6P^1Mgo|UAQeKX#p61Tq4f}JnPtrYVF$aXG{rDaSYj!+zGZel0hqGhweB{rdl)Wu zbZeGBp-U)A_1OB|xF1(46|d3mv8CWn@{x4*J?0Np^9;I&M9myfka)_51pzq=2}m&HMs|9<$5+;fVt0 zKX6X)u29y3lzrc3y`FFY0T4}3?b7Sr?IDSX=Tylr;>7t0l;7F7g4cX+6r6pmiRx^w}|4k+8#SEVg@%XL*eU_RxqlEWm*Z1~>9$ z?^6933Cgz{4w~y1p`}2@@*2m0Je3pAw2Q-v42IxU>|2WUz?xMkMP7u{KzM>XdF%(B zX<@{3rDzeS9ubQe8Ki69NH;;;Qp){2^3h)7^dQZYz|hJ1?V1%50!D$y9G35~u``Wg z)K7qvYIFV15Jz~*gEn|2yzVKrSl=|StB;01wI?A8`*FaRB?B;2M(vw<(zLFY4oUE}kcmERR!(JWRSyh>ZszNoA^`9o{qAhfPu+y#x z18d){{VS*Oiom6+2vJYB23B9lJ$WDCO3gym+7~J>!(=|@W5rR&>8=ny8lXn7)PzeS z2Weu)Md$m3(o{CB{FZt8yIE~$uc$ivt+te~>YVkKXFOk%1FL2$A~MpmfW>X$apN_GB}K5|k}v1^h?tesS(sDx8fWm>ks_t3 zD5b&Z44^}L_9FnmZ>s}g(gQN~$WgN_D;H)VAzVMkUwSVPA{_qY~^y2vELUd+!^ zSWU=&N{VqO?kJ7u;91l(VV^!yny_!kXA}04ezRH8Z(@xH#rUDP)Ue|wwAS)~Fp#tX zbEV<|oQB}o{xkX@zCmu^4b1H)cRo!Q?-d&g;Lhk_?kO|iF68dP@WOqIk*W?;BK>aTnFcegdemW ze{XUBd$xW^f~w+iemCJ{mkb+P=sE9WOD$8m_~DI0mqZvXAkV`x+UNBO^& zi_4uW5KDFk{@ScN%p3iYp#7NiNArL5|1$rFqxhF`iT^_U^)yxDi}O{99|M2QAP@Pa z{XW|EXsSBC2w!WeGSUc&FO!r&I3t!xeu`FCshi%lQ^jtaMr1Fq8iNr;oWp)A5wwU| zzvVM-!d|<$bTrL3($WYzoKT3bW)xc42%#!Ljci$TWM89QWs#9kimSCTWt8!l{LN}i z-_X!5GNyO00i&40V~TSubMRQkX!3KvUMx;27EOK}(fJuK z#{%8iApYT}47oT*--QN-+H)|IqxB|2?Lxg+hD66w9UaRnT@q@vrY7bqv0T7onWKrN z4U4c*h;5ysDI2yM&r!=_X${!+fF-S$wTcyTEND&*;=9YFylg(7V(Aov9I;l)%VHKw z2OAu=iq~-VVSR_dR+%Oud#v5$^19il^cU{l%QW%|j3l#Y;S0u8sw79oFHoR1Ec`KJHJT6De5DQq|DDGn&~RN5Ei?;cu9jP5t|X|$b*3KIIni95 z(Og4sBdrGfPjEE-T;@w+NqoQ5<4Y%T!Y)jUL3K3WCse+D3SSaL;`@*u-$y0BnyORy z4poS-h0{4I-;Odly(D_Xce)Ehl0a)1z!?2;``YYol^UJaug0Z(R?43 z`5GM^RK1xrV2Ymc{gocy2c!937R|R<hWC{ z%~z+*xkBaZqi&JO8H|+~-;4D4PK@T87mdRQ`z0Kb9NVj8zC$Fw`>`J-szHAzHwuTT z(R|mbeDjrZgDDnE@11&l?}_GncXYcmQRQn_(n~YZgfH!%iAwJU(R}lx)BDaohC^Ic zvLj=;jKffg@9UTA@O|^rsCrQwo!)ymUjz8|DSTma$w59aR2@TPgA zZ~9x^2sEf`PR{`h)nCO|*EH%}o2V@d*f!u78bAYPiE%&hac}7+FLT?WVftvKHWp`2 zNf*s-vWsqHP_S)$F#}XtufNqJls4lw?6$AWpZNSeW1*=V-`fn>XfK<0dR$x_n=jSC z!3^AK>2eq`k_J^Ak70fVkCWR^!BiASoz!5tzLOGfexZbHqs;YBptr7c=jE6i9)`<( ztlHeLksLmwWX5Bs`SAOnIuUxT8m2Ll(hz7!N7lKq6OK4%#!envJy|;8MiVkPinDvY z6bA8;J|J5W2&^oHBGKSmJF>5+ZU6VoGW|Rh`ni+6ujJM=NC+Mi*+vBz8MM&qP_{8!z zP|F8a861y8>b<2@$BCD?^cFNd{UKL!?vdc%kqSE`!`1~+@`;C0g@it@cPhXmISDkN zuaray>m3nxbG`6ED4a&&rC>;_R+_liaZ=#8G?53FCUPm#)PWao1Mwnhs+W!D$b&?N z%}W+p5RZ}85ikQ(=JnD?@ri&UOOhSi{TJ)W62<1RJ?^zVZkOaKG$M~AiDeFHJ5rz6 zjW9{(hAl{}*VZUyh)Y#eFsI#X+bRVS_tTb|npV0Ks?t2%)-A333Hi8!ybA(JovKK% zY>&_p@1og$0em>w>E(VXt7@Fx<9rT)X=i*1RBnNVaigT=FXf zEHz1Jh7urbM>yhQ;gbY`+*UV9+_ZB?O7pY|*vQQj&HrKEgXVkW`50-QNHgEl!RANy zLGC*-PqD+@ALmL25#}uu>5+zsmA7cl#E%e|o5}X+O_WHBHfnsQKOYl4pRp-wzTtnC z|05^i|0Cze#(m%X*pK8t===DeKK@bjVGB++ANC{DZ~lvJ26*|Fq8*<&SefKxQ(eRBZ@Tp7H>t6pd|(2U<~OP4pJe_KtY_4l65s(?~@kkem@R9rriWZJQ<7jIPGE}8DWDzY1^v4 zgM|vHIFi1D{!^MB^W4-Y;67d2OoD~0tag}n>^o*XwkB)J>{RFZRdKY8X81cTqd7;A zBH&qTk*yPQcU5{)szD{C-HPQ+oB0JSpkNRuK8a-E8#FnO&D8U;;Ob?IWn_0A9Q+%1HIL}i&)l;1BDK3OnEo?B3dtkU!Y!@e=hwZB{ zu$?oX>1M_AiC3Vwf*#^;aRQa6cs{?IvUnLq>EPd201E_jl3pJuuI8S1lVAtdZNwW( z*g7)Vqkom2b+veS)@{XaVBI$SQUG{2ss*J0)@jMnDNaAhqnN!&h!?{ zM<%=lNO6w006EC^7A!|@yahKRTi$|2$e$2y`w6uq+8zrgN@d>LXO#P0Z@ZB5E>X;;x1;tU-7F-$i9HBpJSI+Hr#xXb8_MNjv5p7F5_%i< zU?0a2^){*%0NZ4^uH3O5qgs&${rJX>#O%uFD7?tl1?EeOQwSdz-2l3BkLwUaYE72SNP?WJBlcM4zF!9czxdqZhXp%6Q zgeFjIM?#ewlCCywP!U}+=VLZNI zKbnw(sVJ)VM|y^PXVdwMNtj~d_v?PK?}RW1@M%ZjUgIPfS$I=sl9kK?pSJ4y#18<0 zz&MASK1wAZz;KQxIph)i`KUex@jNMd=Wlu`jr`2hF44{4?ZiwAy6q0kv-mIrghNk7 z>JhNibi;yB2nxx@hAa@#L<=u~)z}NiTMoW(%8Os5qNAjQNy1DXw)SOWVQ{W+e>c>; z?n4x|`FZ!IJJHgPZ)n8B{oP>KHAjmx=*%c*zQB<7dUHS%T5*~9-9x~@>}{ZTG~Fb9 zBrZr{0d9@r;iOo_v70EY*mVhQ#dJ;JtY)~UHpA+xnd4%vw^alN)I6S3HMV63ggKE z;+%VshjtjK&RIc|oVZ}e7bh7h~ez?3s<2N{9bm#UuL;-2tR*RdLA?|7@Y?nS`IBp&lmNC7Qbd1qTZ=LCv)Tg>+~t8MY*7HW%I zO@Sh%E#4~La#pOi7)k=oW6wmwxke_0wych`G_HxW46BZ_oO4H<zg&c2l$d40f~WmF}q}26F?oMn{V>45)U_t56iYrP2s0P3A+`=VGr- zy!h?8I#PZ=j(dWvxYs%iYcF>!;!85(ZNC9-=mt?wST_g}HB=1}TOqI>Hb`|FO%#oywD)fpk;WLraOmbEy%&F$(}uu0LpQU_Gwcz0)XmL4zP2hI&V#_%b2K zI@w%55&1xRwSrY3309gcSUEySD_ZBuqGgULRddq46&7KJB^R3*o=xz37PsUctn@7I z5*D{Wt@YH1&}{!kEum*YFS?Udd05&dCLqJYf?lCUbbm{Wc=5D{8hb;q;0Lo`*glIN zVhpO2<*!lYr7YhE#(7HyqnfNX^~kw73(ZcEiPe}(kRSO4Rb?zj`pn;K%|R{c!-5UH zqL!exnG5?+90Zraie*w->Y-{NuZXPWvFf)OKSe3G?uFPL-uc*l8~Gdsm>96RTY)$Hm(*?7SAX6~4d>)=8_qbMtmA&!vn17{-9{ z*tP@C1k`El;b|9zTd5(Yl^$V63CWMO&pE&@{+S0BN?SdvN&+)TxiJK0u-^Sh0W{(f z^TfFCxTJprC{X{f%^g*`<(W9FNW~ST2MXAzE(kk6R7>UGX|E4n&m-E>sggv zl_c(hmg>1HotyDng*iD{bF#Ho^RA0wJjv?3tsMgt?5k^m+{H0<7X`N-?T=6JV>R3^ zUcLcUG%oiblx@IjnCD2xOe3w6Z)m6LiE{*J^81l7x8*FPW(Ob5GfI7x?z?Y4vB;GT zi(?|GiuV@5Q~`uhA!Q(Vf5Uw3!n$7D%QeD2>U6}YT?SfuW zCfdYMi28I054gp%ew`Y2^y?5D(#7fMCTU30gTUMG(4}Kv1Ebfm+L|rXFhN15zz&9Iwqu>bpRtjYz(ex z(SeMbKCEC!tskvJZWA+dc@yXeq6NAZ&^>F7GuOXOX`hiN4_#WtDKO-vp-byYhb}Xw z%R`q|8oIQSTG=XGn}HvNLe zu@o5;X3T=_*XO+2dzVq352TrKVJIef<*9P-f^F9c3tF+$+>X}P6zZVuVEu8UEY}`w$G94E1u+YAA(F}qlTF5B_MOBzQqQiOlFVlNag!KssL?9KbU{ryHEy2( z4&)5lNtPe080@Snn3`e4vh4}3C(CUVER7(IND%?!OpOHPY~1W5xM*uPO2M{`wJNL> zisVu#(v-p+Fqft{B3qKRJQk@9QE(1^6t4dKfbn97P@GTwI4ZF(_&10~%qGCQlm;lQ zN-n^3D769)e?k^Xoz?{BFQmGQ;{ojA^XPts9599mFJO&=nK!thTr>$L>^!5_PWwFc zW5Q5-=(rnG2B+p0mPh+iVx@ z$56N~QM?zl$e+9B5SxE#7jKt6US%HJ#bw+htbyZGF*K8g>?>y$ew`%)%33M{8s z1A^vKU|4;&+&)M?8EXb%1(bhW(*rbUvSnE>4G0JtXTE#q3XDuH>F0+#jVE+bNR%`z zNm~NNQ^^Mlw0OgUbV-@;CTeVg_#f=$3_eD!*Isc_UnIK^@Rf??6xk(-esOdSfU&_Cz=hP10eGC0oB@;^+T>ficD%urgyT>QPSi#Q z@f$~p%Jn+60h<`8wq_2htr2sMH2K&_maxgk~V!C8UanMmbGble&$J4zIALhFw({D-#5k0m1w+@&?aLMU7C4Td&IWK*r1j) zNYp*pUP!7ljcdy>u6Hp##fL3sO9Eg$NYRc+b#q7L`iPBu;&25J-n)|`zqX}MhSrXA>0r-RK%d^Nw&f%9@cvJBd>FZk7y!*^AF_2kls z#dV+r{xB{uVedXa&;vX8+rl>R(+>Op0&L(sx-NtU{+`ug$8{8?S_7*t$GI_k#r)r% z2;m5VpTIx~XDQ-n8F3malWaX?#mNTTa%d-=C5w`32)R08S47kF7W%lf(qn?X6Z?i! z4|X9Kd?+Nnk5q4va>}71O!2~+G zZwweymf{EkVZaiPiAR|XFIa5hn=k-YEZlcbXu>R5xQ8a#+3$SzTfu%8vEOCv_eS>X zV86@p3tSfmR{=LnQVDS(*lGEkCIL3|IP!j2TN$n!OcM5Psm0lq;=2H;Oe{s%g~H|J z({RM~;Sy%KZW43I8?+W-Fnt0*r6x~_k<8v1_2RbB1PcTzG$ED!rro;^2VusRBX7rJjcE`?^{LYEVJ za&~)d-IzQ%j3o_|a5+UEdfP63o<#L5MdpiNbG`e$6-n1G5WY= zBi;gujrgSm2NE~1uV}jynH(8t+&e{sSjRSY4l%}8&a#^O>OwMgEtV81u zyIf3`nR*_kX+;wn$jt#emOi*c zajr{{+l%mJ9yNTui_i&3?r9*GV;UfNhB~03AQ1_!Yh`Am5RA4ijH8&Gm&p`a()SS3 zhO7Kadxbcfv+AB}7ypP%FI?Cr+$8266utr#@*UPk?G%5G)Z#9W!+}J?0%;1hp$BSb zE%zSw+lk*jdmOtqVQ3q|HfMBgh2t%r<>M`0{AG2^R@;+sX5VXe&rKp7fM%29fe?Fb zeK&3)I;_k0-RQx@AX2rI7vfyrC#E6~yzCsWKLA0Y9#NbKDR94?_^Dc<_lN-@_* zimNg;!E{jSNlrMnB44~DAERX2HAeT7Z2c%crL0hnNH_(esTqrSH-0h1KwX%RbX`n- zcK+o$g6UP#8?O}d$73r0XotHyPRg~m#96Jy4UoM83}@={&&Oq%tkg$D?W&wxp;T3Wn z8j;E!URy5$Stw9xpBDm;i>qKa-EMu;mHgry@b0lR?1irGA3U@e%NpGl?6zWE{n33M z*2S~a%G%1xU+MZL&hmHq=@}#>0lRoi(C#!^kFNY;=@Rl6upUKK`{5rOw z-4d}#0R=NO!GI<4dIet@Nyxo-3rMLwYWgo)yy5E1mLj{kQY<^hr-qdUi|CF6r4JJ=@u{HR!`r$#)C#{c}tR z2{Tcy;!?O;vIzkmoLlfvCgEr~5g9&uQ0cLSS6UM{g^+J3@!CN$uuBTxK;(hunIo(gd)v}G^-3=F& z7rW^#_>UE8R@YN|3aYyls@sXGk*FTvRBDDL`UkZ1cXN8HLO+S<7ZLq}NO}d|!-#PJ zh08pGa2Lzr!oCMF$JX*JeIG1;$NGP;AM#003)Ew8X?HMBlbD%%DE~yaEk527{0CfW z;wk?K-@@p-gB@BqKLolvi0($BdswEU@QqUV&5_}+q3~&m2!E>_UaSY#%CYYR z`ir3BwiBT?C1bsa$U=nK2_U>oCX`Z%rA#~e6Pz{xA~dHeT{q~uz5tzX0O*dxMI=i2 zd3xcuQut*QeotihaeCpaDSUGh!f%QU|J5&a(o;g=s|kSRk>T6q@TG@?H^Z&upYmZL zx^AMoOrn#rzefosB3KYJ$SwWJ2sT&_7WRD?ecw#q{{_#e)rJ# zKFaP>y5E0J-}C6ZSNHoh^xZ)4-m3fkLi)bdgzu%g-v`ilJAJ=c`EDa~IupwORtayM z_UpF<$Kw^UGx#UjSrYubO%ok;3?;|7MAk)1aNSIW-i!JB1gb#T)yj4wa9 zK6sz}wiVSqSS!E1N^d_SBIpU?I4m4M`POF4LK&+d+%AJl0iTsuSI|U!o@W~ zYOoSl0>#x#aa|A|7o{4@6u~qWLp8;4HgWV4i{Pa@$jSP^qqMz?JA0YaP6_*vIT_g} zKUZ_Q-pLcN0if~B-V0YtUI+>J16(RrEPn4YitGWE?Rw^9@!msDBybJ$+D-wN!zp9B z-o#@%Pl+jwV(O)=PL*QvmTnK0Aa&l-_Fz7Hior&SZ3cVR2QxLPpIM7?+Sel|JpfnB zEMnLL7sG2)P{cl1ueXAd^DhTE>&f|%>U>9a?txSAq5}<4wSPtPmKofxc`FHi39d@c z=JTADu!Qs@Nz*7HErj9EctRu?z1}?-t_E*nF&-!9x35r=L~?%4oSo!+mN{9uT}a6X zs^_w7FjPk}=Q7I1Am(K7(|%uMj>r=k|K*JT&E)$mDy@%y+wMOw0zpZ=V^t{6U3*2`0R#@#eXQ+RjKB0 zCUpmO6zVd{(tq<%a%>Up@j?o>ow(J=;n4oLyW`FEG@6IL^B-^NRz+!DhFTcnN-H}j zM%G*Nsdhf2NyPd>_)z{~Ro3z~@jqMU4?E6aCW3lPTZ0+w`FJo*LppOa==?UA>$Q9WPAo+y7U(KZmpAt*2Rqu|_kx;Yt z_HX1w^@wj(le#{G1K2|69WyEYGcnrE+JCrINMM;6-Yw63773`O&?~50c|0sM^)Jvx zehMoT^e>WXD;4z#6bWaA`5Y7P^cA#e^pr(RQ@;h%IVw{n1hr!W;4jRi<|Bj{T9#AT zacWpfwGy5R;{b)qH=_Lh0~gCw*!LIddp~h`PyX&Ltq+Pfs7TG+06xFOR}RxUqS#Ix zpX3zM_~tnxDcwkI;-6$^X7EwjSrR<_Hw}2PZ z?@39q1Pd8!rf^M>oh8Aw6pKu8dpN}~Iap>eS$38LXKB(klN5pfhCxKjR??w%!Ntmx z#XnBwCbK7gVFM1LzL}^u6QTl9N0i4k^z|@lo44|>_)gg|1#i+OgEYl+D5zr)f=-u% zGECU`4S{j{NpO1$Jr4!9;;EGDRuF#(D~^`Oi8wKgSeqWI-!D?QsTA%#xEOz-R1D_5 zsNqN9eo5gvCLr8%ayS;4_#wP0GW<^|{0a)+5E&j9p$1LAg*eIj8p+orgyM320a03r z@>)(w;k%k6!pAA$kA95s%f=%77&ZLX$ng6Rit`Up`1}ln?|}>HC;ruu;U81NKS<#_ zi2qA!_>#!*w=3aqrtp2|AiN-l?+iAhBZhh(v}ovL?S8UCnoXpeQ$cFyqzqze&nqPQ zjt5m7Wcnjy?!uacUbtG)Mu6TDL7yhkH|fwnuh4HJdi!Y5cfci=FU8-rl&9aWL%&*~ zUrzK*6n|3$eX~Sw(V?HL&}S39X(Z)8g1$nc@A!>Q{y$Xm4_8Yq(OV+u(1bu}>-?33A{~sv%hpVO9O!<$XPm}1Ibm*T~=(iDlAJKQf6_)=+ zQvP-5S1a_(i9VC+Z&L()vqW#vp`WbKXA`}{LivxNuaM|Feyx-L_m%v^)zVG$mI(SZ ziM~mP{&|Id8_`z`rToJcmjCOe{Oi!KR_K=#eFxDuMbI}(^cEfZ$qIco(U%OP{72AN zNc0`Q(#ijOO8(($@e#cxf<8^6Z_=TEUZLMc^m)T6|8Rxn|0h!Zb?8?s^vj8UJJB~q z&^Jr;7A?Iq#8mjn3Vk-wo2cusN6=SD^c}y{$^RiG|8TYBjG_ET(5FfCO{^u3? zZA8D7=sVyF%RlT`sQWrY#LT9Nz@;eNa^u4MdR@aj-ciJ;UTzM+NnP?XqXVaNusaSq5p$IzlrGc&jP&< zE-fDIm?|JV@^$Dd75YU)-$L}YVf4^{G;~bAo}>_6KtvfsKy)o9V*1bhYCc)`I3@g1 z7?-sesL>juhTj?)ejh?f`VWO~BK|#aAyZ8M(S(;5Hy%+)HWEqqc_3+li^7*^!n666 z+m*mKQ{bj^5meUj3WImB>9}JRe@+)m}`;EawkWf_r@v2#$*$9ZvSLo7-E}g*2hf6De zC1qUxd>Udo-cPz@C=S8ZQcLZLA&kB`*r=gn^7OPq^aK%Y9uK13a7pq}5gEQt3BQKI z+s7gN@6_;_k>Tem;fpD}kHX&~hwltlFW~v<+n|CW=VzosnnI) z(bvWNE42q*K?nHJbD8w4ke+twS;C&J!F)Uwel&v;{D&Ox2XM74$^_>GnKMr`@ij?& z4AQgzIv!u2^c1CMxAg3io*mM&U3&VYXN&aQE3}aM9mT)lQ8)?_7+0*XCu_vawt|0jll`Tou*c11s~d~M#N@# z+K8(DLQs7Qmj+96Vz*sTwDbIRQ44-3a(^9mQj$KnX{UliEboU(ty z)sjys8$c-|c~4`6T|tZVG-(*j>_WbtR;ZsKYEu@dcf-Z-!1~u5H9}@DP^W}nL*Xx@ z@V}G8BmW3b@otu$%|vh8ZWpiF7q;$3Q@N8BR@ubrabjivKka=BTwLX~?*}0fHC19! zsYabdOi(fI*{|8NXU~I#M4}|Ygb>u!fxr+j1V$JVQd18q=1`>;ZOq}+RMEzi)>P4= z#hNN=j960-wbXLj+=?1g)KsZWQ>r=k{?~rY>=_`So_p`_cYkN|Tde)P*6Ul}`W`d0 zw?Rtp8KP5c=ii4$Nzq1s2gRNeYILsAi0WtQe0$z=*xS*u?JKBl^xt#TZYFuoJGj$1 z8UOVDUrzFOzBi;}=nrfe{K}o6b4!%YW}*`zI`N)oJ2ayDqq|W5 z+tu(XI!XOxSuB?Ia;&dR+jbN3$|3=dnu?%A7$=At}$!9_aIfUMtC{6 zL9#2Nl6gt80g|lLkj&6XKR=)IA8~#{=b`juo}Lae9B;3F;N|HIUqfrb_p^-e?Y%rb zB_W*}m%j5W+G>2k`IX45vA^0N3Fxb_M^e|^=`F_>uklsV>x%A_DslVm#s4gLn(~Hk z_yobK;Zw>eS~I+M8=V5<)BAr8&$=H4l3u6eHTrH}%FEL!g-?3$#dacM+*O-**9YnA z+)p3)xK5DwEpd} zXZuk>^G8W(fpnJkEb_l385Y`cO@%uBwbR)NH7!-CW}c)z#J3 zfnLUlK`#w$I9Gg|s@nQUU8r;;iDTV6jI3z;O0&HK?VHfP!zNGtmikBtt$R?XqYiSO z4IUW);I_Ho^{}C9gw^8D!75mYZ3Zr7b!lLHVG&lZm(?Pd>NFs)47pWkQ-hp( zz2*YQ_~qzq1jQOgblUI(grTppv@>Ae3;+k+0xC?|SP1Aseuu`=GI7rV z&IhFZIVtT`v?sgK_qFLN25`*DcqT9r9VRmuy2;Ig&~_d4DTl5V(7F;*+`u-lYG_{r z4a4k4=v@!p8rUXSr;%-8-(WdxAzQ?9*lQUY7My< zqAs;%Y{bMYP_-ug&QqS79>};XxA4@~5b zmofMP^)rJEBK%B1vtUxSVZssjSy&TAM z6)ae&Q_6xKhOA@DE{>KhMZ~09)I-!e#y#<}N@)C9R(4>V(d-k#*b5_fi#|VW3YEdY zTA?pC)O4RME3MZD^2XBe<@KRRd4ti_x`{#Jl|2dLD-Gic7N*T<0q{~hdPv@-ga`kGQ-H|bqx z=C3sKuY*N%@wZZM$LX=g@QVW7_Pkloo+pfxC&uM1)BVGek3@s~H1SFe7&&Psj>dD$w=|o?uGOGv%tz#H zhMRaH|wH0tUc8y<>dLmuJ_L2V< z+9dgS^htK3{|wI{AEchDMkF$3p0WK!HeRf+bLwELdfh*awfT6_bE%?tW<255Y$%Kjx!T;V?dZgOcIj zm3n^}y_9IJsc<+^eU& z42u+kBdt(q-%+E-O3Mo=)*4ab#C!9^eldJ%{4sN)nI&Ex>zv^Kr8K#)<0gQyVxu*j z1N(BC>uPmjbAicj6i*Z9z~#s%3mWq~%@s5gl0O(%VqCU+I{BKh@=Khx!pNsNnf}vC zm3Al_buS{Hp%tS8Jx+a1ygMx}(|A6H#f+V}VLuv~ z@w|)`3GMPpa^gOD3?(kB;v^nBvaK1|uz9?_Xst*d7B30)Klz6>OC`n^L$`Rob}zHX z9-1S_YmEM>LI05Nl7$VqC_nzZF1Bl;vya$X)3T_s@1au;@>FYmN3w3xDbsmMsXoU} z?Cpu3H8o2!tjZf;FMI4Y=I(~5&yi13gtc4Lki0w&%xMb}UVcJHyJI`fBX_lsJMYqEipY;sV7E>ZcI?XpEC@8!?S6 zQ3l%>tA4|)*P*tt7Nl7q#(yay*=5KfDQa*RLOYUo{53Y&nZ}cSHllfk;*r&kIG5_O z(n*&wcZKyll9i;Sh(gj)yUBgPh_B=Ap@|Od@o9!7I>zpXWHkDw-t1NCSIa9YR#jua zMtaohc3Xh^EbI*ppEqK0y^UVX$H_*9j}v{0xg-JgNj1ihsos(#F&kMh@~v?V+6z9xK9OV2SQ3G?h?e$IP(N>3AL-kZ>_ z6ZyOFxrLQY=SkD!&7uN$u#e^E+bFq1EgPSA(mh>z|0A6b zu+yV@mhaeQv$v)89O`XNpx27@&IEc?Z#;VTwnT3&>K(Arqc#VT9tNb~vlFY%c)C)% z2-;H}y6kd0%(j$IZ8@YZdVOd!9=$?a8ebOS;fyr)h6bW&NnvW1~s3^&#DF=21D-qsvam-iFGKQa#K$bWa!A zDh=t`0IQFw&Uk%nZ%1v@@C~Yb8!c+H7U^;`kIJbYU3QtM4IYQbiaU~6!GlSx4KV$o zB<2C!1n2_v15$sG!~%dY;75SB0JC-_u^hmSfFA++0V9C4hm#lwC;)^3ZGbL7^6n&d zG2lkPLx6t3kA9fM1_7sbfh}jEC6T%^a5Bn(tsvFFMvIXG@uF43t&$n4QK-N0@%-x1~dVB0SvD@ z4FH+|y#V$!(ttYw{eZNe!;XL!Ko4LTkns#;0)zqWfIh$|AZst=2YeUM4@mt5Yz3$U zbN~hcsn4Qs0A+w?*&(o~A`(B_G&ELXQ!YPe9|C+Ku9|b3poKh$r9Hk)|STPmYE=KvR+pbpV%0zJYlCT=rvyNNqY z+-c%26Ze?7*Tj7$?lC5mw3+r{r(fwA>O@^lSJwRCVAck zCYk?Y=6?cA^$1hFwkr*sh6h+s{S08rZ!z}|RF~59orqpd{5*scrucWA@vgP)Dz5tJ}8QkoVt#t^Vnqq)iEAB03v@ ziRbO6jFcuCG}e!vfJOl2)>ZuC*fDFB5p4nm&w#LG%fmh86$4xK2vZ*E&UG2~$^o|8 zv?bKF+EJT;l>kn9d2(6y*<=|oWjT~U-;$-kwC#1klviQenEG%w9>8T|9lfP`BsUdq zJwYAPb;P9qsY!nZ`knk}7O>6(nEGNq@N{4vn8tt?m>y4@2Tc2wRlu}YydIc7xvv7I z$Hzy2=~;re0@H6{+JH|3z8{$Qcl^ZAq0_`&z$82IK7In(sSe4p7SEai8gp6p3xgi< zxe1u^=py~-A|7;E`4-KtNoWR4npaJMCh=~1#L$WO3{6723w5bYkJ*M~orxz3k(`N_ zrQ?X%X4J%NPt1ma6SSp%vtrEeADY~6w}KYgh-7NTJ@Ma}K;M$72{Mqp-vg$+-N2;R z6Q*qBQv(TYsXkp64X)E@qX1icGw`f1qgMQXYD0C%N5dzmLo)RK$e_^&OzrxCDSr@{ zd}0XL@`b&V&$fpo1}dZRM)GV2 zPvTGG{2=ZrZ&!jGmM&>Oj_FEyZlnn>F!6;Z&al-(G0R1o^jir`@{|BmA91Gt5RGgW z+t(l&y{L@j!#h%O&N*=%qSs;4eFT`=Jq1kmc^;T-eE^tz^>@HzgExW64(|h#e19`B z!`P$rsU|+l#LG-P$HdttcA0n~ux0OI$TPcZ@^P4wl&ssIP^w~Jd()-@eqKPd2m0-p&O2 zZJ9!%gvw(T|f?3sj*c+KSfo`NSDll&x0I_`;QCNNO+N|aw5$3AP(hWf#3#3jg0 zdN!H#t0$qKyJm8^_kxBc_W_gc!Aa;AuAZE3I-U@1(app?=`I3WdJ#^v$LaZ#)2+7A z-D=WporLa+t0t$r&qjB^q`mjO)1<$B68g6X4f+%lDE^a7htP)T&^(Zhr!i9A(Q)Y5$7=t>Myz=YnBu?@V3OnS z!1j7==I0$&9_>YU?l9)4hfLf8oo<8=bSN)iC4lokoSbgzsWG}4xF;G}z&0|`xv$MU$DleT33aUcR7N)HHP1f!fGMxv zY)iInJwaQdL-na1+43OjTI*Uo-sPV^km7CkOQfwnL3P%&HquLArh*2wIXVS?Z4>Y-fX(gt ze@Bex_XngcevKx-a$vBHUgPP<@O&#vFAGz>rk}_7k$&YD$MgFk(iXpAli$D;_=P9n zHiu_l=P5mL`20k+$^B11-`i9hhXauJQEkNZ@*?lSpqodVy~Gvf8V^lR~ai;=eT4JYtzwDHXXEz<4i z6!+<3kjv*Y=WB=8-z@y+b{fo4vZy2-)k<@q9l*+Rm5jj-~bfMcV4$0?;CT zX9G{BZ)XDEGfs}@>qpwoH=Mw?(Z;vWwfBwO!wJr^NI94$^kMT?u@9Y&qv_^9>>$$2TEvjN0M` z2U?`>@hR|aN#OhTMe%%3pBK-!_vu)g{HhOW%da|3z7gQb?9A{m-Z*{d$MX#$ZP%A! zJ#D3lZz|FjUk7NBzDK6Ow=se5ty%GWA4A&WLplT!_~zO8wwrv*fvK)_kt}o(w$|+< z34Bj=#Pd~un16e0^KTj+3{A8TPJwSF>e}tRc}_gvT}a#cjwJ9Mwef8+`4$3` ze%3XfzC#Io=bskOw-9MN-*Ccyq0zQqV0ij8@i;I6U-Adq&k!y~T}$5*Ft|B0p6??_ zli$$!(@v9aE-;eOi+IJ!1|O%qMw{GoJrfzY?!Em!P*| z(|gpEZ{IlbCGsseFQzx~eQRz!-_tHk;A_)`?4}@Xji)eZkxm*g@v$z-qsy*uUjpB| z&yVN(EYfkdOz^Kpn|}?Pe7mQ>H-LvJTm4M>{$7sfdy*@jZ!gX_EICNuKBO&uOF)Zs z$_6I=tjp4u($t2aA9XA`7N&Xu#9vFEHWXZcJbvAGJJQ6D{G`X^w`&Ug0(jqv#mBDM&@zqADX?)o&I-;+pN`n8+*|Qmjeusli$D;_=P9n7f8_W2bab3JB+l&uNXAQp1Hu2 z={Gb1zcw4ct;O%fG5+hV*-99 z3H+{h$Mb7M+Tzz@@{3G?Us~q)`t>L9EA_ZZ5FB0_6p48HfKqmi~5=zT*V+drbPf#-UGhnBzIaw#4sfLLG~J zqAZViWAiuBu<8+}x&)4SvCqXg-0L)esg89e(p|fHa=MK+x-BN%_HpQvTm{h0;zjn> z*9-}Dt#Xou>d<%TvgXIjX|F?coA7xM<+T7)yYB)M?fZdgPI?BI*1#{D`M&|C&s6^i zOy5mAY^Fa1*5w37HY*0U)(e3Xw=nevtoF4;|oS&KbCp~ZQCrmU+ zw#=*(>mEQ|RAYI-M6&>xXl?{1-M5(ew*n){2wUF?eu|ZC$eSa;uH5l|2{*1vVZ3Z>XMD!EkRw7WR)fk zo4C=WLH*D?35_=R2hnIZ{e*1MH%Xfzlh3fphuR#Uq)my<54r3U+rVMUlx1ShY)iIY zJ4xFP)4#~p?I)-kK)H1l)EfRpY2C-I0$`#;un)8>Um3tXT2AF)kIqSv(oPSv)0)IcDPbpkG0~(_k@JvSb#1yLblj z(^2P4)ISStGf+<7oIMxivr&E??k_+cK$8PyfRQ=)z2)2_R&XK8E&`s1{P_m`kt~#5 zjC;Tcp!X8Uaw+7v46p$70VRMipbgMZ_Z+~9b^<^|TM1YO1{An}70?3ox=|m%Jive# zVVlPXNyWehqjBa1=0&PiC_K7XTIj zG{BXBVn78T0=N~>2Dl&aIN%k)?*V@XdyK%V(O*%4Z&r2+Ro){yl1?qc*-z6kJ*Q(CV`QRHH!liZfp*n$I zP+pCPiZ_IF%FByNtCyCCY9f?eR2?d5a6gdF2^}GXKW>YOeJAVjyNVq8j~ZB$#IRzQO4xB<8$Kl zikiq!DqcmTZ0b?UrW%qqwUDx@gp^Gkq-?4nWm5wwn+izT#7D{|`qG+;sz$5d3~8fT ziz?v_F)f!hR7cP_ma!bq+fJwxPl-|q6$B+qQ+7&MzJE?*|I}*_4G7$2)Z(aL0GQ~V&0l< zR)#j#ZVE*cP&{9ME;=<@6^i84tzQ)in~B^|SuCL|lUG_(ULDe1yfsFOwKI`=))+|w6Gp?WGT^E`Cm=EMwo{D#6l>8cVimmN& zyz7EP+Y)B6{B??nzNTsz6KNIMCFT6zO=SJxDJsZSdNhxz&ls;ltF1x zPH{m_k&_RA7{~m6&Yy{@Rb|0?{Ut5y8Y%+8HLLxZWeD-XNL^`Fq#hYYTjT%IoW%hs z%D#ox&d=R?wb}Y+$XQTRRZ|xD+$11CK~8WD$?#3P3{Z43*)8tprueHiu4@QInNOkZ z)j5m(IYq`BB?5dPXJL_`Tk%x86{kSQvfsyOCt1qlnQ!!toXO;e3^_SPoHLMVx(2@SC1{+V=#x{HVi}}> zJ4RiT>@i555uxGyd2FdG1#(7+pivgQlBkV>T4n9#jiohPzQBM5!QhoJ(}mOh^;^Ek zhzEf@v|l*g-%wFqyZH;LbOrU(#_9gX`t_km%@-mOyfS8yFi{FOd~r$(E!+Mu$sb&p zle=Qc5+l9}!7CRsc1@DsA9TgXZh2vViF&@(r&9?i<{8DiEP3PGLYjAAM=+}>t*#FR zNF!T~g^SS|bv`lbMCuUwC#b@n00+^Z8N8;nt|pKh70-yfri>hVVPREyz#MY=uz^LF zlHD3e{)*DFP$aIH!v0bkOFtnE#+Jj!XYzPT#XS66sAD%)WsLui6 z&(Q)=!pRF1Ft0`{veCwH5L>mz8b^L9hv0nnHqQ)Y3vA z&&(}YSY*gCnCvgBF0IE3Bu>XwIl8E1k$K>>v<7}V#s-#=Fpue`__NWw>#J+m>FYAQ z`ssv?sJBX|`!`qN6axXFEV3mGw=fqwS1()~Tth3ieuHXRX=F^DRXIxwa-d3FZ}I`; zi28KO-kat}v>_YCk7N+HuO%Qz5@I95$rp&O@VhG@G;~QZXncX-1{w%%R!DkZpF8m8 zr^x4BAQk5sK6zcts>bSa3V|wWaMp+(Ur}Gt7!A_q8w97YI?`w3`52wD6(XnJ)*Rt- zjQ=n?6nFGE3(LCqeBd!elN@KnfqATdh-5>tQF8wkdP_VF=#>gj_*S_$6ra&Kc6O55R ze;LX-Ir=F1@XOKA$H}r)MT-iYJg1+5v!yA)a6?_F3{wrB`0n@fH~}cgDb{P&AuZ5} z05Zrn!!tI9Hqs#+yCNyLXlZGr6opCux~s3Msf4HD4#k!5oZzCy#=^?F z+Rclt;i z&1z;~cYycN9wuv-g>eRX+l-33P>8WV%-E=}2#iyUU{S1V&O=Xebdpns*X~6Zdziv$ z>Suj3jG+EO+eI4$M=VtCfzh&1dT)R1{E^9q$ zb6I^2sYCv^GU|WZ(E=Mz%=*Cwee1~$}JhZN1{rXT{u(Gyx1D*;1D#%`4Q>h;Vm&aW35u>CqRJXCJ z21|v4y4tc(eLbrs4-JQl%fgW*Rn-xk9G{&WEZtbY9=iw#!XBQ6bFHY9Gp9j}stBrW zWM7Hh2Se-|$>z2rXt1smgJrcCL^VuG!YPHx)jD@;C24T}T@#F|7NpmH)`L7M*Wi$! z-ZOyZF1E!%MAKlT5+^R@^?08s!P_vJ!(Sl4hU|75aD12PUmQWgoCqC z4R$Q!vcSf z8<6pvB>j5?X}`lgzyZhtZ~zgo^Npmmc7TF=4G;k20`dWcfMUQ}Knb86K*B6P9C+sO zuRWJ*7Ytut825XF$`PZ@0_;Qz^iOy7k9z_e8v+4pZ!fnN(>RjCJAhAkNQ{+-KDz1c zv9wshMo3>PO+*i;o+qSdwmy+O#zEP{yMqZu8doMPLZ)qX%qG@8fv; zGYzR%(c75m(B4SupCkvCM;H6X@SNC#CK?F3A*_LKx0U`m5I&^BssNu5g>W9VCU7GA zS%MjI=2;};bTQg5#dgVvG7jW|(AzEi3a(m~mE?jb%GT(uOwa*fJ>;n zpss2YRwL^}_0d9m@#01_rDN*+(56teqniGE=a<$mt=WX{T-42XG*so3(IVA5Uq2?E z@3=flN4tDtE*f6MZIem6JgOX;YnNMgLn6Kt$4_CV9zaPFH;bFY$=qV@7OsQq z!ViQ!!s9}Z@VqcA{7uLgcZ)Nm_0l%!F=@Z_TPa;WUru(N<~qkEyB53FyKZ&ubG_-3 zmBmV>^6$!Tm1%Cjd!zeD?%%n;s^+NQR3B0Qq|Wjz^W5b5nde>49BqYmr}nh=H|;`i z(EDxgE8f3*1z)M}`@UCwCt<&TqyGW_AN=^T8Eb`3Cvz(Ib?z?iaqewyx>I(pc5ZV% z?0m!dH|IQlF~5Ui7FQ{2%y7=?ii?pJm{1 zANMr3pZhI013mVV^L%~<`sWS)5BzcdWFbQ+5-Np5f+SXp_liT}yW%t{O}aoTk}9Mn zaj$nI`|xZIlqQq%ZK@Y<#+Qv{D1Jjh3p^jvxFSsN@0aiCVWHKEp!WA z;xRE*nlEKbnzRre)-Cl($D~yBQIGt({Gaku%1g>S%3qYfE4RC!asR<{rhktA9zPC8 z$W-hM$kgflhx0nVfxivbd6(ZU_J~(YSIgb<5?8TnnlfGO_3Y9*wLMyw)~)qud$s-A zphl4qn#C=t}f*g_mAC|sGHOl z^{{%T$LlHc?D70B&&AsJy}P`ujdp>IJeYb@o)1d2}_0b!rj7CLZ2`sye}LT&JiWCP`qBeS==E$C_XE`B>qzD7vB;;h7YAn z7fEZRZ%B7a|0aE3`mrTHUeaG=d&J=&Df2KdppYG4_&-Od~ znf@$)Hoo^E`W3(C5BPKadH#HVfxpmS>|g6I@t6B6{nh@kKjLrnZ}m6%oBb{RR)3p+ zyT9GP6TWY0+3nx&A0$1yu-3sml*Fy#M!6-3R6CrHIe+Cm=zQDxf%Ctd)A*D5O!(E$ z_&)wLAxl^ytQM{l%7snBR^e9R`@#(IOi>lv#h1kjX)}ELHE9^SoGG6xXUejy$qVJL z%d#ua6>)9HsNCiH$TjNv%q1uRWrr`NO3)8{$h>GuqH20aHoL!LvPVb2lIi07zh)N>qPnN87B zwVB#CwGr)@HrHF?t?=IC?eY$J(|n74xBFi59Yfr>40c}Y|DJ!h{}um#kllLmeSDz( zi23uKUS}a9e3NrG{QD2ix14T%8>0IQ{MBN)_-pZyI8Rcfo1}TNBHtu0bFFgy%Jm!9 zdS#<>w);HyS*P{-gM6cWi+qRt9r<4QVR?`IQ~7DRSKcqbA-^fVi<#y)=E_u8hD&qhxUO)m zah15rU6rnCR~Y`+=-TRPay7eJT&=D)cw@V3r>g@V+3DKj>T-1>hVOOtVs`Cw9dPv{ zo~5X%>P$6FO;fP8HQ9YOy*OvFT;)AKEJKHQrmiJG`CVKYPFL`+<** zAl9J^Hi6GsN|v%8bM!*@E$$uehux>C%hU?BLH(n89%jGAo<}`@_RP@E)Na;(p*`j8 z^Y-{Y@y)@8!et zs66btM3I#|MR9+_z0KY3Zc%@!zM&4QgPwD=d77ln^e%^QH+Yx%zT?~N>+wDA|Er&V zgHR4$Gq?=yOy?SSaijA_{-^wYevtpQ@Kwz5is+Q;u^wrc?v{U}^Z5(L?-He0x!V0* z_ilHO`*HQJ>I_eYXO^}~tI!&?8@)gE?)U!I`!nA^5L*?jFYqoa@NjbVnAM)-zK_}K zEdC-rV$$roOFV)#PX^|qE9D}&QZ9CVPoGmemG_l-Zpq#3ep6pJG^pL`e)YF%mghFl z4$s4$Z)&$`PiW_RW$$9|i{A5nD}4Xr+u?i2_fy{+zIT0l{V(|cg7pO6I|bfrv6{G@ zo94XUxygCEb1lCPBkMSSmT(c)U!MtQi5H0>_;OhMmiVOjjChtb4?g>%lq}DaC7HPv zx{6#O*K4k?DDxCac~BWrjw#dKH@dsrG`n=EA4C5$J+~m%yn$6$k#?^(&#UM*sPb*| zwfpk@MTpH6{%!sT{k{HQl3W3NcNTIbakp}>avyU4+M|xU%MY>Y{uKbkzGWzLF zd8MlYUf&6??spwRyqKvt6cOH0q^wsOl~$!gc^otT8?fcqz0SSKeFtLi z6Yl-)-@89_C#z?vm#98h-GLRy z+xXFg>Mhoz_WRyc-$GxB?|bm?k9}$WD={BF1egm7alU$`3^Q6H$$_L6K_f_s6xF2y(Q%_aP)D4)GUR7s%<{`$Hc{X@n^t|d3 zG>`TJ?GbI7_f&70cZ2sg-amM=u_g)l_WK5XyZujM?Ukgz<#qvf5o?^~Sl=DS4uM8W zyZnIMqPD7S>UPX~PpL1di}gsd#Jk!{z7Hjvl9&jziNBrSjVMn3+>SW=mNZ@7=DOEK ztG!L0+x0#@tWo@W7wfAe){1#!6W7d@VRU{)m?vZl>Ebz}LtpFjhy^||SF916#QVfO zVz>Bnu~*zL9uQv_-w{6)|B9G@x^zC`y$dU|HPS}uUlHdIpx57qwLX-NN}otfo*~ba zX|;YnRtT5KoViLUl<(1Pxl8^rqWaI}U&+&5r@Cgj&UT&Wy3lor%jr^Fe%BJ$GFPE% zEuwlg;`uGEZHVPN5XHL?x%*xJ2_HX0$xzN$GL=gdr=lo+#HnRUp>my4rfh(B-K^ZE zd`tPR@_nUCc~beMGNAmY@<-*U!rXJ*m%BxGnR|=-U)=W~c0S>L*8Q^k*VtFR={{XO z8#BNhbspmX^;mD*t?p2Fs$J@n>ho&9I;egGzq}Odja8oYo?m;WX)CqswQ}q^Zq)A5 z{!{y-_K|kIcQ00*ecso+1K!_zWuM2l%(ns2>UJOJzskP`k)al=wMYCvg{QuRdHh{J zen`glp#K;*gF6+m`Ft*uyM*Jg<6Owyz*Rfe{8c|UeaZ_CfPj=IiM)+&9)I(^-W&4X3(3#(NxrLmO};yP9liq?U1wnRc^{3d zt|Yb-XdYLNX!aBCeeMjW>b$|Z%Q@go;YGfje}I3JzW}R?2ZT3;3$Si@KzviYKnfx< zyeVBE2jR_c$``nTt_QHUy+8>n4=8Uc7r2Ai3w-3hT&-1isRL??$K@&a+=_keAf95_x{C7Gl zoej>LVZYa%seC?vn9sz@=K*0rn2EJ|v$$70D&8giLV6t|{B7y5^fC5G$@0arD0{K~ zsFk3f!Kj_BJYyflW zL4Jro#1CWrm5#mTY{4O9VpW|jD1s&ggj^vHv9kat0Y`)p>>x(5=3-)sm@3W`)5LT! zL!6DVn2GqGElzzcGvFF@9dr%3%CSeSR>BG!O483TVi9Dg+M$Y?qG?({YsQXrr`BQa z;(D=%JE$GiQoO0&*&^4#dkbLyVyu}Py<5H8u}ACl?!nr*+uH+= z@AdA3&-Z(Wy`$da_*q(tFV&ak%kn8c4N)%Fm+vdbp1jG|=G%@rvI7yj4}LYE?|*35 zLwlWoZEsVF{S577Xb;on@6*@3NBkrHqyFQ5HiCCP;?OM}<0K1vHjN8#xm-RxGQu@- zEnF+t#%;%0LN~V$aet6I$PIDBIHgH(&UR)yIj7<*aF#gB;T>V@@Mv$>`yz)=lX34!xK6VRhY){vE~YVy2KLq@#~TyF(KX&K+5CuPIYkMcc_@d@S|HqO$U5|gD;eDP4Iy> zuH8JV>*0Fg1^w^?@`4fUe3>&9Cw9hZU5V}mTj2w{5GQ)D7e4OH<^y~lUw~Ck1Y^4s z<9RQ}^FfT`d(8#5}P;ti(E^5p!oN=FT3R zB^?!yiz$)=tGGOzU{p&@SjTlrdog1UV7?rY(hzk5avoO1TX8nfA$Q7s@)4}_naknI zbrs;$r4ioIiP^6o{=k$}>^Jh^2PH}q_J&z@5I^9UhM!P#t`DgZ1j6JB1IlzM8w;Q=&;l5`$OpU6yHqWY{UZU`D(rITlE;Q z&v(#w2oc~o_S|XcaSd}!Ax!M5m!==IXL8w`i1A*C@gBx_ z-^uOb_HcW-0~qJjzv&p|ndseI?9-`tTXBA~6MefEqk9lDX$n6RV>=V$Iv0Ihj1k?8 zD83Vsd#^s8kD`}TFqSjX&jG~fY9WG=+^X-8d$2z~gm`^aNI`_o6gjMt)?#N|EpA0m z?-V<6IyxX8#3{g0^me-5-}yMTq8{HWwPID)fweL9`5~;3QsgwOjWjt|&PRl(M$fk( zMs({@Vn9A5A4Tt{y0Q@|G*>=WLbMKQG9$!3M2ADJ5v=u%n4rNM)*|MImF>z-ctp3d z53ylL8CHy#knPso`R-zO33gbm?(Mo~?1N_vx{t#*W+EzNtD5c`6d9Tk8+Ks_){7HP z@{8j*!=3HPhIa(u8`YkOr`fX|>j#Ps2QfzNVl8}StFHw!Mz=mw z9E7Kg;*=~?_mg~_&`@;Pj&nT2PX-Ye5DOg1>>y%73O5_GLpI_;9#?>Qp;ey|_HYyp z4spl16z5F%Nfu^}nY{G=S-(QNaNBYHHLiM72$ z3h3U^hA&-9x;G?kq$O1v5vUyFm97iXb$Dw7U0T-+$2b zlXQ4WCVWNIy`@qOtBqH|fA^(xvw3UNfM3O^PQ?pHtR)Dx-7C9-Pk&U@oCq zBwZ8DStP7&MNH|``r#)G>kma=X_R9Y*$EG!^#%I20Ke@AVq6L$ej1mKs6QKVpH>0c zi2Y)8Es%%RKmj5|3qGwGb%7 diff --git a/src/external/muparser_v225/samples/example2/muparser32.lib b/src/external/muparser_v225/samples/example2/muparser32.lib deleted file mode 100644 index 1fffc1bff8ce13faf453007e7a8a76f11e077f5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15856 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 diff --git a/src/external/muparser_v225/samples/example2/muparser64.dll b/src/external/muparser_v225/samples/example2/muparser64.dll deleted file mode 100644 index d436217b45017d23ce699918bb9d095f4ca26f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192000 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 b4PAX*qt>|BRIX`VV^M}WYE2jT_y6~QYmP+O diff --git a/src/external/muparser_v225/samples/example2/muparser64.lib b/src/external/muparser_v225/samples/example2/muparser64.lib deleted file mode 100644 index 6d41e8c5ea7f8b840a600a4958ea5607d9918ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15516 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 diff --git a/src/external/muparser_v225/samples/example2/muparserd32.dll b/src/external/muparser_v225/samples/example2/muparserd32.dll deleted file mode 100644 index b52d26e6aab05e1cd9fa2cc8106e2ee2c3025fee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738816 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

dLiWZrHdFJW{ONiMJ4K@zRGJ6c3@WGRS4dXg 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ⅅ8zdst4&%twClk+ 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 diff --git a/src/external/muparser_v225/samples/example2/muparserd32.lib b/src/external/muparser_v225/samples/example2/muparserd32.lib deleted file mode 100644 index a0dbd1b12f7463c46f3672d7cf80e7760cb1405d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15938 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 diff --git a/src/external/muparser_v225/samples/example2/muparserd64.dll b/src/external/muparser_v225/samples/example2/muparserd64.dll deleted file mode 100644 index 2b7880b6b1f7fc31e7d2e7a6f98154b9c67bad7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786944 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 eUl&0m}Dh?eG2*u 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 diff --git a/src/external/muparser_v225/samples/example2/muparserd64.lib b/src/external/muparser_v225/samples/example2/muparserd64.lib deleted file mode 100644 index 3792a70eb8029506e46a9eba94dbd91bc9e76a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15594 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 \___ >|__| - \/ \/ \/ \/ - - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#include "muParser.h" -#include "muParserTemplateMagic.h" - -//--- Standard includes ------------------------------------------------------------------------ -#include -#include -#include - -/** \brief Pi (what else?). */ -#define PARSER_CONST_PI 3.141592653589793238462643 - -/** \brief The Eulerian number. */ -#define PARSER_CONST_E 2.718281828459045235360287 - -using namespace std; - -/** \file - \brief Implementation of the standard floating point parser. -*/ - - - -/** \brief Namespace for mathematical applications. */ -namespace mu -{ - - - //--------------------------------------------------------------------------- - // Trigonometric function - value_type Parser::Sin(value_type v) { return MathImpl::Sin(v); } - value_type Parser::Cos(value_type v) { return MathImpl::Cos(v); } - value_type Parser::Tan(value_type v) { return MathImpl::Tan(v); } - value_type Parser::ASin(value_type v) { return MathImpl::ASin(v); } - value_type Parser::ACos(value_type v) { return MathImpl::ACos(v); } - value_type Parser::ATan(value_type v) { return MathImpl::ATan(v); } - value_type Parser::ATan2(value_type v1, value_type v2) { return MathImpl::ATan2(v1, v2); } - value_type Parser::Sinh(value_type v) { return MathImpl::Sinh(v); } - value_type Parser::Cosh(value_type v) { return MathImpl::Cosh(v); } - value_type Parser::Tanh(value_type v) { return MathImpl::Tanh(v); } - value_type Parser::ASinh(value_type v) { return MathImpl::ASinh(v); } - value_type Parser::ACosh(value_type v) { return MathImpl::ACosh(v); } - value_type Parser::ATanh(value_type v) { return MathImpl::ATanh(v); } - - //--------------------------------------------------------------------------- - // Logarithm functions - - // Logarithm base 2 - value_type Parser::Log2(value_type v) - { - #ifdef MUP_MATH_EXCEPTIONS - if (v<=0) - throw ParserError(ecDOMAIN_ERROR, _T("Log2")); - #endif - - return MathImpl::Log2(v); - } - - // Logarithm base 10 - value_type Parser::Log10(value_type v) - { - #ifdef MUP_MATH_EXCEPTIONS - if (v<=0) - throw ParserError(ecDOMAIN_ERROR, _T("Log10")); - #endif - - return MathImpl::Log10(v); - } - -// Logarithm base e (natural logarithm) - value_type Parser::Ln(value_type v) - { - #ifdef MUP_MATH_EXCEPTIONS - if (v<=0) - throw ParserError(ecDOMAIN_ERROR, _T("Ln")); - #endif - - return MathImpl::Log(v); - } - - //--------------------------------------------------------------------------- - // misc - value_type Parser::Exp(value_type v) { return MathImpl::Exp(v); } - value_type Parser::Abs(value_type v) { return MathImpl::Abs(v); } - value_type Parser::Sqrt(value_type v) - { - #ifdef MUP_MATH_EXCEPTIONS - if (v<0) - throw ParserError(ecDOMAIN_ERROR, _T("sqrt")); - #endif - - return MathImpl::Sqrt(v); - } - value_type Parser::Rint(value_type v) { return MathImpl::Rint(v); } - value_type Parser::Sign(value_type v) { return MathImpl::Sign(v); } - - //--------------------------------------------------------------------------- - /** \brief Callback for the unary minus operator. - \param v The value to negate - \return -v - */ - value_type Parser::UnaryMinus(value_type v) - { - return -v; - } - - //--------------------------------------------------------------------------- - /** \brief Callback for the unary minus operator. - \param v The value to negate - \return -v - */ - value_type Parser::UnaryPlus(value_type v) - { - return v; - } - - //--------------------------------------------------------------------------- - /** \brief Callback for adding multiple values. - \param [in] a_afArg Vector with the function arguments - \param [in] a_iArgc The size of a_afArg - */ - value_type Parser::Sum(const value_type *a_afArg, int a_iArgc) - { - if (!a_iArgc) - throw exception_type(_T("too few arguments for function sum.")); - - value_type fRes=0; - for (int i=0; i> fVal; - stringstream_type::pos_type iEnd = stream.tellg(); // Position after reading - - if (iEnd==(stringstream_type::pos_type)-1) - return 0; - - *a_iPos += (int)iEnd; - *a_fVal = fVal; - return 1; - } - - - //--------------------------------------------------------------------------- - /** \brief Constructor. - - Call ParserBase class constructor and trigger Function, Operator and Constant initialization. - */ - Parser::Parser() - :ParserBase() - { - AddValIdent(IsVal); - - InitCharSets(); - InitFun(); - InitConst(); - InitOprt(); - } - - //--------------------------------------------------------------------------- - /** \brief Define the character sets. - \sa DefineNameChars, DefineOprtChars, DefineInfixOprtChars - - This function is used for initializing the default character sets that define - the characters to be useable in function and variable names and operators. - */ - void Parser::InitCharSets() - { - DefineNameChars( _T("0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") ); - DefineOprtChars( _T("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-*^/?<>=#!$%&|~'_{}") ); - DefineInfixOprtChars( _T("/+-*^?<>=#!$%&|~'_") ); - } - - //--------------------------------------------------------------------------- - /** \brief Initialize the default functions. */ - void Parser::InitFun() - { - if (mu::TypeInfo::IsInteger()) - { - // When setting MUP_BASETYPE to an integer type - // Place functions for dealing with integer values here - // ... - // ... - // ... - } - else - { - // trigonometric functions - DefineFun(_T("sin"), Sin); - DefineFun(_T("cos"), Cos); - DefineFun(_T("tan"), Tan); - // arcus functions - DefineFun(_T("asin"), ASin); - DefineFun(_T("acos"), ACos); - DefineFun(_T("atan"), ATan); - DefineFun(_T("atan2"), ATan2); - // hyperbolic functions - DefineFun(_T("sinh"), Sinh); - DefineFun(_T("cosh"), Cosh); - DefineFun(_T("tanh"), Tanh); - // arcus hyperbolic functions - DefineFun(_T("asinh"), ASinh); - DefineFun(_T("acosh"), ACosh); - DefineFun(_T("atanh"), ATanh); - // Logarithm functions - DefineFun(_T("log2"), Log2); - DefineFun(_T("log10"), Log10); - DefineFun(_T("log"), Ln); - DefineFun(_T("ln"), Ln); - // misc - DefineFun(_T("exp"), Exp); - DefineFun(_T("sqrt"), Sqrt); - DefineFun(_T("sign"), Sign); - DefineFun(_T("rint"), Rint); - DefineFun(_T("abs"), Abs); - // Functions with variable number of arguments - DefineFun(_T("sum"), Sum); - DefineFun(_T("avg"), Avg); - DefineFun(_T("min"), Min); - DefineFun(_T("max"), Max); - } - } - - //--------------------------------------------------------------------------- - /** \brief Initialize constants. - - By default the parser recognizes two constants. Pi ("pi") and the Eulerian - number ("_e"). - */ - void Parser::InitConst() - { - DefineConst(_T("_pi"), (value_type)PARSER_CONST_PI); - DefineConst(_T("_e"), (value_type)PARSER_CONST_E); - } - - //--------------------------------------------------------------------------- - /** \brief Initialize operators. - - By default only the unary minus operator is added. - */ - void Parser::InitOprt() - { - DefineInfixOprt(_T("-"), UnaryMinus); - DefineInfixOprt(_T("+"), UnaryPlus); - } - - //--------------------------------------------------------------------------- - void Parser::OnDetectVar(string_type * /*pExpr*/, int & /*nStart*/, int & /*nEnd*/) - { - // this is just sample code to illustrate modifying variable names on the fly. - // I'm not sure anyone really needs such a feature... - /* - - - string sVar(pExpr->begin()+nStart, pExpr->begin()+nEnd); - string sRepl = std::string("_") + sVar + "_"; - - int nOrigVarEnd = nEnd; - cout << "variable detected!\n"; - cout << " Expr: " << *pExpr << "\n"; - cout << " Start: " << nStart << "\n"; - cout << " End: " << nEnd << "\n"; - cout << " Var: \"" << sVar << "\"\n"; - cout << " Repl: \"" << sRepl << "\"\n"; - nEnd = nStart + sRepl.length(); - cout << " End: " << nEnd << "\n"; - pExpr->replace(pExpr->begin()+nStart, pExpr->begin()+nOrigVarEnd, sRepl); - cout << " New expr: " << *pExpr << "\n"; - */ - } - - //--------------------------------------------------------------------------- - /** \brief Numerically differentiate with regard to a variable. - \param [in] a_Var Pointer to the differentiation variable. - \param [in] a_fPos Position at which the differentiation should take place. - \param [in] a_fEpsilon Epsilon used for the numerical differentiation. - - Numerical differentiation uses a 5 point operator yielding a 4th order - formula. The default value for epsilon is 0.00074 which is - numeric_limits::epsilon() ^ (1/5) as suggested in the muparser - forum: - - http://sourceforge.net/forum/forum.php?thread_id=1994611&forum_id=462843 - */ - value_type Parser::Diff(value_type *a_Var, - value_type a_fPos, - value_type a_fEpsilon) const - { - value_type fRes(0), - fBuf(*a_Var), - f[4] = {0,0,0,0}, - fEpsilon(a_fEpsilon); - - // Backwards compatible calculation of epsilon inc case the user doesn't provide - // his own epsilon - if (fEpsilon==0) - fEpsilon = (a_fPos==0) ? (value_type)1e-10 : (value_type)1e-7 * a_fPos; - - *a_Var = a_fPos+2 * fEpsilon; f[0] = Eval(); - *a_Var = a_fPos+1 * fEpsilon; f[1] = Eval(); - *a_Var = a_fPos-1 * fEpsilon; f[2] = Eval(); - *a_Var = a_fPos-2 * fEpsilon; f[3] = Eval(); - *a_Var = fBuf; // restore variable - - fRes = (-f[0] + 8*f[1] - 8*f[2] + f[3]) / (12*fEpsilon); - return fRes; - } -} // namespace mu diff --git a/src/external/muparser_v225/src/muParserBase.cpp b/src/external/muparser_v225/src/muParserBase.cpp deleted file mode 100644 index ea3699a12..000000000 --- a/src/external/muparser_v225/src/muParserBase.cpp +++ /dev/null @@ -1,1778 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "muParserBase.h" -#include "muParserTemplateMagic.h" - -//--- Standard includes ------------------------------------------------------------------------ -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef MUP_USE_OPENMP - #include -#endif - -using namespace std; - -/** \file - \brief This file contains the basic implementation of the muparser engine. -*/ - -namespace mu -{ - std::locale ParserBase::s_locale = std::locale(std::locale::classic(), new change_dec_sep('.')); - - bool ParserBase::g_DbgDumpCmdCode = false; - bool ParserBase::g_DbgDumpStack = false; - - //------------------------------------------------------------------------------ - /** \brief Identifiers for built in binary operators. - - When defining custom binary operators with #AddOprt(...) make sure not to choose - names conflicting with these definitions. - */ - const char_type* ParserBase::c_DefaultOprt[] = - { - _T("<="), _T(">="), _T("!="), - _T("=="), _T("<"), _T(">"), - _T("+"), _T("-"), _T("*"), - _T("/"), _T("^"), _T("&&"), - _T("||"), _T("="), _T("("), - _T(")"), _T("?"), _T(":"), 0 - }; - - //------------------------------------------------------------------------------ - /** \brief Constructor. - \param a_szFormula the formula to interpret. - \throw ParserException if a_szFormula is null. - */ - ParserBase::ParserBase() - :m_pParseFormula(&ParserBase::ParseString) - ,m_vRPN() - ,m_vStringBuf() - ,m_pTokenReader() - ,m_FunDef() - ,m_PostOprtDef() - ,m_InfixOprtDef() - ,m_OprtDef() - ,m_ConstDef() - ,m_StrVarDef() - ,m_VarDef() - ,m_bBuiltInOp(true) - ,m_sNameChars() - ,m_sOprtChars() - ,m_sInfixOprtChars() - ,m_nIfElseCounter(0) - ,m_vStackBuffer() - ,m_nFinalResultIdx(0) - { - InitTokenReader(); - } - - //--------------------------------------------------------------------------- - /** \brief Copy constructor. - - The parser can be safely copy constructed but the bytecode is reset during - copy construction. - */ - ParserBase::ParserBase(const ParserBase &a_Parser) - :m_pParseFormula(&ParserBase::ParseString) - ,m_vRPN() - ,m_vStringBuf() - ,m_pTokenReader() - ,m_FunDef() - ,m_PostOprtDef() - ,m_InfixOprtDef() - ,m_OprtDef() - ,m_ConstDef() - ,m_StrVarDef() - ,m_VarDef() - ,m_bBuiltInOp(true) - ,m_sNameChars() - ,m_sOprtChars() - ,m_sInfixOprtChars() - ,m_nIfElseCounter(0) - { - m_pTokenReader.reset(new token_reader_type(this)); - Assign(a_Parser); - } - - //--------------------------------------------------------------------------- - ParserBase::~ParserBase() - {} - - //--------------------------------------------------------------------------- - /** \brief Assignment operator. - - Implemented by calling Assign(a_Parser). Self assignment is suppressed. - \param a_Parser Object to copy to this. - \return *this - \throw nothrow - */ - ParserBase& ParserBase::operator=(const ParserBase &a_Parser) - { - Assign(a_Parser); - return *this; - } - - //--------------------------------------------------------------------------- - /** \brief Copy state of a parser object to this. - - Clears Variables and Functions of this parser. - Copies the states of all internal variables. - Resets parse function to string parse mode. - - \param a_Parser the source object. - */ - void ParserBase::Assign(const ParserBase &a_Parser) - { - if (&a_Parser==this) - return; - - // Don't copy bytecode instead cause the parser to create new bytecode - // by resetting the parse function. - ReInit(); - - m_ConstDef = a_Parser.m_ConstDef; // Copy user define constants - m_VarDef = a_Parser.m_VarDef; // Copy user defined variables - m_bBuiltInOp = a_Parser.m_bBuiltInOp; - m_vStringBuf = a_Parser.m_vStringBuf; - m_vStackBuffer = a_Parser.m_vStackBuffer; - m_nFinalResultIdx = a_Parser.m_nFinalResultIdx; - m_StrVarDef = a_Parser.m_StrVarDef; - m_vStringVarBuf = a_Parser.m_vStringVarBuf; - m_nIfElseCounter = a_Parser.m_nIfElseCounter; - m_pTokenReader.reset(a_Parser.m_pTokenReader->Clone(this)); - - // Copy function and operator callbacks - m_FunDef = a_Parser.m_FunDef; // Copy function definitions - m_PostOprtDef = a_Parser.m_PostOprtDef; // post value unary operators - m_InfixOprtDef = a_Parser.m_InfixOprtDef; // unary operators for infix notation - m_OprtDef = a_Parser.m_OprtDef; // binary operators - - m_sNameChars = a_Parser.m_sNameChars; - m_sOprtChars = a_Parser.m_sOprtChars; - m_sInfixOprtChars = a_Parser.m_sInfixOprtChars; - } - - //--------------------------------------------------------------------------- - /** \brief Set the decimal separator. - \param cDecSep Decimal separator as a character value. - \sa SetThousandsSep - - By default muparser uses the "C" locale. The decimal separator of this - locale is overwritten by the one provided here. - */ - void ParserBase::SetDecSep(char_type cDecSep) - { - char_type cThousandsSep = std::use_facet< change_dec_sep >(s_locale).thousands_sep(); - s_locale = std::locale(std::locale("C"), new change_dec_sep(cDecSep, cThousandsSep)); - } - - //--------------------------------------------------------------------------- - /** \brief Sets the thousands operator. - \param cThousandsSep The thousands separator as a character - \sa SetDecSep - - By default muparser uses the "C" locale. The thousands separator of this - locale is overwritten by the one provided here. - */ - void ParserBase::SetThousandsSep(char_type cThousandsSep) - { - char_type cDecSep = std::use_facet< change_dec_sep >(s_locale).decimal_point(); - s_locale = std::locale(std::locale("C"), new change_dec_sep(cDecSep, cThousandsSep)); - } - - //--------------------------------------------------------------------------- - /** \brief Resets the locale. - - The default locale used "." as decimal separator, no thousands separator and - "," as function argument separator. - */ - void ParserBase::ResetLocale() - { - s_locale = std::locale(std::locale("C"), new change_dec_sep('.')); - SetArgSep(','); - } - - //--------------------------------------------------------------------------- - /** \brief Initialize the token reader. - - Create new token reader object and submit pointers to function, operator, - constant and variable definitions. - - \post m_pTokenReader.get()!=0 - \throw nothrow - */ - void ParserBase::InitTokenReader() - { - m_pTokenReader.reset(new token_reader_type(this)); - } - - //--------------------------------------------------------------------------- - /** \brief Reset parser to string parsing mode and clear internal buffers. - - Clear bytecode, reset the token reader. - \throw nothrow - */ - void ParserBase::ReInit() const - { - m_pParseFormula = &ParserBase::ParseString; - m_vStringBuf.clear(); - m_vRPN.clear(); - m_pTokenReader->ReInit(); - m_nIfElseCounter = 0; - } - - //--------------------------------------------------------------------------- - void ParserBase::OnDetectVar(string_type * /*pExpr*/, int & /*nStart*/, int & /*nEnd*/) - {} - - //--------------------------------------------------------------------------- - /** \brief Returns the version of muparser. - \param eInfo A flag indicating whether the full version info should be - returned or not. - - Format is as follows: "MAJOR.MINOR (COMPILER_FLAGS)" The COMPILER_FLAGS - are returned only if eInfo==pviFULL. - */ - string_type ParserBase::GetVersion(EParserVersionInfo eInfo) const - { - stringstream_type ss; - - ss << MUP_VERSION; - - if (eInfo==pviFULL) - { - ss << _T(" (") << MUP_VERSION_DATE; - ss << std::dec << _T("; ") << sizeof(void*)*8 << _T("BIT"); - -#ifdef _DEBUG - ss << _T("; DEBUG"); -#else - ss << _T("; RELEASE"); -#endif - -#ifdef _UNICODE - ss << _T("; UNICODE"); -#else - #ifdef _MBCS - ss << _T("; MBCS"); - #else - ss << _T("; ASCII"); - #endif -#endif - -#ifdef MUP_USE_OPENMP - ss << _T("; OPENMP"); -//#else -// ss << _T("; NO_OPENMP"); -#endif - -#if defined(MUP_MATH_EXCEPTIONS) - ss << _T("; MATHEXC"); -//#else -// ss << _T("; NO_MATHEXC"); -#endif - - ss << _T(")"); - } - - return ss.str(); - } - - //--------------------------------------------------------------------------- - /** \brief Add a value parsing function. - - When parsing an expression muParser tries to detect values in the expression - string using different valident callbacks. Thus it's possible to parse - for hex values, binary values and floating point values. - */ - void ParserBase::AddValIdent(identfun_type a_pCallback) - { - m_pTokenReader->AddValIdent(a_pCallback); - } - - //--------------------------------------------------------------------------- - /** \brief Set a function that can create variable pointer for unknown expression variables. - \param a_pFactory A pointer to the variable factory. - \param pUserData A user defined context pointer. - */ - void ParserBase::SetVarFactory(facfun_type a_pFactory, void *pUserData) - { - m_pTokenReader->SetVarCreator(a_pFactory, pUserData); - } - - //--------------------------------------------------------------------------- - /** \brief Add a function or operator callback to the parser. */ - void ParserBase::AddCallback( const string_type &a_strName, - const ParserCallback &a_Callback, - funmap_type &a_Storage, - const char_type *a_szCharSet ) - { - if (a_Callback.GetAddr()==0) - Error(ecINVALID_FUN_PTR); - - const funmap_type *pFunMap = &a_Storage; - - // Check for conflicting operator or function names - if ( pFunMap!=&m_FunDef && m_FunDef.find(a_strName)!=m_FunDef.end() ) - Error(ecNAME_CONFLICT, -1, a_strName); - - if ( pFunMap!=&m_PostOprtDef && m_PostOprtDef.find(a_strName)!=m_PostOprtDef.end() ) - Error(ecNAME_CONFLICT, -1, a_strName); - - if ( pFunMap!=&m_InfixOprtDef && pFunMap!=&m_OprtDef && m_InfixOprtDef.find(a_strName)!=m_InfixOprtDef.end() ) - Error(ecNAME_CONFLICT, -1, a_strName); - - if ( pFunMap!=&m_InfixOprtDef && pFunMap!=&m_OprtDef && m_OprtDef.find(a_strName)!=m_OprtDef.end() ) - Error(ecNAME_CONFLICT, -1, a_strName); - - CheckOprt(a_strName, a_Callback, a_szCharSet); - a_Storage[a_strName] = a_Callback; - ReInit(); - } - - //--------------------------------------------------------------------------- - /** \brief Check if a name contains invalid characters. - - \throw ParserException if the name contains invalid characters. - */ - void ParserBase::CheckOprt(const string_type &a_sName, - const ParserCallback &a_Callback, - const string_type &a_szCharSet) const - { - if ( !a_sName.length() || - (a_sName.find_first_not_of(a_szCharSet)!=string_type::npos) || - (a_sName[0]>='0' && a_sName[0]<='9')) - { - switch(a_Callback.GetCode()) - { - case cmOPRT_POSTFIX: Error(ecINVALID_POSTFIX_IDENT, -1, a_sName); - case cmOPRT_INFIX: Error(ecINVALID_INFIX_IDENT, -1, a_sName); - default: Error(ecINVALID_NAME, -1, a_sName); - } - } - } - - //--------------------------------------------------------------------------- - /** \brief Check if a name contains invalid characters. - - \throw ParserException if the name contains invalid characters. - */ - void ParserBase::CheckName(const string_type &a_sName, - const string_type &a_szCharSet) const - { - if ( !a_sName.length() || - (a_sName.find_first_not_of(a_szCharSet)!=string_type::npos) || - (a_sName[0]>='0' && a_sName[0]<='9')) - { - Error(ecINVALID_NAME); - } - } - - //--------------------------------------------------------------------------- - /** \brief Set the formula. - \param a_strFormula Formula as string_type - \throw ParserException in case of syntax errors. - - Triggers first time calculation thus the creation of the bytecode and - scanning of used variables. - */ - void ParserBase::SetExpr(const string_type &a_sExpr) - { - // Check locale compatibility - std::locale loc; - if (m_pTokenReader->GetArgSep()==std::use_facet >(loc).decimal_point()) - Error(ecLOCALE); - - // 20060222: Bugfix for Borland-Kylix: - // adding a space to the expression will keep Borlands KYLIX from going wild - // when calling tellg on a stringstream created from the expression after - // reading a value at the end of an expression. (mu::Parser::IsVal function) - // (tellg returns -1 otherwise causing the parser to ignore the value) - string_type sBuf(a_sExpr + _T(" ") ); - m_pTokenReader->SetFormula(sBuf); - ReInit(); - } - - //--------------------------------------------------------------------------- - /** \brief Get the default symbols used for the built in operators. - \sa c_DefaultOprt - */ - const char_type** ParserBase::GetOprtDef() const - { - return (const char_type **)(&c_DefaultOprt[0]); - } - - //--------------------------------------------------------------------------- - /** \brief Define the set of valid characters to be used in names of - functions, variables, constants. - */ - void ParserBase::DefineNameChars(const char_type *a_szCharset) - { - m_sNameChars = a_szCharset; - } - - //--------------------------------------------------------------------------- - /** \brief Define the set of valid characters to be used in names of - binary operators and postfix operators. - */ - void ParserBase::DefineOprtChars(const char_type *a_szCharset) - { - m_sOprtChars = a_szCharset; - } - - //--------------------------------------------------------------------------- - /** \brief Define the set of valid characters to be used in names of - infix operators. - */ - void ParserBase::DefineInfixOprtChars(const char_type *a_szCharset) - { - m_sInfixOprtChars = a_szCharset; - } - - //--------------------------------------------------------------------------- - /** \brief Virtual function that defines the characters allowed in name identifiers. - \sa #ValidOprtChars, #ValidPrefixOprtChars - */ - const char_type* ParserBase::ValidNameChars() const - { - assert(m_sNameChars.size()); - return m_sNameChars.c_str(); - } - - //--------------------------------------------------------------------------- - /** \brief Virtual function that defines the characters allowed in operator definitions. - \sa #ValidNameChars, #ValidPrefixOprtChars - */ - const char_type* ParserBase::ValidOprtChars() const - { - assert(m_sOprtChars.size()); - return m_sOprtChars.c_str(); - } - - //--------------------------------------------------------------------------- - /** \brief Virtual function that defines the characters allowed in infix operator definitions. - \sa #ValidNameChars, #ValidOprtChars - */ - const char_type* ParserBase::ValidInfixOprtChars() const - { - assert(m_sInfixOprtChars.size()); - return m_sInfixOprtChars.c_str(); - } - - //--------------------------------------------------------------------------- - /** \brief Add a user defined operator. - \post Will reset the Parser to string parsing mode. - */ - void ParserBase::DefinePostfixOprt(const string_type &a_sName, - fun_type1 a_pFun, - bool a_bAllowOpt) - { - AddCallback(a_sName, - ParserCallback(a_pFun, a_bAllowOpt, prPOSTFIX, cmOPRT_POSTFIX), - m_PostOprtDef, - ValidOprtChars() ); - } - - //--------------------------------------------------------------------------- - /** \brief Initialize user defined functions. - - Calls the virtual functions InitFun(), InitConst() and InitOprt(). - */ - void ParserBase::Init() - { - InitCharSets(); - InitFun(); - InitConst(); - InitOprt(); - } - - //--------------------------------------------------------------------------- - /** \brief Add a user defined operator. - \post Will reset the Parser to string parsing mode. - \param [in] a_sName operator Identifier - \param [in] a_pFun Operator callback function - \param [in] a_iPrec Operator Precedence (default=prSIGN) - \param [in] a_bAllowOpt True if operator is volatile (default=false) - \sa EPrec - */ - void ParserBase::DefineInfixOprt(const string_type &a_sName, - fun_type1 a_pFun, - int a_iPrec, - bool a_bAllowOpt) - { - AddCallback(a_sName, - ParserCallback(a_pFun, a_bAllowOpt, a_iPrec, cmOPRT_INFIX), - m_InfixOprtDef, - ValidInfixOprtChars() ); - } - - - //--------------------------------------------------------------------------- - /** \brief Define a binary operator. - \param [in] a_sName The identifier of the operator. - \param [in] a_pFun Pointer to the callback function. - \param [in] a_iPrec Precedence of the operator. - \param [in] a_eAssociativity The associativity of the operator. - \param [in] a_bAllowOpt If this is true the operator may be optimized away. - - Adds a new Binary operator the the parser instance. - */ - void ParserBase::DefineOprt( const string_type &a_sName, - fun_type2 a_pFun, - unsigned a_iPrec, - EOprtAssociativity a_eAssociativity, - bool a_bAllowOpt ) - { - // Check for conflicts with built in operator names - for (int i=0; m_bBuiltInOp && iIgnoreUndefVar(true); - CreateRPN(); // try to create bytecode, but don't use it for any further calculations since it - // may contain references to nonexisting variables. - m_pParseFormula = &ParserBase::ParseString; - m_pTokenReader->IgnoreUndefVar(false); - } - catch(exception_type & /*e*/) - { - // Make sure to stay in string parse mode, dont call ReInit() - // because it deletes the array with the used variables - m_pParseFormula = &ParserBase::ParseString; - m_pTokenReader->IgnoreUndefVar(false); - throw; - } - - return m_pTokenReader->GetUsedVar(); - } - - //--------------------------------------------------------------------------- - /** \brief Return a map containing the used variables only. */ - const varmap_type& ParserBase::GetVar() const - { - return m_VarDef; - } - - //--------------------------------------------------------------------------- - /** \brief Return a map containing all parser constants. */ - const valmap_type& ParserBase::GetConst() const - { - return m_ConstDef; - } - - //--------------------------------------------------------------------------- - /** \brief Return prototypes of all parser functions. - \return #m_FunDef - \sa FunProt - \throw nothrow - - The return type is a map of the public type #funmap_type containing the prototype - definitions for all numerical parser functions. String functions are not part of - this map. The Prototype definition is encapsulated in objects of the class FunProt - one per parser function each associated with function names via a map construct. - */ - const funmap_type& ParserBase::GetFunDef() const - { - return m_FunDef; - } - - //--------------------------------------------------------------------------- - /** \brief Retrieve the formula. */ - const string_type& ParserBase::GetExpr() const - { - return m_pTokenReader->GetExpr(); - } - - //--------------------------------------------------------------------------- - /** \brief Execute a function that takes a single string argument. - \param a_FunTok Function token. - \throw exception_type If the function token is not a string function - */ - ParserBase::token_type ParserBase::ApplyStrFunc(const token_type &a_FunTok, - const std::vector &a_vArg) const - { - if (a_vArg.back().GetCode()!=cmSTRING) - Error(ecSTRING_EXPECTED, m_pTokenReader->GetPos(), a_FunTok.GetAsString()); - - token_type valTok; - generic_fun_type pFunc = a_FunTok.GetFuncAddr(); - assert(pFunc); - - try - { - // Check function arguments; write dummy value into valtok to represent the result - switch(a_FunTok.GetArgCount()) - { - case 0: valTok.SetVal(1); a_vArg[0].GetAsString(); break; - case 1: valTok.SetVal(1); a_vArg[1].GetAsString(); a_vArg[0].GetVal(); break; - case 2: valTok.SetVal(1); a_vArg[2].GetAsString(); a_vArg[1].GetVal(); a_vArg[0].GetVal(); break; - default: Error(ecINTERNAL_ERROR); - } - } - catch(ParserError& ) - { - Error(ecVAL_EXPECTED, m_pTokenReader->GetPos(), a_FunTok.GetAsString()); - } - - // string functions won't be optimized - m_vRPN.AddStrFun(pFunc, a_FunTok.GetArgCount(), a_vArg.back().GetIdx()); - - // Push dummy value representing the function result to the stack - return valTok; - } - - //--------------------------------------------------------------------------- - /** \brief Apply a function token. - \param iArgCount Number of Arguments actually gathered used only for multiarg functions. - \post The result is pushed to the value stack - \post The function token is removed from the stack - \throw exception_type if Argument count does not match function requirements. - */ - void ParserBase::ApplyFunc( ParserStack &a_stOpt, - ParserStack &a_stVal, - int a_iArgCount) const - { - assert(m_pTokenReader.get()); - - // Operator stack empty or does not contain tokens with callback functions - if (a_stOpt.empty() || a_stOpt.top().GetFuncAddr()==0 ) - return; - - token_type funTok = a_stOpt.pop(); - assert(funTok.GetFuncAddr()); - - // Binary operators must rely on their internal operator number - // since counting of operators relies on commas for function arguments - // binary operators do not have commas in their expression - int iArgCount = (funTok.GetCode()==cmOPRT_BIN) ? funTok.GetArgCount() : a_iArgCount; - - // determine how many parameters the function needs. To remember iArgCount includes the - // string parameter whilst GetArgCount() counts only numeric parameters. - int iArgRequired = funTok.GetArgCount() + ((funTok.GetType()==tpSTR) ? 1 : 0); - - // Thats the number of numerical parameters - int iArgNumerical = iArgCount - ((funTok.GetType()==tpSTR) ? 1 : 0); - - if (funTok.GetCode()==cmFUNC_STR && iArgCount-iArgNumerical>1) - Error(ecINTERNAL_ERROR); - - if (funTok.GetArgCount()>=0 && iArgCount>iArgRequired) - Error(ecTOO_MANY_PARAMS, m_pTokenReader->GetPos()-1, funTok.GetAsString()); - - if (funTok.GetCode()!=cmOPRT_BIN && iArgCountGetPos()-1, funTok.GetAsString()); - - if (funTok.GetCode()==cmFUNC_STR && iArgCount>iArgRequired ) - Error(ecTOO_MANY_PARAMS, m_pTokenReader->GetPos()-1, funTok.GetAsString()); - - // Collect the numeric function arguments from the value stack and store them - // in a vector - std::vector stArg; - for (int i=0; iGetPos(), funTok.GetAsString()); - } - - switch(funTok.GetCode()) - { - case cmFUNC_STR: - stArg.push_back(a_stVal.pop()); - - if ( stArg.back().GetType()==tpSTR && funTok.GetType()!=tpSTR ) - Error(ecVAL_EXPECTED, m_pTokenReader->GetPos(), funTok.GetAsString()); - - ApplyStrFunc(funTok, stArg); - break; - - case cmFUNC_BULK: - m_vRPN.AddBulkFun(funTok.GetFuncAddr(), (int)stArg.size()); - break; - - case cmOPRT_BIN: - case cmOPRT_POSTFIX: - case cmOPRT_INFIX: - case cmFUNC: - if (funTok.GetArgCount()==-1 && iArgCount==0) - Error(ecTOO_FEW_PARAMS, m_pTokenReader->GetPos(), funTok.GetAsString()); - - m_vRPN.AddFun(funTok.GetFuncAddr(), (funTok.GetArgCount()==-1) ? -iArgNumerical : iArgNumerical); - break; - } - - // Push dummy value representing the function result to the stack - token_type token; - token.SetVal(1); - a_stVal.push(token); - } - - //--------------------------------------------------------------------------- - void ParserBase::ApplyIfElse(ParserStack &a_stOpt, - ParserStack &a_stVal) const - { - // Check if there is an if Else clause to be calculated - while (a_stOpt.size() && a_stOpt.top().GetCode()==cmELSE) - { - token_type opElse = a_stOpt.pop(); - MUP_ASSERT(a_stOpt.size()>0); - - // Take the value associated with the else branch from the value stack - token_type vVal2 = a_stVal.pop(); - - MUP_ASSERT(a_stOpt.size()>0); - MUP_ASSERT(a_stVal.size()>=2); - - // it then else is a ternary operator Pop all three values from the value s - // tack and just return the right value - token_type vVal1 = a_stVal.pop(); - token_type vExpr = a_stVal.pop(); - - a_stVal.push( (vExpr.GetVal()!=0) ? vVal1 : vVal2); - - token_type opIf = a_stOpt.pop(); - MUP_ASSERT(opElse.GetCode()==cmELSE); - MUP_ASSERT(opIf.GetCode()==cmIF); - - m_vRPN.AddIfElse(cmENDIF); - } // while pending if-else-clause found - } - - //--------------------------------------------------------------------------- - /** \brief Performs the necessary steps to write code for - the execution of binary operators into the bytecode. - */ - void ParserBase::ApplyBinOprt(ParserStack &a_stOpt, - ParserStack &a_stVal) const - { - // is it a user defined binary operator? - if (a_stOpt.top().GetCode()==cmOPRT_BIN) - { - ApplyFunc(a_stOpt, a_stVal, 2); - } - else - { - MUP_ASSERT(a_stVal.size()>=2); - token_type valTok1 = a_stVal.pop(), - valTok2 = a_stVal.pop(), - optTok = a_stOpt.pop(), - resTok; - - if ( valTok1.GetType()!=valTok2.GetType() || - (valTok1.GetType()==tpSTR && valTok2.GetType()==tpSTR) ) - Error(ecOPRT_TYPE_CONFLICT, m_pTokenReader->GetPos(), optTok.GetAsString()); - - if (optTok.GetCode()==cmASSIGN) - { - if (valTok2.GetCode()!=cmVAR) - Error(ecUNEXPECTED_OPERATOR, -1, _T("=")); - - m_vRPN.AddAssignOp(valTok2.GetVar()); - } - else - m_vRPN.AddOp(optTok.GetCode()); - - resTok.SetVal(1); - a_stVal.push(resTok); - } - } - - //--------------------------------------------------------------------------- - /** \brief Apply a binary operator. - \param a_stOpt The operator stack - \param a_stVal The value stack - */ - void ParserBase::ApplyRemainingOprt(ParserStack &stOpt, - ParserStack &stVal) const - { - while (stOpt.size() && - stOpt.top().GetCode() != cmBO && - stOpt.top().GetCode() != cmIF) - { - token_type tok = stOpt.top(); - switch (tok.GetCode()) - { - case cmOPRT_INFIX: - case cmOPRT_BIN: - case cmLE: - case cmGE: - case cmNEQ: - case cmEQ: - case cmLT: - case cmGT: - case cmADD: - case cmSUB: - case cmMUL: - case cmDIV: - case cmPOW: - case cmLAND: - case cmLOR: - case cmASSIGN: - if (stOpt.top().GetCode()==cmOPRT_INFIX) - ApplyFunc(stOpt, stVal, 1); - else - ApplyBinOprt(stOpt, stVal); - break; - - case cmELSE: - ApplyIfElse(stOpt, stVal); - break; - - default: - Error(ecINTERNAL_ERROR); - } - } - } - - //--------------------------------------------------------------------------- - /** \brief Parse the command code. - \sa ParseString(...) - - Command code contains precalculated stack positions of the values and the - associated operators. The Stack is filled beginning from index one the - value at index zero is not used at all. - */ - value_type ParserBase::ParseCmdCode() const - { - return ParseCmdCodeBulk(0, 0); - } - - //--------------------------------------------------------------------------- - /** \brief Evaluate the RPN. - \param nOffset The offset added to variable addresses (for bulk mode) - \param nThreadID OpenMP Thread id of the calling thread - */ - value_type ParserBase::ParseCmdCodeBulk(int nOffset, int nThreadID) const - { - assert(nThreadID<=s_MaxNumOpenMPThreads); - - // Note: The check for nOffset==0 and nThreadID here is not necessary but - // brings a minor performance gain when not in bulk mode. - value_type *Stack = ((nOffset==0) && (nThreadID==0)) ? &m_vStackBuffer[0] : &m_vStackBuffer[nThreadID * (m_vStackBuffer.size() / s_MaxNumOpenMPThreads)]; - value_type buf; - int sidx(0); - for (const SToken *pTok = m_vRPN.GetBase(); pTok->Cmd!=cmEND ; ++pTok) - { - switch (pTok->Cmd) - { - // built in binary operators - case cmLE: --sidx; Stack[sidx] = Stack[sidx] <= Stack[sidx+1]; continue; - case cmGE: --sidx; Stack[sidx] = Stack[sidx] >= Stack[sidx+1]; continue; - case cmNEQ: --sidx; Stack[sidx] = Stack[sidx] != Stack[sidx+1]; continue; - case cmEQ: --sidx; Stack[sidx] = Stack[sidx] == Stack[sidx+1]; continue; - case cmLT: --sidx; Stack[sidx] = Stack[sidx] < Stack[sidx+1]; continue; - case cmGT: --sidx; Stack[sidx] = Stack[sidx] > Stack[sidx+1]; continue; - case cmADD: --sidx; Stack[sidx] += Stack[1+sidx]; continue; - case cmSUB: --sidx; Stack[sidx] -= Stack[1+sidx]; continue; - case cmMUL: --sidx; Stack[sidx] *= Stack[1+sidx]; continue; - case cmDIV: --sidx; - - #if defined(MUP_MATH_EXCEPTIONS) - if (Stack[1+sidx]==0) - Error(ecDIV_BY_ZERO); - #endif - Stack[sidx] /= Stack[1+sidx]; - continue; - - case cmPOW: - --sidx; Stack[sidx] = MathImpl::Pow(Stack[sidx], Stack[1+sidx]); - continue; - - case cmLAND: --sidx; Stack[sidx] = Stack[sidx] && Stack[sidx+1]; continue; - case cmLOR: --sidx; Stack[sidx] = Stack[sidx] || Stack[sidx+1]; continue; - - case cmASSIGN: - // Bugfix for Bulkmode: - // for details see: - // https://groups.google.com/forum/embed/?place=forum/muparser-dev&showsearch=true&showpopout=true&showtabs=false&parenturl=http://muparser.beltoforion.de/mup_forum.html&afterlogin&pli=1#!topic/muparser-dev/szgatgoHTws - --sidx; Stack[sidx] = *(pTok->Oprt.ptr + nOffset) = Stack[sidx + 1]; continue; - // original code: - //--sidx; Stack[sidx] = *pTok->Oprt.ptr = Stack[sidx+1]; continue; - - //case cmBO: // unused, listed for compiler optimization purposes - //case cmBC: - // MUP_FAIL(INVALID_CODE_IN_BYTECODE); - // continue; - - case cmIF: - if (Stack[sidx--]==0) - pTok += pTok->Oprt.offset; - continue; - - case cmELSE: - pTok += pTok->Oprt.offset; - continue; - - case cmENDIF: - continue; - - //case cmARG_SEP: - // MUP_FAIL(INVALID_CODE_IN_BYTECODE); - // continue; - - // value and variable tokens - case cmVAR: Stack[++sidx] = *(pTok->Val.ptr + nOffset); continue; - case cmVAL: Stack[++sidx] = pTok->Val.data2; continue; - - case cmVARPOW2: buf = *(pTok->Val.ptr + nOffset); - Stack[++sidx] = buf*buf; - continue; - - case cmVARPOW3: buf = *(pTok->Val.ptr + nOffset); - Stack[++sidx] = buf*buf*buf; - continue; - - case cmVARPOW4: buf = *(pTok->Val.ptr + nOffset); - Stack[++sidx] = buf*buf*buf*buf; - continue; - - case cmVARMUL: Stack[++sidx] = *(pTok->Val.ptr + nOffset) * pTok->Val.data + pTok->Val.data2; - continue; - - // Next is treatment of numeric functions - case cmFUNC: - { - int iArgCount = pTok->Fun.argc; - - // switch according to argument count - switch(iArgCount) - { - case 0: sidx += 1; Stack[sidx] = (*(fun_type0)pTok->Fun.ptr)(); continue; - case 1: Stack[sidx] = (*(fun_type1)pTok->Fun.ptr)(Stack[sidx]); continue; - case 2: sidx -= 1; Stack[sidx] = (*(fun_type2)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1]); continue; - case 3: sidx -= 2; Stack[sidx] = (*(fun_type3)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2]); continue; - case 4: sidx -= 3; Stack[sidx] = (*(fun_type4)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3]); continue; - case 5: sidx -= 4; Stack[sidx] = (*(fun_type5)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4]); continue; - case 6: sidx -= 5; Stack[sidx] = (*(fun_type6)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5]); continue; - case 7: sidx -= 6; Stack[sidx] = (*(fun_type7)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6]); continue; - case 8: sidx -= 7; Stack[sidx] = (*(fun_type8)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7]); continue; - case 9: sidx -= 8; Stack[sidx] = (*(fun_type9)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7], Stack[sidx+8]); continue; - case 10:sidx -= 9; Stack[sidx] = (*(fun_type10)pTok->Fun.ptr)(Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7], Stack[sidx+8], Stack[sidx+9]); continue; - default: - if (iArgCount>0) // function with variable arguments store the number as a negative value - Error(ecINTERNAL_ERROR, 1); - - sidx -= -iArgCount - 1; - Stack[sidx] =(*(multfun_type)pTok->Fun.ptr)(&Stack[sidx], -iArgCount); - continue; - } - } - - // Next is treatment of string functions - case cmFUNC_STR: - { - sidx -= pTok->Fun.argc -1; - - // The index of the string argument in the string table - int iIdxStack = pTok->Fun.idx; - MUP_ASSERT( iIdxStack>=0 && iIdxStack<(int)m_vStringBuf.size() ); - - switch(pTok->Fun.argc) // switch according to argument count - { - case 0: Stack[sidx] = (*(strfun_type1)pTok->Fun.ptr)(m_vStringBuf[iIdxStack].c_str()); continue; - case 1: Stack[sidx] = (*(strfun_type2)pTok->Fun.ptr)(m_vStringBuf[iIdxStack].c_str(), Stack[sidx]); continue; - case 2: Stack[sidx] = (*(strfun_type3)pTok->Fun.ptr)(m_vStringBuf[iIdxStack].c_str(), Stack[sidx], Stack[sidx+1]); continue; - } - - continue; - } - - case cmFUNC_BULK: - { - int iArgCount = pTok->Fun.argc; - - // switch according to argument count - switch(iArgCount) - { - case 0: sidx += 1; Stack[sidx] = (*(bulkfun_type0 )pTok->Fun.ptr)(nOffset, nThreadID); continue; - case 1: Stack[sidx] = (*(bulkfun_type1 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx]); continue; - case 2: sidx -= 1; Stack[sidx] = (*(bulkfun_type2 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1]); continue; - case 3: sidx -= 2; Stack[sidx] = (*(bulkfun_type3 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2]); continue; - case 4: sidx -= 3; Stack[sidx] = (*(bulkfun_type4 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3]); continue; - case 5: sidx -= 4; Stack[sidx] = (*(bulkfun_type5 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4]); continue; - case 6: sidx -= 5; Stack[sidx] = (*(bulkfun_type6 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5]); continue; - case 7: sidx -= 6; Stack[sidx] = (*(bulkfun_type7 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6]); continue; - case 8: sidx -= 7; Stack[sidx] = (*(bulkfun_type8 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7]); continue; - case 9: sidx -= 8; Stack[sidx] = (*(bulkfun_type9 )pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7], Stack[sidx+8]); continue; - case 10:sidx -= 9; Stack[sidx] = (*(bulkfun_type10)pTok->Fun.ptr)(nOffset, nThreadID, Stack[sidx], Stack[sidx+1], Stack[sidx+2], Stack[sidx+3], Stack[sidx+4], Stack[sidx+5], Stack[sidx+6], Stack[sidx+7], Stack[sidx+8], Stack[sidx+9]); continue; - default: - Error(ecINTERNAL_ERROR, 2); - continue; - } - } - - default: - Error(ecINTERNAL_ERROR, 3); - return 0; - } // switch CmdCode - } // for all bytecode tokens - - return Stack[m_nFinalResultIdx]; - } - - //--------------------------------------------------------------------------- - void ParserBase::CreateRPN() const - { - if (!m_pTokenReader->GetExpr().length()) - Error(ecUNEXPECTED_EOF, 0); - - ParserStack stOpt, stVal; - ParserStack stArgCount; - token_type opta, opt; // for storing operators - token_type val, tval; // for storing value - - ReInit(); - - // The outermost counter counts the number of separated items - // such as in "a=10,b=20,c=c+a" - stArgCount.push(1); - - for(;;) - { - opt = m_pTokenReader->ReadNextToken(); - - switch (opt.GetCode()) - { - // - // Next three are different kind of value entries - // - case cmSTRING: - opt.SetIdx((int)m_vStringBuf.size()); // Assign buffer index to token - stVal.push(opt); - m_vStringBuf.push_back(opt.GetAsString()); // Store string in internal buffer - break; - - case cmVAR: - stVal.push(opt); - m_vRPN.AddVar( static_cast(opt.GetVar()) ); - break; - - case cmVAL: - stVal.push(opt); - m_vRPN.AddVal( opt.GetVal() ); - break; - - case cmELSE: - m_nIfElseCounter--; - if (m_nIfElseCounter<0) - Error(ecMISPLACED_COLON, m_pTokenReader->GetPos()); - - ApplyRemainingOprt(stOpt, stVal); - m_vRPN.AddIfElse(cmELSE); - stOpt.push(opt); - break; - - - case cmARG_SEP: - if (stArgCount.empty()) - Error(ecUNEXPECTED_ARG_SEP, m_pTokenReader->GetPos()); - - ++stArgCount.top(); - // fallthrough intentional (no break!) - - case cmEND: - ApplyRemainingOprt(stOpt, stVal); - break; - - case cmBC: - { - // The argument count for parameterless functions is zero - // by default an opening bracket sets parameter count to 1 - // in preparation of arguments to come. If the last token - // was an opening bracket we know better... - if (opta.GetCode()==cmBO) - --stArgCount.top(); - - ApplyRemainingOprt(stOpt, stVal); - - // Check if the bracket content has been evaluated completely - if (stOpt.size() && stOpt.top().GetCode()==cmBO) - { - // if opt is ")" and opta is "(" the bracket has been evaluated, now its time to check - // if there is either a function or a sign pending - // neither the opening nor the closing bracket will be pushed back to - // the operator stack - // Check if a function is standing in front of the opening bracket, - // if yes evaluate it afterwards check for infix operators - assert(stArgCount.size()); - int iArgCount = stArgCount.pop(); - - stOpt.pop(); // Take opening bracket from stack - - if (iArgCount>1 && ( stOpt.size()==0 || - (stOpt.top().GetCode()!=cmFUNC && - stOpt.top().GetCode()!=cmFUNC_BULK && - stOpt.top().GetCode()!=cmFUNC_STR) ) ) - Error(ecUNEXPECTED_ARG, m_pTokenReader->GetPos()); - - // The opening bracket was popped from the stack now check if there - // was a function before this bracket - if (stOpt.size() && - stOpt.top().GetCode()!=cmOPRT_INFIX && - stOpt.top().GetCode()!=cmOPRT_BIN && - stOpt.top().GetFuncAddr()!=0) - { - ApplyFunc(stOpt, stVal, iArgCount); - } - } - } // if bracket content is evaluated - break; - - // - // Next are the binary operator entries - // - //case cmAND: // built in binary operators - //case cmOR: - //case cmXOR: - case cmIF: - m_nIfElseCounter++; - // fallthrough intentional (no break!) - - case cmLAND: - case cmLOR: - case cmLT: - case cmGT: - case cmLE: - case cmGE: - case cmNEQ: - case cmEQ: - case cmADD: - case cmSUB: - case cmMUL: - case cmDIV: - case cmPOW: - case cmASSIGN: - case cmOPRT_BIN: - - // A binary operator (user defined or built in) has been found. - while ( stOpt.size() && - stOpt.top().GetCode() != cmBO && - stOpt.top().GetCode() != cmELSE && - stOpt.top().GetCode() != cmIF) - { - int nPrec1 = GetOprtPrecedence(stOpt.top()), - nPrec2 = GetOprtPrecedence(opt); - - if (stOpt.top().GetCode()==opt.GetCode()) - { - - // Deal with operator associativity - EOprtAssociativity eOprtAsct = GetOprtAssociativity(opt); - if ( (eOprtAsct==oaRIGHT && (nPrec1 <= nPrec2)) || - (eOprtAsct==oaLEFT && (nPrec1 < nPrec2)) ) - { - break; - } - } - else if (nPrec1 < nPrec2) - { - // In case the operators are not equal the precedence decides alone... - break; - } - - if (stOpt.top().GetCode()==cmOPRT_INFIX) - ApplyFunc(stOpt, stVal, 1); - else - ApplyBinOprt(stOpt, stVal); - } // while ( ... ) - - if (opt.GetCode()==cmIF) - m_vRPN.AddIfElse(opt.GetCode()); - - // The operator can't be evaluated right now, push back to the operator stack - stOpt.push(opt); - break; - - // - // Last section contains functions and operators implicitly mapped to functions - // - case cmBO: - stArgCount.push(1); - stOpt.push(opt); - break; - - case cmOPRT_INFIX: - case cmFUNC: - case cmFUNC_BULK: - case cmFUNC_STR: - stOpt.push(opt); - break; - - case cmOPRT_POSTFIX: - stOpt.push(opt); - ApplyFunc(stOpt, stVal, 1); // this is the postfix operator - break; - - default: Error(ecINTERNAL_ERROR, 3); - } // end of switch operator-token - - opta = opt; - - if ( opt.GetCode() == cmEND ) - { - m_vRPN.Finalize(); - break; - } - - if (ParserBase::g_DbgDumpStack) - { - StackDump(stVal, stOpt); - m_vRPN.AsciiDump(); - } - } // while (true) - - if (ParserBase::g_DbgDumpCmdCode) - m_vRPN.AsciiDump(); - - if (m_nIfElseCounter>0) - Error(ecMISSING_ELSE_CLAUSE); - - // get the last value (= final result) from the stack - MUP_ASSERT(stArgCount.size()==1); - m_nFinalResultIdx = stArgCount.top(); - if (m_nFinalResultIdx==0) - Error(ecINTERNAL_ERROR, 9); - - if (stVal.size()==0) - Error(ecEMPTY_EXPRESSION); - - if (stVal.top().GetType()!=tpDBL) - Error(ecSTR_RESULT); - - m_vStackBuffer.resize(m_vRPN.GetMaxStackSize() * s_MaxNumOpenMPThreads); - } - - //--------------------------------------------------------------------------- - /** \brief One of the two main parse functions. - \sa ParseCmdCode(...) - - Parse expression from input string. Perform syntax checking and create - bytecode. After parsing the string and creating the bytecode the function - pointer #m_pParseFormula will be changed to the second parse routine the - uses bytecode instead of string parsing. - */ - value_type ParserBase::ParseString() const - { - try - { - CreateRPN(); - m_pParseFormula = &ParserBase::ParseCmdCode; - return (this->*m_pParseFormula)(); - } - catch(ParserError &exc) - { - exc.SetFormula(m_pTokenReader->GetExpr()); - throw; - } - } - - //--------------------------------------------------------------------------- - /** \brief Create an error containing the parse error position. - - This function will create an Parser Exception object containing the error text and - its position. - - \param a_iErrc [in] The error code of type #EErrorCodes. - \param a_iPos [in] The position where the error was detected. - \param a_strTok [in] The token string representation associated with the error. - \throw ParserException always throws thats the only purpose of this function. - */ - void ParserBase::Error(EErrorCodes a_iErrc, int a_iPos, const string_type &a_sTok) const - { - throw exception_type(a_iErrc, a_sTok, m_pTokenReader->GetExpr(), a_iPos); - } - - //------------------------------------------------------------------------------ - /** \brief Clear all user defined variables. - \throw nothrow - - Resets the parser to string parsing mode by calling #ReInit. - */ - void ParserBase::ClearVar() - { - m_VarDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Remove a variable from internal storage. - \throw nothrow - - Removes a variable if it exists. If the Variable does not exist nothing will be done. - */ - void ParserBase::RemoveVar(const string_type &a_strVarName) - { - varmap_type::iterator item = m_VarDef.find(a_strVarName); - if (item!=m_VarDef.end()) - { - m_VarDef.erase(item); - ReInit(); - } - } - - //------------------------------------------------------------------------------ - /** \brief Clear all functions. - \post Resets the parser to string parsing mode. - \throw nothrow - */ - void ParserBase::ClearFun() - { - m_FunDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Clear all user defined constants. - - Both numeric and string constants will be removed from the internal storage. - \post Resets the parser to string parsing mode. - \throw nothrow - */ - void ParserBase::ClearConst() - { - m_ConstDef.clear(); - m_StrVarDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Clear all user defined postfix operators. - \post Resets the parser to string parsing mode. - \throw nothrow - */ - void ParserBase::ClearPostfixOprt() - { - m_PostOprtDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Clear all user defined binary operators. - \post Resets the parser to string parsing mode. - \throw nothrow - */ - void ParserBase::ClearOprt() - { - m_OprtDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Clear the user defined Prefix operators. - \post Resets the parser to string parser mode. - \throw nothrow - */ - void ParserBase::ClearInfixOprt() - { - m_InfixOprtDef.clear(); - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Enable or disable the formula optimization feature. - \post Resets the parser to string parser mode. - \throw nothrow - */ - void ParserBase::EnableOptimizer(bool a_bIsOn) - { - m_vRPN.EnableOptimizer(a_bIsOn); - ReInit(); - } - - //--------------------------------------------------------------------------- - /** \brief Enable the dumping of bytecode and stack content on the console. - \param bDumpCmd Flag to enable dumping of the current bytecode to the console. - \param bDumpStack Flag to enable dumping of the stack content is written to the console. - - This function is for debug purposes only! - */ - void ParserBase::EnableDebugDump(bool bDumpCmd, bool bDumpStack) - { - ParserBase::g_DbgDumpCmdCode = bDumpCmd; - ParserBase::g_DbgDumpStack = bDumpStack; - } - - //------------------------------------------------------------------------------ - /** \brief Enable or disable the built in binary operators. - \throw nothrow - \sa m_bBuiltInOp, ReInit() - - If you disable the built in binary operators there will be no binary operators - defined. Thus you must add them manually one by one. It is not possible to - disable built in operators selectively. This function will Reinitialize the - parser by calling ReInit(). - */ - void ParserBase::EnableBuiltInOprt(bool a_bIsOn) - { - m_bBuiltInOp = a_bIsOn; - ReInit(); - } - - //------------------------------------------------------------------------------ - /** \brief Query status of built in variables. - \return #m_bBuiltInOp; true if built in operators are enabled. - \throw nothrow - */ - bool ParserBase::HasBuiltInOprt() const - { - return m_bBuiltInOp; - } - - //------------------------------------------------------------------------------ - /** \brief Get the argument separator character. - */ - char_type ParserBase::GetArgSep() const - { - return m_pTokenReader->GetArgSep(); - } - - //------------------------------------------------------------------------------ - /** \brief Set argument separator. - \param cArgSep the argument separator character. - */ - void ParserBase::SetArgSep(char_type cArgSep) - { - m_pTokenReader->SetArgSep(cArgSep); - } - - //------------------------------------------------------------------------------ - /** \brief Dump stack content. - - This function is used for debugging only. - */ - void ParserBase::StackDump(const ParserStack &a_stVal, - const ParserStack &a_stOprt) const - { - ParserStack stOprt(a_stOprt), - stVal(a_stVal); - - mu::console() << _T("\nValue stack:\n"); - while ( !stVal.empty() ) - { - token_type val = stVal.pop(); - if (val.GetType()==tpSTR) - mu::console() << _T(" \"") << val.GetAsString() << _T("\" "); - else - mu::console() << _T(" ") << val.GetVal() << _T(" "); - } - mu::console() << "\nOperator stack:\n"; - - while ( !stOprt.empty() ) - { - if (stOprt.top().GetCode()<=cmASSIGN) - { - mu::console() << _T("OPRT_INTRNL \"") - << ParserBase::c_DefaultOprt[stOprt.top().GetCode()] - << _T("\" \n"); - } - else - { - switch(stOprt.top().GetCode()) - { - case cmVAR: mu::console() << _T("VAR\n"); break; - case cmVAL: mu::console() << _T("VAL\n"); break; - case cmFUNC: mu::console() << _T("FUNC \"") - << stOprt.top().GetAsString() - << _T("\"\n"); break; - case cmFUNC_BULK: mu::console() << _T("FUNC_BULK \"") - << stOprt.top().GetAsString() - << _T("\"\n"); break; - case cmOPRT_INFIX: mu::console() << _T("OPRT_INFIX \"") - << stOprt.top().GetAsString() - << _T("\"\n"); break; - case cmOPRT_BIN: mu::console() << _T("OPRT_BIN \"") - << stOprt.top().GetAsString() - << _T("\"\n"); break; - case cmFUNC_STR: mu::console() << _T("FUNC_STR\n"); break; - case cmEND: mu::console() << _T("END\n"); break; - case cmUNKNOWN: mu::console() << _T("UNKNOWN\n"); break; - case cmBO: mu::console() << _T("BRACKET \"(\"\n"); break; - case cmBC: mu::console() << _T("BRACKET \")\"\n"); break; - case cmIF: mu::console() << _T("IF\n"); break; - case cmELSE: mu::console() << _T("ELSE\n"); break; - case cmENDIF: mu::console() << _T("ENDIF\n"); break; - default: mu::console() << stOprt.top().GetCode() << _T(" "); break; - } - } - stOprt.pop(); - } - - mu::console() << dec << endl; - } - - //------------------------------------------------------------------------------ - /** \brief Evaluate an expression containing comma separated subexpressions - \param [out] nStackSize The total number of results available - \return Pointer to the array containing all expression results - - This member function can be used to retrieve all results of an expression - made up of multiple comma separated subexpressions (i.e. "x+y,sin(x),cos(y)") - */ - value_type* ParserBase::Eval(int &nStackSize) const - { - (this->*m_pParseFormula)(); - nStackSize = m_nFinalResultIdx; - - // (for historic reasons the stack starts at position 1) - return &m_vStackBuffer[1]; - } - - //--------------------------------------------------------------------------- - /** \brief Return the number of results on the calculation stack. - - If the expression contains comma separated subexpressions (i.e. "sin(y), x+y"). - There may be more than one return value. This function returns the number of - available results. - */ - int ParserBase::GetNumResults() const - { - return m_nFinalResultIdx; - } - - //--------------------------------------------------------------------------- - /** \brief Calculate the result. - - A note on const correctness: - I consider it important that Calc is a const function. - Due to caching operations Calc changes only the state of internal variables with one exception - m_UsedVar this is reset during string parsing and accessible from the outside. Instead of making - Calc non const GetUsedVar is non const because it explicitly calls Eval() forcing this update. - - \pre A formula must be set. - \pre Variables must have been set (if needed) - - \sa #m_pParseFormula - \return The evaluation result - \throw ParseException if no Formula is set or in case of any other error related to the formula. - */ - value_type ParserBase::Eval() const - { - return (this->*m_pParseFormula)(); - } - - //--------------------------------------------------------------------------- - void ParserBase::Eval(value_type *results, int nBulkSize) - { -/* Commented because it is making a unit test impossible - - // Parallelization does not make sense for fewer than 10000 computations - // due to thread creation overhead. If the bulk size is below 2000 - // computation is refused. - if (nBulkSize<2000) - { - throw ParserError(ecUNREASONABLE_NUMBER_OF_COMPUTATIONS); - } -*/ - CreateRPN(); - - int i = 0; - -#ifdef MUP_USE_OPENMP -//#define DEBUG_OMP_STUFF - #ifdef DEBUG_OMP_STUFF - int *pThread = new int[nBulkSize]; - int *pIdx = new int[nBulkSize]; - #endif - - int nMaxThreads = std::min(omp_get_max_threads(), s_MaxNumOpenMPThreads); - int nThreadID = 0, ct = 0; - omp_set_num_threads(nMaxThreads); - - #pragma omp parallel for schedule(static, nBulkSize/nMaxThreads) private(nThreadID) - for (i=0; i \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "muParserBytecode.h" - -#include -#include -#include -#include -#include -#include - -#include "muParserDef.h" -#include "muParserError.h" -#include "muParserToken.h" -#include "muParserStack.h" -#include "muParserTemplateMagic.h" - - -namespace mu -{ - //--------------------------------------------------------------------------- - /** \brief Bytecode default constructor. */ - ParserByteCode::ParserByteCode() - :m_iStackPos(0) - ,m_iMaxStackSize(0) - ,m_vRPN() - ,m_bEnableOptimizer(true) - { - m_vRPN.reserve(50); - } - - //--------------------------------------------------------------------------- - /** \brief Copy constructor. - - Implemented in Terms of Assign(const ParserByteCode &a_ByteCode) - */ - ParserByteCode::ParserByteCode(const ParserByteCode &a_ByteCode) - { - Assign(a_ByteCode); - } - - //--------------------------------------------------------------------------- - /** \brief Assignment operator. - - Implemented in Terms of Assign(const ParserByteCode &a_ByteCode) - */ - ParserByteCode& ParserByteCode::operator=(const ParserByteCode &a_ByteCode) - { - Assign(a_ByteCode); - return *this; - } - - //--------------------------------------------------------------------------- - void ParserByteCode::EnableOptimizer(bool bStat) - { - m_bEnableOptimizer = bStat; - } - - //--------------------------------------------------------------------------- - /** \brief Copy state of another object to this. - - \throw nowthrow - */ - void ParserByteCode::Assign(const ParserByteCode &a_ByteCode) - { - if (this==&a_ByteCode) - return; - - m_iStackPos = a_ByteCode.m_iStackPos; - m_vRPN = a_ByteCode.m_vRPN; - m_iMaxStackSize = a_ByteCode.m_iMaxStackSize; - m_bEnableOptimizer = a_ByteCode.m_bEnableOptimizer; - } - - //--------------------------------------------------------------------------- - /** \brief Add a Variable pointer to bytecode. - \param a_pVar Pointer to be added. - \throw nothrow - */ - void ParserByteCode::AddVar(value_type *a_pVar) - { - ++m_iStackPos; - m_iMaxStackSize = std::max(m_iMaxStackSize, (size_t)m_iStackPos); - - // optimization does not apply - SToken tok; - tok.Cmd = cmVAR; - tok.Val.ptr = a_pVar; - tok.Val.data = 1; - tok.Val.data2 = 0; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - /** \brief Add a Variable pointer to bytecode. - - Value entries in byte code consist of: -

- - \param a_pVal Value to be added. - \throw nothrow - */ - void ParserByteCode::AddVal(value_type a_fVal) - { - ++m_iStackPos; - m_iMaxStackSize = std::max(m_iMaxStackSize, (size_t)m_iStackPos); - - // If optimization does not apply - SToken tok; - tok.Cmd = cmVAL; - tok.Val.ptr = NULL; - tok.Val.data = 0; - tok.Val.data2 = a_fVal; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - void ParserByteCode::ConstantFolding(ECmdCode a_Oprt) - { - std::size_t sz = m_vRPN.size(); - value_type &x = m_vRPN[sz-2].Val.data2, - &y = m_vRPN[sz-1].Val.data2; - switch (a_Oprt) - { - case cmLAND: x = (int)x && (int)y; m_vRPN.pop_back(); break; - case cmLOR: x = (int)x || (int)y; m_vRPN.pop_back(); break; - case cmLT: x = x < y; m_vRPN.pop_back(); break; - case cmGT: x = x > y; m_vRPN.pop_back(); break; - case cmLE: x = x <= y; m_vRPN.pop_back(); break; - case cmGE: x = x >= y; m_vRPN.pop_back(); break; - case cmNEQ: x = x != y; m_vRPN.pop_back(); break; - case cmEQ: x = x == y; m_vRPN.pop_back(); break; - case cmADD: x = x + y; m_vRPN.pop_back(); break; - case cmSUB: x = x - y; m_vRPN.pop_back(); break; - case cmMUL: x = x * y; m_vRPN.pop_back(); break; - case cmDIV: - -#if defined(MUP_MATH_EXCEPTIONS) - if (y==0) - throw ParserError(ecDIV_BY_ZERO, _T("0")); -#endif - - x = x / y; - m_vRPN.pop_back(); - break; - - case cmPOW: x = MathImpl::Pow(x, y); - m_vRPN.pop_back(); - break; - - default: - break; - } // switch opcode - } - - //--------------------------------------------------------------------------- - /** \brief Add an operator identifier to bytecode. - - Operator entries in byte code consist of: -
    -
  • value array position of the result
  • -
  • the operator code according to ParserToken::ECmdCode
  • -
- - \sa ParserToken::ECmdCode - */ - void ParserByteCode::AddOp(ECmdCode a_Oprt) - { - bool bOptimized = false; - - if (m_bEnableOptimizer) - { - std::size_t sz = m_vRPN.size(); - - // Check for foldable constants like: - // cmVAL cmVAL cmADD - // where cmADD can stand fopr any binary operator applied to - // two constant values. - if (sz>=2 && m_vRPN[sz-2].Cmd == cmVAL && m_vRPN[sz-1].Cmd == cmVAL) - { - ConstantFolding(a_Oprt); - bOptimized = true; - } - else - { - switch(a_Oprt) - { - case cmPOW: - // Optimization for polynomials of low order - if (m_vRPN[sz-2].Cmd == cmVAR && m_vRPN[sz-1].Cmd == cmVAL) - { - if (m_vRPN[sz-1].Val.data2==2) - m_vRPN[sz-2].Cmd = cmVARPOW2; - else if (m_vRPN[sz-1].Val.data2==3) - m_vRPN[sz-2].Cmd = cmVARPOW3; - else if (m_vRPN[sz-1].Val.data2==4) - m_vRPN[sz-2].Cmd = cmVARPOW4; - else - break; - - m_vRPN.pop_back(); - bOptimized = true; - } - break; - - case cmSUB: - case cmADD: - // Simple optimization based on pattern recognition for a shitload of different - // bytecode combinations of addition/subtraction - if ( (m_vRPN[sz-1].Cmd == cmVAR && m_vRPN[sz-2].Cmd == cmVAL) || - (m_vRPN[sz-1].Cmd == cmVAL && m_vRPN[sz-2].Cmd == cmVAR) || - (m_vRPN[sz-1].Cmd == cmVAL && m_vRPN[sz-2].Cmd == cmVARMUL) || - (m_vRPN[sz-1].Cmd == cmVARMUL && m_vRPN[sz-2].Cmd == cmVAL) || - (m_vRPN[sz-1].Cmd == cmVAR && m_vRPN[sz-2].Cmd == cmVAR && m_vRPN[sz-2].Val.ptr == m_vRPN[sz-1].Val.ptr) || - (m_vRPN[sz-1].Cmd == cmVAR && m_vRPN[sz-2].Cmd == cmVARMUL && m_vRPN[sz-2].Val.ptr == m_vRPN[sz-1].Val.ptr) || - (m_vRPN[sz-1].Cmd == cmVARMUL && m_vRPN[sz-2].Cmd == cmVAR && m_vRPN[sz-2].Val.ptr == m_vRPN[sz-1].Val.ptr) || - (m_vRPN[sz-1].Cmd == cmVARMUL && m_vRPN[sz-2].Cmd == cmVARMUL && m_vRPN[sz-2].Val.ptr == m_vRPN[sz-1].Val.ptr) ) - { - assert( (m_vRPN[sz-2].Val.ptr==NULL && m_vRPN[sz-1].Val.ptr!=NULL) || - (m_vRPN[sz-2].Val.ptr!=NULL && m_vRPN[sz-1].Val.ptr==NULL) || - (m_vRPN[sz-2].Val.ptr == m_vRPN[sz-1].Val.ptr) ); - - m_vRPN[sz-2].Cmd = cmVARMUL; - m_vRPN[sz-2].Val.ptr = (value_type*)((long long)(m_vRPN[sz-2].Val.ptr) | (long long)(m_vRPN[sz-1].Val.ptr)); // variable - m_vRPN[sz-2].Val.data2 += ((a_Oprt==cmSUB) ? -1 : 1) * m_vRPN[sz-1].Val.data2; // offset - m_vRPN[sz-2].Val.data += ((a_Oprt==cmSUB) ? -1 : 1) * m_vRPN[sz-1].Val.data; // multiplicand - m_vRPN.pop_back(); - bOptimized = true; - } - break; - - case cmMUL: - if ( (m_vRPN[sz-1].Cmd == cmVAR && m_vRPN[sz-2].Cmd == cmVAL) || - (m_vRPN[sz-1].Cmd == cmVAL && m_vRPN[sz-2].Cmd == cmVAR) ) - { - m_vRPN[sz-2].Cmd = cmVARMUL; - m_vRPN[sz-2].Val.ptr = (value_type*)((long long)(m_vRPN[sz-2].Val.ptr) | (long long)(m_vRPN[sz-1].Val.ptr)); - m_vRPN[sz-2].Val.data = m_vRPN[sz-2].Val.data2 + m_vRPN[sz-1].Val.data2; - m_vRPN[sz-2].Val.data2 = 0; - m_vRPN.pop_back(); - bOptimized = true; - } - else if ( (m_vRPN[sz-1].Cmd == cmVAL && m_vRPN[sz-2].Cmd == cmVARMUL) || - (m_vRPN[sz-1].Cmd == cmVARMUL && m_vRPN[sz-2].Cmd == cmVAL) ) - { - // Optimization: 2*(3*b+1) or (3*b+1)*2 -> 6*b+2 - m_vRPN[sz-2].Cmd = cmVARMUL; - m_vRPN[sz-2].Val.ptr = (value_type*)((long long)(m_vRPN[sz-2].Val.ptr) | (long long)(m_vRPN[sz-1].Val.ptr)); - if (m_vRPN[sz-1].Cmd == cmVAL) - { - m_vRPN[sz-2].Val.data *= m_vRPN[sz-1].Val.data2; - m_vRPN[sz-2].Val.data2 *= m_vRPN[sz-1].Val.data2; - } - else - { - m_vRPN[sz-2].Val.data = m_vRPN[sz-1].Val.data * m_vRPN[sz-2].Val.data2; - m_vRPN[sz-2].Val.data2 = m_vRPN[sz-1].Val.data2 * m_vRPN[sz-2].Val.data2; - } - m_vRPN.pop_back(); - bOptimized = true; - } - else if (m_vRPN[sz-1].Cmd == cmVAR && m_vRPN[sz-2].Cmd == cmVAR && - m_vRPN[sz-1].Val.ptr == m_vRPN[sz-2].Val.ptr) - { - // Optimization: a*a -> a^2 - m_vRPN[sz-2].Cmd = cmVARPOW2; - m_vRPN.pop_back(); - bOptimized = true; - } - break; - - case cmDIV: - if (m_vRPN[sz-1].Cmd == cmVAL && m_vRPN[sz-2].Cmd == cmVARMUL && m_vRPN[sz-1].Val.data2!=0) - { - // Optimization: 4*a/2 -> 2*a - m_vRPN[sz-2].Val.data /= m_vRPN[sz-1].Val.data2; - m_vRPN[sz-2].Val.data2 /= m_vRPN[sz-1].Val.data2; - m_vRPN.pop_back(); - bOptimized = true; - } - break; - - } // switch a_Oprt - } - } - - // If optimization can't be applied just write the value - if (!bOptimized) - { - --m_iStackPos; - SToken tok; - tok.Cmd = a_Oprt; - m_vRPN.push_back(tok); - } - } - - //--------------------------------------------------------------------------- - void ParserByteCode::AddIfElse(ECmdCode a_Oprt) - { - SToken tok; - tok.Cmd = a_Oprt; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - /** \brief Add an assignment operator - - Operator entries in byte code consist of: -
    -
  • cmASSIGN code
  • -
  • the pointer of the destination variable
  • -
- - \sa ParserToken::ECmdCode - */ - void ParserByteCode::AddAssignOp(value_type *a_pVar) - { - --m_iStackPos; - - SToken tok; - tok.Cmd = cmASSIGN; - tok.Oprt.ptr = a_pVar; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - /** \brief Add function to bytecode. - - \param a_iArgc Number of arguments, negative numbers indicate multiarg functions. - \param a_pFun Pointer to function callback. - */ - void ParserByteCode::AddFun(generic_fun_type a_pFun, int a_iArgc) - { - if (a_iArgc>=0) - { - m_iStackPos = m_iStackPos - a_iArgc + 1; - } - else - { - // function with unlimited number of arguments - m_iStackPos = m_iStackPos + a_iArgc + 1; - } - m_iMaxStackSize = std::max(m_iMaxStackSize, (size_t)m_iStackPos); - - SToken tok; - tok.Cmd = cmFUNC; - tok.Fun.argc = a_iArgc; - tok.Fun.ptr = a_pFun; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - /** \brief Add a bulk function to bytecode. - - \param a_iArgc Number of arguments, negative numbers indicate multiarg functions. - \param a_pFun Pointer to function callback. - */ - void ParserByteCode::AddBulkFun(generic_fun_type a_pFun, int a_iArgc) - { - m_iStackPos = m_iStackPos - a_iArgc + 1; - m_iMaxStackSize = std::max(m_iMaxStackSize, (size_t)m_iStackPos); - - SToken tok; - tok.Cmd = cmFUNC_BULK; - tok.Fun.argc = a_iArgc; - tok.Fun.ptr = a_pFun; - m_vRPN.push_back(tok); - } - - //--------------------------------------------------------------------------- - /** \brief Add Strung function entry to the parser bytecode. - \throw nothrow - - A string function entry consists of the stack position of the return value, - followed by a cmSTRFUNC code, the function pointer and an index into the - string buffer maintained by the parser. - */ - void ParserByteCode::AddStrFun(generic_fun_type a_pFun, int a_iArgc, int a_iIdx) - { - m_iStackPos = m_iStackPos - a_iArgc + 1; - - SToken tok; - tok.Cmd = cmFUNC_STR; - tok.Fun.argc = a_iArgc; - tok.Fun.idx = a_iIdx; - tok.Fun.ptr = a_pFun; - m_vRPN.push_back(tok); - - m_iMaxStackSize = std::max(m_iMaxStackSize, (size_t)m_iStackPos); - } - - //--------------------------------------------------------------------------- - /** \brief Add end marker to bytecode. - - \throw nothrow - */ - void ParserByteCode::Finalize() - { - SToken tok; - tok.Cmd = cmEND; - m_vRPN.push_back(tok); - rpn_type(m_vRPN).swap(m_vRPN); // shrink bytecode vector to fit - - // Determine the if-then-else jump offsets - ParserStack stIf, stElse; - int idx; - for (int i=0; i<(int)m_vRPN.size(); ++i) - { - switch(m_vRPN[i].Cmd) - { - case cmIF: - stIf.push(i); - break; - - case cmELSE: - stElse.push(i); - idx = stIf.pop(); - m_vRPN[idx].Oprt.offset = i - idx; - break; - - case cmENDIF: - idx = stElse.pop(); - m_vRPN[idx].Oprt.offset = i - idx; - break; - - default: - break; - } - } - } - - //--------------------------------------------------------------------------- - const SToken* ParserByteCode::GetBase() const - { - if (m_vRPN.size()==0) - throw ParserError(ecINTERNAL_ERROR); - else - return &m_vRPN[0]; - } - - //--------------------------------------------------------------------------- - std::size_t ParserByteCode::GetMaxStackSize() const - { - return m_iMaxStackSize+1; - } - - //--------------------------------------------------------------------------- - /** \brief Returns the number of entries in the bytecode. */ - std::size_t ParserByteCode::GetSize() const - { - return m_vRPN.size(); - } - - //--------------------------------------------------------------------------- - /** \brief Delete the bytecode. - - \throw nothrow - - The name of this function is a violation of my own coding guidelines - but this way it's more in line with the STL functions thus more - intuitive. - */ - void ParserByteCode::clear() - { - m_vRPN.clear(); - m_iStackPos = 0; - m_iMaxStackSize = 0; - } - - //--------------------------------------------------------------------------- - /** \brief Dump bytecode (for debugging only!). */ - void ParserByteCode::AsciiDump() - { - if (!m_vRPN.size()) - { - mu::console() << _T("No bytecode available\n"); - return; - } - - mu::console() << _T("Number of RPN tokens:") << (int)m_vRPN.size() << _T("\n"); - for (std::size_t i=0; i \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "muParserCallback.h" - -/** \file - \brief Implementation of the parser callback class. -*/ - - -namespace mu -{ - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type0 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(0) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type1 a_pFun, bool a_bAllowOpti, int a_iPrec, ECmdCode a_iCode) - :m_pFun((void*)a_pFun) - ,m_iArgc(1) - ,m_iPri(a_iPrec) - ,m_eOprtAsct(oaNONE) - ,m_iCode(a_iCode) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - /** \brief Constructor for constructing function callbacks taking two arguments. - \throw nothrow - */ - ParserCallback::ParserCallback(fun_type2 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(2) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - /** \brief Constructor for constructing binary operator callbacks. - \param a_pFun Pointer to a static function taking two arguments - \param a_bAllowOpti A flag indicating this function can be optimized - \param a_iPrec The operator precedence - \param a_eOprtAsct The operators associativity - \throw nothrow - */ - ParserCallback::ParserCallback(fun_type2 a_pFun, - bool a_bAllowOpti, - int a_iPrec, - EOprtAssociativity a_eOprtAsct) - :m_pFun((void*)a_pFun) - ,m_iArgc(2) - ,m_iPri(a_iPrec) - ,m_eOprtAsct(a_eOprtAsct) - ,m_iCode(cmOPRT_BIN) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type3 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(3) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type4 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(4) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type5 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(5) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type6 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(6) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type7 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(7) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type8 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(8) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type9 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(9) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(fun_type10 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(10) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type0 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(0) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type1 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(1) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - /** \brief Constructor for constructing function callbacks taking two arguments. - \throw nothrow - */ - ParserCallback::ParserCallback(bulkfun_type2 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(2) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type3 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(3) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type4 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(4) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type5 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(5) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type6 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(6) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type7 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(7) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type8 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(8) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type9 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(9) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(bulkfun_type10 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(10) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_BULK) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(multfun_type a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(-1) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC) - ,m_iType(tpDBL) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(strfun_type1 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(0) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_STR) - ,m_iType(tpSTR) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(strfun_type2 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(1) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_STR) - ,m_iType(tpSTR) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - ParserCallback::ParserCallback(strfun_type3 a_pFun, bool a_bAllowOpti) - :m_pFun((void*)a_pFun) - ,m_iArgc(2) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmFUNC_STR) - ,m_iType(tpSTR) - ,m_bAllowOpti(a_bAllowOpti) - {} - - - //--------------------------------------------------------------------------- - /** \brief Default constructor. - \throw nothrow - */ - ParserCallback::ParserCallback() - :m_pFun(0) - ,m_iArgc(0) - ,m_iPri(-1) - ,m_eOprtAsct(oaNONE) - ,m_iCode(cmUNKNOWN) - ,m_iType(tpVOID) - ,m_bAllowOpti(0) - {} - - - //--------------------------------------------------------------------------- - /** \brief Copy constructor. - \throw nothrow - */ - ParserCallback::ParserCallback(const ParserCallback &ref) - { - m_pFun = ref.m_pFun; - m_iArgc = ref.m_iArgc; - m_bAllowOpti = ref.m_bAllowOpti; - m_iCode = ref.m_iCode; - m_iType = ref.m_iType; - m_iPri = ref.m_iPri; - m_eOprtAsct = ref.m_eOprtAsct; - } - - //--------------------------------------------------------------------------- - /** \brief Clone this instance and return a pointer to the new instance. */ - ParserCallback* ParserCallback::Clone() const - { - return new ParserCallback(*this); - } - - //--------------------------------------------------------------------------- - /** \brief Return tru if the function is conservative. - - Conservative functions return always the same result for the same argument. - \throw nothrow - */ - bool ParserCallback::IsOptimizable() const - { - return m_bAllowOpti; - } - - //--------------------------------------------------------------------------- - /** \brief Get the callback address for the parser function. - - The type of the address is void. It needs to be recasted according to the - argument number to the right type. - - \throw nothrow - \return #pFun - */ - void* ParserCallback::GetAddr() const - { - return m_pFun; - } - - //--------------------------------------------------------------------------- - /** \brief Return the callback code. */ - ECmdCode ParserCallback::GetCode() const - { - return m_iCode; - } - - //--------------------------------------------------------------------------- - ETypeCode ParserCallback::GetType() const - { - return m_iType; - } - - - //--------------------------------------------------------------------------- - /** \brief Return the operator precedence. - \throw nothrown - - Only valid if the callback token is an operator token (binary or infix). - */ - int ParserCallback::GetPri() const - { - return m_iPri; - } - - //--------------------------------------------------------------------------- - /** \brief Return the operators associativity. - \throw nothrown - - Only valid if the callback token is a binary operator token. - */ - EOprtAssociativity ParserCallback::GetAssociativity() const - { - return m_eOprtAsct; - } - - //--------------------------------------------------------------------------- - /** \brief Returns the number of function Arguments. */ - int ParserCallback::GetArgc() const - { - return m_iArgc; - } -} // namespace mu diff --git a/src/external/muparser_v225/src/muParserDLL.cpp b/src/external/muparser_v225/src/muParserDLL.cpp deleted file mode 100644 index 15c88003c..000000000 --- a/src/external/muparser_v225/src/muParserDLL.cpp +++ /dev/null @@ -1,1096 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2004-2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#if defined(MUPARSER_DLL) - -#if defined(_WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#endif - -#include "muParserDLL.h" -#include "muParser.h" -#include "muParserInt.h" -#include "muParserError.h" - - -#define MU_TRY \ - try \ - { - -#define MU_CATCH \ - } \ - catch (muError_t &e) \ - { \ - ParserTag *pTag = static_cast(a_hParser); \ - pTag->exc = e; \ - pTag->bError = true; \ -if (pTag->errHandler) \ - (pTag->errHandler)(a_hParser); \ - } \ - catch (...) \ - { \ - ParserTag *pTag = static_cast(a_hParser); \ - pTag->exc = muError_t(mu::ecINTERNAL_ERROR); \ - pTag->bError = true; \ -if (pTag->errHandler) \ - (pTag->errHandler)(a_hParser); \ - } - -/** \file - \brief This file contains the implementation of the DLL interface of muparser. - */ - -//--------------------------------------------------------------------------- -// private types -typedef mu::ParserBase::exception_type muError_t; -typedef mu::ParserBase muParser_t; - -int g_nBulkSize; - -//--------------------------------------------------------------------------- -class ParserTag -{ -public: - ParserTag(int nType) - :pParser((nType == muBASETYPE_FLOAT) ? (mu::ParserBase*)new mu::Parser() : - (nType == muBASETYPE_INT) ? (mu::ParserBase*)new mu::ParserInt() : NULL) - , exc() - , errHandler(NULL) - , bError(false) - , m_nParserType(nType) - {} - - ~ParserTag() - { - delete pParser; - } - - mu::ParserBase *pParser; - mu::ParserBase::exception_type exc; - muErrorHandler_t errHandler; - bool bError; - -private: - ParserTag(const ParserTag &ref); - ParserTag& operator=(const ParserTag &ref); - - int m_nParserType; -}; - -static muChar_t s_tmpOutBuf[2048]; - -//--------------------------------------------------------------------------- -// -// -// unexported functions -// -// -//--------------------------------------------------------------------------- - -//--------------------------------------------------------------------------- -muParser_t* AsParser(muParserHandle_t a_hParser) -{ - return static_cast(a_hParser)->pParser; -} - -//--------------------------------------------------------------------------- -ParserTag* AsParserTag(muParserHandle_t a_hParser) -{ - return static_cast(a_hParser); -} - -//--------------------------------------------------------------------------- -#if defined(_WIN32) -#define _CRT_SECURE_NO_DEPRECATE - -BOOL APIENTRY DllMain(HANDLE /*hModule*/, - DWORD ul_reason_for_call, - LPVOID /*lpReserved*/) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - break; - - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - - return TRUE; -} - -#endif - -//--------------------------------------------------------------------------- -// -// -// exported functions -// -// -//--------------------------------------------------------------------------- - -API_EXPORT(void) mupSetVarFactory(muParserHandle_t a_hParser, muFacFun_t a_pFactory, void *pUserData) -{ - MU_TRY - muParser_t* p(AsParser(a_hParser)); - p->SetVarFactory(a_pFactory, pUserData); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Create a new Parser instance and return its handle. -*/ -API_EXPORT(muParserHandle_t) mupCreate(int nBaseType) -{ - switch (nBaseType) - { - case muBASETYPE_FLOAT: return (void*)(new ParserTag(muBASETYPE_FLOAT)); - case muBASETYPE_INT: return (void*)(new ParserTag(muBASETYPE_INT)); - default: return NULL; - } -} - -//--------------------------------------------------------------------------- -/** \brief Release the parser instance related with a parser handle. -*/ -API_EXPORT(void) mupRelease(muParserHandle_t a_hParser) -{ - MU_TRY - ParserTag* p = static_cast(a_hParser); - delete p; - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(const muChar_t*) mupGetVersion(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - -#ifndef _UNICODE - sprintf(s_tmpOutBuf, "%s", p->GetVersion().c_str()); -#else - wsprintf(s_tmpOutBuf, _T("%s"), p->GetVersion().c_str()); -#endif - - return s_tmpOutBuf; - MU_CATCH - - return _T(""); -} - -//--------------------------------------------------------------------------- -/** \brief Evaluate the expression. -*/ -API_EXPORT(muFloat_t) mupEval(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - return p->Eval(); - MU_CATCH - - return 0; -} - -//--------------------------------------------------------------------------- -API_EXPORT(muFloat_t*) mupEvalMulti(muParserHandle_t a_hParser, int *nNum) -{ - MU_TRY - assert(nNum != NULL); - - muParser_t* const p(AsParser(a_hParser)); - return p->Eval(*nNum); - MU_CATCH - - return 0; -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupEvalBulk(muParserHandle_t a_hParser, muFloat_t *a_res, int nSize) -{ - MU_TRY - muParser_t* p(AsParser(a_hParser)); - p->Eval(a_res, nSize); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupSetExpr(muParserHandle_t a_hParser, const muChar_t* a_szExpr) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->SetExpr(a_szExpr); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupRemoveVar(muParserHandle_t a_hParser, const muChar_t* a_szName) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->RemoveVar(a_szName); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Release all parser variables. - \param a_hParser Handle to the parser instance. - */ -API_EXPORT(void) mupClearVar(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->ClearVar(); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Release all parser variables. - \param a_hParser Handle to the parser instance. - */ -API_EXPORT(void) mupClearConst(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->ClearConst(); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Clear all user defined operators. - \param a_hParser Handle to the parser instance. - */ -API_EXPORT(void) mupClearOprt(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->ClearOprt(); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupClearFun(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->ClearFun(); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun0(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun0_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun1(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun1_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun2(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun2_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun3(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun3_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun4(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun4_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun5(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun5_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun6(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun6_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun7(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun7_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun8(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun8_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun9(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun9_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineFun10(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFun10_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun0(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muBulkFun0_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun1(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muBulkFun1_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun2(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muBulkFun2_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun3(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun3_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun4(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun4_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun5(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun5_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun6(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun6_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun7(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun7_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun8(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun8_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun9(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun9_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkFun10(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muBulkFun10_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineStrFun1(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muStrFun1_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineStrFun2(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muStrFun2_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineStrFun3(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muStrFun3_t a_pFun) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, false); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineMultFun(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muMultFun_t a_pFun, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineOprt(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun2_t a_pFun, - muInt_t a_nPrec, - muInt_t a_nOprtAsct, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineOprt(a_szName, - a_pFun, - a_nPrec, - (mu::EOprtAssociativity)a_nOprtAsct, - a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineVar(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFloat_t *a_pVar) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineVar(a_szName, a_pVar); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineBulkVar(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFloat_t *a_pVar) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineVar(a_szName, a_pVar); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineConst(muParserHandle_t a_hParser, - const muChar_t *a_szName, - muFloat_t a_fVal) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineConst(a_szName, a_fVal); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineStrConst(muParserHandle_t a_hParser, - const muChar_t *a_szName, - const muChar_t *a_szVal) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineStrConst(a_szName, a_szVal); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(const muChar_t*) mupGetExpr(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - - // C# explodes when pMsg is returned directly. For some reason it can't access - // the memory where the message lies directly. -#ifndef _UNICODE - sprintf(s_tmpOutBuf, "%s", p->GetExpr().c_str()); -#else - wsprintf(s_tmpOutBuf, _T("%s"), p->GetExpr().c_str()); -#endif - - return s_tmpOutBuf; - - MU_CATCH - - return _T(""); -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefinePostfixOprt(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun1_t a_pOprt, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefinePostfixOprt(a_szName, a_pOprt, a_bAllowOpt != 0); - MU_CATCH -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineInfixOprt(muParserHandle_t a_hParser, - const muChar_t* a_szName, - muFun1_t a_pOprt, - muBool_t a_bAllowOpt) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->DefineInfixOprt(a_szName, a_pOprt, a_bAllowOpt != 0); - MU_CATCH -} - -// Define character sets for identifiers -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineNameChars(muParserHandle_t a_hParser, - const muChar_t* a_szCharset) -{ - muParser_t* const p(AsParser(a_hParser)); - p->DefineNameChars(a_szCharset); -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineOprtChars(muParserHandle_t a_hParser, - const muChar_t* a_szCharset) -{ - muParser_t* const p(AsParser(a_hParser)); - p->DefineOprtChars(a_szCharset); -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupDefineInfixOprtChars(muParserHandle_t a_hParser, - const muChar_t *a_szCharset) -{ - muParser_t* const p(AsParser(a_hParser)); - p->DefineInfixOprtChars(a_szCharset); -} - -//--------------------------------------------------------------------------- -/** \brief Get the number of variables defined in the parser. - \param a_hParser [in] Must be a valid parser handle. - \return The number of used variables. - \sa mupGetExprVar - */ -API_EXPORT(int) mupGetVarNum(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::varmap_type VarMap = p->GetVar(); - return (int)VarMap.size(); - MU_CATCH - - return 0; // never reached -} - -//--------------------------------------------------------------------------- -/** \brief Return a variable that is used in an expression. - \param a_hParser [in] A valid parser handle. - \param a_iVar [in] The index of the variable to return. - \param a_szName [out] Pointer to the variable name. - \param a_pVar [out] Pointer to the variable. - \throw nothrow - - Prior to calling this function call mupGetExprVarNum in order to get the - number of variables in the expression. If the parameter a_iVar is greater - than the number of variables both a_szName and a_pVar will be set to zero. - As a side effect this function will trigger an internal calculation of the - expression undefined variables will be set to zero during this calculation. - During the calculation user defined callback functions present in the expression - will be called, this is unavoidable. - */ -API_EXPORT(void) mupGetVar(muParserHandle_t a_hParser, - unsigned a_iVar, - const muChar_t **a_szName, - muFloat_t **a_pVar) -{ - // A static buffer is needed for the name since i cant return the - // pointer from the map. - static muChar_t szName[1024]; - - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::varmap_type VarMap = p->GetVar(); - - if (a_iVar >= VarMap.size()) - { - *a_szName = 0; - *a_pVar = 0; - return; - } - mu::varmap_type::const_iterator item; - - item = VarMap.begin(); - for (unsigned i = 0; i < a_iVar; ++i) - ++item; - -#ifndef _UNICODE - strncpy(szName, item->first.c_str(), sizeof(szName)); -#else - wcsncpy(szName, item->first.c_str(), sizeof(szName)); -#endif - - szName[sizeof(szName)-1] = 0; - - *a_szName = &szName[0]; - *a_pVar = item->second; - return; - - MU_CATCH - - *a_szName = 0; - *a_pVar = 0; -} - -//--------------------------------------------------------------------------- -/** \brief Get the number of variables used in the expression currently set in the parser. - \param a_hParser [in] Must be a valid parser handle. - \return The number of used variables. - \sa mupGetExprVar - */ -API_EXPORT(int) mupGetExprVarNum(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::varmap_type VarMap = p->GetUsedVar(); - return (int)VarMap.size(); - MU_CATCH - - return 0; // never reached -} - -//--------------------------------------------------------------------------- -/** \brief Return a variable that is used in an expression. - - Prior to calling this function call mupGetExprVarNum in order to get the - number of variables in the expression. If the parameter a_iVar is greater - than the number of variables both a_szName and a_pVar will be set to zero. - As a side effect this function will trigger an internal calculation of the - expression undefined variables will be set to zero during this calculation. - During the calculation user defined callback functions present in the expression - will be called, this is unavoidable. - - \param a_hParser [in] A valid parser handle. - \param a_iVar [in] The index of the variable to return. - \param a_szName [out] Pointer to the variable name. - \param a_pVar [out] Pointer to the variable. - \throw nothrow - */ -API_EXPORT(void) mupGetExprVar(muParserHandle_t a_hParser, - unsigned a_iVar, - const muChar_t **a_szName, - muFloat_t **a_pVar) -{ - // A static buffer is needed for the name since i cant return the - // pointer from the map. - static muChar_t szName[1024]; - - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::varmap_type VarMap = p->GetUsedVar(); - - if (a_iVar >= VarMap.size()) - { - *a_szName = 0; - *a_pVar = 0; - return; - } - mu::varmap_type::const_iterator item; - - item = VarMap.begin(); - for (unsigned i = 0; i < a_iVar; ++i) - ++item; - -#ifndef _UNICODE - strncpy(szName, item->first.c_str(), sizeof(szName)); -#else - wcsncpy(szName, item->first.c_str(), sizeof(szName)); -#endif - - szName[sizeof(szName)-1] = 0; - - *a_szName = &szName[0]; - *a_pVar = item->second; - return; - - MU_CATCH - - *a_szName = 0; - *a_pVar = 0; -} - -//--------------------------------------------------------------------------- -/** \brief Return the number of constants defined in a parser. */ -API_EXPORT(int) mupGetConstNum(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::valmap_type ValMap = p->GetConst(); - return (int)ValMap.size(); - MU_CATCH - - return 0; // never reached -} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(void) mupSetArgSep(muParserHandle_t a_hParser, const muChar_t cArgSep) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->SetArgSep(cArgSep); - MU_CATCH -} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(void) mupResetLocale(muParserHandle_t a_hParser) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->ResetLocale(); - MU_CATCH -} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(void) mupSetDecSep(muParserHandle_t a_hParser, const muChar_t cDecSep) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->SetDecSep(cDecSep); - MU_CATCH -} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(void) mupSetThousandsSep(muParserHandle_t a_hParser, const muChar_t cThousandsSep) -{ - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - p->SetThousandsSep(cThousandsSep); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Retrieve name and value of a single parser constant. - \param a_hParser [in] a valid parser handle - \param a_iVar [in] Index of the constant to query - \param a_pszName [out] pointer to a null terminated string with the constant name - \param [out] The constant value - */ -API_EXPORT(void) mupGetConst(muParserHandle_t a_hParser, - unsigned a_iVar, - const muChar_t **a_pszName, - muFloat_t *a_fVal) -{ - // A static buffer is needed for the name since i cant return the - // pointer from the map. - static muChar_t szName[1024]; - - MU_TRY - muParser_t* const p(AsParser(a_hParser)); - const mu::valmap_type ValMap = p->GetConst(); - - if (a_iVar >= ValMap.size()) - { - *a_pszName = 0; - *a_fVal = 0; - return; - } - - mu::valmap_type::const_iterator item; - item = ValMap.begin(); - for (unsigned i = 0; i < a_iVar; ++i) - ++item; - -#ifndef _UNICODE - strncpy(szName, item->first.c_str(), sizeof(szName)); -#else - wcsncpy(szName, item->first.c_str(), sizeof(szName)); -#endif - - szName[sizeof(szName)-1] = 0; - - *a_pszName = &szName[0]; - *a_fVal = item->second; - return; - - MU_CATCH - - *a_pszName = 0; - *a_fVal = 0; -} - -//--------------------------------------------------------------------------- -/** \brief Add a custom value recognition function. -*/ -API_EXPORT(void) mupAddValIdent(muParserHandle_t a_hParser, - muIdentFun_t a_pFun) -{ - MU_TRY - muParser_t* p(AsParser(a_hParser)); - p->AddValIdent(a_pFun); - MU_CATCH -} - -//--------------------------------------------------------------------------- -/** \brief Query if an error occurred. - - After querying the internal error bit will be reset. So a consecutive call - will return false. - */ -API_EXPORT(muBool_t) mupError(muParserHandle_t a_hParser) -{ - bool bError(AsParserTag(a_hParser)->bError); - AsParserTag(a_hParser)->bError = false; - return bError; -} - -//--------------------------------------------------------------------------- -/** \brief Reset the internal error flag. -*/ -API_EXPORT(void) mupErrorReset(muParserHandle_t a_hParser) -{ - AsParserTag(a_hParser)->bError = false; -} - -//--------------------------------------------------------------------------- -API_EXPORT(void) mupSetErrorHandler(muParserHandle_t a_hParser, muErrorHandler_t a_pHandler) -{ - AsParserTag(a_hParser)->errHandler = a_pHandler; -} - -//--------------------------------------------------------------------------- -/** \brief Return the message associated with the last error. -*/ -API_EXPORT(const muChar_t*) mupGetErrorMsg(muParserHandle_t a_hParser) -{ - ParserTag* const p(AsParserTag(a_hParser)); - const muChar_t *pMsg = p->exc.GetMsg().c_str(); - - // C# explodes when pMsg is returned directly. For some reason it can't access - // the memory where the message lies directly. -#ifndef _UNICODE - sprintf(s_tmpOutBuf, "%s", pMsg); -#else - wsprintf(s_tmpOutBuf, _T("%s"), pMsg); -#endif - - return s_tmpOutBuf; -} - -//--------------------------------------------------------------------------- -/** \brief Return the message associated with the last error. -*/ -API_EXPORT(const muChar_t*) mupGetErrorToken(muParserHandle_t a_hParser) -{ - ParserTag* const p(AsParserTag(a_hParser)); - const muChar_t *pToken = p->exc.GetToken().c_str(); - - // C# explodes when pMsg is returned directly. For some reason it can't access - // the memory where the message lies directly. -#ifndef _UNICODE - sprintf(s_tmpOutBuf, "%s", pToken); -#else - wsprintf(s_tmpOutBuf, _T("%s"), pToken); -#endif - - return s_tmpOutBuf; -} - -//--------------------------------------------------------------------------- -/** \brief Return the code associated with the last error. -*/ -API_EXPORT(int) mupGetErrorCode(muParserHandle_t a_hParser) -{ - return AsParserTag(a_hParser)->exc.GetCode(); -} - -//--------------------------------------------------------------------------- -/** \brief Return the position associated with the last error. */ -API_EXPORT(int) mupGetErrorPos(muParserHandle_t a_hParser) -{ - return (int)AsParserTag(a_hParser)->exc.GetPos(); -} - -////----------------------------------------------------------------------------------------------------- -//API_EXPORT(const muChar_t*) mupGetErrorExpr(muParserHandle_t a_hParser) -//{ -// return AsParserTag(a_hParser)->exc.GetExpr().c_str(); -//} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(muFloat_t*) mupCreateVar() -{ - return new muFloat_t(0); -} - -//----------------------------------------------------------------------------------------------------- -API_EXPORT(void) mupReleaseVar(muFloat_t *ptr) -{ - delete ptr; -} - -#endif // MUPARSER_DLL diff --git a/src/external/muparser_v225/src/muParserError.cpp b/src/external/muparser_v225/src/muParserError.cpp deleted file mode 100644 index 6fe4e1d2c..000000000 --- a/src/external/muparser_v225/src/muParserError.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#include "muParserError.h" - - -namespace mu -{ - const ParserErrorMsg ParserErrorMsg::m_Instance; - - //------------------------------------------------------------------------------ - const ParserErrorMsg& ParserErrorMsg::Instance() - { - return m_Instance; - } - - //------------------------------------------------------------------------------ - string_type ParserErrorMsg::operator[](unsigned a_iIdx) const - { - return (a_iIdx \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2011 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "muParserInt.h" - -#include -#include -#include - -using namespace std; - -/** \file - \brief Implementation of a parser using integer value. -*/ - -/** \brief Namespace for mathematical applications. */ -namespace mu -{ -value_type ParserInt::Abs(value_type v) { return (value_type)Round(fabs((double)v)); } -value_type ParserInt::Sign(value_type v) { return (Round(v)<0) ? -1 : (Round(v)>0) ? 1 : 0; } -value_type ParserInt::Ite(value_type v1, - value_type v2, - value_type v3) { return (Round(v1)==1) ? Round(v2) : Round(v3); } -value_type ParserInt::Add(value_type v1, value_type v2) { return Round(v1) + Round(v2); } -value_type ParserInt::Sub(value_type v1, value_type v2) { return Round(v1) - Round(v2); } -value_type ParserInt::Mul(value_type v1, value_type v2) { return Round(v1) * Round(v2); } -value_type ParserInt::Div(value_type v1, value_type v2) { return Round(v1) / Round(v2); } -value_type ParserInt::Mod(value_type v1, value_type v2) { return Round(v1) % Round(v2); } -value_type ParserInt::Shr(value_type v1, value_type v2) { return Round(v1) >> Round(v2); } -value_type ParserInt::Shl(value_type v1, value_type v2) { return Round(v1) << Round(v2); } -value_type ParserInt::LogAnd(value_type v1, value_type v2) { return Round(v1) & Round(v2); } -value_type ParserInt::LogOr(value_type v1, value_type v2) { return Round(v1) | Round(v2); } -value_type ParserInt::And(value_type v1, value_type v2) { return Round(v1) && Round(v2); } -value_type ParserInt::Or(value_type v1, value_type v2) { return Round(v1) || Round(v2); } -value_type ParserInt::Less(value_type v1, value_type v2) { return Round(v1) < Round(v2); } -value_type ParserInt::Greater(value_type v1, value_type v2) { return Round(v1) > Round(v2); } -value_type ParserInt::LessEq(value_type v1, value_type v2) { return Round(v1) <= Round(v2); } -value_type ParserInt::GreaterEq(value_type v1, value_type v2) { return Round(v1) >= Round(v2); } -value_type ParserInt::Equal(value_type v1, value_type v2) { return Round(v1) == Round(v2); } -value_type ParserInt::NotEqual(value_type v1, value_type v2) { return Round(v1) != Round(v2); } -value_type ParserInt::Not(value_type v) { return !Round(v); } - -value_type ParserInt::Pow(value_type v1, value_type v2) -{ - return std::pow((double)Round(v1), (double)Round(v2)); -} - -//--------------------------------------------------------------------------- -// Unary operator Callbacks: Infix operators -value_type ParserInt::UnaryMinus(value_type v) -{ - return -Round(v); -} - -//--------------------------------------------------------------------------- -value_type ParserInt::Sum(const value_type* a_afArg, int a_iArgc) -{ - if (!a_iArgc) - throw ParserError(_T("too few arguments for function sum.")); - - value_type fRes=0; - for (int i=0; i> iVal; - if (stream.fail()) - return 0; - - stringstream_type::pos_type iEnd = stream.tellg(); // Position after reading - if (stream.fail()) - iEnd = stream.str().length(); - - if (iEnd==(stringstream_type::pos_type)-1) - return 0; - - *a_iPos += (int)iEnd; - *a_fVal = (value_type)iVal; - return 1; -} - -//--------------------------------------------------------------------------- -/** \brief Check a given position in the expression for the presence of - a hex value. - \param a_szExpr Pointer to the expression string - \param [in/out] a_iPos Pointer to an integer value holding the current parsing - position in the expression. - \param [out] a_fVal Pointer to the position where the detected value shall be stored. - - Hey values must be prefixed with "0x" in order to be detected properly. -*/ -int ParserInt::IsHexVal(const char_type *a_szExpr, int *a_iPos, value_type *a_fVal) -{ - if (a_szExpr[1]==0 || (a_szExpr[0]!='0' || a_szExpr[1]!='x') ) - return 0; - - unsigned iVal(0); - - // New code based on streams for UNICODE compliance: - stringstream_type::pos_type nPos(0); - stringstream_type ss(a_szExpr + 2); - ss >> std::hex >> iVal; - nPos = ss.tellg(); - - if (nPos==(stringstream_type::pos_type)0) - return 1; - - *a_iPos += (int)(2 + nPos); - *a_fVal = (value_type)iVal; - return 1; -} - -//--------------------------------------------------------------------------- -int ParserInt::IsBinVal(const char_type *a_szExpr, int *a_iPos, value_type *a_fVal) -{ - if (a_szExpr[0]!='#') - return 0; - - unsigned iVal(0), - iBits(sizeof(iVal)*8), - i(0); - - for (i=0; (a_szExpr[i+1]=='0' || a_szExpr[i+1]=='1') && i> (iBits-i) ); - *a_iPos += i+1; - - return 1; -} - -//--------------------------------------------------------------------------- -/** \brief Constructor. - - Call ParserBase class constructor and trigger Function, Operator and Constant initialization. -*/ -ParserInt::ParserInt() - :ParserBase() -{ - AddValIdent(IsVal); // lowest priority - AddValIdent(IsBinVal); - AddValIdent(IsHexVal); // highest priority - - InitCharSets(); - InitFun(); - InitOprt(); -} - -//--------------------------------------------------------------------------- -void ParserInt::InitConst() -{ -} - -//--------------------------------------------------------------------------- -void ParserInt::InitCharSets() -{ - DefineNameChars( _T("0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") ); - DefineOprtChars( _T("+-*^/?<>=!%&|~'_") ); - DefineInfixOprtChars( _T("/+-*^?<>=!%&|~'_") ); -} - -//--------------------------------------------------------------------------- -/** \brief Initialize the default functions. */ -void ParserInt::InitFun() -{ - DefineFun( _T("sign"), Sign); - DefineFun( _T("abs"), Abs); - DefineFun( _T("if"), Ite); - DefineFun( _T("sum"), Sum); - DefineFun( _T("min"), Min); - DefineFun( _T("max"), Max); -} - -//--------------------------------------------------------------------------- -/** \brief Initialize operators. */ -void ParserInt::InitOprt() -{ - // disable all built in operators, not all of them useful for integer numbers - // (they don't do rounding of values) - EnableBuiltInOprt(false); - - // Disable all built in operators, they wont work with integer numbers - // since they are designed for floating point numbers - DefineInfixOprt( _T("-"), UnaryMinus); - DefineInfixOprt( _T("!"), Not); - - DefineOprt( _T("&"), LogAnd, prLOGIC); - DefineOprt( _T("|"), LogOr, prLOGIC); - DefineOprt( _T("&&"), And, prLOGIC); - DefineOprt( _T("||"), Or, prLOGIC); - - DefineOprt( _T("<"), Less, prCMP); - DefineOprt( _T(">"), Greater, prCMP); - DefineOprt( _T("<="), LessEq, prCMP); - DefineOprt( _T(">="), GreaterEq, prCMP); - DefineOprt( _T("=="), Equal, prCMP); - DefineOprt( _T("!="), NotEqual, prCMP); - - DefineOprt( _T("+"), Add, prADD_SUB); - DefineOprt( _T("-"), Sub, prADD_SUB); - - DefineOprt( _T("*"), Mul, prMUL_DIV); - DefineOprt( _T("/"), Div, prMUL_DIV); - DefineOprt( _T("%"), Mod, prMUL_DIV); - - DefineOprt( _T("^"), Pow, prPOW, oaRIGHT); - DefineOprt( _T(">>"), Shr, prMUL_DIV+1); - DefineOprt( _T("<<"), Shl, prMUL_DIV+1); -} - -} // namespace mu diff --git a/src/external/muparser_v225/src/muParserTest.cpp b/src/external/muparser_v225/src/muParserTest.cpp deleted file mode 100644 index 4006b27c7..000000000 --- a/src/external/muparser_v225/src/muParserTest.cpp +++ /dev/null @@ -1,1552 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "muParserTest.h" - -#include -#include -#include -#include - -#define PARSER_CONST_PI 3.141592653589793238462643 -#define PARSER_CONST_E 2.718281828459045235360287 - -using namespace std; - -/** \file - \brief This file contains the implementation of parser test cases. -*/ - -namespace mu -{ - namespace Test - { - int ParserTester::c_iCount = 0; - - //--------------------------------------------------------------------------------------------- - ParserTester::ParserTester() - :m_vTestFun() - { - AddTest(&ParserTester::TestNames); - AddTest(&ParserTester::TestSyntax); - AddTest(&ParserTester::TestPostFix); - AddTest(&ParserTester::TestInfixOprt); - AddTest(&ParserTester::TestVarConst); - AddTest(&ParserTester::TestMultiArg); - AddTest(&ParserTester::TestExpression); - AddTest(&ParserTester::TestIfThenElse); - AddTest(&ParserTester::TestInterface); - AddTest(&ParserTester::TestBinOprt); - AddTest(&ParserTester::TestException); - AddTest(&ParserTester::TestStrArg); - AddTest(&ParserTester::TestBulkMode); - - ParserTester::c_iCount = 0; - } - - //--------------------------------------------------------------------------------------------- - int ParserTester::IsHexVal(const char_type *a_szExpr, int *a_iPos, value_type *a_fVal) - { - if (a_szExpr[1]==0 || (a_szExpr[0]!='0' || a_szExpr[1]!='x') ) - return 0; - - unsigned iVal(0); - - // New code based on streams for UNICODE compliance: - stringstream_type::pos_type nPos(0); - stringstream_type ss(a_szExpr + 2); - ss >> std::hex >> iVal; - nPos = ss.tellg(); - - if (nPos==(stringstream_type::pos_type)0) - return 1; - - *a_iPos += (int)(2 + nPos); - *a_fVal = (value_type)iVal; - return 1; - } - - //--------------------------------------------------------------------------------------------- - int ParserTester::TestInterface() - { - int iStat = 0; - mu::console() << _T("testing member functions..."); - - // Test RemoveVar - value_type afVal[3] = {1,2,3}; - Parser p; - - try - { - p.DefineVar( _T("a"), &afVal[0]); - p.DefineVar( _T("b"), &afVal[1]); - p.DefineVar( _T("c"), &afVal[2]); - p.SetExpr( _T("a+b+c") ); - p.Eval(); - } - catch(...) - { - iStat += 1; // this is not supposed to happen - } - - try - { - p.RemoveVar( _T("c") ); - p.Eval(); - iStat += 1; // not supposed to reach this, nonexisting variable "c" deleted... - } - catch(...) - { - // failure is expected... - } - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------------------------- - int ParserTester::TestStrArg() - { - int iStat = 0; - mu::console() << _T("testing string arguments..."); - - iStat += EqnTest(_T("valueof(\"\")"), 123, true); // empty string arguments caused a crash - iStat += EqnTest(_T("valueof(\"aaa\")+valueof(\"bbb\") "), 246, true); - iStat += EqnTest(_T("2*(valueof(\"aaa\")-23)+valueof(\"bbb\")"), 323, true); - // use in expressions with variables - iStat += EqnTest(_T("a*(atof(\"10\")-b)"), 8, true); - iStat += EqnTest(_T("a-(atof(\"10\")*b)"), -19, true); - // string + numeric arguments - iStat += EqnTest(_T("strfun1(\"100\")"), 100, true); - iStat += EqnTest(_T("strfun2(\"100\",1)"), 101, true); - iStat += EqnTest(_T("strfun3(\"99\",1,2)"), 102, true); - // string constants - iStat += EqnTest(_T("atof(str1)+atof(str2)"), 3.33, true); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------------------------- - int ParserTester::TestBulkMode() - { - int iStat = 0; - mu::console() << _T("testing bulkmode..."); - -#define EQN_TEST_BULK(EXPR, R1, R2, R3, R4, PASS) \ - { \ - double res[] = { R1, R2, R3, R4 }; \ - iStat += EqnTestBulk(_T(EXPR), res, (PASS)); \ - } - - // Bulk Variables for the test: - // a: 1,2,3,4 - // b: 2,2,2,2 - // c: 3,3,3,3 - // d: 5,4,3,2 - EQN_TEST_BULK("a", 1, 1, 1, 1, false) - EQN_TEST_BULK("a", 1, 2, 3, 4, true) - EQN_TEST_BULK("b=a", 1, 2, 3, 4, true) - EQN_TEST_BULK("b=a, b*10", 10, 20, 30, 40, true) - EQN_TEST_BULK("b=a, b*10, a", 1, 2, 3, 4, true) - EQN_TEST_BULK("a+b", 3, 4, 5, 6, true) - EQN_TEST_BULK("c*(a+b)", 9, 12, 15, 18, true) -#undef EQN_TEST_BULK - - if (iStat == 0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------------------------- - int ParserTester::TestBinOprt() - { - int iStat = 0; - mu::console() << _T("testing binary operators..."); - - // built in operators - // xor operator - - iStat += EqnTest(_T("a++b"), 3, true); - iStat += EqnTest(_T("a ++ b"), 3, true); - iStat += EqnTest(_T("1++2"), 3, true); - iStat += EqnTest(_T("1 ++ 2"), 3, true); - iStat += EqnTest(_T("a add b"), 3, true); - iStat += EqnTest(_T("1 add 2"), 3, true); - iStat += EqnTest(_T("aa"), 1, true); - iStat += EqnTest(_T("a>a"), 0, true); - iStat += EqnTest(_T("aa"), 0, true); - iStat += EqnTest(_T("a<=a"), 1, true); - iStat += EqnTest(_T("a<=b"), 1, true); - iStat += EqnTest(_T("b<=a"), 0, true); - iStat += EqnTest(_T("a>=a"), 1, true); - iStat += EqnTest(_T("b>=a"), 1, true); - iStat += EqnTest(_T("a>=b"), 0, true); - - // Test logical operators, especially if user defined "&" and the internal "&&" collide - iStat += EqnTest(_T("1 && 1"), 1, true); - iStat += EqnTest(_T("1 && 0"), 0, true); - iStat += EqnTest(_T("(aa)"), 1, true); - iStat += EqnTest(_T("(ab)"), 0, true); - //iStat += EqnTest(_T("12 and 255"), 12, true); - //iStat += EqnTest(_T("12 and 0"), 0, true); - iStat += EqnTest(_T("12 & 255"), 12, true); - iStat += EqnTest(_T("12 & 0"), 0, true); - iStat += EqnTest(_T("12&255"), 12, true); - iStat += EqnTest(_T("12&0"), 0, true); - - // Assignment operator - iStat += EqnTest(_T("a = b"), 2, true); - iStat += EqnTest(_T("a = sin(b)"), 0.909297, true); - iStat += EqnTest(_T("a = 1+sin(b)"), 1.909297, true); - iStat += EqnTest(_T("(a=b)*2"), 4, true); - iStat += EqnTest(_T("2*(a=b)"), 4, true); - iStat += EqnTest(_T("2*(a=b+1)"), 6, true); - iStat += EqnTest(_T("(a=b+1)*2"), 6, true); - iStat += EqnTest(_T("a=c, a*10"), 30, true); - - iStat += EqnTest(_T("2^2^3"), 256, true); - iStat += EqnTest(_T("1/2/3"), 1.0/6.0, true); - - // reference: http://www.wolframalpha.com/input/?i=3%2B4*2%2F%281-5%29^2^3 - iStat += EqnTest(_T("3+4*2/(1-5)^2^3"), 3.0001220703125, true); - - // Test user defined binary operators - iStat += EqnTestInt(_T("1 | 2"), 3, true); - iStat += EqnTestInt(_T("1 || 2"), 1, true); - iStat += EqnTestInt(_T("123 & 456"), 72, true); - iStat += EqnTestInt(_T("(123 & 456) % 10"), 2, true); - iStat += EqnTestInt(_T("1 && 0"), 0, true); - iStat += EqnTestInt(_T("123 && 456"), 1, true); - iStat += EqnTestInt(_T("1 << 3"), 8, true); - iStat += EqnTestInt(_T("8 >> 3"), 1, true); - iStat += EqnTestInt(_T("9 / 4"), 2, true); - iStat += EqnTestInt(_T("9 % 4"), 1, true); - iStat += EqnTestInt(_T("if(5%2,1,0)"), 1, true); - iStat += EqnTestInt(_T("if(4%2,1,0)"), 0, true); - iStat += EqnTestInt(_T("-10+1"), -9, true); - iStat += EqnTestInt(_T("1+2*3"), 7, true); - iStat += EqnTestInt(_T("const1 != const2"), 1, true); - iStat += EqnTestInt(_T("const1 != const2"), 0, false); - iStat += EqnTestInt(_T("const1 == const2"), 0, true); - iStat += EqnTestInt(_T("const1 == 1"), 1, true); - iStat += EqnTestInt(_T("10*(const1 == 1)"), 10, true); - iStat += EqnTestInt(_T("2*(const1 | const2)"), 6, true); - iStat += EqnTestInt(_T("2*(const1 | const2)"), 7, false); - iStat += EqnTestInt(_T("const1 < const2"), 1, true); - iStat += EqnTestInt(_T("const2 > const1"), 1, true); - iStat += EqnTestInt(_T("const1 <= 1"), 1, true); - iStat += EqnTestInt(_T("const2 >= 2"), 1, true); - iStat += EqnTestInt(_T("2*(const1 + const2)"), 6, true); - iStat += EqnTestInt(_T("2*(const1 - const2)"), -2, true); - iStat += EqnTestInt(_T("a != b"), 1, true); - iStat += EqnTestInt(_T("a != b"), 0, false); - iStat += EqnTestInt(_T("a == b"), 0, true); - iStat += EqnTestInt(_T("a == 1"), 1, true); - iStat += EqnTestInt(_T("10*(a == 1)"), 10, true); - iStat += EqnTestInt(_T("2*(a | b)"), 6, true); - iStat += EqnTestInt(_T("2*(a | b)"), 7, false); - iStat += EqnTestInt(_T("a < b"), 1, true); - iStat += EqnTestInt(_T("b > a"), 1, true); - iStat += EqnTestInt(_T("a <= 1"), 1, true); - iStat += EqnTestInt(_T("b >= 2"), 1, true); - iStat += EqnTestInt(_T("2*(a + b)"), 6, true); - iStat += EqnTestInt(_T("2*(a - b)"), -2, true); - iStat += EqnTestInt(_T("a + (a << b)"), 5, true); - iStat += EqnTestInt(_T("-2^2"), -4, true); - iStat += EqnTestInt(_T("3--a"), 4, true); - iStat += EqnTestInt(_T("3+-3^2"), -6, true); - - // Test reading of hex values: - iStat += EqnTestInt(_T("0xff"), 255, true); - iStat += EqnTestInt(_T("10+0xff"), 265, true); - iStat += EqnTestInt(_T("0xff+10"), 265, true); - iStat += EqnTestInt(_T("10*0xff"), 2550, true); - iStat += EqnTestInt(_T("0xff*10"), 2550, true); - iStat += EqnTestInt(_T("10+0xff+1"), 266, true); - iStat += EqnTestInt(_T("1+0xff+10"), 266, true); - -// incorrect: '^' is yor here, not power -// iStat += EqnTestInt("-(1+2)^2", -9, true); -// iStat += EqnTestInt("-1^3", -1, true); - - // Test precedence - // a=1, b=2, c=3 - iStat += EqnTestInt(_T("a + b * c"), 7, true); - iStat += EqnTestInt(_T("a * b + c"), 5, true); - iStat += EqnTestInt(_T("a10"), 0, true); - iStat += EqnTestInt(_T("a"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("?<"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("**"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("xor"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("and"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("or"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("not"), f1of1) - PARSER_THROWCHECK(PostfixOprt, true, _T("!"), f1of1) - // Binary operator - // The following must fail with builtin operators activated - // p.EnableBuiltInOp(true); -> this is the default - p.ClearPostfixOprt(); - PARSER_THROWCHECK(Oprt, false, _T("+"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("-"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("*"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("/"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("^"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("&&"), f1of2) - PARSER_THROWCHECK(Oprt, false, _T("||"), f1of2) - // without activated built in operators it should work - p.EnableBuiltInOprt(false); - PARSER_THROWCHECK(Oprt, true, _T("+"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("-"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("*"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("/"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("^"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("&&"), f1of2) - PARSER_THROWCHECK(Oprt, true, _T("||"), f1of2) - #undef PARSER_THROWCHECK - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------- - int ParserTester::TestSyntax() - { - int iStat = 0; - mu::console() << _T("testing syntax engine..."); - - iStat += ThrowTest(_T("1,"), ecUNEXPECTED_EOF); // incomplete hex definition - iStat += ThrowTest(_T("a,"), ecUNEXPECTED_EOF); // incomplete hex definition - iStat += ThrowTest(_T("sin(8),"), ecUNEXPECTED_EOF); // incomplete hex definition - iStat += ThrowTest(_T("(sin(8)),"), ecUNEXPECTED_EOF); // incomplete hex definition - iStat += ThrowTest(_T("a{m},"), ecUNEXPECTED_EOF); // incomplete hex definition - - iStat += EqnTest(_T("(1+ 2*a)"), 3, true); // Spaces within formula - iStat += EqnTest(_T("sqrt((4))"), 2, true); // Multiple brackets - iStat += EqnTest(_T("sqrt((2)+2)"), 2, true);// Multiple brackets - iStat += EqnTest(_T("sqrt(2+(2))"), 2, true);// Multiple brackets - iStat += EqnTest(_T("sqrt(a+(3))"), 2, true);// Multiple brackets - iStat += EqnTest(_T("sqrt((3)+a)"), 2, true);// Multiple brackets - iStat += EqnTest(_T("order(1,2)"), 1, true); // May not cause name collision with operator "or" - iStat += EqnTest(_T("(2+"), 0, false); // missing closing bracket - iStat += EqnTest(_T("2++4"), 0, false); // unexpected operator - iStat += EqnTest(_T("2+-4"), 0, false); // unexpected operator - iStat += EqnTest(_T("(2+)"), 0, false); // unexpected closing bracket - iStat += EqnTest(_T("--2"), 0, false); // double sign - iStat += EqnTest(_T("ksdfj"), 0, false); // unknown token - iStat += EqnTest(_T("()"), 0, false); // empty bracket without a function - iStat += EqnTest(_T("5+()"), 0, false); // empty bracket without a function - iStat += EqnTest(_T("sin(cos)"), 0, false); // unexpected function - iStat += EqnTest(_T("5t6"), 0, false); // unknown token - iStat += EqnTest(_T("5 t 6"), 0, false); // unknown token - iStat += EqnTest(_T("8*"), 0, false); // unexpected end of formula - iStat += EqnTest(_T(",3"), 0, false); // unexpected comma - iStat += EqnTest(_T("3,5"), 0, false); // unexpected comma - iStat += EqnTest(_T("sin(8,8)"), 0, false); // too many function args - iStat += EqnTest(_T("(7,8)"), 0, false); // too many function args - iStat += EqnTest(_T("sin)"), 0, false); // unexpected closing bracket - iStat += EqnTest(_T("a)"), 0, false); // unexpected closing bracket - iStat += EqnTest(_T("pi)"), 0, false); // unexpected closing bracket - iStat += EqnTest(_T("sin(())"), 0, false); // unexpected closing bracket - iStat += EqnTest(_T("sin()"), 0, false); // unexpected closing bracket - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------- - int ParserTester::TestVarConst() - { - int iStat = 0; - mu::console() << _T("testing variable/constant detection..."); - - // Test if the result changes when a variable changes - iStat += EqnTestWithVarChange( _T("a"), 1, 1, 2, 2 ); - iStat += EqnTestWithVarChange( _T("2*a"), 2, 4, 3, 6 ); - - // distinguish constants with same basename - iStat += EqnTest( _T("const"), 1, true); - iStat += EqnTest( _T("const1"), 2, true); - iStat += EqnTest( _T("const2"), 3, true); - iStat += EqnTest( _T("2*const"), 2, true); - iStat += EqnTest( _T("2*const1"), 4, true); - iStat += EqnTest( _T("2*const2"), 6, true); - iStat += EqnTest( _T("2*const+1"), 3, true); - iStat += EqnTest( _T("2*const1+1"), 5, true); - iStat += EqnTest( _T("2*const2+1"), 7, true); - iStat += EqnTest( _T("const"), 0, false); - iStat += EqnTest( _T("const1"), 0, false); - iStat += EqnTest( _T("const2"), 0, false); - - // distinguish variables with same basename - iStat += EqnTest( _T("a"), 1, true); - iStat += EqnTest( _T("aa"), 2, true); - iStat += EqnTest( _T("2*a"), 2, true); - iStat += EqnTest( _T("2*aa"), 4, true); - iStat += EqnTest( _T("2*a-1"), 1, true); - iStat += EqnTest( _T("2*aa-1"), 3, true); - - // custom value recognition - iStat += EqnTest( _T("0xff"), 255, true); - iStat += EqnTest( _T("0x97 + 0xff"), 406, true); - - // Finally test querying of used variables - try - { - int idx; - mu::Parser p; - mu::value_type vVarVal[] = { 1, 2, 3, 4, 5}; - p.DefineVar( _T("a"), &vVarVal[0]); - p.DefineVar( _T("b"), &vVarVal[1]); - p.DefineVar( _T("c"), &vVarVal[2]); - p.DefineVar( _T("d"), &vVarVal[3]); - p.DefineVar( _T("e"), &vVarVal[4]); - - // Test lookup of defined variables - // 4 used variables - p.SetExpr( _T("a+b+c+d") ); - mu::varmap_type UsedVar = p.GetUsedVar(); - int iCount = (int)UsedVar.size(); - if (iCount!=4) - throw false; - - // the next check will fail if the parser - // erroneously creates new variables internally - if (p.GetVar().size()!=5) - throw false; - - mu::varmap_type::const_iterator item = UsedVar.begin(); - for (idx=0; item!=UsedVar.end(); ++item) - { - if (&vVarVal[idx++]!=item->second) - throw false; - } - - // Test lookup of undefined variables - p.SetExpr( _T("undef1+undef2+undef3") ); - UsedVar = p.GetUsedVar(); - iCount = (int)UsedVar.size(); - if (iCount!=3) - throw false; - - // the next check will fail if the parser - // erroneously creates new variables internally - if (p.GetVar().size()!=5) - throw false; - - for (item = UsedVar.begin(); item!=UsedVar.end(); ++item) - { - if (item->second!=0) - throw false; // all pointers to undefined variables must be null - } - - // 1 used variables - p.SetExpr( _T("a+b") ); - UsedVar = p.GetUsedVar(); - iCount = (int)UsedVar.size(); - if (iCount!=2) throw false; - item = UsedVar.begin(); - for (idx=0; item!=UsedVar.end(); ++item) - if (&vVarVal[idx++]!=item->second) throw false; - - } - catch(...) - { - iStat += 1; - } - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------- - int ParserTester::TestMultiArg() - { - int iStat = 0; - mu::console() << _T("testing multiarg functions..."); - - // Compound expressions - iStat += EqnTest( _T("1,2,3"), 3, true); - iStat += EqnTest( _T("a,b,c"), 3, true); - iStat += EqnTest( _T("a=10,b=20,c=a*b"), 200, true); - iStat += EqnTest( _T("1,\n2,\n3"), 3, true); - iStat += EqnTest( _T("a,\nb,\nc"), 3, true); - iStat += EqnTest( _T("a=10,\nb=20,\nc=a*b"), 200, true); - iStat += EqnTest( _T("1,\r\n2,\r\n3"), 3, true); - iStat += EqnTest( _T("a,\r\nb,\r\nc"), 3, true); - iStat += EqnTest( _T("a=10,\r\nb=20,\r\nc=a*b"), 200, true); - - // picking the right argument - iStat += EqnTest( _T("f1of1(1)"), 1, true); - iStat += EqnTest( _T("f1of2(1, 2)"), 1, true); - iStat += EqnTest( _T("f2of2(1, 2)"), 2, true); - iStat += EqnTest( _T("f1of3(1, 2, 3)"), 1, true); - iStat += EqnTest( _T("f2of3(1, 2, 3)"), 2, true); - iStat += EqnTest( _T("f3of3(1, 2, 3)"), 3, true); - iStat += EqnTest( _T("f1of4(1, 2, 3, 4)"), 1, true); - iStat += EqnTest( _T("f2of4(1, 2, 3, 4)"), 2, true); - iStat += EqnTest( _T("f3of4(1, 2, 3, 4)"), 3, true); - iStat += EqnTest( _T("f4of4(1, 2, 3, 4)"), 4, true); - iStat += EqnTest( _T("f1of5(1, 2, 3, 4, 5)"), 1, true); - iStat += EqnTest( _T("f2of5(1, 2, 3, 4, 5)"), 2, true); - iStat += EqnTest( _T("f3of5(1, 2, 3, 4, 5)"), 3, true); - iStat += EqnTest( _T("f4of5(1, 2, 3, 4, 5)"), 4, true); - iStat += EqnTest( _T("f5of5(1, 2, 3, 4, 5)"), 5, true); - // Too few arguments / Too many arguments - iStat += EqnTest( _T("1+ping()"), 11, true); - iStat += EqnTest( _T("ping()+1"), 11, true); - iStat += EqnTest( _T("2*ping()"), 20, true); - iStat += EqnTest( _T("ping()*2"), 20, true); - iStat += EqnTest( _T("ping(1,2)"), 0, false); - iStat += EqnTest( _T("1+ping(1,2)"), 0, false); - iStat += EqnTest( _T("f1of1(1,2)"), 0, false); - iStat += EqnTest( _T("f1of1()"), 0, false); - iStat += EqnTest( _T("f1of2(1, 2, 3)"), 0, false); - iStat += EqnTest( _T("f1of2(1)"), 0, false); - iStat += EqnTest( _T("f1of3(1, 2, 3, 4)"), 0, false); - iStat += EqnTest( _T("f1of3(1)"), 0, false); - iStat += EqnTest( _T("f1of4(1, 2, 3, 4, 5)"), 0, false); - iStat += EqnTest( _T("f1of4(1)"), 0, false); - iStat += EqnTest( _T("(1,2,3)"), 0, false); - iStat += EqnTest( _T("1,2,3"), 0, false); - iStat += EqnTest( _T("(1*a,2,3)"), 0, false); - iStat += EqnTest( _T("1,2*a,3"), 0, false); - - // correct calculation of arguments - iStat += EqnTest( _T("min(a, 1)"), 1, true); - iStat += EqnTest( _T("min(3*2, 1)"), 1, true); - iStat += EqnTest( _T("min(3*2, 1)"), 6, false); - iStat += EqnTest( _T("firstArg(2,3,4)"), 2, true); - iStat += EqnTest( _T("lastArg(2,3,4)"), 4, true); - iStat += EqnTest( _T("min(3*a+1, 1)"), 1, true); - iStat += EqnTest( _T("max(3*a+1, 1)"), 4, true); - iStat += EqnTest( _T("max(3*a+1, 1)*2"), 8, true); - iStat += EqnTest( _T("2*max(3*a+1, 1)+2"), 10, true); - - // functions with Variable argument count - iStat += EqnTest( _T("sum(a)"), 1, true); - iStat += EqnTest( _T("sum(1,2,3)"), 6, true); - iStat += EqnTest( _T("sum(a,b,c)"), 6, true); - iStat += EqnTest( _T("sum(1,-max(1,2),3)*2"), 4, true); - iStat += EqnTest( _T("2*sum(1,2,3)"), 12, true); - iStat += EqnTest( _T("2*sum(1,2,3)+2"), 14, true); - iStat += EqnTest( _T("2*sum(-1,2,3)+2"), 10, true); - iStat += EqnTest( _T("2*sum(-1,2,-(-a))+2"), 6, true); - iStat += EqnTest( _T("2*sum(-1,10,-a)+2"), 18, true); - iStat += EqnTest( _T("2*sum(1,2,3)*2"), 24, true); - iStat += EqnTest( _T("sum(1,-max(1,2),3)*2"), 4, true); - iStat += EqnTest( _T("sum(1*3, 4, a+2)"), 10, true); - iStat += EqnTest( _T("sum(1*3, 2*sum(1,2,2), a+2)"), 16, true); - iStat += EqnTest( _T("sum(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2)"), 24, true); - - // some failures - iStat += EqnTest( _T("sum()"), 0, false); - iStat += EqnTest( _T("sum(,)"), 0, false); - iStat += EqnTest( _T("sum(1,2,)"), 0, false); - iStat += EqnTest( _T("sum(,1,2)"), 0, false); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - - //--------------------------------------------------------------------------- - int ParserTester::TestInfixOprt() - { - int iStat(0); - mu::console() << "testing infix operators..."; - - iStat += EqnTest( _T("+1"), +1, true); - iStat += EqnTest( _T("-(+1)"), -1, true); - iStat += EqnTest( _T("-(+1)*2"), -2, true); - iStat += EqnTest( _T("-(+2)*sqrt(4)"), -4, true); - iStat += EqnTest( _T("3-+a"), 2, true); - iStat += EqnTest( _T("+1*3"), 3, true); - - iStat += EqnTest( _T("-1"), -1, true); - iStat += EqnTest( _T("-(-1)"), 1, true); - iStat += EqnTest( _T("-(-1)*2"), 2, true); - iStat += EqnTest( _T("-(-2)*sqrt(4)"), 4, true); - iStat += EqnTest( _T("-_pi"), -PARSER_CONST_PI, true); - iStat += EqnTest( _T("-a"), -1, true); - iStat += EqnTest( _T("-(a)"), -1, true); - iStat += EqnTest( _T("-(-a)"), 1, true); - iStat += EqnTest( _T("-(-a)*2"), 2, true); - iStat += EqnTest( _T("-(8)"), -8, true); - iStat += EqnTest( _T("-8"), -8, true); - iStat += EqnTest( _T("-(2+1)"), -3, true); - iStat += EqnTest( _T("-(f1of1(1+2*3)+1*2)"), -9, true); - iStat += EqnTest( _T("-(-f1of1(1+2*3)+1*2)"), 5, true); - iStat += EqnTest( _T("-sin(8)"), -0.989358, true); - iStat += EqnTest( _T("3-(-a)"), 4, true); - iStat += EqnTest( _T("3--a"), 4, true); - iStat += EqnTest( _T("-1*3"), -3, true); - - // Postfix / infix priorities - iStat += EqnTest( _T("~2#"), 8, true); - iStat += EqnTest( _T("~f1of1(2)#"), 8, true); - iStat += EqnTest( _T("~(b)#"), 8, true); - iStat += EqnTest( _T("(~b)#"), 12, true); - iStat += EqnTest( _T("~(2#)"), 8, true); - iStat += EqnTest( _T("~(f1of1(2)#)"), 8, true); - // - iStat += EqnTest( _T("-2^2"),-4, true); - iStat += EqnTest( _T("-(a+b)^2"),-9, true); - iStat += EqnTest( _T("(-3)^2"),9, true); - iStat += EqnTest( _T("-(-2^2)"),4, true); - iStat += EqnTest( _T("3+-3^2"),-6, true); - // The following assumes use of sqr as postfix operator ("§") together - // with a sign operator of low priority: - iStat += EqnTest( _T("-2'"), -4, true); - iStat += EqnTest( _T("-(1+1)'"),-4, true); - iStat += EqnTest( _T("2+-(1+1)'"),-2, true); - iStat += EqnTest( _T("2+-2'"), -2, true); - // This is the classic behaviour of the infix sign operator (here: "$") which is - // now deprecated: - iStat += EqnTest( _T("$2^2"),4, true); - iStat += EqnTest( _T("$(a+b)^2"),9, true); - iStat += EqnTest( _T("($3)^2"),9, true); - iStat += EqnTest( _T("$($2^2)"),-4, true); - iStat += EqnTest( _T("3+$3^2"),12, true); - - // infix operators sharing the first few characters - iStat += EqnTest( _T("~ 123"), 123+2, true); - iStat += EqnTest( _T("~~ 123"), 123+2, true); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - - //--------------------------------------------------------------------------- - int ParserTester::TestPostFix() - { - int iStat = 0; - mu::console() << _T("testing postfix operators..."); - - // application - iStat += EqnTest( _T("3{m}+5"), 5.003, true); - iStat += EqnTest( _T("1000{m}"), 1, true); - iStat += EqnTest( _T("1000 {m}"), 1, true); - iStat += EqnTest( _T("(a){m}"), 1e-3, true); - iStat += EqnTest( _T("a{m}"), 1e-3, true); - iStat += EqnTest( _T("a {m}"), 1e-3, true); - iStat += EqnTest( _T("-(a){m}"), -1e-3, true); - iStat += EqnTest( _T("-2{m}"), -2e-3, true); - iStat += EqnTest( _T("-2 {m}"), -2e-3, true); - iStat += EqnTest( _T("f1of1(1000){m}"), 1, true); - iStat += EqnTest( _T("-f1of1(1000){m}"), -1, true); - iStat += EqnTest( _T("-f1of1(-1000){m}"), 1, true); - iStat += EqnTest( _T("f4of4(0,0,0,1000){m}"), 1, true); - iStat += EqnTest( _T("2+(a*1000){m}"), 3, true); - - // can postfix operators "m" und "meg" be told apart properly? - iStat += EqnTest( _T("2*3000meg+2"), 2*3e9+2, true); - - // some incorrect results - iStat += EqnTest( _T("1000{m}"), 0.1, false); - iStat += EqnTest( _T("(a){m}"), 2, false); - // failure due to syntax checking - iStat += ThrowTest(_T("0x"), ecUNASSIGNABLE_TOKEN); // incomplete hex definition - iStat += ThrowTest(_T("3+"), ecUNEXPECTED_EOF); - iStat += ThrowTest( _T("4 + {m}"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("{m}4"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("sin({m})"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("{m} {m}"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("{m}(8)"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("4,{m}"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("-{m}"), ecUNASSIGNABLE_TOKEN); - iStat += ThrowTest( _T("2(-{m})"), ecUNEXPECTED_PARENS); - iStat += ThrowTest( _T("2({m})"), ecUNEXPECTED_PARENS); - - iStat += ThrowTest( _T("multi*1.0"), ecUNASSIGNABLE_TOKEN); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - //--------------------------------------------------------------------------- - int ParserTester::TestExpression() - { - int iStat = 0; - mu::console() << _T("testing expression samples..."); - - value_type b = 2; - - // Optimization - iStat += EqnTest( _T("2*b*5"), 20, true); - iStat += EqnTest( _T("2*b*5 + 4*b"), 28, true); - iStat += EqnTest( _T("2*a/3"), 2.0/3.0, true); - - // Addition auf cmVARMUL - iStat += EqnTest( _T("3+b"), b+3, true); - iStat += EqnTest( _T("b+3"), b+3, true); - iStat += EqnTest( _T("b*3+2"), b*3+2, true); - iStat += EqnTest( _T("3*b+2"), b*3+2, true); - iStat += EqnTest( _T("2+b*3"), b*3+2, true); - iStat += EqnTest( _T("2+3*b"), b*3+2, true); - iStat += EqnTest( _T("b+3*b"), b+3*b, true); - iStat += EqnTest( _T("3*b+b"), b+3*b, true); - - iStat += EqnTest( _T("2+b*3+b"), 2+b*3+b, true); - iStat += EqnTest( _T("b+2+b*3"), b+2+b*3, true); - - iStat += EqnTest( _T("(2*b+1)*4"), (2*b+1)*4, true); - iStat += EqnTest( _T("4*(2*b+1)"), (2*b+1)*4, true); - - // operator precedences - iStat += EqnTest( _T("1+2-3*4/5^6"), 2.99923, true); - iStat += EqnTest( _T("1^2/3*4-5+6"), 2.33333333, true); - iStat += EqnTest( _T("1+2*3"), 7, true); - iStat += EqnTest( _T("1+2*3"), 7, true); - iStat += EqnTest( _T("(1+2)*3"), 9, true); - iStat += EqnTest( _T("(1+2)*(-3)"), -9, true); - iStat += EqnTest( _T("2/4"), 0.5, true); - - iStat += EqnTest( _T("exp(ln(7))"), 7, true); - iStat += EqnTest( _T("e^ln(7)"), 7, true); - iStat += EqnTest( _T("e^(ln(7))"), 7, true); - iStat += EqnTest( _T("(e^(ln(7)))"), 7, true); - iStat += EqnTest( _T("1-(e^(ln(7)))"), -6, true); - iStat += EqnTest( _T("2*(e^(ln(7)))"), 14, true); - iStat += EqnTest( _T("10^log(5)"), pow(10.0, log(5.0)), true); - iStat += EqnTest( _T("10^log10(5)"), 5, true); - iStat += EqnTest( _T("2^log2(4)"), 4, true); - iStat += EqnTest( _T("-(sin(0)+1)"), -1, true); - iStat += EqnTest( _T("-(2^1.1)"), -2.14354692, true); - - iStat += EqnTest( _T("(cos(2.41)/b)"), -0.372056, true); - iStat += EqnTest( _T("(1*(2*(3*(4*(5*(6*(a+b)))))))"), 2160, true); - iStat += EqnTest( _T("(1*(2*(3*(4*(5*(6*(7*(a+b))))))))"), 15120, true); - iStat += EqnTest( _T("(a/((((b+(((e*(((((pi*((((3.45*((pi+a)+pi))+b)+b)*a))+0.68)+e)+a)/a))+a)+b))+b)*a)-pi))"), 0.00377999, true); - - // long formula (Reference: Matlab) - iStat += EqnTest( - _T("(((-9))-e/(((((((pi-(((-7)+(-3)/4/e))))/(((-5))-2)-((pi+(-0))*(sqrt((e+e))*(-8))*(((-pi)+(-pi)-(-9)*(6*5))") - _T("/(-e)-e))/2)/((((sqrt(2/(-e)+6)-(4-2))+((5/(-2))/(1*(-pi)+3))/8)*pi*((pi/((-2)/(-6)*1*(-1))*(-6)+(-e)))))/") - _T("((e+(-2)+(-e)*((((-3)*9+(-e)))+(-9)))))))-((((e-7+(((5/pi-(3/1+pi)))))/e)/(-5))/(sqrt((((((1+(-7))))+((((-") - _T("e)*(-e)))-8))*(-5)/((-e)))*(-6)-((((((-2)-(-9)-(-e)-1)/3))))/(sqrt((8+(e-((-6))+(9*(-9))))*(((3+2-8))*(7+6") - _T("+(-5))+((0/(-e)*(-pi))+7)))+(((((-e)/e/e)+((-6)*5)*e+(3+(-5)/pi))))+pi))/sqrt((((9))+((((pi))-8+2))+pi))/e") - _T("*4)*((-5)/(((-pi))*(sqrt(e)))))-(((((((-e)*(e)-pi))/4+(pi)*(-9)))))))+(-pi)"), -12.23016549, true); - - // long formula (Reference: Matlab) - iStat += EqnTest( - _T("(atan(sin((((((((((((((((pi/cos((a/((((0.53-b)-pi)*e)/b))))+2.51)+a)-0.54)/0.98)+b)*b)+e)/a)+b)+a)+b)+pi)/e") - _T(")+a)))*2.77)"), -2.16995656, true); - - // long formula (Reference: Matlab) - iStat += EqnTest( _T("1+2-3*4/5^6*(2*(1-5+(3*7^9)*(4+6*7-3)))+12"), -7995810.09926, true); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - - - //--------------------------------------------------------------------------- - int ParserTester::TestIfThenElse() - { - int iStat = 0; - mu::console() << _T("testing if-then-else operator..."); - - // Test error detection - iStat += ThrowTest(_T(":3"), ecUNEXPECTED_CONDITIONAL); - iStat += ThrowTest(_T("? 1 : 2"), ecUNEXPECTED_CONDITIONAL); - iStat += ThrowTest(_T("(ab) ? 10 : 11"), 11, true); - iStat += EqnTest(_T("(ab) ? c : d"), -2, true); - - iStat += EqnTest(_T("(a>b) ? 1 : 0"), 0, true); - iStat += EqnTest(_T("((a>b) ? 1 : 0) ? 1 : 2"), 2, true); - iStat += EqnTest(_T("((a>b) ? 1 : 0) ? 1 : sum((a>b) ? 1 : 2)"), 2, true); - iStat += EqnTest(_T("((a>b) ? 0 : 1) ? 1 : sum((a>b) ? 1 : 2)"), 1, true); - - iStat += EqnTest(_T("sum((a>b) ? 1 : 2)"), 2, true); - iStat += EqnTest(_T("sum((1) ? 1 : 2)"), 1, true); - iStat += EqnTest(_T("sum((a>b) ? 1 : 2, 100)"), 102, true); - iStat += EqnTest(_T("sum((1) ? 1 : 2, 100)"), 101, true); - iStat += EqnTest(_T("sum(3, (a>b) ? 3 : 10)"), 13, true); - iStat += EqnTest(_T("sum(3, (ab) ? 3 : 10)"), 130, true); - iStat += EqnTest(_T("10*sum(3, (ab) ? 3 : 10)*10"), 130, true); - iStat += EqnTest(_T("sum(3, (ab) ? sum(3, (ab) ? sum(3, (ab) ? sum(3, (ab)&&(a2)&&(1<2) ? 128 : 255"), 255, true); - iStat += EqnTest(_T("((1<2)&&(1<2)) ? 128 : 255"), 128, true); - iStat += EqnTest(_T("((1>2)&&(1<2)) ? 128 : 255"), 255, true); - iStat += EqnTest(_T("((ab)&&(a0 ? 1>2 ? 128 : 255 : 1>0 ? 32 : 64"), 255, true); - iStat += EqnTest(_T("1>0 ? 1>2 ? 128 : 255 :(1>0 ? 32 : 64)"), 255, true); - iStat += EqnTest(_T("1>0 ? 1>0 ? 128 : 255 : 1>2 ? 32 : 64"), 128, true); - iStat += EqnTest(_T("1>0 ? 1>0 ? 128 : 255 :(1>2 ? 32 : 64)"), 128, true); - iStat += EqnTest(_T("1>2 ? 1>2 ? 128 : 255 : 1>0 ? 32 : 64"), 32, true); - iStat += EqnTest(_T("1>2 ? 1>0 ? 128 : 255 : 1>2 ? 32 : 64"), 64, true); - iStat += EqnTest(_T("1>0 ? 50 : 1>0 ? 128 : 255"), 50, true); - iStat += EqnTest(_T("1>0 ? 50 : (1>0 ? 128 : 255)"), 50, true); - iStat += EqnTest(_T("1>0 ? 1>0 ? 128 : 255 : 50"), 128, true); - iStat += EqnTest(_T("1>2 ? 1>2 ? 128 : 255 : 1>0 ? 32 : 1>2 ? 64 : 16"), 32, true); - iStat += EqnTest(_T("1>2 ? 1>2 ? 128 : 255 : 1>0 ? 32 :(1>2 ? 64 : 16)"), 32, true); - iStat += EqnTest(_T("1>0 ? 1>2 ? 128 : 255 : 1>0 ? 32 :1>2 ? 64 : 16"), 255, true); - iStat += EqnTest(_T("1>0 ? 1>2 ? 128 : 255 : (1>0 ? 32 :1>2 ? 64 : 16)"), 255, true); - iStat += EqnTest(_T("1 ? 0 ? 128 : 255 : 1 ? 32 : 64"), 255, true); - - // assignment operators - iStat += EqnTest(_T("a= 0 ? 128 : 255, a"), 255, true); - iStat += EqnTest(_T("a=((a>b)&&(a - // this is now legal, for reference see: - // https://sourceforge.net/forum/message.php?msg_id=7411373 - // iStat += ThrowTest( _T("sin=9"), ecUNEXPECTED_OPERATOR); - // - - iStat += ThrowTest( _T("(8)=5"), ecUNEXPECTED_OPERATOR); - iStat += ThrowTest( _T("(a)=5"), ecUNEXPECTED_OPERATOR); - iStat += ThrowTest( _T("a=\"tttt\""), ecOPRT_TYPE_CONFLICT); - - if (iStat==0) - mu::console() << _T("passed") << endl; - else - mu::console() << _T("\n failed with ") << iStat << _T(" errors") << endl; - - return iStat; - } - - - //--------------------------------------------------------------------------- - void ParserTester::AddTest(testfun_type a_pFun) - { - m_vTestFun.push_back(a_pFun); - } - - //--------------------------------------------------------------------------- - void ParserTester::Run() - { - int iStat = 0; - try - { - for (int i=0; i<(int)m_vTestFun.size(); ++i) - iStat += (this->*m_vTestFun[i])(); - } - catch(Parser::exception_type &e) - { - mu::console() << "\n" << e.GetMsg() << endl; - mu::console() << e.GetToken() << endl; - Abort(); - } - catch(std::exception &e) - { - mu::console() << e.what() << endl; - Abort(); - } - catch(...) - { - mu::console() << "Internal error"; - Abort(); - } - - if (iStat==0) - { - mu::console() << "Test passed (" << ParserTester::c_iCount << " expressions)" << endl; - } - else - { - mu::console() << "Test failed with " << iStat - << " errors (" << ParserTester::c_iCount - << " expressions)" << endl; - } - ParserTester::c_iCount = 0; - } - - - //--------------------------------------------------------------------------- - int ParserTester::ThrowTest(const string_type &a_str, int a_iErrc, bool a_bFail) - { - ParserTester::c_iCount++; - - try - { - value_type fVal[] = {1,1,1}; - Parser p; - - p.DefineVar( _T("a"), &fVal[0]); - p.DefineVar( _T("b"), &fVal[1]); - p.DefineVar( _T("c"), &fVal[2]); - p.DefinePostfixOprt( _T("{m}"), Milli); - p.DefinePostfixOprt( _T("m"), Milli); - p.DefineFun( _T("ping"), Ping); - p.DefineFun( _T("valueof"), ValueOf); - p.DefineFun( _T("strfun1"), StrFun1); - p.DefineFun( _T("strfun2"), StrFun2); - p.DefineFun( _T("strfun3"), StrFun3); - p.SetExpr(a_str); - p.Eval(); - } - catch(ParserError &e) - { - // output the formula in case of an failed test - if (a_bFail==false || (a_bFail==true && a_iErrc!=e.GetCode()) ) - { - mu::console() << _T("\n ") - << _T("Expression: ") << a_str - << _T(" Code:") << e.GetCode() << _T("(") << e.GetMsg() << _T(")") - << _T(" Expected:") << a_iErrc; - } - - return (a_iErrc==e.GetCode()) ? 0 : 1; - } - - // if a_bFail==false no exception is expected - bool bRet((a_bFail==false) ? 0 : 1); - if (bRet==1) - { - mu::console() << _T("\n ") - << _T("Expression: ") << a_str - << _T(" did evaluate; Expected error:") << a_iErrc; - } - - return bRet; - } - - //--------------------------------------------------------------------------- - /** \brief Evaluate a tet expression. - - \return 1 in case of a failure, 0 otherwise. - */ - int ParserTester::EqnTestWithVarChange(const string_type &a_str, - double a_fVar1, - double a_fRes1, - double a_fVar2, - double a_fRes2) - { - ParserTester::c_iCount++; - - try - { - value_type fVal[2] = {-999, -999 }; // should be equal - - Parser p; - value_type var = 0; - - // variable - p.DefineVar( _T("a"), &var); - p.SetExpr(a_str); - - var = a_fVar1; - fVal[0] = p.Eval(); - - var = a_fVar2; - fVal[1] = p.Eval(); - - if ( fabs(a_fRes1-fVal[0]) > 0.0000000001) - throw std::runtime_error("incorrect result (first pass)"); - - if ( fabs(a_fRes2-fVal[1]) > 0.0000000001) - throw std::runtime_error("incorrect result (second pass)"); - } - catch(Parser::exception_type &e) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (") << e.GetMsg() << _T(")"); - return 1; - } - catch(std::exception &e) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (") << e.what() << _T(")"); - return 1; // always return a failure since this exception is not expected - } - catch(...) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (unexpected exception)"); - return 1; // exceptions other than ParserException are not allowed - } - - return 0; - } - - //--------------------------------------------------------------------------- - /** \brief Evaluate a tet expression. - - \return 1 in case of a failure, 0 otherwise. - */ - int ParserTester::EqnTest(const string_type &a_str, double a_fRes, bool a_fPass) - { - ParserTester::c_iCount++; - int iRet(0); - value_type fVal[5] = {-999, -998, -997, -996, -995}; // initially should be different - - try - { - std::auto_ptr p1; - Parser p2, p3; // three parser objects - // they will be used for testing copy and assignment operators - // p1 is a pointer since i'm going to delete it in order to test if - // parsers after copy construction still refer to members of it. - // !! If this is the case this function will crash !! - - p1.reset(new mu::Parser()); - // Add constants - p1->DefineConst( _T("pi"), (value_type)PARSER_CONST_PI); - p1->DefineConst( _T("e"), (value_type)PARSER_CONST_E); - p1->DefineConst( _T("const"), 1); - p1->DefineConst( _T("const1"), 2); - p1->DefineConst( _T("const2"), 3); - // string constants - p1->DefineStrConst( _T("str1"), _T("1.11")); - p1->DefineStrConst( _T("str2"), _T("2.22")); - // variables - value_type vVarVal[] = { 1, 2, 3, -2}; - p1->DefineVar( _T("a"), &vVarVal[0]); - p1->DefineVar( _T("aa"), &vVarVal[1]); - p1->DefineVar( _T("b"), &vVarVal[1]); - p1->DefineVar( _T("c"), &vVarVal[2]); - p1->DefineVar( _T("d"), &vVarVal[3]); - - // custom value ident functions - p1->AddValIdent(&ParserTester::IsHexVal); - - // functions - p1->DefineFun( _T("ping"), Ping); - p1->DefineFun( _T("f1of1"), f1of1); // one parameter - p1->DefineFun( _T("f1of2"), f1of2); // two parameter - p1->DefineFun( _T("f2of2"), f2of2); - p1->DefineFun( _T("f1of3"), f1of3); // three parameter - p1->DefineFun( _T("f2of3"), f2of3); - p1->DefineFun( _T("f3of3"), f3of3); - p1->DefineFun( _T("f1of4"), f1of4); // four parameter - p1->DefineFun( _T("f2of4"), f2of4); - p1->DefineFun( _T("f3of4"), f3of4); - p1->DefineFun( _T("f4of4"), f4of4); - p1->DefineFun( _T("f1of5"), f1of5); // five parameter - p1->DefineFun( _T("f2of5"), f2of5); - p1->DefineFun( _T("f3of5"), f3of5); - p1->DefineFun( _T("f4of5"), f4of5); - p1->DefineFun( _T("f5of5"), f5of5); - - // binary operators - p1->DefineOprt( _T("add"), add, 0); - p1->DefineOprt( _T("++"), add, 0); - p1->DefineOprt( _T("&"), land, prLAND); - - // sample functions - p1->DefineFun( _T("min"), Min); - p1->DefineFun( _T("max"), Max); - p1->DefineFun( _T("sum"), Sum); - p1->DefineFun( _T("valueof"), ValueOf); - p1->DefineFun( _T("atof"), StrToFloat); - p1->DefineFun( _T("strfun1"), StrFun1); - p1->DefineFun( _T("strfun2"), StrFun2); - p1->DefineFun( _T("strfun3"), StrFun3); - p1->DefineFun( _T("lastArg"), LastArg); - p1->DefineFun( _T("firstArg"), FirstArg); - p1->DefineFun( _T("order"), FirstArg); - - // infix / postfix operator - // Note: Identifiers used here do not have any meaning - // they are mere placeholders to test certain features. - p1->DefineInfixOprt( _T("$"), sign, prPOW+1); // sign with high priority - p1->DefineInfixOprt( _T("~"), plus2); // high priority - p1->DefineInfixOprt( _T("~~"), plus2); - p1->DefinePostfixOprt( _T("{m}"), Milli); - p1->DefinePostfixOprt( _T("{M}"), Mega); - p1->DefinePostfixOprt( _T("m"), Milli); - p1->DefinePostfixOprt( _T("meg"), Mega); - p1->DefinePostfixOprt( _T("#"), times3); - p1->DefinePostfixOprt( _T("'"), sqr); - p1->SetExpr(a_str); - - // Test bytecode integrity - // String parsing and bytecode parsing must yield the same result - fVal[0] = p1->Eval(); // result from stringparsing - fVal[1] = p1->Eval(); // result from bytecode - if (fVal[0]!=fVal[1]) - throw Parser::exception_type( _T("Bytecode / string parsing mismatch.") ); - - // Test copy and assignment operators - try - { - // Test copy constructor - std::vector vParser; - vParser.push_back(*(p1.get())); - mu::Parser p2 = vParser[0]; // take parser from vector - - // destroy the originals from p2 - vParser.clear(); // delete the vector - p1.reset(0); - - fVal[2] = p2.Eval(); - - // Test assignment operator - // additionally disable Optimizer this time - mu::Parser p3; - p3 = p2; - p3.EnableOptimizer(false); - fVal[3] = p3.Eval(); - - // Test Eval function for multiple return values - // use p2 since it has the optimizer enabled! - int nNum; - value_type *v = p2.Eval(nNum); - fVal[4] = v[nNum-1]; - } - catch(std::exception &e) - { - mu::console() << _T("\n ") << e.what() << _T("\n"); - } - - // limited floating point accuracy requires the following test - bool bCloseEnough(true); - for (unsigned i=0; i::has_infinity) - #pragma warning(pop) - { - bCloseEnough &= (fabs(fVal[i]) != numeric_limits::infinity()); - } - } - - iRet = ((bCloseEnough && a_fPass) || (!bCloseEnough && !a_fPass)) ? 0 : 1; - - - if (iRet==1) - { - mu::console() << _T("\n fail: ") << a_str.c_str() - << _T(" (incorrect result; expected: ") << a_fRes - << _T(" ;calculated: ") << fVal[0] << _T(",") - << fVal[1] << _T(",") - << fVal[2] << _T(",") - << fVal[3] << _T(",") - << fVal[4] << _T(")."); - } - } - catch(Parser::exception_type &e) - { - if (a_fPass) - { - if (fVal[0]!=fVal[2] && fVal[0]!=-999 && fVal[1]!=-998) - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (copy construction)"); - else - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (") << e.GetMsg() << _T(")"); - return 1; - } - } - catch(std::exception &e) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (") << e.what() << _T(")"); - return 1; // always return a failure since this exception is not expected - } - catch(...) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (unexpected exception)"); - return 1; // exceptions other than ParserException are not allowed - } - - return iRet; - } - - //--------------------------------------------------------------------------- - int ParserTester::EqnTestInt(const string_type &a_str, double a_fRes, bool a_fPass) - { - ParserTester::c_iCount++; - - value_type vVarVal[] = {1, 2, 3}; // variable values - int iRet(0); - - try - { - value_type fVal[2] = {-99, -999}; // results: initially should be different - ParserInt p; - p.DefineConst( _T("const1"), 1); - p.DefineConst( _T("const2"), 2); - p.DefineVar( _T("a"), &vVarVal[0]); - p.DefineVar( _T("b"), &vVarVal[1]); - p.DefineVar( _T("c"), &vVarVal[2]); - - p.SetExpr(a_str); - fVal[0] = p.Eval(); // result from stringparsing - fVal[1] = p.Eval(); // result from bytecode - - if (fVal[0]!=fVal[1]) - throw Parser::exception_type( _T("Bytecode corrupt.") ); - - iRet = ( (a_fRes==fVal[0] && a_fPass) || - (a_fRes!=fVal[0] && !a_fPass) ) ? 0 : 1; - if (iRet==1) - { - mu::console() << _T("\n fail: ") << a_str.c_str() - << _T(" (incorrect result; expected: ") << a_fRes - << _T(" ;calculated: ") << fVal[0]<< _T(")."); - } - } - catch(Parser::exception_type &e) - { - if (a_fPass) - { - mu::console() << _T("\n fail: ") << e.GetExpr() << _T(" : ") << e.GetMsg(); - iRet = 1; - } - } - catch(...) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (unexpected exception)"); - iRet = 1; // exceptions other than ParserException are not allowed - } - - return iRet; - } - - //--------------------------------------------------------------------------- - /** \brief Test an expression in Bulk Mode. */ - int ParserTester::EqnTestBulk(const string_type &a_str, double a_fRes[4], bool a_fPass) - { - ParserTester::c_iCount++; - - // Define Bulk Variables - int nBulkSize = 4; - value_type vVariableA[] = { 1, 2, 3, 4 }; // variable values - value_type vVariableB[] = { 2, 2, 2, 2 }; // variable values - value_type vVariableC[] = { 3, 3, 3, 3 }; // variable values - value_type vResults[] = { 0, 0, 0, 0 }; // variable values - int iRet(0); - - try - { - Parser p; - p.DefineConst(_T("const1"), 1); - p.DefineConst(_T("const2"), 2); - p.DefineVar(_T("a"), vVariableA); - p.DefineVar(_T("b"), vVariableB); - p.DefineVar(_T("c"), vVariableC); - - p.SetExpr(a_str); - p.Eval(vResults, nBulkSize); - - bool bCloseEnough(true); - for (int i = 0; i < nBulkSize; ++i) - { - bCloseEnough &= (fabs(a_fRes[i] - vResults[i]) <= fabs(a_fRes[i] * 0.00001)); - } - - iRet = ((bCloseEnough && a_fPass) || (!bCloseEnough && !a_fPass)) ? 0 : 1; - if (iRet == 1) - { - mu::console() << _T("\n fail: ") << a_str.c_str() - << _T(" (incorrect result; expected: {") << a_fRes[0] << _T(",") << a_fRes[1] << _T(",") << a_fRes[2] << _T(",") << a_fRes[3] << _T("}") - << _T(" ;calculated: ") << vResults[0] << _T(",") << vResults[1] << _T(",") << vResults[2] << _T(",") << vResults[3] << _T("}"); - } - } - catch (Parser::exception_type &e) - { - if (a_fPass) - { - mu::console() << _T("\n fail: ") << e.GetExpr() << _T(" : ") << e.GetMsg(); - iRet = 1; - } - } - catch (...) - { - mu::console() << _T("\n fail: ") << a_str.c_str() << _T(" (unexpected exception)"); - iRet = 1; // exceptions other than ParserException are not allowed - } - - return iRet; - } - - //--------------------------------------------------------------------------- - /** \brief Internal error in test class Test is going to be aborted. */ - void ParserTester::Abort() const - { - mu::console() << _T("Test failed (internal error in test class)") << endl; - while (!getchar()); - exit(-1); - } - } // namespace test -} // namespace mu diff --git a/src/external/muparser_v225/src/muParserTokenReader.cpp b/src/external/muparser_v225/src/muParserTokenReader.cpp deleted file mode 100644 index d80cf9b20..000000000 --- a/src/external/muparser_v225/src/muParserTokenReader.cpp +++ /dev/null @@ -1,958 +0,0 @@ -/* - __________ - _____ __ __\______ \_____ _______ ______ ____ _______ - / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \ - | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/ - |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__| - \/ \/ \/ \/ - Copyright (C) 2013 Ingo Berg - - Permission is hereby granted, free of charge, to any person obtaining a copy of this - software and associated documentation files (the "Software"), to deal in the Software - without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -#include -#include -#include -#include -#include -#include - -#include "muParserTokenReader.h" -#include "muParserBase.h" - -/** \file - \brief This file contains the parser token reader implementation. -*/ - - -namespace mu -{ - - // Forward declaration - class ParserBase; - - //--------------------------------------------------------------------------- - /** \brief Copy constructor. - - \sa Assign - \throw nothrow - */ - ParserTokenReader::ParserTokenReader(const ParserTokenReader &a_Reader) - { - Assign(a_Reader); - } - - //--------------------------------------------------------------------------- - /** \brief Assignment operator. - - Self assignment will be suppressed otherwise #Assign is called. - - \param a_Reader Object to copy to this token reader. - \throw nothrow - */ - ParserTokenReader& ParserTokenReader::operator=(const ParserTokenReader &a_Reader) - { - if (&a_Reader!=this) - Assign(a_Reader); - - return *this; - } - - //--------------------------------------------------------------------------- - /** \brief Assign state of a token reader to this token reader. - - \param a_Reader Object from which the state should be copied. - \throw nothrow - */ - void ParserTokenReader::Assign(const ParserTokenReader &a_Reader) - { - m_pParser = a_Reader.m_pParser; - m_strFormula = a_Reader.m_strFormula; - m_iPos = a_Reader.m_iPos; - m_iSynFlags = a_Reader.m_iSynFlags; - - m_UsedVar = a_Reader.m_UsedVar; - m_pFunDef = a_Reader.m_pFunDef; - m_pConstDef = a_Reader.m_pConstDef; - m_pVarDef = a_Reader.m_pVarDef; - m_pStrVarDef = a_Reader.m_pStrVarDef; - m_pPostOprtDef = a_Reader.m_pPostOprtDef; - m_pInfixOprtDef = a_Reader.m_pInfixOprtDef; - m_pOprtDef = a_Reader.m_pOprtDef; - m_bIgnoreUndefVar = a_Reader.m_bIgnoreUndefVar; - m_vIdentFun = a_Reader.m_vIdentFun; - m_pFactory = a_Reader.m_pFactory; - m_pFactoryData = a_Reader.m_pFactoryData; - m_iBrackets = a_Reader.m_iBrackets; - m_cArgSep = a_Reader.m_cArgSep; - m_fZero = a_Reader.m_fZero; - m_lastTok = a_Reader.m_lastTok; - } - - //--------------------------------------------------------------------------- - /** \brief Constructor. - - Create a Token reader and bind it to a parser object. - - \pre [assert] a_pParser may not be NULL - \post #m_pParser==a_pParser - \param a_pParent Parent parser object of the token reader. - */ - ParserTokenReader::ParserTokenReader(ParserBase *a_pParent) - :m_pParser(a_pParent) - ,m_strFormula() - ,m_iPos(0) - ,m_iSynFlags(0) - ,m_bIgnoreUndefVar(false) - ,m_pFunDef(NULL) - ,m_pPostOprtDef(NULL) - ,m_pInfixOprtDef(NULL) - ,m_pOprtDef(NULL) - ,m_pConstDef(NULL) - ,m_pStrVarDef(NULL) - ,m_pVarDef(NULL) - ,m_pFactory(NULL) - ,m_pFactoryData(NULL) - ,m_vIdentFun() - ,m_UsedVar() - ,m_fZero(0) - ,m_iBrackets(0) - ,m_lastTok() - ,m_cArgSep(',') - { - assert(m_pParser); - SetParent(m_pParser); - } - - //--------------------------------------------------------------------------- - /** \brief Create instance of a ParserTokenReader identical with this - and return its pointer. - - This is a factory method the calling function must take care of the object destruction. - - \return A new ParserTokenReader object. - \throw nothrow - */ - ParserTokenReader* ParserTokenReader::Clone(ParserBase *a_pParent) const - { - std::auto_ptr ptr(new ParserTokenReader(*this)); - ptr->SetParent(a_pParent); - return ptr.release(); - } - - //--------------------------------------------------------------------------- - ParserTokenReader::token_type& ParserTokenReader::SaveBeforeReturn(const token_type &tok) - { - m_lastTok = tok; - return m_lastTok; - } - - //--------------------------------------------------------------------------- - void ParserTokenReader::AddValIdent(identfun_type a_pCallback) - { - // Use push_front is used to give user defined callbacks a higher priority than - // the built in ones. Otherwise reading hex numbers would not work - // since the "0" in "0xff" would always be read first making parsing of - // the rest impossible. - // reference: - // http://sourceforge.net/projects/muparser/forums/forum/462843/topic/4824956 - m_vIdentFun.push_front(a_pCallback); - } - - //--------------------------------------------------------------------------- - void ParserTokenReader::SetVarCreator(facfun_type a_pFactory, void *pUserData) - { - m_pFactory = a_pFactory; - m_pFactoryData = pUserData; - } - - //--------------------------------------------------------------------------- - /** \brief Return the current position of the token reader in the formula string. - - \return #m_iPos - \throw nothrow - */ - int ParserTokenReader::GetPos() const - { - return m_iPos; - } - - //--------------------------------------------------------------------------- - /** \brief Return a reference to the formula. - - \return #m_strFormula - \throw nothrow - */ - const string_type& ParserTokenReader::GetExpr() const - { - return m_strFormula; - } - - //--------------------------------------------------------------------------- - /** \brief Return a map containing the used variables only. */ - varmap_type& ParserTokenReader::GetUsedVar() - { - return m_UsedVar; - } - - //--------------------------------------------------------------------------- - /** \brief Initialize the token Reader. - - Sets the formula position index to zero and set Syntax flags to default for initial formula parsing. - \pre [assert] triggered if a_szFormula==0 - */ - void ParserTokenReader::SetFormula(const string_type &a_strFormula) - { - m_strFormula = a_strFormula; - ReInit(); - } - - //--------------------------------------------------------------------------- - /** \brief Set Flag that controls behaviour in case of undefined variables being found. - - If true, the parser does not throw an exception if an undefined variable is found. - otherwise it does. This variable is used internally only! - It suppresses a "undefined variable" exception in GetUsedVar(). - Those function should return a complete list of variables including - those the are not defined by the time of it's call. - */ - void ParserTokenReader::IgnoreUndefVar(bool bIgnore) - { - m_bIgnoreUndefVar = bIgnore; - } - - //--------------------------------------------------------------------------- - /** \brief Reset the token reader to the start of the formula. - - The syntax flags will be reset to a value appropriate for the - start of a formula. - \post #m_iPos==0, #m_iSynFlags = noOPT | noBC | noPOSTOP | noSTR - \throw nothrow - \sa ESynCodes - */ - void ParserTokenReader::ReInit() - { - m_iPos = 0; - m_iSynFlags = sfSTART_OF_LINE; - m_iBrackets = 0; - m_UsedVar.clear(); - m_lastTok = token_type(); - } - - //--------------------------------------------------------------------------- - /** \brief Read the next token from the string. */ - ParserTokenReader::token_type ParserTokenReader::ReadNextToken() - { - assert(m_pParser); - - const char_type *szFormula = m_strFormula.c_str(); - token_type tok; - - // Ignore all non printable characters when reading the expression - while (szFormula[m_iPos]>0 && szFormula[m_iPos]<=0x20) - ++m_iPos; - - if ( IsEOF(tok) ) return SaveBeforeReturn(tok); // Check for end of formula - if ( IsOprt(tok) ) return SaveBeforeReturn(tok); // Check for user defined binary operator - if ( IsFunTok(tok) ) return SaveBeforeReturn(tok); // Check for function token - if ( IsBuiltIn(tok) ) return SaveBeforeReturn(tok); // Check built in operators / tokens - if ( IsArgSep(tok) ) return SaveBeforeReturn(tok); // Check for function argument separators - if ( IsValTok(tok) ) return SaveBeforeReturn(tok); // Check for values / constant tokens - if ( IsVarTok(tok) ) return SaveBeforeReturn(tok); // Check for variable tokens - if ( IsStrVarTok(tok) ) return SaveBeforeReturn(tok); // Check for string variables - if ( IsString(tok) ) return SaveBeforeReturn(tok); // Check for String tokens - if ( IsInfixOpTok(tok) ) return SaveBeforeReturn(tok); // Check for unary operators - if ( IsPostOpTok(tok) ) return SaveBeforeReturn(tok); // Check for unary operators - - // Check String for undefined variable token. Done only if a - // flag is set indicating to ignore undefined variables. - // This is a way to conditionally avoid an error if - // undefined variables occur. - // (The GetUsedVar function must suppress the error for - // undefined variables in order to collect all variable - // names including the undefined ones.) - if ( (m_bIgnoreUndefVar || m_pFactory) && IsUndefVarTok(tok) ) - return SaveBeforeReturn(tok); - - // Check for unknown token - // - // !!! From this point on there is no exit without an exception possible... - // - string_type strTok; - int iEnd = ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos); - if (iEnd!=m_iPos) - Error(ecUNASSIGNABLE_TOKEN, m_iPos, strTok); - - Error(ecUNASSIGNABLE_TOKEN, m_iPos, m_strFormula.substr(m_iPos)); - return token_type(); // never reached - } - - //--------------------------------------------------------------------------- - void ParserTokenReader::SetParent(ParserBase *a_pParent) - { - m_pParser = a_pParent; - m_pFunDef = &a_pParent->m_FunDef; - m_pOprtDef = &a_pParent->m_OprtDef; - m_pInfixOprtDef = &a_pParent->m_InfixOprtDef; - m_pPostOprtDef = &a_pParent->m_PostOprtDef; - m_pVarDef = &a_pParent->m_VarDef; - m_pStrVarDef = &a_pParent->m_StrVarDef; - m_pConstDef = &a_pParent->m_ConstDef; - } - - //--------------------------------------------------------------------------- - /** \brief Extract all characters that belong to a certain charset. - - \param a_szCharSet [in] Const char array of the characters allowed in the token. - \param a_strTok [out] The string that consists entirely of characters listed in a_szCharSet. - \param a_iPos [in] Position in the string from where to start reading. - \return The Position of the first character not listed in a_szCharSet. - \throw nothrow - */ - int ParserTokenReader::ExtractToken(const char_type *a_szCharSet, - string_type &a_sTok, - int a_iPos) const - { - int iEnd = (int)m_strFormula.find_first_not_of(a_szCharSet, a_iPos); - - if (iEnd==(int)string_type::npos) - iEnd = (int)m_strFormula.length(); - - // Assign token string if there was something found - if (a_iPos!=iEnd) - a_sTok = string_type( m_strFormula.begin()+a_iPos, m_strFormula.begin()+iEnd); - - return iEnd; - } - - //--------------------------------------------------------------------------- - /** \brief Check Expression for the presence of a binary operator token. - - Userdefined binary operator "++" gives inconsistent parsing result for - the equations "a++b" and "a ++ b" if alphabetic characters are allowed - in operator tokens. To avoid this this function checks specifically - for operator tokens. - */ - int ParserTokenReader::ExtractOperatorToken(string_type &a_sTok, - int a_iPos) const - { - // Changed as per Issue 6: https://code.google.com/p/muparser/issues/detail?id=6 - int iEnd = (int)m_strFormula.find_first_not_of(m_pParser->ValidOprtChars(), a_iPos); - if (iEnd==(int)string_type::npos) - iEnd = (int)m_strFormula.length(); - - // Assign token string if there was something found - if (a_iPos!=iEnd) - { - a_sTok = string_type( m_strFormula.begin() + a_iPos, m_strFormula.begin() + iEnd); - return iEnd; - } - else - { - // There is still the chance of having to deal with an operator consisting exclusively - // of alphabetic characters. - return ExtractToken(MUP_CHARS, a_sTok, a_iPos); - } - } - - //--------------------------------------------------------------------------- - /** \brief Check if a built in operator or other token can be found - \param a_Tok [out] Operator token if one is found. This can either be a binary operator or an infix operator token. - \return true if an operator token has been found. - */ - bool ParserTokenReader::IsBuiltIn(token_type &a_Tok) - { - const char_type **const pOprtDef = m_pParser->GetOprtDef(), - *const szFormula = m_strFormula.c_str(); - - // Compare token with function and operator strings - // check string for operator/function - for (int i=0; pOprtDef[i]; i++) - { - std::size_t len( std::char_traits::length(pOprtDef[i]) ); - if ( string_type(pOprtDef[i]) == string_type(szFormula + m_iPos, szFormula + m_iPos + len) ) - { - switch(i) - { - //case cmAND: - //case cmOR: - //case cmXOR: - case cmLAND: - case cmLOR: - case cmLT: - case cmGT: - case cmLE: - case cmGE: - case cmNEQ: - case cmEQ: - case cmADD: - case cmSUB: - case cmMUL: - case cmDIV: - case cmPOW: - case cmASSIGN: - //if (len!=sTok.length()) - // continue; - - // The assignment operator need special treatment - if (i==cmASSIGN && m_iSynFlags & noASSIGN) - Error(ecUNEXPECTED_OPERATOR, m_iPos, pOprtDef[i]); - - if (!m_pParser->HasBuiltInOprt()) continue; - if (m_iSynFlags & noOPT) - { - // Maybe its an infix operator not an operator - // Both operator types can share characters in - // their identifiers - if ( IsInfixOpTok(a_Tok) ) - return true; - - Error(ecUNEXPECTED_OPERATOR, m_iPos, pOprtDef[i]); - } - - m_iSynFlags = noBC | noOPT | noARG_SEP | noPOSTOP | noASSIGN | noIF | noELSE | noEND; - break; - - case cmBO: - if (m_iSynFlags & noBO) - Error(ecUNEXPECTED_PARENS, m_iPos, pOprtDef[i]); - - if (m_lastTok.GetCode()==cmFUNC) - m_iSynFlags = noOPT | noEND | noARG_SEP | noPOSTOP | noASSIGN | noIF | noELSE; - else - m_iSynFlags = noBC | noOPT | noEND | noARG_SEP | noPOSTOP | noASSIGN| noIF | noELSE; - - ++m_iBrackets; - break; - - case cmBC: - if (m_iSynFlags & noBC) - Error(ecUNEXPECTED_PARENS, m_iPos, pOprtDef[i]); - - m_iSynFlags = noBO | noVAR | noVAL | noFUN | noINFIXOP | noSTR | noASSIGN; - - if (--m_iBrackets<0) - Error(ecUNEXPECTED_PARENS, m_iPos, pOprtDef[i]); - break; - - case cmELSE: - if (m_iSynFlags & noELSE) - Error(ecUNEXPECTED_CONDITIONAL, m_iPos, pOprtDef[i]); - - m_iSynFlags = noBC | noPOSTOP | noEND | noOPT | noIF | noELSE; - break; - - case cmIF: - if (m_iSynFlags & noIF) - Error(ecUNEXPECTED_CONDITIONAL, m_iPos, pOprtDef[i]); - - m_iSynFlags = noBC | noPOSTOP | noEND | noOPT | noIF | noELSE; - break; - - default: // The operator is listed in c_DefaultOprt, but not here. This is a bad thing... - Error(ecINTERNAL_ERROR); - } // switch operator id - - m_iPos += (int)len; - a_Tok.Set( (ECmdCode)i, pOprtDef[i] ); - return true; - } // if operator string found - } // end of for all operator strings - - return false; - } - - //--------------------------------------------------------------------------- - bool ParserTokenReader::IsArgSep(token_type &a_Tok) - { - const char_type* szFormula = m_strFormula.c_str(); - - if (szFormula[m_iPos]==m_cArgSep) - { - // copy the separator into null terminated string - char_type szSep[2]; - szSep[0] = m_cArgSep; - szSep[1] = 0; - - if (m_iSynFlags & noARG_SEP) - Error(ecUNEXPECTED_ARG_SEP, m_iPos, szSep); - - m_iSynFlags = noBC | noOPT | noEND | noARG_SEP | noPOSTOP | noASSIGN; - m_iPos++; - a_Tok.Set(cmARG_SEP, szSep); - return true; - } - - return false; - } - - //--------------------------------------------------------------------------- - /** \brief Check for End of Formula. - - \return true if an end of formula is found false otherwise. - \param a_Tok [out] If an eof is found the corresponding token will be stored there. - \throw nothrow - \sa IsOprt, IsFunTok, IsStrFunTok, IsValTok, IsVarTok, IsString, IsInfixOpTok, IsPostOpTok - */ - bool ParserTokenReader::IsEOF(token_type &a_Tok) - { - const char_type* szFormula = m_strFormula.c_str(); - - // check for EOF - if ( !szFormula[m_iPos] /*|| szFormula[m_iPos] == '\n'*/) - { - if ( m_iSynFlags & noEND ) - Error(ecUNEXPECTED_EOF, m_iPos); - - if (m_iBrackets>0) - Error(ecMISSING_PARENS, m_iPos, _T(")")); - - m_iSynFlags = 0; - a_Tok.Set(cmEND); - return true; - } - - return false; - } - - //--------------------------------------------------------------------------- - /** \brief Check if a string position contains a unary infix operator. - \return true if a function token has been found false otherwise. - */ - bool ParserTokenReader::IsInfixOpTok(token_type &a_Tok) - { - string_type sTok; - int iEnd = ExtractToken(m_pParser->ValidInfixOprtChars(), sTok, m_iPos); - if (iEnd==m_iPos) - return false; - - // iterate over all postfix operator strings - funmap_type::const_reverse_iterator it = m_pInfixOprtDef->rbegin(); - for ( ; it!=m_pInfixOprtDef->rend(); ++it) - { - if (sTok.find(it->first)!=0) - continue; - - a_Tok.Set(it->second, it->first); - m_iPos += (int)it->first.length(); - - if (m_iSynFlags & noINFIXOP) - Error(ecUNEXPECTED_OPERATOR, m_iPos, a_Tok.GetAsString()); - - m_iSynFlags = noPOSTOP | noINFIXOP | noOPT | noBC | noSTR | noASSIGN; - return true; - } - - return false; - -/* - a_Tok.Set(item->second, sTok); - m_iPos = (int)iEnd; - - if (m_iSynFlags & noINFIXOP) - Error(ecUNEXPECTED_OPERATOR, m_iPos, a_Tok.GetAsString()); - - m_iSynFlags = noPOSTOP | noINFIXOP | noOPT | noBC | noSTR | noASSIGN; - return true; -*/ - } - - //--------------------------------------------------------------------------- - /** \brief Check whether the token at a given position is a function token. - \param a_Tok [out] If a value token is found it will be placed here. - \throw ParserException if Syntaxflags do not allow a function at a_iPos - \return true if a function token has been found false otherwise. - \pre [assert] m_pParser!=0 - */ - bool ParserTokenReader::IsFunTok(token_type &a_Tok) - { - string_type strTok; - int iEnd = ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos); - if (iEnd==m_iPos) - return false; - - funmap_type::const_iterator item = m_pFunDef->find(strTok); - if (item==m_pFunDef->end()) - return false; - - // Check if the next sign is an opening bracket - const char_type *szFormula = m_strFormula.c_str(); - if (szFormula[iEnd]!='(') - return false; - - a_Tok.Set(item->second, strTok); - - m_iPos = (int)iEnd; - if (m_iSynFlags & noFUN) - Error(ecUNEXPECTED_FUN, m_iPos-(int)a_Tok.GetAsString().length(), a_Tok.GetAsString()); - - m_iSynFlags = noANY ^ noBO; - return true; - } - - //--------------------------------------------------------------------------- - /** \brief Check if a string position contains a binary operator. - \param a_Tok [out] Operator token if one is found. This can either be a binary operator or an infix operator token. - \return true if an operator token has been found. - */ - bool ParserTokenReader::IsOprt(token_type &a_Tok) - { - const char_type *const szExpr = m_strFormula.c_str(); - string_type strTok; - - int iEnd = ExtractOperatorToken(strTok, m_iPos); - if (iEnd==m_iPos) - return false; - - // Check if the operator is a built in operator, if so ignore it here - const char_type **const pOprtDef = m_pParser->GetOprtDef(); - for (int i=0; m_pParser->HasBuiltInOprt() && pOprtDef[i]; ++i) - { - if (string_type(pOprtDef[i])==strTok) - return false; - } - - // Note: - // All tokens in oprt_bin_maptype are have been sorted by their length - // Long operators must come first! Otherwise short names (like: "add") that - // are part of long token names (like: "add123") will be found instead - // of the long ones. - // Length sorting is done with ascending length so we use a reverse iterator here. - funmap_type::const_reverse_iterator it = m_pOprtDef->rbegin(); - for ( ; it!=m_pOprtDef->rend(); ++it) - { - const string_type &sID = it->first; - if ( sID == string_type(szExpr + m_iPos, szExpr + m_iPos + sID.length()) ) - { - a_Tok.Set(it->second, strTok); - - // operator was found - if (m_iSynFlags & noOPT) - { - // An operator was found but is not expected to occur at - // this position of the formula, maybe it is an infix - // operator, not a binary operator. Both operator types - // can share characters in their identifiers. - if ( IsInfixOpTok(a_Tok) ) - return true; - else - { - // nope, no infix operator - return false; - //Error(ecUNEXPECTED_OPERATOR, m_iPos, a_Tok.GetAsString()); - } - - } - - m_iPos += (int)sID.length(); - m_iSynFlags = noBC | noOPT | noARG_SEP | noPOSTOP | noEND | noASSIGN; - return true; - } - } - - return false; - } - - //--------------------------------------------------------------------------- - /** \brief Check if a string position contains a unary post value operator. */ - bool ParserTokenReader::IsPostOpTok(token_type &a_Tok) - { - // Do not check for postfix operators if they are not allowed at - // the current expression index. - // - // This will fix the bug reported here: - // - // http://sourceforge.net/tracker/index.php?func=detail&aid=3343891&group_id=137191&atid=737979 - // - if (m_iSynFlags & noPOSTOP) - return false; - // - - // Tricky problem with equations like "3m+5": - // m is a postfix operator, + is a valid sign for postfix operators and - // for binary operators parser detects "m+" as operator string and - // finds no matching postfix operator. - // - // This is a special case so this routine slightly differs from the other - // token readers. - - // Test if there could be a postfix operator - string_type sTok; - int iEnd = ExtractToken(m_pParser->ValidOprtChars(), sTok, m_iPos); - if (iEnd==m_iPos) - return false; - - // iterate over all postfix operator strings - funmap_type::const_reverse_iterator it = m_pPostOprtDef->rbegin(); - for ( ; it!=m_pPostOprtDef->rend(); ++it) - { - if (sTok.find(it->first)!=0) - continue; - - a_Tok.Set(it->second, sTok); - m_iPos += (int)it->first.length(); - - m_iSynFlags = noVAL | noVAR | noFUN | noBO | noPOSTOP | noSTR | noASSIGN; - return true; - } - - return false; - } - - //--------------------------------------------------------------------------- - /** \brief Check whether the token at a given position is a value token. - - Value tokens are either values or constants. - - \param a_Tok [out] If a value token is found it will be placed here. - \return true if a value token has been found. - */ - bool ParserTokenReader::IsValTok(token_type &a_Tok) - { - assert(m_pConstDef); - assert(m_pParser); - - string_type strTok; - value_type fVal(0); - int iEnd(0); - - // 2.) Check for user defined constant - // Read everything that could be a constant name - iEnd = ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos); - if (iEnd!=m_iPos) - { - valmap_type::const_iterator item = m_pConstDef->find(strTok); - if (item!=m_pConstDef->end()) - { - m_iPos = iEnd; - a_Tok.SetVal(item->second, strTok); - - if (m_iSynFlags & noVAL) - Error(ecUNEXPECTED_VAL, m_iPos - (int)strTok.length(), strTok); - - m_iSynFlags = noVAL | noVAR | noFUN | noBO | noINFIXOP | noSTR | noASSIGN; - return true; - } - } - - // 3.call the value recognition functions provided by the user - // Call user defined value recognition functions - std::list::const_iterator item = m_vIdentFun.begin(); - for (item = m_vIdentFun.begin(); item!=m_vIdentFun.end(); ++item) - { - int iStart = m_iPos; - if ( (*item)(m_strFormula.c_str() + m_iPos, &m_iPos, &fVal)==1 ) - { - // 2013-11-27 Issue 2: https://code.google.com/p/muparser/issues/detail?id=2 - strTok.assign(m_strFormula.c_str(), iStart, m_iPos-iStart); - - if (m_iSynFlags & noVAL) - Error(ecUNEXPECTED_VAL, m_iPos - (int)strTok.length(), strTok); - - a_Tok.SetVal(fVal, strTok); - m_iSynFlags = noVAL | noVAR | noFUN | noBO | noINFIXOP | noSTR | noASSIGN; - return true; - } - } - - return false; - } - - //--------------------------------------------------------------------------- - /** \brief Check whether a token at a given position is a variable token. - \param a_Tok [out] If a variable token has been found it will be placed here. - \return true if a variable token has been found. - */ - bool ParserTokenReader::IsVarTok(token_type &a_Tok) - { - if (m_pVarDef->empty()) - return false; - - string_type strTok; - int iEnd = ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos); - if (iEnd==m_iPos) - return false; - - varmap_type::const_iterator item = m_pVarDef->find(strTok); - if (item==m_pVarDef->end()) - return false; - - if (m_iSynFlags & noVAR) - Error(ecUNEXPECTED_VAR, m_iPos, strTok); - - m_pParser->OnDetectVar(&m_strFormula, m_iPos, iEnd); - - m_iPos = iEnd; - a_Tok.SetVar(item->second, strTok); - m_UsedVar[item->first] = item->second; // Add variable to used-var-list - - m_iSynFlags = noVAL | noVAR | noFUN | noBO | noINFIXOP | noSTR; - -// Zur Info hier die SynFlags von IsVal(): -// m_iSynFlags = noVAL | noVAR | noFUN | noBO | noINFIXOP | noSTR | noASSIGN; - return true; - } - - //--------------------------------------------------------------------------- - bool ParserTokenReader::IsStrVarTok(token_type &a_Tok) - { - if (!m_pStrVarDef || m_pStrVarDef->empty()) - return false; - - string_type strTok; - int iEnd = ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos); - if (iEnd==m_iPos) - return false; - - strmap_type::const_iterator item = m_pStrVarDef->find(strTok); - if (item==m_pStrVarDef->end()) - return false; - - if (m_iSynFlags & noSTR) - Error(ecUNEXPECTED_VAR, m_iPos, strTok); - - m_iPos = iEnd; - if (!m_pParser->m_vStringVarBuf.size()) - Error(ecINTERNAL_ERROR); - - a_Tok.SetString(m_pParser->m_vStringVarBuf[item->second], m_pParser->m_vStringVarBuf.size() ); - - m_iSynFlags = noANY ^ ( noBC | noOPT | noEND | noARG_SEP); - return true; - } - - - //--------------------------------------------------------------------------- - /** \brief Check whether a token at a given position is an undefined variable. - - \param a_Tok [out] If a variable tom_pParser->m_vStringBufken has been found it will be placed here. - \return true if a variable token has been found. - \throw nothrow - */ - bool ParserTokenReader::IsUndefVarTok(token_type &a_Tok) - { - string_type strTok; - int iEnd( ExtractToken(m_pParser->ValidNameChars(), strTok, m_iPos) ); - if ( iEnd==m_iPos ) - return false; - - if (m_iSynFlags & noVAR) - { - // 20061021 added token string strTok instead of a_Tok.GetAsString() as the - // token identifier. - // related bug report: - // http://sourceforge.net/tracker/index.php?func=detail&aid=1578779&group_id=137191&atid=737979 - Error(ecUNEXPECTED_VAR, m_iPos - (int)a_Tok.GetAsString().length(), strTok); - } - - // If a factory is available implicitely create new variables - if (m_pFactory) - { - value_type *fVar = m_pFactory(strTok.c_str(), m_pFactoryData); - a_Tok.SetVar(fVar, strTok ); - - // Do not use m_pParser->DefineVar( strTok, fVar ); - // in order to define the new variable, it will clear the - // m_UsedVar array which will kill previously defined variables - // from the list - // This is safe because the new variable can never override an existing one - // because they are checked first! - (*m_pVarDef)[strTok] = fVar; - m_UsedVar[strTok] = fVar; // Add variable to used-var-list - } - else - { - a_Tok.SetVar((value_type*)&m_fZero, strTok); - m_UsedVar[strTok] = 0; // Add variable to used-var-list - } - - m_iPos = iEnd; - - // Call the variable factory in order to let it define a new parser variable - m_iSynFlags = noVAL | noVAR | noFUN | noBO | noPOSTOP | noINFIXOP | noSTR; - return true; - } - - - //--------------------------------------------------------------------------- - /** \brief Check whether a token at a given position is a string. - \param a_Tok [out] If a variable token has been found it will be placed here. - \return true if a string token has been found. - \sa IsOprt, IsFunTok, IsStrFunTok, IsValTok, IsVarTok, IsEOF, IsInfixOpTok, IsPostOpTok - \throw nothrow - */ - bool ParserTokenReader::IsString(token_type &a_Tok) - { - if (m_strFormula[m_iPos]!='"') - return false; - - string_type strBuf(&m_strFormula[m_iPos+1]); - std::size_t iEnd(0), iSkip(0); - - // parser over escaped '\"' end replace them with '"' - for(iEnd=(int)strBuf.find( _T("\"") ); iEnd!=0 && iEnd!=string_type::npos; iEnd=(int)strBuf.find( _T("\""), iEnd)) - { - if (strBuf[iEnd-1]!='\\') break; - strBuf.replace(iEnd-1, 2, _T("\"") ); - iSkip++; - } - - if (iEnd==string_type::npos) - Error(ecUNTERMINATED_STRING, m_iPos, _T("\"") ); - - string_type strTok(strBuf.begin(), strBuf.begin()+iEnd); - - if (m_iSynFlags & noSTR) - Error(ecUNEXPECTED_STR, m_iPos, strTok); - - m_pParser->m_vStringBuf.push_back(strTok); // Store string in internal buffer - a_Tok.SetString(strTok, m_pParser->m_vStringBuf.size()); - - m_iPos += (int)strTok.length() + 2 + (int)iSkip; // +2 wg Anf�hrungszeichen; +iSkip f�r entfernte escape zeichen - m_iSynFlags = noANY ^ ( noARG_SEP | noBC | noOPT | noEND ); - - return true; - } - - //--------------------------------------------------------------------------- - /** \brief Create an error containing the parse error position. - - This function will create an Parser Exception object containing the error text and its position. - - \param a_iErrc [in] The error code of type #EErrorCodes. - \param a_iPos [in] The position where the error was detected. - \param a_strTok [in] The token string representation associated with the error. - \throw ParserException always throws thats the only purpose of this function. - */ - void ParserTokenReader::Error( EErrorCodes a_iErrc, - int a_iPos, - const string_type &a_sTok) const - { - m_pParser->Error(a_iErrc, a_iPos, a_sTok); - } - - //--------------------------------------------------------------------------- - void ParserTokenReader::SetArgSep(char_type cArgSep) - { - m_cArgSep = cArgSep; - } - - //--------------------------------------------------------------------------- - char_type ParserTokenReader::GetArgSep() const - { - return m_cArgSep; - } -} // namespace mu - From 8871898a71474a2e32f9918c2be37c74dbe0874f Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Wed, 2 Nov 2022 12:10:56 +0100 Subject: [PATCH 2/6] build muparser static --- src/external/muparser.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/src/external/muparser.cmake b/src/external/muparser.cmake index 15db415b5..161c55b5e 100644 --- a/src/external/muparser.cmake +++ b/src/external/muparser.cmake @@ -22,6 +22,7 @@ elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER) message(STATUS "- muparser - using downloaded source") + set(BUILD_SHARED_LIBS OFF) set(ENABLE_SAMPLES OFF) set(MESSAGE_QUIET ON) add_subdirectory(${MUPARSER_DIR}) From 83800e5dc2e33bba4216f1aa483cf4c63be376b7 Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Wed, 2 Nov 2022 12:20:37 +0100 Subject: [PATCH 3/6] fix cmake options --- src/external/CMakeLists.txt | 1 - src/external/levmar.cmake | 2 ++ src/external/muparser.cmake | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/external/CMakeLists.txt b/src/external/CMakeLists.txt index 3b3721437..0fc87d487 100644 --- a/src/external/CMakeLists.txt +++ b/src/external/CMakeLists.txt @@ -83,5 +83,4 @@ if ((NOT BUILD_MESHLAB_MINI) AND ALLOW_OPTIONAL_EXTERNAL_MESHLAB_LIBRARIES) # libe57Format - optional, for io_e57 include(${CMAKE_CURRENT_SOURCE_DIR}/e57.cmake) - endif() diff --git a/src/external/levmar.cmake b/src/external/levmar.cmake index 65b11faaf..7b71bd2a2 100644 --- a/src/external/levmar.cmake +++ b/src/external/levmar.cmake @@ -20,6 +20,8 @@ if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR) set(MESSAGE_QUIET ON) add_subdirectory(${LEVMAR_DIR}) unset(MESSAGE_QUIET) + unset(HAVE_LAPACK) + unset(BUILD_DEMO) add_library(external-levmar INTERFACE) target_link_libraries(external-levmar INTERFACE levmar) diff --git a/src/external/muparser.cmake b/src/external/muparser.cmake index 161c55b5e..7c59b0fcc 100644 --- a/src/external/muparser.cmake +++ b/src/external/muparser.cmake @@ -27,6 +27,8 @@ elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER) set(MESSAGE_QUIET ON) add_subdirectory(${MUPARSER_DIR}) unset(MESSAGE_QUIET) + unset(BUILD_SHARED_LIBS) + unset(ENABLE_SAMPLES) add_library(external-muparser INTERFACE) target_link_libraries(external-muparser INTERFACE muparser) From 60bbd64edfbd8fc03c57a8bfc46657caad943b9d Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Wed, 2 Nov 2022 12:28:18 +0100 Subject: [PATCH 4/6] muparser shared --- src/external/muparser.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/external/muparser.cmake b/src/external/muparser.cmake index 7c59b0fcc..3e076ee23 100644 --- a/src/external/muparser.cmake +++ b/src/external/muparser.cmake @@ -22,14 +22,13 @@ elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER) message(STATUS "- muparser - using downloaded source") - set(BUILD_SHARED_LIBS OFF) set(ENABLE_SAMPLES OFF) set(MESSAGE_QUIET ON) add_subdirectory(${MUPARSER_DIR}) unset(MESSAGE_QUIET) - unset(BUILD_SHARED_LIBS) unset(ENABLE_SAMPLES) add_library(external-muparser INTERFACE) target_link_libraries(external-muparser INTERFACE muparser) + install(TARGETS external-muparser DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) endif() From 22c955bbb474c89350ad2b9787582a5277bc5567 Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Thu, 3 Nov 2022 12:16:44 +0100 Subject: [PATCH 5/6] fix muparser lib --- src/external/muparser.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/muparser.cmake b/src/external/muparser.cmake index 3e076ee23..79bd50dfe 100644 --- a/src/external/muparser.cmake +++ b/src/external/muparser.cmake @@ -30,5 +30,5 @@ elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_MUPARSER) add_library(external-muparser INTERFACE) target_link_libraries(external-muparser INTERFACE muparser) - install(TARGETS external-muparser DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) + install(TARGETS muparser DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) endif() From 658b8abec2524a51f6e82026b696262a92da3aef Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Thu, 3 Nov 2022 14:58:01 +0100 Subject: [PATCH 6/6] fix u3d on mac --- src/external/u3d.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/external/u3d.cmake b/src/external/u3d.cmake index 8e520079b..25beee54e 100644 --- a/src/external/u3d.cmake +++ b/src/external/u3d.cmake @@ -18,4 +18,12 @@ if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_U3D) set(MESSAGE_QUIET ON) add_subdirectory(${U3D_DIR}) unset(MESSAGE_QUIET) + install( + TARGETS + IFXCore + IFXExporting + IFXScheduling + IDTF-to-U3D-converter + DESTINATION + ${MESHLAB_LIB_INSTALL_DIR}) endif()

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