cmXCodeObject.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #ifndef cmXCodeObject_h
  2. #define cmXCodeObject_h
  3. #include "cmStandardIncludes.h"
  4. class cmTarget;
  5. class cmXCodeObject
  6. {
  7. public:
  8. enum Type { OBJECT_LIST, STRING, ATTRIBUTE_GROUP, OBJECT_REF, OBJECT };
  9. enum PBXType { PBXGroup, PBXBuildStyle, PBXProject, PBXHeadersBuildPhase,
  10. PBXSourcesBuildPhase, PBXFrameworksBuildPhase,
  11. PBXNativeTarget, PBXFileReference, PBXBuildFile,
  12. PBXContainerItemProxy, PBXTargetDependency,
  13. PBXShellScriptBuildPhase, PBXResourcesBuildPhase,
  14. PBXApplicationReference, PBXExecutableFileReference,
  15. PBXLibraryReference, PBXToolTarget, PBXLibraryTarget,
  16. PBXAggregateTarget,XCBuildConfiguration,XCConfigurationList,
  17. PBXCopyFilesBuildPhase,
  18. None
  19. };
  20. class StringVec: public std::vector<cmStdString> {};
  21. static const char* PBXTypeNames[];
  22. virtual ~cmXCodeObject();
  23. cmXCodeObject(PBXType ptype, Type type);
  24. Type GetType() { return this->TypeValue;}
  25. PBXType GetIsA() { return this->IsA;}
  26. void SetString(const char* s);
  27. const char* GetString()
  28. {
  29. return this->String.c_str();
  30. }
  31. void AddAttribute(const char* name, cmXCodeObject* value)
  32. {
  33. this->ObjectAttributes[name] = value;
  34. }
  35. void SetObject(cmXCodeObject* value)
  36. {
  37. this->Object = value;
  38. }
  39. cmXCodeObject* GetObject()
  40. {
  41. return this->Object;
  42. }
  43. void AddObject(cmXCodeObject* value)
  44. {
  45. this->List.push_back(value);
  46. }
  47. bool HasObject(cmXCodeObject* o)
  48. {
  49. return !(std::find(this->List.begin(), this->List.end(), o) == this->List.end());
  50. }
  51. void AddUniqueObject(cmXCodeObject* value)
  52. {
  53. if(std::find(this->List.begin(), this->List.end(), value) == this->List.end())
  54. {
  55. this->List.push_back(value);
  56. }
  57. }
  58. static void Indent(int level, std::ostream& out);
  59. void Print(std::ostream& out);
  60. virtual void PrintComment(std::ostream&) {};
  61. static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
  62. const char* GetId()
  63. {
  64. return this->Id.c_str();
  65. }
  66. cmTarget* GetTarget()
  67. {
  68. return this->Target;
  69. }
  70. void SetTarget(cmTarget* t)
  71. {
  72. this->Target = t;
  73. }
  74. const char* GetComment() {return this->Comment.c_str();}
  75. bool HasComment() { return (this->Comment.size() != 0);}
  76. cmXCodeObject* GetObject(const char* name)
  77. {
  78. if(this->ObjectAttributes.count(name))
  79. {
  80. return this->ObjectAttributes[name];
  81. }
  82. return 0;
  83. }
  84. // serach the attribute list for an object of the specified type
  85. cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
  86. {
  87. for(std::vector<cmXCodeObject*>::iterator i = this->List.begin();
  88. i != this->List.end(); ++i)
  89. {
  90. cmXCodeObject* o = *i;
  91. if(o->IsA == t)
  92. {
  93. return o;
  94. }
  95. }
  96. return 0;
  97. }
  98. cmXCodeObject* GetPBXTargetDependency()
  99. {
  100. return this->PBXTargetDependencyValue;
  101. }
  102. void SetPBXTargetDependency(cmXCodeObject* d)
  103. {
  104. this->PBXTargetDependencyValue = d;
  105. }
  106. void CopyAttributes(cmXCodeObject* );
  107. void AddDependLibrary(const char* configName,
  108. const char* l)
  109. {
  110. if(!configName)
  111. {
  112. configName = "";
  113. }
  114. this->DependLibraries[configName].push_back(l);
  115. }
  116. std::map<cmStdString, StringVec> const& GetDependLibraries()
  117. {
  118. return this->DependLibraries;
  119. }
  120. std::vector<cmXCodeObject*> const& GetObjectList() { return this->List;}
  121. void SetComment(const char* c) { this->Comment = c;}
  122. protected:
  123. cmTarget* Target;
  124. Type TypeValue;
  125. cmStdString Id;
  126. PBXType IsA;
  127. int Version;
  128. cmStdString Comment;
  129. cmStdString String;
  130. cmXCodeObject* Object;
  131. cmXCodeObject* PBXTargetDependencyValue;
  132. std::vector<cmXCodeObject*> List;
  133. std::map<cmStdString, StringVec> DependLibraries;
  134. std::map<cmStdString, cmXCodeObject*> ObjectAttributes;
  135. };
  136. #endif