source: CMT/v1r21/source/cmt_deps_builder.h

Last change on this file was 427, checked in by rybkin, 17 years ago

See C.L. 333

  • Property svn:eol-style set to native
File size: 1.8 KB
Line 
1//-----------------------------------------------------------
2// Copyright Christian Arnault LAL-Orsay CNRS
3// arnault@lal.in2p3.fr
4// See the complete license in cmt_license.txt "http://www.cecill.info".
5//-----------------------------------------------------------
6
7#ifndef __cmt_deps_builder_h__
8#define __cmt_deps_builder_h__
9
10#include "cmt.h"
11#include "cmt_system.h"
12#include "cmt_use.h"
13
14class DepsBuilder
15{
16public:
17
18  class HeaderFilter
19  {
20  public:
21
22    HeaderFilter ()
23      : m_use (0), m_filter (0) { }
24
25    HeaderFilter (const Use* use, const cmt_regexp* filter, const cmt_string& stamp)
26      : m_use (use), m_filter (filter), m_stamp (stamp) { }
27
28    ~HeaderFilter ()
29      { }
30
31    inline const Use* use () const
32      { return m_use; }
33
34    inline bool use_stamp (const cmt_string& header, cmt_string& stamp) const
35      { return m_filter->match (header) ? stamp = m_stamp, true : false ; }
36
37    void clear ()
38      {
39        m_use = 0;
40        if (m_filter) delete m_filter;
41        m_filter = 0;
42        m_stamp = cmt_string (); 
43      }
44
45  private:
46
47    const Use* m_use;
48    const cmt_regexp* m_filter;
49    cmt_string m_stamp;
50  };
51
52  typedef cmt_vector<HeaderFilter> HeaderFilters;
53
54  void clear ();
55  void add (const cmt_string& path, const cmt_string& substitution);
56  void add_includes (const Use& use);
57  void add_header_filter (const Use* use, const cmt_regexp* filter, const cmt_string& stamp);
58  void add_header_filter (const HeaderFilter& hf);
59  CmtSystem::cmt_string_vector& run (const cmt_string& file_name);
60
61  DepsBuilder ()
62    { }
63
64private:
65
66  DepsBuilder (const DepsBuilder&)
67    { }
68
69  CmtSystem::cmt_string_vector m_include_paths;
70  CmtSystem::cmt_string_vector m_substitutions;
71  HeaderFilters m_header_filters;
72
73  CmtSystem::cmt_string_vector m_deps;
74  CmtSystem::cmt_string_vector m_all_deps;
75
76};
77
78#endif
Note: See TracBrowser for help on using the repository browser.