You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
4.6 KiB

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