diff options
Diffstat (limited to 'Source/cmMakefile.h')
-rw-r--r-- | Source/cmMakefile.h | 150 |
1 files changed, 92 insertions, 58 deletions
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index e65ba46..737cab9 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -3,15 +3,17 @@ #ifndef cmMakefile_h #define cmMakefile_h -#include "cmConfigure.h" +#include "cmConfigure.h" // IWYU pragma: keep #include "cmsys/RegularExpression.hxx" #include <deque> #include <map> +#include <memory> // IWYU pragma: keep #include <set> #include <stack> #include <stddef.h> #include <string> +#include <unordered_map> #include <vector> #include "cmAlgorithms.h" @@ -21,8 +23,6 @@ #include "cmStateSnapshot.h" #include "cmStateTypes.h" #include "cmTarget.h" -#include "cm_auto_ptr.hxx" -#include "cm_unordered_map.hxx" #include "cmake.h" #if defined(CMAKE_BUILD_WITH_CMAKE) @@ -92,7 +92,7 @@ public: * Remove the function blocker whose scope ends with the given command. * This returns ownership of the function blocker object. */ - CM_AUTO_PTR<cmFunctionBlocker> RemoveFunctionBlocker( + std::unique_ptr<cmFunctionBlocker> RemoveFunctionBlocker( cmFunctionBlocker* fb, const cmListFileFunction& lff); /** @@ -183,28 +183,37 @@ public: const std::vector<std::string>& srcs, bool excludeFromAll = false); + /** Where the target originated from. */ + enum class TargetOrigin + { + Project, + Generator + }; + /** * Add a utility to the build. A utiltity target is a command that * is run every time the target is built. */ + cmTarget* AddUtilityCommand(const std::string& utilityName, + TargetOrigin origin, bool excludeFromAll, + const std::vector<std::string>& depends, + const char* workingDirectory, + const char* command, const char* arg1 = nullptr, + const char* arg2 = nullptr, + const char* arg3 = nullptr, + const char* arg4 = nullptr); cmTarget* AddUtilityCommand( - const std::string& utilityName, bool excludeFromAll, - const std::vector<std::string>& depends, const char* workingDirectory, - const char* command, const char* arg1 = CM_NULLPTR, - const char* arg2 = CM_NULLPTR, const char* arg3 = CM_NULLPTR, - const char* arg4 = CM_NULLPTR); - cmTarget* AddUtilityCommand( - const std::string& utilityName, bool excludeFromAll, + const std::string& utilityName, TargetOrigin origin, bool excludeFromAll, const char* workingDirectory, const std::vector<std::string>& depends, const cmCustomCommandLines& commandLines, bool escapeOldStyle = true, - const char* comment = CM_NULLPTR, bool uses_terminal = false, + const char* comment = nullptr, bool uses_terminal = false, bool command_expand_lists = false); cmTarget* AddUtilityCommand( - const std::string& utilityName, bool excludeFromAll, + const std::string& utilityName, TargetOrigin origin, bool excludeFromAll, const char* workingDirectory, const std::vector<std::string>& byproducts, const std::vector<std::string>& depends, const cmCustomCommandLines& commandLines, bool escapeOldStyle = true, - const char* comment = CM_NULLPTR, bool uses_terminal = false, + const char* comment = nullptr, bool uses_terminal = false, bool command_expand_lists = false); /** @@ -268,21 +277,6 @@ public: bool excludeFromAll = false); void AddAlias(const std::string& libname, const std::string& tgt); -#if defined(CMAKE_BUILD_WITH_CMAKE) - /** - * Add a root source group for consideration when adding a new source. - */ - void AddSourceGroup(const std::string& name, const char* regex = CM_NULLPTR); - - /** - * Add a source group for consideration when adding a new source. - * name is tokenized. - */ - void AddSourceGroup(const std::vector<std::string>& name, - const char* regex = CM_NULLPTR); - -#endif - //@{ /** * Set, Push, Pop policy values for CMake. @@ -474,6 +468,36 @@ public: * Get the source group */ cmSourceGroup* GetSourceGroup(const std::vector<std::string>& name) const; + + /** + * Add a root source group for consideration when adding a new source. + */ + void AddSourceGroup(const std::string& name, const char* regex = nullptr); + + /** + * Add a source group for consideration when adding a new source. + * name is tokenized. + */ + void AddSourceGroup(const std::vector<std::string>& name, + const char* regex = nullptr); + + /** + * Get and existing or create a new source group. + */ + cmSourceGroup* GetOrCreateSourceGroup( + const std::vector<std::string>& folders); + + /** + * Get and existing or create a new source group. + * The name will be tokenized. + */ + cmSourceGroup* GetOrCreateSourceGroup(const std::string& name); + + /** + * find what source group this source is in + */ + cmSourceGroup* FindSourceGroup(const char* source, + std::vector<cmSourceGroup>& groups) const; #endif /** @@ -521,7 +545,7 @@ public: const char* ExpandVariablesInString(std::string& source) const; const char* ExpandVariablesInString(std::string& source, bool escapeQuotes, bool noEscapes, bool atOnly = false, - const char* filename = CM_NULLPTR, + const char* filename = nullptr, long line = -1, bool removeEmpty = false, bool replaceAt = false) const; @@ -544,20 +568,12 @@ public: bool atOnly, bool escapeQuotes) const; /** - * Copy file but change lines acording to ConfigureString + * Copy file but change lines according to ConfigureString */ int ConfigureFile(const char* infile, const char* outfile, bool copyonly, bool atOnly, bool escapeQuotes, cmNewLineStyle = cmNewLineStyle()); -#if defined(CMAKE_BUILD_WITH_CMAKE) - /** - * find what source group this source is in - */ - cmSourceGroup* FindSourceGroup(const char* source, - std::vector<cmSourceGroup>& groups) const; -#endif - /** * Print a command's invocation */ @@ -594,11 +610,11 @@ public: */ bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs, std::vector<std::string>& outArgs, - const char* filename = CM_NULLPTR) const; + const char* filename = nullptr) const; bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs, std::vector<cmExpandedCommandArgument>& outArgs, - const char* filename = CM_NULLPTR) const; + const char* filename = nullptr) const; /** * Get the instance @@ -614,7 +630,6 @@ public: { return this->SourceFiles; } - std::vector<cmSourceFile*>& GetSourceFiles() { return this->SourceFiles; } /** * Is there a source file that has the provided source file as an output? @@ -631,6 +646,11 @@ public: cmTest* GetTest(const std::string& testName) const; /** + * Get all tests that run under the given configuration. + */ + void GetTests(const std::string& config, std::vector<cmTest*>& tests); + + /** * Return a location of a file in cmake or custom modules directory */ std::string GetModulesFile(const char* name) const; @@ -657,6 +677,10 @@ public: { return this->InstallGenerators; } + const std::vector<cmInstallGenerator*>& GetInstallGenerators() const + { + return this->InstallGenerators; + } void AddTestGenerator(cmTestGenerator* g) { @@ -729,6 +753,9 @@ public: /** Set whether or not to report a CMP0000 violation. */ void SetCheckCMP0000(bool b) { this->CheckCMP0000 = b; } + bool CheckCMP0037(std::string const& targetName, + cmStateEnums::TargetType targetType) const; + cmStringRange GetIncludeDirectoriesEntries() const; cmBacktraceRange GetIncludeDirectoriesBacktraces() const; cmStringRange GetCompileOptionsEntries() const; @@ -736,9 +763,6 @@ public: cmStringRange GetCompileDefinitionsEntries() const; cmBacktraceRange GetCompileDefinitionsBacktraces() const; - void AddQtUiFileWithOptions(cmSourceFile* sf); - std::vector<cmSourceFile*> GetQtUiFilesWithOptions() const; - std::set<std::string> const& GetSystemIncludeDirectories() const { return this->SystemIncludeDirectories; @@ -747,7 +771,7 @@ public: bool PolicyOptionalWarningEnabled(std::string const& var); bool AddRequiredTargetFeature(cmTarget* target, const std::string& feature, - std::string* error = CM_NULLPTR) const; + std::string* error = nullptr) const; bool CompileFeatureKnown(cmTarget const* target, const std::string& feature, std::string& lang, std::string* error) const; @@ -776,10 +800,11 @@ public: void EnforceDirectoryLevelRules() const; - void AddEvaluationFile(const std::string& inputFile, - CM_AUTO_PTR<cmCompiledGeneratorExpression> outputName, - CM_AUTO_PTR<cmCompiledGeneratorExpression> condition, - bool inputIsContent); + void AddEvaluationFile( + const std::string& inputFile, + std::unique_ptr<cmCompiledGeneratorExpression> outputName, + std::unique_ptr<cmCompiledGeneratorExpression> condition, + bool inputIsContent); std::vector<cmGeneratorExpressionEvaluationFile*> GetEvaluationFiles() const; std::vector<cmExportBuildFileGenerator*> GetExportBuildFileGenerators() @@ -787,7 +812,7 @@ public: void RemoveExportBuildFileGeneratorCMP0024(cmExportBuildFileGenerator* gen); void AddExportBuildFileGenerator(cmExportBuildFileGenerator* gen); - // Maintain a stack of pacakge names to determine the depth of find modules + // Maintain a stack of package names to determine the depth of find modules // we are currently being called with std::deque<std::string> FindPackageModuleStack; @@ -803,7 +828,18 @@ protected: // libraries, classes, and executables mutable cmTargets Targets; std::map<std::string, std::string> AliasTargets; - std::vector<cmSourceFile*> SourceFiles; + + typedef std::vector<cmSourceFile*> SourceFileVec; + SourceFileVec SourceFiles; + + // Because cmSourceFile names are compared in a fuzzy way (see + // cmSourceFileLocation::Match()) we can't have a straight mapping from + // filename to cmSourceFile. To make lookups more efficient we store the + // Name portion of the cmSourceFileLocation and then compare on the list of + // cmSourceFiles that might match that name. Note that on platforms which + // have a case-insensitive filesystem we store the key in all lowercase. + typedef std::unordered_map<std::string, SourceFileVec> SourceFileMap; + SourceFileMap SourceFileSearchIndex; // Tests std::map<std::string, cmTest*> Tests; @@ -871,7 +907,7 @@ private: friend class cmParseFileScope; std::vector<cmTarget*> ImportedTargetsOwned; - typedef CM_UNORDERED_MAP<std::string, cmTarget*> TargetMap; + typedef std::unordered_map<std::string, cmTarget*> TargetMap; TargetMap ImportedTargets; // Internal policy stack management. @@ -909,7 +945,7 @@ private: cmSourceFile* LinearGetSourceFileWithOutput(const std::string& cname) const; // A map for fast output to input look up. - typedef CM_UNORDERED_MAP<std::string, cmSourceFile*> OutputToSourceMap; + typedef std::unordered_map<std::string, cmSourceFile*> OutputToSourceMap; OutputToSourceMap OutputToSource; void UpdateOutputToSourceMap(std::vector<std::string> const& outputs, @@ -917,14 +953,12 @@ private: void UpdateOutputToSourceMap(std::string const& output, cmSourceFile* source); - std::vector<cmSourceFile*> QtUiFilesWithOptions; - bool AddRequiredTargetCFeature(cmTarget* target, const std::string& feature, - std::string* error = CM_NULLPTR) const; + std::string* error = nullptr) const; bool AddRequiredTargetCxxFeature(cmTarget* target, const std::string& feature, - std::string* error = CM_NULLPTR) const; + std::string* error = nullptr) const; void CheckNeededCLanguage(const std::string& feature, bool& needC90, bool& needC99, bool& needC11) const; |