| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include <iosfwd> |
| #include <map> |
| #include <memory> |
| #include <set> |
| #include <string> |
| #include <utility> |
| #include <vector> |
| |
| #include <cm/optional> |
| |
| #include <cm3p/json/value.h> |
| |
| #include "cmGlobalVisualStudioGenerator.h" |
| #include "cmValue.h" |
| |
| class cmGeneratorTarget; |
| struct cmIDEFlagTable; |
| class cmLocalGenerator; |
| class cmMakefile; |
| class cmake; |
| template <typename T> |
| class BT; |
| |
| /** \class cmGlobalVisualStudio7Generator |
| * \brief Write a Unix makefiles. |
| * |
| * cmGlobalVisualStudio7Generator manages UNIX build process for a tree |
| */ |
| class cmGlobalVisualStudio7Generator : public cmGlobalVisualStudioGenerator |
| { |
| public: |
| ~cmGlobalVisualStudio7Generator() override; |
| |
| //! Create a local generator appropriate to this Global Generator |
| std::unique_ptr<cmLocalGenerator> CreateLocalGenerator( |
| cmMakefile* mf) override; |
| |
| #if !defined(CMAKE_BOOTSTRAP) |
| Json::Value GetJson() const override; |
| #endif |
| |
| bool SetSystemName(std::string const& s, cmMakefile* mf) override; |
| |
| /** |
| * Utilized by the generator factory to determine if this generator |
| * supports toolsets. |
| */ |
| static bool SupportsToolset() { return false; } |
| |
| /** |
| * Utilized by the generator factory to determine if this generator |
| * supports platforms. |
| */ |
| static bool SupportsPlatform() { return false; } |
| |
| /** |
| * Try to determine system information such as shared library |
| * extension, pthreads, byte order etc. |
| */ |
| void EnableLanguage(std::vector<std::string> const& languages, cmMakefile*, |
| bool optional) override; |
| |
| /** |
| * Try running cmake and building a file. This is used for dynamically |
| * loaded commands, not as part of the usual build process. |
| */ |
| std::vector<GeneratedMakeCommand> GenerateBuildCommand( |
| const std::string& makeProgram, const std::string& projectName, |
| const std::string& projectDir, std::vector<std::string> const& targetNames, |
| const std::string& config, int jobs, bool verbose, |
| const cmBuildOptions& buildOptions = cmBuildOptions(), |
| std::vector<std::string> const& makeOptions = |
| std::vector<std::string>()) override; |
| |
| /** |
| * Generate the DSW workspace file. |
| */ |
| virtual void OutputSLNFile(); |
| |
| //! Lookup a stored GUID or compute one deterministically. |
| std::string GetGUID(std::string const& name); |
| |
| /** Append the subdirectory for the given configuration. */ |
| void AppendDirectoryForConfig(const std::string& prefix, |
| const std::string& config, |
| const std::string& suffix, |
| std::string& dir) override; |
| |
| //! What is the configurations directory variable called? |
| const char* GetCMakeCFGIntDir() const override |
| { |
| return "$(ConfigurationName)"; |
| } |
| |
| /** Return true if the target project file should have the option |
| LinkLibraryDependencies and link to .sln dependencies. */ |
| virtual bool NeedLinkLibraryDependencies(cmGeneratorTarget*) |
| { |
| return false; |
| } |
| |
| const std::string& GetIntelProjectVersion(); |
| virtual cm::optional<std::string> GetPlatformToolsetFortran() const |
| { |
| return cm::nullopt; |
| } |
| |
| bool FindMakeProgram(cmMakefile* mf) override; |
| |
| /** Is the Microsoft Assembler enabled? */ |
| bool IsMarmasmEnabled() const { return this->MarmasmEnabled; } |
| bool IsMasmEnabled() const { return this->MasmEnabled; } |
| bool IsNasmEnabled() const { return this->NasmEnabled; } |
| |
| // Encoding for Visual Studio files |
| virtual std::string Encoding(); |
| |
| cmIDEFlagTable const* ExtraFlagTable; |
| |
| virtual bool SupportsCxxModuleDyndep() const { return false; } |
| |
| protected: |
| cmGlobalVisualStudio7Generator(cmake* cm, |
| std::string const& platformInGeneratorName); |
| |
| void Generate() override; |
| |
| std::string const& GetDevEnvCommand(); |
| virtual std::string FindDevEnvCommand(); |
| |
| static const char* ExternalProjectType(const std::string& location); |
| |
| virtual void OutputSLNFile(cmLocalGenerator* root, |
| std::vector<cmLocalGenerator*>& generators); |
| virtual void WriteSLNFile(std::ostream& fout, cmLocalGenerator* root, |
| std::vector<cmLocalGenerator*>& generators) = 0; |
| virtual void WriteProject(std::ostream& fout, const std::string& name, |
| const std::string& path, |
| const cmGeneratorTarget* t) = 0; |
| virtual void WriteProjectDepends(std::ostream& fout, const std::string& name, |
| const std::string& path, |
| cmGeneratorTarget const* t) = 0; |
| virtual void WriteProjectConfigurations( |
| std::ostream& fout, const std::string& name, |
| cmGeneratorTarget const& target, std::vector<std::string> const& configs, |
| const std::set<std::string>& configsPartOfDefaultBuild, |
| const std::string& platformMapping = "") = 0; |
| virtual void WriteSLNGlobalSections(std::ostream& fout, |
| cmLocalGenerator* root); |
| virtual void WriteSLNFooter(std::ostream& fout); |
| std::string WriteUtilityDepend(const cmGeneratorTarget* target) override; |
| |
| virtual void WriteTargetsToSolution( |
| std::ostream& fout, cmLocalGenerator* root, |
| OrderedTargetDependSet const& projectTargets); |
| virtual void WriteTargetConfigurations( |
| std::ostream& fout, std::vector<std::string> const& configs, |
| OrderedTargetDependSet const& projectTargets); |
| |
| virtual void WriteExternalProject( |
| std::ostream& fout, const std::string& name, const std::string& path, |
| cmValue typeGuid, |
| const std::set<BT<std::pair<std::string, bool>>>& dependencies) = 0; |
| |
| std::string ConvertToSolutionPath(const std::string& path); |
| |
| std::set<std::string> IsPartOfDefaultBuild( |
| std::vector<std::string> const& configs, |
| OrderedTargetDependSet const& projectTargets, |
| cmGeneratorTarget const* target); |
| bool IsDependedOn(OrderedTargetDependSet const& projectTargets, |
| cmGeneratorTarget const* target); |
| std::map<std::string, std::string> GUIDMap; |
| |
| virtual void WriteFolders(std::ostream& fout); |
| virtual void WriteFoldersContent(std::ostream& fout); |
| std::map<std::string, std::set<std::string>> VisualStudioFolders; |
| |
| // Set during OutputSLNFile with the name of the current project. |
| // There is one SLN file per project. |
| std::string CurrentProject; |
| bool MarmasmEnabled; |
| bool MasmEnabled; |
| bool NasmEnabled; |
| |
| private: |
| std::string IntelProjectVersion; |
| std::string DevEnvCommand; |
| bool DevEnvCommandInitialized; |
| std::string GetVSMakeProgram() override { return this->GetDevEnvCommand(); } |
| }; |
| |
| #define CMAKE_CHECK_BUILD_SYSTEM_TARGET "ZERO_CHECK" |