CMake/Source/cmMakeDepend.h

150 lines
3.3 KiB
C
Raw Normal View History

/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2000 National Library of Medicine
All rights reserved.
See COPYRIGHT.txt for copyright details.
=========================================================================*/
#ifndef cmMakeDepend_h
#define cmMakeDepend_h
#include "cmMakefile.h"
2001-04-25 00:49:12 +04:00
#include "cmSourceFile.h"
#include "cmRegularExpression.h"
#include "cmStandardIncludes.h"
2001-01-11 22:47:38 +03:00
/** \class cmDependInformation
* \brief Store dependency information for a single source file.
*
* This structure stores the depend information for a single source file.
*/
struct cmDependInformation
{
2001-01-11 22:47:38 +03:00
/**
* Construct with dependency generation marked not done; instance
* not placed in cmMakefile's list.
*/
cmDependInformation()
{
2001-01-11 22:47:38 +03:00
m_DependDone = false;
m_ClassFileIndex = 0;
}
2001-01-11 22:47:38 +03:00
/**
* A set of indices into the m_DependInformation array of cmMakeDepend.
2001-01-11 22:47:38 +03:00
* The index represents the files that this file depends on.
* This must be a "set" to keep indices unique.
2001-01-11 22:47:38 +03:00
*/
typedef std::set<int> IndexSet;
IndexSet m_IndexSet;
2001-01-11 22:47:38 +03:00
/**
* Full path to this file.
*/
std::string m_FullPath;
2001-01-11 22:47:38 +03:00
/**
* Name that the include directive uses.
*/
std::string m_IncludeName;
2001-01-11 22:47:38 +03:00
/**
* The index into the cmMakefile::m_Classes list.
* The index value of 0 indicates that it is not in the list.
2001-01-11 22:47:38 +03:00
*/
2001-04-25 00:49:12 +04:00
cmSourceFile *m_ClassFileIndex;
2001-01-11 22:47:38 +03:00
/**
* This flag indicates whether dependency checking has been
* performed for this file.
*/
bool m_DependDone;
2001-01-11 22:47:38 +03:00
/**
* This method adds the dependencies of another file to this one.
*/
void MergeInfo(cmDependInformation*);
};
// cmMakeDepend is used to generate dependancy information for
// the classes in a makefile
class cmMakeDepend
{
public:
2001-01-11 22:47:38 +03:00
/**
* Construct the object with verbose turned off.
*/
cmMakeDepend();
2001-01-11 22:47:38 +03:00
/**
* Destructor.
*/
~cmMakeDepend();
/**
* Set the makefile that is used as a source of classes.
*/
void SetMakefile(cmMakefile* makefile);
2001-01-11 22:47:38 +03:00
/**
* Generate the depend information
*/
void DoDepends();
2001-01-11 22:47:38 +03:00
/**
2001-01-11 22:47:38 +03:00
* Add a directory to the search path for include files.
*/
void AddSearchPath(const char*);
2001-01-11 22:47:38 +03:00
private:
2001-01-11 22:47:38 +03:00
/**
* Add a source file to the search path.
*/
void AddFileToSearchPath(const char* filepath);
2001-01-11 22:47:38 +03:00
/**
* Find the index into the m_DependInformation array
2001-01-11 22:47:38 +03:00
* that matches the given m_IncludeName.
*/
int FindInformation(const char* includeName);
2001-01-11 22:47:38 +03:00
/**
2001-01-11 22:47:38 +03:00
* Compute the depend information for this class.
*/
void Depend(cmDependInformation* info);
2001-01-11 22:47:38 +03:00
/**
* Compute the depend information for this class.
*/
void DependWalk(cmDependInformation* info, const char* file);
/**
* Add a dependency. Possibly walk it for more dependencies.
*/
void AddDependency(cmDependInformation* info, const char* file);
/**
* Find the full path name for the given file name.
2001-01-11 22:47:38 +03:00
* This uses the include directories.
*/
std::string FullPath(const char*);
2001-01-11 22:47:38 +03:00
cmMakefile* m_Makefile;
bool m_Verbose;
cmRegularExpression m_IncludeFileRegularExpression;
typedef std::vector<cmDependInformation*> DependArray;
DependArray m_DependInformation;
std::vector<std::string> m_IncludeDirectories;
};
#endif