cmXCodeObject.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. bool HasObject(cmXCodeObject* o)
  49. {
  50. return !(std::find(m_List.begin(), m_List.end(), o) == m_List.end());
  51. }
  52. void AddUniqueObject(cmXCodeObject* value)
  53. {
  54. if(std::find(m_List.begin(), m_List.end(), value) == m_List.end())
  55. {
  56. m_List.push_back(value);
  57. }
  58. }
  59. static void Indent(int level, std::ostream& out);
  60. void Print(std::ostream& out);
  61. static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
  62. const char* GetId()
  63. {
  64. return m_Id.c_str();
  65. }
  66. cmTarget* GetcmTarget()
  67. {
  68. return m_cmTarget;
  69. }
  70. void SetcmTarget(cmTarget* t)
  71. {
  72. m_cmTarget = t;
  73. }
  74. cmXCodeObject* GetObject(const char* name)
  75. {
  76. if(m_ObjectAttributes.count(name))
  77. {
  78. return m_ObjectAttributes[name];
  79. }
  80. return 0;
  81. }
  82. // serach the attribute list for an object of the specified type
  83. cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
  84. {
  85. for(std::vector<cmXCodeObject*>::iterator i = m_List.begin();
  86. i != m_List.end(); ++i)
  87. {
  88. cmXCodeObject* o = *i;
  89. if(o->m_IsA == t)
  90. {
  91. return o;
  92. }
  93. }
  94. return 0;
  95. }
  96. cmXCodeObject* GetPBXTargetDependency()
  97. {
  98. return m_PBXTargetDependency;
  99. }
  100. void SetPBXTargetDependency(cmXCodeObject* d)
  101. {
  102. m_PBXTargetDependency = d;
  103. }
  104. void CopyAttributes(cmXCodeObject* );
  105. void AddDependLibrary(const char* l)
  106. {
  107. m_DependLibraries.push_back(l);
  108. }
  109. std::vector<cmStdString> const& GetDependLibraries()
  110. {
  111. return m_DependLibraries;
  112. }
  113. private:
  114. cmTarget* m_cmTarget;
  115. Type m_Type;
  116. cmStdString m_Id;
  117. PBXType m_IsA;
  118. cmStdString m_String;
  119. cmXCodeObject* m_Object;
  120. cmXCodeObject* m_PBXTargetDependency;
  121. std::vector<cmXCodeObject*> m_List;
  122. std::vector<cmStdString> m_DependLibraries;
  123. std::map<cmStdString, cmXCodeObject*> m_ObjectAttributes;
  124. };
  125. #endif