source: CMT/HEAD/source/cmt_deps_builder.h @ 663

Last change on this file since 663 was 663, checked in by rybkin, 10 years ago

See C.L. 522

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