diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2009-06-25 20:41:57 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2009-06-25 20:41:57 (GMT) |
commit | 7491f52992450bc6853c44c28db646c6176cbfd0 (patch) | |
tree | 3ec314d959220760927dc3741e8e51bc64267471 /Source/cmVisualStudioGeneratorOptions.h | |
parent | 953439f738e98b463e2583cdbe1c756a7045eacb (diff) | |
download | CMake-7491f52992450bc6853c44c28db646c6176cbfd0.zip CMake-7491f52992450bc6853c44c28db646c6176cbfd0.tar.gz CMake-7491f52992450bc6853c44c28db646c6176cbfd0.tar.bz2 |
ENH: first pass at VS 10, can bootstrap CMake, but many tests still fail
Diffstat (limited to 'Source/cmVisualStudioGeneratorOptions.h')
-rw-r--r-- | Source/cmVisualStudioGeneratorOptions.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Source/cmVisualStudioGeneratorOptions.h b/Source/cmVisualStudioGeneratorOptions.h new file mode 100644 index 0000000..8577e47 --- /dev/null +++ b/Source/cmVisualStudioGeneratorOptions.h @@ -0,0 +1,122 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef cmVisualStudioGeneratorOptions_h +#define cmVisualStudioGeneratorOptions_h + +#include "cmLocalGenerator.h" +class cmVisualStudio10TargetGenerator; + +// This is a table mapping XML tag IDE names to command line options +struct cmVS7FlagTable +{ + const char* IDEName; // name used in the IDE xml file + const char* commandFlag; // command line flag + const char* comment; // comment + const char* value; // string value + unsigned int special; // flags for special handling requests + enum + { + UserValue = (1<<0), // flag contains a user-specified value + UserIgnored = (1<<1), // ignore any user value + UserRequired = (1<<2), // match only when user value is non-empty + Continue = (1<<3), // continue looking for matching entries + SemicolonAppendable = (1<<4), // a flag that if specified multiple times + // should have its value appended to the + // old value with semicolons (e.g. + // /NODEFAULTLIB: => + // IgnoreDefaultLibraryNames) + + UserValueIgnored = UserValue | UserIgnored, + UserValueRequired = UserValue | UserRequired + }; +}; + +//---------------------------------------------------------------------------- +class cmVisualStudioGeneratorOptions +{ +public: + // Construct an options table for a given tool. + enum Tool + { + Compiler, + Linker, + FortranCompiler + }; + cmVisualStudioGeneratorOptions(cmLocalGenerator* lg, + int version, + Tool tool, + cmVS7FlagTable const* table, + cmVS7FlagTable const* extraTable = 0, + cmVisualStudio10TargetGenerator* g = 0); + + // Store options from command line flags. + void Parse(const char* flags); + + // Fix the ExceptionHandling option to default to off. + void FixExceptionHandlingDefault(); + + // Store options for verbose builds. + void SetVerboseMakefile(bool verbose); + + // Store definitions and flags. + void AddDefine(const std::string& define); + void AddDefines(const char* defines); + void AddFlag(const char* flag, const char* value); + + // Check for specific options. + bool UsingUnicode(); + + bool IsDebug(); + // Write options to output. + void OutputPreprocessorDefinitions(std::ostream& fout, + const char* prefix, + const char* suffix); + void OutputFlagMap(std::ostream& fout, const char* indent); + void OutputAdditionalOptions(std::ostream& fout, + const char* prefix, + const char* suffix); + void SetConfiguration(const char* config); +private: + cmLocalGenerator* LocalGenerator; + int Version; + + // 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 + std::map<cmStdString, cmStdString> FlagMap; + + // Preprocessor definitions. + std::vector<std::string> Defines; + + // Unrecognized flags that get no special handling. + cmStdString FlagString; + std::string Configuration; + cmVisualStudio10TargetGenerator* TargetGenerator; + Tool CurrentTool; + bool DoingDefine; + cmVS7FlagTable const* FlagTable; + cmVS7FlagTable const* ExtraFlagTable; + void HandleFlag(const char* flag); + bool CheckFlagTable(cmVS7FlagTable const* table, const char* flag, + bool& flag_handled); +}; + +#endif |