cbp2make
Makefile generation tool for Code::Blocks IDE
depsearch.h
Go to the documentation of this file.
1 /*
2  cbp2make : Makefile generation tool for the Code::Blocks IDE
3  Copyright (C) 2010-2013 Mirai Computing (mirai.computing@gmail.com)
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 //------------------------------------------------------------------------------
20 #ifndef DEPSEARCH_H
21 #define DEPSEARCH_H
22 //------------------------------------------------------------------------------
23 //#include <ostream>
24 //------------------------------------------------------------------------------
25 #include "stlstrings.h"
26 #include "stringhash.h"
27 #include "platforms.h"
28 #include "makefile.h"
29 //------------------------------------------------------------------------------
30 
31 class CDependencyInfo;
32 
34 {
35  private:
38  std::vector<CDependencyRecord *> m_Dependencies;
39  std::vector<CDependencyRecord *> m_CrossReferences;
42  int m_Marker;
43  public:
44  CString GetName(void) const { return m_Name; };
45  void SetName(const CString& Name);
46  hash_t Hash(void) const { return m_Hash; }
47  size_t DependenciesCount(void) const;
48  CDependencyRecord *Dependency(const size_t Index) const;
49  void AddDependency(const CDependencyRecord *Record);
50  size_t CrossReferencesCount(void) const;
51  CDependencyRecord *CrossReference(const size_t Index) const;
52  void AddCrossReference(const CDependencyRecord *Record);
55  int& Marker(void) { return m_Marker; }
56  void Clear(void);
57  void Show(void);
58  public:
59  CDependencyRecord(void);
60  ~CDependencyRecord(void);
61 };
62 
64 {
65  private:
67  std::vector<CDependencyRecord *> m_Records;
68  private:
69  void ResetMarkers(void);
70  size_t DependenciesCount(CDependencyRecord *Record);
71  CStringList Dependencies(CDependencyRecord *Record);
73  CStringList CrossReferences(CDependencyRecord *Record);
74  public:
75  CPlatform& Platform(void) { return m_Platform; }
76  void Clear(void);
77  void Show(void);
78  CString OneLineReport(const size_t Index, const bool Deps, const bool XRefs);
79  size_t RecordsCount(void) const;
80  CString Name(const size_t Index) const;
81  size_t DirectDependenciesCount(const size_t Index) const;
82  size_t IndirectDependenciesCount(const size_t Index);
83  size_t AllDependenciesCount(const size_t Index);
84  CStringList DirectDependencies(const size_t Index) const;
85  CStringList IndirectDependencies(const size_t Index);
86  CStringList AllDependencies(const size_t Index);
87  size_t DirectCrossReferencesCount(const size_t Index) const;
88  size_t IndirectCrossReferencesCount(const size_t Index);
89  size_t AllCrossReferencesCount(const size_t Index);
90  CStringList DirectCrossReferences(const size_t Index) const;
91  CStringList IndirectCrossReferences(const size_t Index);
92  CStringList AllCrossReferences(const size_t Index);
93  bool AreDependenciesComplete(const size_t Index);
94  bool AreCrossReferencesComplete(const size_t Index);
95  void SetDependenciesComplete(const size_t Index, const bool State = true);
96  void SetCrossReferencesComplete(const size_t Index, const bool State = true);
97  int FindRecord(const CString& Name);
98  size_t AddRecord(const CString& Name);
99  bool AddDependency(const size_t Index, const CString& DependencyName);
100  size_t AddDependency(const CString& Name, const CString& DependencyName);
101  void MakeRules(CMakefile& Makefile, const int Section, const bool Multiline);
102  public:
103  CDependencyInfo(void);
104  ~CDependencyInfo(void);
105 };
106 
108 {
109  protected:
112  public:
113  virtual void Clear(void);
114  virtual void Show(void);
115  virtual void Assign(const CIncludeSearchFilter& Filter);
116  virtual bool Execute(const CString& FileName, CStringList& Includes);
117  virtual bool Execute(const CString& FileName, CDependencyInfo& Dependencies);
118  void AddIncludeDirectory(const CString& Path);
119  void AddIncludeDirectories(const CStringList& Paths);
120  void AddMacroDefiniton(const CString& Macro);
121  void AddMacroDefinitons(const CStringList& Macros);
122  CString ResolveIncludePath(const CString& IncludeName);
123  public:
124  CIncludeSearchFilter(void);
126  ~CIncludeSearchFilter(void);
127 };
128 
130 {
131  public:
132  virtual void Assign(const CCppIncludeSearchFilter& Filter);
133  virtual bool Execute(const CString& FileName, CStringList& Includes);
134  virtual bool Execute(const CString& FileName, CDependencyInfo& Dependencies);
135  public:
139 };
140 
141 #endif
142 //------------------------------------------------------------------------------
CDependencyRecord * Dependency(const size_t Index) const
Returns dependency record with number Index.
Definition: depsearch.cpp:90
std::vector< CDependencyRecord * > m_CrossReferences
List of units that depend on this unit.
Definition: depsearch.h:39
hash_t Hash(void) const
Returns string hash for the file name.
Definition: depsearch.h:46
Gathers build unit dependencies from C/C++ source files withing project into build unit dependency da...
Definition: depsearch.h:129
Dependency information for build units in a project.
Definition: depsearch.h:63
void Show(void)
Prints the build unit dependecy record contents to the standard output.
Definition: depsearch.cpp:54
std::vector< CDependencyRecord * > m_Dependencies
List of units that this unit depends on.
Definition: depsearch.h:38
bool m_CrossReferencesComplete
Indicates that the list of cross-references is fully gathered.
Definition: depsearch.h:41
CPlatform & Platform(void)
Platform/OS type, generally used for creating compatible file paths.
Definition: depsearch.h:75
Definition: stlstrings.h:98
void SetName(const CString &Name)
Changes the file name of the build unit.
Definition: depsearch.cpp:37
bool m_DependenciesComplete
Indicates that the list of dependencies is fully gathered.
Definition: depsearch.h:40
int & Marker(void)
Indicates that this unit was already walked through by a dependency unwinding process to avoid infini...
Definition: depsearch.h:55
size_t DependenciesCount(void) const
Returns the number of unit denpendencies.
Definition: depsearch.cpp:85
CStringList m_IncludeDirectories
a list of directories to look for build units.
Definition: depsearch.h:110
uint32_t hash_t
Type of hash function result.
Definition: stringhash.h:13
size_t CrossReferencesCount(void) const
Returns the number of cross references to this unit.
Definition: depsearch.cpp:108
Dependency record for a single build unit.
Definition: depsearch.h:33
Definition: stlstrings.h:32
CString GetName(void) const
Returns the file name of the build unit.
Definition: depsearch.h:44
CString m_Name
File name of the build unit.
Definition: depsearch.h:36
~CDependencyRecord(void)
Destroys dependency record.
Definition: depsearch.cpp:32
Non-cryptographic string hash functions.
Makefile definition.
Definition: makefile.h:99
void AddCrossReference(const CDependencyRecord *Record)
Adds new cross reference for this build unit.
Definition: depsearch.cpp:122
CStringList m_DefinedMacros
a list of preprocessor&#39;s macro defnitions.
Definition: depsearch.h:111
std::vector< CDependencyRecord * > m_Records
Database of build unit dependencies.
Definition: depsearch.h:67
void AddDependency(const CDependencyRecord *Record)
Adds new dependency for this build unit.
Definition: depsearch.cpp:99
bool & CrossReferencesComplete(void)
Indicates that the list of cross-references is fully gathered.
Definition: depsearch.h:54
Contains platform-specific settings and generates commands from templates.
Definition: platforms.h:34
CPlatform m_Platform
Platform/OS type, generally used for creating compatible file paths.
Definition: depsearch.h:66
Declares interface for gathering build unit dependencies from project files into build unit dependenc...
Definition: depsearch.h:107
CDependencyRecord * CrossReference(const size_t Index) const
Returns cross reference with number Index.
Definition: depsearch.cpp:113
bool & DependenciesComplete(void)
Indicates that the list of dependencies is fully gathered.
Definition: depsearch.h:53
hash_t m_Hash
String hash of the unit name CDependencyRecord::m_Name.
Definition: depsearch.h:37
CDependencyRecord(void)
Creates dependency record.
Definition: depsearch.cpp:27
int m_Marker
Indicates that this unit was already walked through by a dependency unwinding process to avoid infini...
Definition: depsearch.h:42
Object-based makefile generation.
Platform / Operating System specific functions.
void Clear(void)
Resets a dependency record to the initial state.
Definition: depsearch.cpp:43