diff options
Diffstat (limited to 'Source/cmMakeDepend.h')
-rw-r--r-- | Source/cmMakeDepend.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/Source/cmMakeDepend.h b/Source/cmMakeDepend.h new file mode 100644 index 000000000..185f4e356 --- /dev/null +++ b/Source/cmMakeDepend.h @@ -0,0 +1,150 @@ +/*============================================================================ + 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 cmMakeDepend_h +#define cmMakeDepend_h + +#include "cmMakefile.h" +#include "cmSourceFile.h" + +#include <cmsys/RegularExpression.hxx> + +/** \class cmDependInformation + * \brief Store dependency information for a single source file. + * + * This structure stores the depend information for a single source file. + */ +class cmDependInformation +{ +public: + /** + * Construct with dependency generation marked not done; instance + * not placed in cmMakefile's list. + */ + cmDependInformation(): DependDone(false), SourceFile(0) {} + + /** + * The set of files on which this one depends. + */ + typedef std::set<cmDependInformation*> DependencySetType; + DependencySetType DependencySet; + + /** + * This flag indicates whether dependency checking has been + * performed for this file. + */ + bool DependDone; + + /** + * If this object corresponds to a cmSourceFile instance, this points + * to it. + */ + const cmSourceFile *SourceFile; + + /** + * Full path to this file. + */ + std::string FullPath; + + /** + * Full path not including file name. + */ + std::string PathOnly; + + /** + * Name used to #include this file. + */ + std::string IncludeName; + + /** + * This method adds the dependencies of another file to this one. + */ + void AddDependencies(cmDependInformation*); +}; + + +// cmMakeDepend is used to generate dependancy information for +// the classes in a makefile +class cmMakeDepend +{ +public: + /** + * Construct the object with verbose turned off. + */ + cmMakeDepend(); + + /** + * Destructor. + */ + virtual ~cmMakeDepend(); + + /** + * Set the makefile that is used as a source of classes. + */ + virtual void SetMakefile(cmMakefile* makefile); + + /** + * Add a directory to the search path for include files. + */ + virtual void AddSearchPath(const char*); + + /** + * Generate dependencies for the file given. Returns a pointer to + * the cmDependInformation object for the file. + */ + const cmDependInformation* FindDependencies(const char* file); + +protected: + /** + * Compute the depend information for this class. + */ + virtual void DependWalk(cmDependInformation* info); + + /** + * Add a dependency. Possibly walk it for more dependencies. + */ + virtual void AddDependency(cmDependInformation* info, const char* file); + + /** + * Fill in the given object with dependency information. If the + * information is already complete, nothing is done. + */ + void GenerateDependInformation(cmDependInformation* info); + + /** + * Get an instance of cmDependInformation corresponding to the given file + * name. + */ + cmDependInformation* GetDependInformation(const char* file, + const char *extraPath); + + /** + * Find the full path name for the given file name. + * This uses the include directories. + * TODO: Cache path conversions to reduce FileExists calls. + */ + std::string FullPath(const char *filename, const char *extraPath); + + cmMakefile* Makefile; + bool Verbose; + cmsys::RegularExpression IncludeFileRegularExpression; + cmsys::RegularExpression ComplainFileRegularExpression; + std::vector<std::string> IncludeDirectories; + typedef std::map<cmStdString, cmStdString> FileToPathMapType; + typedef std::map<cmStdString, FileToPathMapType> + DirectoryToFileToPathMapType; + typedef std::map<cmStdString, cmDependInformation*> + DependInformationMapType; + DependInformationMapType DependInformationMap; + DirectoryToFileToPathMapType DirectoryToFileToPathMap; +}; + +#endif |