summaryrefslogtreecommitdiffstats
path: root/Source/cmXCodeObject.h
blob: 11a7088f4e7643258805fe2fd860f071ad4f8c36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#ifndef cmXCodeObject_h
#define cmXCodeObject_h

#include "cmStandardIncludes.h"
class cmTarget;

class cmXCodeObject
{
public:
  enum Type { OBJECT_LIST, STRING, ATTRIBUTE_GROUP, OBJECT_REF, OBJECT };
  enum PBXType { PBXGroup, PBXBuildStyle, PBXProject, PBXHeadersBuildPhase, 
                 PBXSourcesBuildPhase, PBXFrameworksBuildPhase, 
                 PBXNativeTarget, PBXFileReference, PBXBuildFile, 
                 PBXContainerItemProxy, PBXTargetDependency,
                 PBXShellScriptBuildPhase, PBXResourcesBuildPhase,
                 PBXApplicationReference, PBXExecutableFileReference, 
                 PBXLibraryReference, PBXToolTarget, PBXLibraryTarget, 
                 PBXAggregateTarget,XCBuildConfiguration,XCConfigurationList,
                 None
  };
  class StringVec: public std::vector<cmStdString> {};
  static const char* PBXTypeNames[];
  virtual ~cmXCodeObject();
  cmXCodeObject(PBXType ptype, Type type);
  Type GetType() { return m_Type;}
  PBXType GetIsA() { return m_IsA;}

  void SetString(const char* s);
  const char* GetString() 
    {
      return m_String.c_str();
    }
  
  void AddAttribute(const char* name, cmXCodeObject* value)
    {
      m_ObjectAttributes[name] = value;
    }
  
  void SetObject(cmXCodeObject* value)
    {
      m_Object = value;
    }
  cmXCodeObject* GetObject()
    {
      return m_Object;
    }
  void AddObject(cmXCodeObject* value)
    {
      m_List.push_back(value);
    }
  bool HasObject(cmXCodeObject* o)
    {
      return !(std::find(m_List.begin(), m_List.end(), o) == m_List.end());
    }
  void AddUniqueObject(cmXCodeObject* value)
    {
      if(std::find(m_List.begin(), m_List.end(), value) == m_List.end())
        {
        m_List.push_back(value);
        }
    }
  static void Indent(int level, std::ostream& out);
  void Print(std::ostream& out);
  virtual void PrintComment(std::ostream&) {};

  static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
  const char* GetId()
    {
      return m_Id.c_str();
    }
  cmTarget* GetcmTarget()
    {
      return m_cmTarget;
    }
  void SetcmTarget(cmTarget* t)
    {
      m_cmTarget = t;
    }
  const char* GetComment() {return m_Comment.c_str();}
  bool HasComment() { return (m_Comment.size() !=  0);}
  cmXCodeObject* GetObject(const char* name)
    {
      if(m_ObjectAttributes.count(name))
        {
        return m_ObjectAttributes[name];
        }
      return 0;
    }
  // serach the attribute list for an object of the specified type
  cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
    {
      for(std::vector<cmXCodeObject*>::iterator i = m_List.begin();
          i != m_List.end(); ++i)
        {
        cmXCodeObject* o = *i;
        if(o->m_IsA == t)
          {
          return o;
          }
        }
      return 0;
    }
  
  cmXCodeObject* GetPBXTargetDependency()
    {
      return m_PBXTargetDependency;
    }
  void SetPBXTargetDependency(cmXCodeObject* d)
    {
      m_PBXTargetDependency = d;
    }
  void CopyAttributes(cmXCodeObject* );
  
  void AddDependLibrary(const char* configName,
                        const char* l)
    {
      if(!configName)
        {
        configName = "";
        }
      m_DependLibraries[configName].push_back(l);
    }
  std::map<cmStdString, StringVec> const& GetDependLibraries()
    {
      return m_DependLibraries;
    }
  std::vector<cmXCodeObject*> const& GetObjectList() { return m_List;}
  void SetComment(const char* c) { m_Comment = c;}
protected:
  cmTarget* m_cmTarget;
  Type m_Type;
  cmStdString m_Id;
  PBXType m_IsA;
  int m_Version;
  cmStdString m_Comment;
  cmStdString m_String;
  cmXCodeObject* m_Object;
  cmXCodeObject* m_PBXTargetDependency;
  std::vector<cmXCodeObject*> m_List;
  std::map<cmStdString, StringVec> m_DependLibraries;
  std::map<cmStdString, cmXCodeObject*> m_ObjectAttributes;
};
#endif