cmXCodeObject.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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)
  50. == this->List.end());
  51. }
  52. void AddUniqueObject(cmXCodeObject* value)
  53. {
  54. if(std::find(this->List.begin(), this->List.end(), value)
  55. == this->List.end())
  56. {
  57. this->List.push_back(value);
  58. }
  59. }
  60. static void Indent(int level, std::ostream& out);
  61. void Print(std::ostream& out);
  62. virtual void PrintComment(std::ostream&) {};
  63. static void PrintList(std::vector<cmXCodeObject*> const&,
  64. std::ostream& out);
  65. const char* GetId()
  66. {
  67. return this->Id.c_str();
  68. }
  69. cmTarget* GetTarget()
  70. {
  71. return this->Target;
  72. }
  73. void SetTarget(cmTarget* t)
  74. {
  75. this->Target = t;
  76. }
  77. const char* GetComment() {return this->Comment.c_str();}
  78. bool HasComment() { return (this->Comment.size() != 0);}
  79. cmXCodeObject* GetObject(const char* name)
  80. {
  81. if(this->ObjectAttributes.count(name))
  82. {
  83. return this->ObjectAttributes[name];
  84. }
  85. return 0;
  86. }
  87. // serach the attribute list for an object of the specified type
  88. cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
  89. {
  90. for(std::vector<cmXCodeObject*>::iterator i = this->List.begin();
  91. i != this->List.end(); ++i)
  92. {
  93. cmXCodeObject* o = *i;
  94. if(o->IsA == t)
  95. {
  96. return o;
  97. }
  98. }
  99. return 0;
  100. }
  101. cmXCodeObject* GetPBXTargetDependency()
  102. {
  103. return this->PBXTargetDependencyValue;
  104. }
  105. void SetPBXTargetDependency(cmXCodeObject* d)
  106. {
  107. this->PBXTargetDependencyValue = d;
  108. }
  109. void CopyAttributes(cmXCodeObject* );
  110. void AddDependLibrary(const char* configName,
  111. const char* l)
  112. {
  113. if(!configName)
  114. {
  115. configName = "";
  116. }
  117. this->DependLibraries[configName].push_back(l);
  118. }
  119. std::map<cmStdString, StringVec> const& GetDependLibraries()
  120. {
  121. return this->DependLibraries;
  122. }
  123. std::vector<cmXCodeObject*> const& GetObjectList() { return this->List;}
  124. void SetComment(const char* c) { this->Comment = c;}
  125. protected:
  126. cmTarget* Target;
  127. Type TypeValue;
  128. cmStdString Id;
  129. PBXType IsA;
  130. int Version;
  131. cmStdString Comment;
  132. cmStdString String;
  133. cmXCodeObject* Object;
  134. cmXCodeObject* PBXTargetDependencyValue;
  135. std::vector<cmXCodeObject*> List;
  136. std::map<cmStdString, StringVec> DependLibraries;
  137. std::map<cmStdString, cmXCodeObject*> ObjectAttributes;
  138. };
  139. #endif