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);
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 //------------------------------------------------------------------------------
virtual bool Execute(const CString &FileName, CStringList &Includes)
Gathers dependencies to Includes string list starting from FileName file.
Definition: depsearch.cpp:623
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
size_t RecordsCount(void) const
Returns the number of dependency records.
Definition: depsearch.cpp:295
CString ResolveIncludePath(const CString &IncludeName)
Resolves a build unit file name into complete file path.
Definition: depsearch.cpp:653
size_t DirectCrossReferencesCount(const size_t Index) const
Counts direct cross references to a build unit with dependency record number Index.
Definition: depsearch.cpp:393
size_t IndirectCrossReferencesCount(const size_t Index)
Counts indirect cross references to a build unit with dependency record number Index.
Definition: depsearch.cpp:403
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)
Print dependency information for all of build units to the standard output.
Definition: depsearch.cpp:153
void Show(void)
Prints the build unit dependecy record contents to the standard output.
Definition: depsearch.cpp:54
size_t DependenciesCount(CDependencyRecord *Record)
Returns the number of dependencies for a build unit pointed by Record.
Definition: depsearch.cpp:215
void MakeRules(CMakefile &Makefile, const int Section, const bool Multiline)
Generates makefile rules for build unit dependencies.
Definition: depsearch.cpp:570
virtual void Clear(void)
Resets the filter to the initial state.
Definition: depsearch.cpp:606
~CIncludeSearchFilter(void)
Destroys dependency search filter.
Definition: depsearch.cpp:601
std::vector< CDependencyRecord * > m_Dependencies
List of units that this unit depends on.
Definition: depsearch.h:38
CStringList AllCrossReferences(const size_t Index)
Returns a complete list of build unit names that depend on a build unit with dependency record number...
Definition: depsearch.cpp:462
bool m_CrossReferencesComplete
Indicates that the list of cross-references is fully gathered.
Definition: depsearch.h:41
size_t AddRecord(const CString &Name)
Adds a new dependency record for the Name build unit.
Definition: depsearch.cpp:528
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
size_t CrossReferencesCount(CDependencyRecord *Record)
Returns the number of cross references for a build unit pointed by Record.
Definition: depsearch.cpp:255
void AddIncludeDirectory(const CString &Path)
Adds Path path to the list of unit lookup directories.
Definition: depsearch.cpp:633
bool m_DependenciesComplete
Indicates that the list of dependencies is fully gathered.
Definition: depsearch.h:40
bool AreDependenciesComplete(const size_t Index)
Verifies if a dependency list for a build unit with dependency record number Index is marked as compl...
Definition: depsearch.cpp:477
bool AddDependency(const size_t Index, const CString &DependencyName)
Adds the DependencyName build unit to a dependency record with number Index.
Definition: depsearch.cpp:545
CStringList DirectDependencies(const size_t Index) const
Returns a list of build unit names that a build unit with dependency record number Index depends on d...
Definition: depsearch.cpp:345
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
CString Name(const size_t Index) const
Returns name of a build unit with dependency record number Index.
Definition: depsearch.cpp:336
CStringList m_IncludeDirectories
a list of directories to look for build units.
Definition: depsearch.h:110
CStringList CrossReferences(CDependencyRecord *Record)
Returns the list of file names of build units that depend on a build unit pointed by Record.
Definition: depsearch.cpp:275
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
~CCppIncludeSearchFilter(void)
Destroys dependency search filter.
Definition: depsearch.cpp:695
CIncludeSearchFilter(void)
Creates dependency search filter.
Definition: depsearch.cpp:591
void ResetMarkers(void)
Clears CDependencyRecord::m_Marker for all records in CDependencyInfo::m_Records.
Definition: depsearch.cpp:207
CString GetName(void) const
Returns the file name of the build unit.
Definition: depsearch.h:44
void Clear(void)
Resets the unit dependency database to the initial state.
Definition: depsearch.cpp:143
CString m_Name
File name of the build unit.
Definition: depsearch.h:36
~CDependencyRecord(void)
Destroys dependency record.
Definition: depsearch.cpp:32
void AddMacroDefinitons(const CStringList &Macros)
Adds Macros macros to the list of macros.
Definition: depsearch.cpp:648
CStringList Dependencies(CDependencyRecord *Record)
Returns the list of file names of build units that a build unit pointed by Record depends on.
Definition: depsearch.cpp:235
void AddMacroDefiniton(const CString &Macro)
Adds Macro macro to the list of macros.
Definition: depsearch.cpp:643
Non-cryptographic string hash functions.
Makefile definition.
Definition: makefile.h:99
virtual void Assign(const CIncludeSearchFilter &Filter)
Copies filter settings from another filter.
Definition: depsearch.cpp:617
size_t AllDependenciesCount(const size_t Index)
Returns the total count of dependencies of a build unit with dependency record number Index.
Definition: depsearch.cpp:325
void AddCrossReference(const CDependencyRecord *Record)
Adds new cross reference for this build unit.
Definition: depsearch.cpp:122
bool AreCrossReferencesComplete(const size_t Index)
Verifies if a cross reference list for a build unit with dependency record number Index is marked as ...
Definition: depsearch.cpp:486
CStringList m_DefinedMacros
a list of preprocessor's macro defnitions.
Definition: depsearch.h:111
void SetDependenciesComplete(const size_t Index, const bool State=true)
Marks a dependency list for a build unit with dependency record number Index as complete.
Definition: depsearch.cpp:495
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
size_t AllCrossReferencesCount(const size_t Index)
Returns the total count of cross references of a build unit with dependency record number Index.
Definition: depsearch.cpp:418
virtual void Show(void)
Prints filter settings to standard output.
Definition: depsearch.cpp:612
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
virtual void Assign(const CCppIncludeSearchFilter &Filter)
Copies filter settings from another filter.
Definition: depsearch.cpp:700
CPlatform m_Platform
Platform/OS type, generally used for creating compatible file paths.
Definition: depsearch.h:66
virtual bool Execute(const CString &FileName, CStringList &Includes)
Gathers dependencies to Includes string list starting from FileName file.
Definition: depsearch.cpp:705
size_t IndirectDependenciesCount(const size_t Index)
Counts only indirect dependencies of a build unit with number Index.
Definition: depsearch.cpp:310
Declares interface for gathering build unit dependencies from project files into build unit dependenc...
Definition: depsearch.h:107
CStringList AllDependencies(const size_t Index)
Returns a complete list of build unit names that a build unit with dependency record number Index dep...
Definition: depsearch.cpp:378
void AddIncludeDirectories(const CStringList &Paths)
Adds Paths list of paths to the list of unit lookup directories.
Definition: depsearch.cpp:638
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
int FindRecord(const CString &Name)
Performs dependency record lookup by a build unit name.
Definition: depsearch.cpp:511
CCppIncludeSearchFilter(void)
Creates dependency search filter.
Definition: depsearch.cpp:685
Object-based makefile generation.
CStringList IndirectDependencies(const size_t Index)
Returns a list of build unit names that a build unit with dependency record number Index depends on i...
Definition: depsearch.cpp:359
~CDependencyInfo(void)
Destroys build unit dependency database.
Definition: depsearch.cpp:138
CStringList DirectCrossReferences(const size_t Index) const
Returns a list of build unit names that directly depend on a build unit with dependency record number...
Definition: depsearch.cpp:429
Platform / Operating System specific functions.
size_t DirectDependenciesCount(const size_t Index) const
Counts direct dependencies of a build unit with dependency record number Index.
Definition: depsearch.cpp:300
CDependencyInfo(void)
Creates build unit dependency database.
Definition: depsearch.cpp:133
CString OneLineReport(const size_t Index, const bool Deps, const bool XRefs)
Returns a short string representation of dependency information.
Definition: depsearch.cpp:183
void Clear(void)
Resets a dependency record to the initial state.
Definition: depsearch.cpp:43
CStringList IndirectCrossReferences(const size_t Index)
Returns a list of build unit names that indirectly depend on a build unit with dependency record numb...
Definition: depsearch.cpp:443
void SetCrossReferencesComplete(const size_t Index, const bool State=true)
Marks a cross reference list for a build unit with number Index as complete.
Definition: depsearch.cpp:503