1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 #ifndef cmXCodeObject_h
13 #define cmXCodeObject_h
15 #include "cmStandardIncludes.h"
21 enum Type { OBJECT_LIST, STRING, ATTRIBUTE_GROUP, OBJECT_REF, OBJECT };
22 enum PBXType { PBXGroup, PBXBuildStyle, PBXProject, PBXHeadersBuildPhase,
23 PBXSourcesBuildPhase, PBXFrameworksBuildPhase,
24 PBXNativeTarget, PBXFileReference, PBXBuildFile,
25 PBXContainerItemProxy, PBXTargetDependency,
26 PBXShellScriptBuildPhase, PBXResourcesBuildPhase,
27 PBXApplicationReference, PBXExecutableFileReference,
28 PBXLibraryReference, PBXToolTarget, PBXLibraryTarget,
29 PBXAggregateTarget,XCBuildConfiguration,XCConfigurationList,
30 PBXCopyFilesBuildPhase,
33 class StringVec: public std::vector<cmStdString> {};
34 static const char* PBXTypeNames[];
35 virtual ~cmXCodeObject();
36 cmXCodeObject(PBXType ptype, Type type);
37 Type GetType() { return this->TypeValue;}
38 PBXType GetIsA() { return this->IsA;}
40 void SetString(const char* s);
41 const char* GetString()
43 return this->String.c_str();
46 void AddAttribute(const char* name, cmXCodeObject* value)
48 this->ObjectAttributes[name] = value;
51 void SetObject(cmXCodeObject* value)
55 cmXCodeObject* GetObject()
59 void AddObject(cmXCodeObject* value)
61 this->List.push_back(value);
63 bool HasObject(cmXCodeObject* o)
65 return !(std::find(this->List.begin(), this->List.end(), o)
68 void AddUniqueObject(cmXCodeObject* value)
70 if(std::find(this->List.begin(), this->List.end(), value)
73 this->List.push_back(value);
76 static void Indent(int level, std::ostream& out);
77 void Print(std::ostream& out);
78 virtual void PrintComment(std::ostream&) {};
80 static void PrintList(std::vector<cmXCodeObject*> const&,
84 return this->Id.c_str();
86 void SetId(const char* id)
94 void SetTarget(cmTarget* t)
98 const char* GetComment() {return this->Comment.c_str();}
99 bool HasComment() { return (this->Comment.size() != 0);}
100 cmXCodeObject* GetObject(const char* name)
102 if(this->ObjectAttributes.count(name))
104 return this->ObjectAttributes[name];
108 // serach the attribute list for an object of the specified type
109 cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
111 for(std::vector<cmXCodeObject*>::iterator i = this->List.begin();
112 i != this->List.end(); ++i)
114 cmXCodeObject* o = *i;
123 void CopyAttributes(cmXCodeObject* );
125 void AddDependLibrary(const char* configName,
132 this->DependLibraries[configName].push_back(l);
134 std::map<cmStdString, StringVec> const& GetDependLibraries()
136 return this->DependLibraries;
138 void AddDependTarget(const char* configName,
145 this->DependTargets[configName].push_back(tName);
147 std::map<cmStdString, StringVec> const& GetDependTargets()
149 return this->DependTargets;
151 std::vector<cmXCodeObject*> const& GetObjectList() { return this->List;}
152 void SetComment(const char* c) { this->Comment = c;}
153 static void PrintString(std::ostream& os,cmStdString String);
155 void PrintString(std::ostream& os) const;
164 cmXCodeObject* Object;
165 std::vector<cmXCodeObject*> List;
166 std::map<cmStdString, StringVec> DependLibraries;
167 std::map<cmStdString, StringVec> DependTargets;
168 std::map<cmStdString, cmXCodeObject*> ObjectAttributes;