/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #ifndef cmVisualStudioTargetGenerator_h #define cmVisualStudioTargetGenerator_h #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include class cmComputeLinkInformation; class cmCustomCommand; class cmGeneratedFileStream; class cmGeneratorTarget; class cmGlobalVisualStudio10Generator; class cmLocalVisualStudio7Generator; class cmMakefile; class cmSourceFile; class cmSourceGroup; class cmVisualStudioGeneratorOptions; class cmVisualStudio10TargetGenerator { CM_DISABLE_COPY(cmVisualStudio10TargetGenerator) public: cmVisualStudio10TargetGenerator(cmGeneratorTarget* target, cmGlobalVisualStudio10Generator* gg); ~cmVisualStudio10TargetGenerator(); void Generate(); // used by cmVisualStudioGeneratorOptions void WritePlatformConfigTag(const char* tag, const std::string& config, int indentLevel, const char* attribute = 0, const char* end = 0, std::ostream* strm = 0); private: struct ToolSource { cmSourceFile const* SourceFile; bool RelativePath; }; struct ToolSources : public std::vector { }; struct TargetsFileAndConfigs { std::string File; std::vector Configs; }; std::string ConvertPath(std::string const& path, bool forceRelative); static void ConvertToWindowsSlash(std::string& s); void WriteString(const char* line, int indentLevel); void WriteProjectConfigurations(); void WriteProjectConfigurationValues(); void WriteMSToolConfigurationValues(std::string const& config); void WriteMSToolConfigurationValuesManaged(std::string const& config); void WriteHeaderSource(cmSourceFile const* sf); void WriteExtraSource(cmSourceFile const* sf); void WriteNsightTegraConfigurationValues(std::string const& config); void WriteSource(std::string const& tool, cmSourceFile const* sf, const char* end = 0); void WriteExcludeFromBuild(std::vector const& exclude_configs); void WriteAllSources(); void WriteDotNetReferences(); void WriteDotNetReference(std::string const& ref, std::string const& hint); void WriteDotNetReferenceCustomTags(std::string const& ref); void WriteEmbeddedResourceGroup(); void WriteWinRTReferences(); void WriteWinRTPackageCertificateKeyFile(); void WriteXamlFilesGroup(); void WritePathAndIncrementalLinkOptions(); void WriteItemDefinitionGroups(); void VerifyNecessaryFiles(); void WriteMissingFiles(); void WriteMissingFilesWP80(); void WriteMissingFilesWP81(); void WriteMissingFilesWS80(); void WriteMissingFilesWS81(); void WriteMissingFilesWS10_0(); void WritePlatformExtensions(); void WriteSinglePlatformExtension(std::string const& extension, std::string const& version); void WriteSDKReferences(); void WriteSingleSDKReference(std::string const& extension, std::string const& version); void WriteCommonMissingFiles(const std::string& manifestFile); void WriteTargetSpecificReferences(); void WriteTargetsFileReferences(); std::vector GetIncludes(std::string const& config, std::string const& lang) const; bool ComputeClOptions(); bool ComputeClOptions(std::string const& configName); void WriteClOptions(std::string const& config); bool ComputeRcOptions(); bool ComputeRcOptions(std::string const& config); void WriteRCOptions(std::string const& config); bool ComputeCudaOptions(); bool ComputeCudaOptions(std::string const& config); void WriteCudaOptions(std::string const& config); bool ComputeCudaLinkOptions(); bool ComputeCudaLinkOptions(std::string const& config); void WriteCudaLinkOptions(std::string const& config); bool ComputeMasmOptions(); bool ComputeMasmOptions(std::string const& config); void WriteMasmOptions(std::string const& config); bool ComputeNasmOptions(); bool ComputeNasmOptions(std::string const& config); void WriteNasmOptions(std::string const& config); bool ComputeLinkOptions(); bool ComputeLinkOptions(std::string const& config); bool ComputeLibOptions(); bool ComputeLibOptions(std::string const& config); void WriteLinkOptions(std::string const& config); void WriteMidlOptions(std::string const& config); void WriteAntBuildOptions(std::string const& config); void OutputLinkIncremental(std::string const& configName); void WriteCustomRule(cmSourceFile const* source, cmCustomCommand const& command); void WriteCustomRuleCpp(std::string const& config, std::string const& script, std::string const& inputs, std::string const& outputs, std::string const& comment); void WriteCustomRuleCSharp(std::string const& config, std::string const& commandName, std::string const& script, std::string const& inputs, std::string const& outputs, std::string const& comment); void WriteCustomCommands(); void WriteCustomCommand(cmSourceFile const* sf); void WriteGroups(); void WriteProjectReferences(); void WriteApplicationTypeSettings(); bool OutputSourceSpecificFlags(cmSourceFile const* source); void AddLibraries(cmComputeLinkInformation& cli, std::vector& libVec, std::vector& vsTargetVec); void AddTargetsFileAndConfigPair(std::string const& targetsFile, std::string const& config); void WriteLibOptions(std::string const& config); void WriteManifestOptions(std::string const& config); void WriteEvents(std::string const& configName); void WriteEvent(const char* name, std::vector const& commands, std::string const& configName); void WriteGroupSources(const char* name, ToolSources const& sources, std::vector&); void AddMissingSourceGroups(std::set& groupsUsed, const std::vector& allGroups); bool IsResxHeader(const std::string& headerFile); bool IsXamlHeader(const std::string& headerFile); bool IsXamlSource(const std::string& headerFile); bool ForceOld(const std::string& source) const; void GetCSharpSourceProperties(cmSourceFile const* sf, std::map& tags); void WriteCSharpSourceProperties( const std::map& tags); void GetCSharpSourceLink(cmSourceFile const* sf, std::string& link); private: typedef cmVisualStudioGeneratorOptions Options; typedef std::map> OptionsMap; OptionsMap ClOptions; OptionsMap RcOptions; OptionsMap CudaOptions; OptionsMap CudaLinkOptions; OptionsMap MasmOptions; OptionsMap NasmOptions; OptionsMap LinkOptions; std::string LangForClCompile; std::string PathToProjectFile; std::string ProjectFileExtension; enum VsProjectType { vcxproj, csproj } ProjectType; bool InSourceBuild; std::vector Configurations; std::vector TargetsFileAndConfigsVec; cmGeneratorTarget* GeneratorTarget; cmMakefile* Makefile; std::string Platform; std::string GUID; std::string Name; bool MSTools; bool Managed; bool NsightTegra; int NsightTegraVersion[4]; bool TargetCompileAsWinRT; cmGlobalVisualStudio10Generator* GlobalGenerator; cmGeneratedFileStream* BuildFileStream; cmLocalVisualStudio7Generator* LocalGenerator; std::set SourcesVisited; std::set CSharpCustomCommandNames; bool IsMissingFiles; std::vector AddedFiles; std::string DefaultArtifactDir; typedef std::map ToolSourceMap; ToolSourceMap Tools; std::string GetCMakeFilePath(const char* name) const; }; #endif