| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <iosfwd> | |
| #include <string> | |
| #include <vector> | |
| #include "cmPolicies.h" | |
| #include "cmScriptGenerator.h" | |
| class cmListFileBacktrace; | |
| class cmGeneratorExpression; | |
| class cmGeneratorTarget; | |
| class cmLocalGenerator; | |
| class cmMakefile; | |
| class cmTest; | |
| /** \class cmTestGenerator | |
| * \brief Support class for generating install scripts. | |
| * | |
| */ | |
| class cmTestGenerator : public cmScriptGenerator | |
| { | |
| public: | |
| struct BuildDependencies | |
| { | |
| // A file dependency together with how the build produces it. | |
| struct FileDependency | |
| { | |
| std::string Path; | |
| // The single build-system target that produces Path as a primary | |
| // custom-command output, or nullptr if there is no such unique target. | |
| cmGeneratorTarget* Owner = nullptr; | |
| // Whether Path is produced by the build at all (output or byproduct). | |
| bool Generated = false; | |
| }; | |
| // Build-system targets the test depends on (filtered to targets that are | |
| // part of the build system). | |
| std::vector<cmGeneratorTarget*> Targets; | |
| // BUILD_DEPENDS entries that did not name a target. | |
| std::vector<FileDependency> Files; | |
| }; | |
| static bool EvaluateBuildDependencies( | |
| cmLocalGenerator* lg, std::string const& config, | |
| cmListFileBacktrace const& backtrace, std::string const& testName, | |
| std::vector<std::string> const& command, | |
| std::vector<std::string> const& buildDepends, BuildDependencies& info, | |
| cmMakefile* mf); | |
| cmTestGenerator(cmTest* test, | |
| std::vector<std::string> const& configurations = | |
| std::vector<std::string>()); | |
| ~cmTestGenerator() override; | |
| cmTestGenerator(cmTestGenerator const&) = delete; | |
| cmTestGenerator& operator=(cmTestGenerator const&) = delete; | |
| virtual void Compute(cmLocalGenerator* lg); | |
| bool GetBuildDependencies(cmLocalGenerator* lg, std::string const& config, | |
| BuildDependencies& deps); | |
| /** Test if this generator installs the test for a given configuration. */ | |
| bool TestsForConfig(std::string const& config); | |
| cmTest* GetTest() const; | |
| private: | |
| std::vector<std::string> EvaluateCommandLineArguments( | |
| std::vector<std::string> const& argv, cmGeneratorExpression& ge, | |
| std::string const& config) const; | |
| protected: | |
| void GenerateBacktrace(std::ostream& os, cmListFileBacktrace bt); | |
| void GenerateDefaultFixtureRepeatMode(std::ostream& os); | |
| void GenerateCommand(std::ostream& os, | |
| std::vector<std::string> const& command, | |
| std::string const& config, bool expand, | |
| cmGeneratorExpression& ge, | |
| cmPolicies::PolicyStatus cmp0158 = cmPolicies::NEW, | |
| cmPolicies::PolicyStatus cmp0178 = cmPolicies::NEW); | |
| void GenerateScriptActions(std::ostream& os, Indent indent) override; | |
| void GenerateScriptForConfig(std::ostream& os, std::string const& config, | |
| Indent indent) override; | |
| void GenerateScriptNoConfig(std::ostream& os, Indent indent) override; | |
| bool NeedsScriptNoConfig() const override; | |
| void GenerateOldStyle(std::ostream& os, Indent indent); | |
| cmLocalGenerator* LG; | |
| cmTest* Test; | |
| bool TestGenerated; | |
| }; |