source: CMT/v1r26/source/cmt_deps_builder.h

Last change on this file was 588, checked in by rybkin, 13 years ago

See C.L. 465

  • Property svn:eol-style set to native
File size: 1.9 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, 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) 
41          {
42            m_filter->clear ();
43            delete m_filter;
44          }
45        m_filter = 0;
46        m_stamp = cmt_string (); 
47      }
48
49  private:
50
51    const Use* m_use;
52    cmt_regexp* m_filter;
53    cmt_string m_stamp;
54  };
55
56  typedef cmt_vector<HeaderFilter> HeaderFilters;
57
58  void clear ();
59  void add (const cmt_string& path, const cmt_string& substitution);
60  void add_includes (const Use& use);
61  void add_header_filter (const Use* use, cmt_regexp* filter, const cmt_string& stamp);
62  void add_header_filter (const HeaderFilter& hf);
63  CmtSystem::cmt_string_vector& run (const cmt_string& file_name,
64                                     const cmt_string& constituent_name);
65
66  DepsBuilder ();
67  ~DepsBuilder ();
68
69private:
70
71  DepsBuilder (const DepsBuilder&);
72  DepsBuilder& operator = (const DepsBuilder&);
73
74  CmtSystem::cmt_string_vector m_include_paths;
75  CmtSystem::cmt_string_vector m_substitutions;
76  HeaderFilters m_header_filters;
77  CmtSystem::cmt_string_vector m_deps;
78  CmtSystem::cmt_string_vector m_all_deps;
79
80};
81
82#endif
Note: See TracBrowser for help on using the repository browser.