summaryrefslogtreecommitdiffstats
path: root/Source/cmVisualStudioGeneratorOptions.h
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2009-06-25 20:41:57 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2009-06-25 20:41:57 (GMT)
commit7491f52992450bc6853c44c28db646c6176cbfd0 (patch)
tree3ec314d959220760927dc3741e8e51bc64267471 /Source/cmVisualStudioGeneratorOptions.h
parent953439f738e98b463e2583cdbe1c756a7045eacb (diff)
downloadCMake-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.h122
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