diff options
Diffstat (limited to 'Source/cmLocalVisualStudio7Generator.h')
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h new file mode 100644 index 0000000..6d1d0fb --- /dev/null +++ b/Source/cmLocalVisualStudio7Generator.h @@ -0,0 +1,139 @@ +/*============================================================================ + 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 cmLocalVisualStudio7Generator_h +#define cmLocalVisualStudio7Generator_h + +#include "cmLocalVisualStudioGenerator.h" + +#include "cmVisualStudioGeneratorOptions.h" + +class cmSourceFile; +class cmCustomCommand; +class cmSourceGroup; + +class cmLocalVisualStudio7GeneratorOptions; +class cmLocalVisualStudio7GeneratorFCInfo; +class cmLocalVisualStudio7GeneratorInternals; + +/** \class cmLocalVisualStudio7Generator + * \brief Write Visual Studio .NET project files. + * + * cmLocalVisualStudio7Generator produces a Visual Studio .NET project + * file for each target in its directory. + */ +class cmLocalVisualStudio7Generator : public cmLocalVisualStudioGenerator +{ +public: + ///! Set cache only and recurse to false by default. + cmLocalVisualStudio7Generator(cmGlobalGenerator* gg, cmMakefile* mf); + + virtual ~cmLocalVisualStudio7Generator(); + + virtual void AddHelperCommands(); + + /** + * Generate the makefile for this directory. + */ + virtual void Generate(); + + enum BuildType + { + STATIC_LIBRARY, + DLL, + EXECUTABLE, + WIN32_EXECUTABLE, + UTILITY + }; + + /** + * Specify the type of the build: static, dll, or executable. + */ + void SetBuildType(BuildType, const std::string& name); + + virtual std::string GetTargetDirectory( + cmGeneratorTarget const* target) const; + cmSourceFile* CreateVCProjBuildRule(); + void WriteStampFiles(); + virtual std::string ComputeLongestObjectDirectory( + cmGeneratorTarget const*) const; + + virtual void ReadAndStoreExternalGUID(const std::string& name, + const char* path); + virtual void AddCMakeListsRules(); + +protected: + void CreateSingleVCProj(const std::string& lname, cmGeneratorTarget* tgt); + +private: + typedef cmVisualStudioGeneratorOptions Options; + typedef cmLocalVisualStudio7GeneratorFCInfo FCInfo; + std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags, + const std::string& configName); + void FixGlobalTargets(); + void WriteProjectFiles(); + void WriteVCProjHeader(std::ostream& fout, const std::string& libName, + cmGeneratorTarget* tgt, + std::vector<cmSourceGroup>& sgs); + void WriteVCProjFooter(std::ostream& fout, cmGeneratorTarget* target); + void WriteVCProjFile(std::ostream& fout, const std::string& libName, + cmGeneratorTarget* tgt); + void WriteConfigurations(std::ostream& fout, + std::vector<std::string> const& configs, + const std::string& libName, cmGeneratorTarget* tgt); + void WriteConfiguration(std::ostream& fout, const std::string& configName, + const std::string& libName, cmGeneratorTarget* tgt); + std::string EscapeForXML(const std::string& s); + std::string ConvertToXMLOutputPath(const char* path); + std::string ConvertToXMLOutputPathSingle(const char* path); + void OutputTargetRules(std::ostream& fout, const std::string& configName, + cmGeneratorTarget* target, + const std::string& libName); + void OutputBuildTool(std::ostream& fout, const std::string& configName, + cmGeneratorTarget* t, const Options& targetOptions); + void OutputDeploymentDebuggerTool(std::ostream& fout, + std::string const& config, + cmGeneratorTarget* target); + void OutputLibraryDirectories(std::ostream& fout, + std::vector<std::string> const& dirs); + void WriteProjectSCC(std::ostream& fout, cmGeneratorTarget* target); + void WriteProjectStart(std::ostream& fout, const std::string& libName, + cmGeneratorTarget* tgt, + std::vector<cmSourceGroup>& sgs); + void WriteProjectStartFortran(std::ostream& fout, const std::string& libName, + cmGeneratorTarget* tgt); + void WriteVCProjBeginGroup(std::ostream& fout, const char* group, + const char* filter); + void WriteVCProjEndGroup(std::ostream& fout); + + void WriteCustomRule(std::ostream& fout, + std::vector<std::string> const& configs, + const char* source, const cmCustomCommand& command, + FCInfo& fcinfo); + void WriteTargetVersionAttribute(std::ostream& fout, cmGeneratorTarget* gt); + + bool WriteGroup(const cmSourceGroup* sg, cmGeneratorTarget* target, + std::ostream& fout, const std::string& libName, + std::vector<std::string> const& configs); + + friend class cmLocalVisualStudio7GeneratorFCInfo; + friend class cmLocalVisualStudio7GeneratorInternals; + + class EventWriter; + friend class EventWriter; + + std::string ModuleDefinitionFile; + bool FortranProject; + bool WindowsCEProject; + cmLocalVisualStudio7GeneratorInternals* Internal; +}; + +#endif |