diff options
Diffstat (limited to 'Source/cmIDEOptions.h')
-rw-r--r-- | Source/cmIDEOptions.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Source/cmIDEOptions.h b/Source/cmIDEOptions.h new file mode 100644 index 0000000..7386016 --- /dev/null +++ b/Source/cmIDEOptions.h @@ -0,0 +1,85 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmIDEOptions_h +#define cmIDEOptions_h + +#include "cmStandardIncludes.h" +#include "cmIDEFlagTable.h" + +/** \class cmIDEOptions + * \brief Superclass for IDE option processing + */ +class cmIDEOptions +{ +public: + cmIDEOptions(); + virtual ~cmIDEOptions(); + + // Store definitions and flags. + void AddDefine(const std::string& define); + void AddDefines(const char* defines); + void AddDefines(const std::vector<std::string> &defines); + void AddFlag(const char* flag, const char* value); + void AddFlag(const char* flag, std::vector<std::string> const& value); + void AppendFlag(std::string const& flag, std::string const& value); + void AppendFlag(std::string const& flag, + std::vector<std::string> const& value); + void RemoveFlag(const char* flag); + bool HasFlag(std::string const& flag) const; + const char* GetFlag(const char* flag); + +protected: + // create a map of xml tags to the values they should have in the output + // for example, "BufferSecurityCheck" = "TRUE" + // first fill this table with the values for the configuration + // Debug, Release, etc, + // Then parse the command line flags specified in CMAKE_CXX_FLAGS + // and CMAKE_C_FLAGS + // and overwrite or add new values to this map + class FlagValue: public std::vector<std::string> + { + typedef std::vector<std::string> derived; + public: + FlagValue& operator=(std::string const& r) + { + this->resize(1); + this->operator[](0) = r; + return *this; + } + FlagValue& operator=(std::vector<std::string> const& r) + { + this->derived::operator=(r); + return *this; + } + }; + std::map<std::string, FlagValue > FlagMap; + + // Preprocessor definitions. + std::vector<std::string> Defines; + + // Unrecognized flags that get no special handling. + std::string FlagString; + + bool DoingDefine; + bool AllowDefine; + bool AllowSlash; + cmIDEFlagTable const* DoingFollowing; + enum { FlagTableCount = 16 }; + cmIDEFlagTable const* FlagTable[FlagTableCount]; + void HandleFlag(const char* flag); + bool CheckFlagTable(cmIDEFlagTable const* table, const char* flag, + bool& flag_handled); + void FlagMapUpdate(cmIDEFlagTable const* entry, const char* new_value); + virtual void StoreUnknownFlag(const char* flag) = 0; +}; + +#endif |