packaging: Initial packaging
[platform/upstream/cmake.git] / Source / cmVisualStudio10TargetGenerator.h
1 /*============================================================================
2   CMake - Cross Platform Makefile Generator
3   Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
4
5   Distributed under the OSI-approved BSD License (the "License");
6   see accompanying file Copyright.txt for details.
7
8   This software is distributed WITHOUT ANY WARRANTY; without even the
9   implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10   See the License for more information.
11 ============================================================================*/
12 #ifndef cmVisualStudioTargetGenerator_h
13 #define cmVisualStudioTargetGenerator_h
14 #include "cmStandardIncludes.h"
15
16 class cmTarget;
17 class cmMakefile;
18 class cmGeneratorTarget;
19 class cmGeneratedFileStream;
20 class cmGlobalVisualStudio10Generator;
21 class cmSourceFile;
22 class cmCustomCommand;
23 class cmLocalVisualStudio7Generator;
24 class cmComputeLinkInformation;
25 class cmVisualStudioGeneratorOptions;
26 #include "cmSourceGroup.h"
27
28 class cmVisualStudio10TargetGenerator
29 {
30 public:
31   cmVisualStudio10TargetGenerator(cmTarget* target,
32                                   cmGlobalVisualStudio10Generator* gg);
33   ~cmVisualStudio10TargetGenerator();
34   void Generate();
35   // used by cmVisualStudioGeneratorOptions
36   void WritePlatformConfigTag(
37     const char* tag,
38     const char* config,
39     int indentLevel,
40     const char* attribute = 0,
41     const char* end = 0,
42     std::ostream* strm = 0
43     );
44
45 private:
46   struct ToolSource
47   {
48     cmSourceFile* SourceFile;
49     bool RelativePath;
50   };
51   struct ToolSources: public std::vector<ToolSource> {};
52
53   std::string ConvertPath(std::string const& path, bool forceRelative);
54   void ConvertToWindowsSlash(std::string& s);
55   void WriteString(const char* line, int indentLevel);
56   void WriteProjectConfigurations();
57   void WriteProjectConfigurationValues();
58   void WriteSource(const char* tool, cmSourceFile* sf, const char* end = 0);
59   void WriteSources(const char* tool, std::vector<cmSourceFile*> const&);
60   void WriteAllSources();
61   void WriteDotNetReferences();
62   void WriteEmbeddedResourceGroup();
63   void WriteWinRTReferences();
64   void WritePathAndIncrementalLinkOptions();
65   void WriteItemDefinitionGroups();
66
67   bool ComputeClOptions();
68   bool ComputeClOptions(std::string const& configName);
69   void WriteClOptions(std::string const& config,
70                       std::vector<std::string> const & includes);
71   void WriteRCOptions(std::string const& config,
72                       std::vector<std::string> const & includes);
73   bool ComputeLinkOptions();
74   bool ComputeLinkOptions(std::string const& config);
75   void WriteLinkOptions(std::string const& config);
76   void WriteMidlOptions(std::string const& config,
77                         std::vector<std::string> const & includes);
78   void OutputIncludes(std::vector<std::string> const & includes);
79   void OutputLinkIncremental(std::string const& configName);
80   void WriteCustomRule(cmSourceFile* source,
81                        cmCustomCommand const & command);
82   void WriteCustomCommands();
83   void WriteCustomCommand(cmSourceFile* sf);
84   void WriteGroups();
85   void WriteProjectReferences();
86   bool OutputSourceSpecificFlags(cmSourceFile* source);
87   void AddLibraries(cmComputeLinkInformation& cli, std::string& libstring);
88   void WriteLibOptions(std::string const& config);
89   void WriteEvents(std::string const& configName);
90   void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
91                   std::string const& configName);
92   void WriteGroupSources(const char* name, ToolSources const& sources,
93                          std::vector<cmSourceGroup>& );
94   void AddMissingSourceGroups(std::set<cmSourceGroup*>& groupsUsed,
95                               const std::vector<cmSourceGroup>& allGroups);
96   bool IsResxHeader(const std::string& headerFile);
97
98 private:
99   typedef cmVisualStudioGeneratorOptions Options;
100   typedef std::map<cmStdString, Options*> OptionsMap;
101   OptionsMap ClOptions;
102   OptionsMap LinkOptions;
103   std::string PathToVcxproj;
104   cmTarget* Target;
105   cmGeneratorTarget* GeneratorTarget;
106   cmMakefile* Makefile;
107   std::string Platform;
108   std::string GUID;
109   std::string Name;
110   cmGlobalVisualStudio10Generator* GlobalGenerator;
111   cmGeneratedFileStream* BuildFileStream;
112   cmLocalVisualStudio7Generator* LocalGenerator;
113   std::set<cmSourceFile*> SourcesVisited;
114
115   typedef std::map<cmStdString, ToolSources> ToolSourceMap;
116   ToolSourceMap Tools;
117 };
118
119 #endif