cmXCodeObject.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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,
  17. None
  18. };
  19. static const char* PBXTypeNames[];
  20. ~cmXCodeObject();
  21. cmXCodeObject(PBXType ptype, Type type);
  22. void SetString(const char* s)
  23. {
  24. m_String = "\"";
  25. m_String += s;
  26. m_String += "\"";
  27. }
  28. const char* GetString()
  29. {
  30. return m_String.c_str();
  31. }
  32. void AddAttribute(const char* name, cmXCodeObject* value)
  33. {
  34. m_ObjectAttributes[name] = value;
  35. }
  36. void SetObject(cmXCodeObject* value)
  37. {
  38. m_Object = value;
  39. }
  40. cmXCodeObject* GetObject()
  41. {
  42. return m_Object;
  43. }
  44. void AddObject(cmXCodeObject* value)
  45. {
  46. m_List.push_back(value);
  47. }
  48. static void Indent(int level, std::ostream& out);
  49. void Print(std::ostream& out);
  50. static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
  51. const char* GetId()
  52. {
  53. return m_Id.c_str();
  54. }
  55. cmTarget* GetcmTarget()
  56. {
  57. return m_cmTarget;
  58. }
  59. void SetcmTarget(cmTarget* t)
  60. {
  61. m_cmTarget = t;
  62. }
  63. cmXCodeObject* GetObject(const char* name)
  64. {
  65. if(m_ObjectAttributes.count(name))
  66. {
  67. return m_ObjectAttributes[name];
  68. }
  69. return 0;
  70. }
  71. // serach the attribute list for an object of the specified type
  72. cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
  73. {
  74. for(std::vector<cmXCodeObject*>::iterator i = m_List.begin();
  75. i != m_List.end(); ++i)
  76. {
  77. cmXCodeObject* o = *i;
  78. if(o->m_IsA == t)
  79. {
  80. return o;
  81. }
  82. }
  83. return 0;
  84. }
  85. cmXCodeObject* GetPBXTargetDependency()
  86. {
  87. return m_PBXTargetDependency;
  88. }
  89. void SetPBXTargetDependency(cmXCodeObject* d)
  90. {
  91. m_PBXTargetDependency = d;
  92. }
  93. void CopyAttributes(cmXCodeObject* );
  94. private:
  95. cmTarget* m_cmTarget;
  96. Type m_Type;
  97. cmStdString m_Id;
  98. PBXType m_IsA;
  99. cmStdString m_String;
  100. cmXCodeObject* m_Object;
  101. cmXCodeObject* m_PBXTargetDependency;
  102. std::vector<cmXCodeObject*> m_List;
  103. std::map<cmStdString, cmXCodeObject*> m_ObjectAttributes;
  104. };
  105. #endif