cmXCodeObject.h 3.5 KB

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