cmXCodeObject.cxx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #include "cmXCodeObject.h"
  2. #include "cmSystemTools.h"
  3. const char* cmXCodeObject::PBXTypeNames[] = {
  4. "PBXGroup", "PBXBuildStyle", "PBXProject", "PBXHeadersBuildPhase",
  5. "PBXSourcesBuildPhase", "PBXFrameworksBuildPhase", "PBXNativeTarget",
  6. "PBXFileReference", "PBXBuildFile", "PBXContainerItemProxy",
  7. "PBXTargetDependency", "PBXShellScriptBuildPhase",
  8. "PBXResourcesBuildPhase", "PBXApplicationReference",
  9. "PBXExecutableFileReference", "PBXLibraryReference", "PBXToolTarget",
  10. "PBXLibraryTarget", "PBXAggregateTarget",
  11. "None"
  12. };
  13. cmXCodeObject::~cmXCodeObject()
  14. {
  15. }
  16. //----------------------------------------------------------------------------
  17. cmXCodeObject::cmXCodeObject(PBXType ptype, Type type)
  18. {
  19. m_PBXTargetDependency = 0;
  20. m_cmTarget = 0;
  21. m_Object =0;
  22. m_IsA = ptype;
  23. if(type == OBJECT)
  24. {
  25. cmOStringStream str;
  26. str << (void*)this;
  27. str << (void*)this;
  28. str << (void*)this;
  29. m_Id = str.str();
  30. }
  31. else
  32. {
  33. m_Id = "Temporary cmake object, should not be refered to in xcode file";
  34. }
  35. cmSystemTools::ReplaceString(m_Id, "0x", "");
  36. m_Id = cmSystemTools::UpperCase(m_Id);
  37. if(m_Id.size() < 24)
  38. {
  39. int diff = 24 - m_Id.size();
  40. for(int i =0; i < diff; ++i)
  41. {
  42. m_Id += "0";
  43. }
  44. }
  45. m_Type = type;
  46. if(m_Type == OBJECT)
  47. {
  48. this->AddAttribute("isa", 0);
  49. }
  50. }
  51. //----------------------------------------------------------------------------
  52. void cmXCodeObject::Indent(int level, std::ostream& out)
  53. {
  54. while(level)
  55. {
  56. out << " ";
  57. level--;
  58. }
  59. }
  60. //----------------------------------------------------------------------------
  61. void cmXCodeObject::Print(std::ostream& out)
  62. {
  63. cmXCodeObject::Indent(2, out);
  64. out << m_Id << " = {\n";
  65. std::map<cmStdString, cmXCodeObject*>::iterator i;
  66. for(i = m_ObjectAttributes.begin(); i != m_ObjectAttributes.end(); ++i)
  67. {
  68. cmXCodeObject* object = i->second;
  69. cmXCodeObject::Indent(3, out);
  70. if(i->first == "isa")
  71. {
  72. out << i->first << " = " << PBXTypeNames[m_IsA] << ";\n";
  73. }
  74. else if(object->m_Type == OBJECT_LIST)
  75. {
  76. out << i->first << " = (\n";
  77. for(unsigned int k = 0; k < i->second->m_List.size(); k++)
  78. {
  79. cmXCodeObject::Indent(4, out);
  80. out << i->second->m_List[k]->m_Id << ",\n";
  81. }
  82. cmXCodeObject::Indent(3, out);
  83. out << ");\n";
  84. }
  85. else if(object->m_Type == ATTRIBUTE_GROUP)
  86. {
  87. std::map<cmStdString, cmXCodeObject*>::iterator j;
  88. out << i->first << " = {\n";
  89. for(j = object->m_ObjectAttributes.begin(); j != object->m_ObjectAttributes.end(); ++j)
  90. {
  91. cmXCodeObject::Indent(4, out);
  92. out << j->first << " = " << j->second->m_String << ";\n";
  93. }
  94. cmXCodeObject::Indent(3, out);
  95. out << "};\n";
  96. }
  97. else if(object->m_Type == OBJECT_REF)
  98. {
  99. out << i->first << " = " << object->m_Object->m_Id << ";\n";
  100. }
  101. else if(object->m_Type == STRING)
  102. {
  103. out << i->first << " = " << object->m_String << ";\n";
  104. }
  105. else
  106. {
  107. out << "what is this?? " << i->first << "\n";
  108. }
  109. }
  110. cmXCodeObject::Indent(2, out);
  111. out << "};\n";
  112. }
  113. //----------------------------------------------------------------------------
  114. void cmXCodeObject::PrintList(std::vector<cmXCodeObject*> const& objs,
  115. std::ostream& out)
  116. {
  117. cmXCodeObject::Indent(1, out);
  118. out << "objects = {\n";
  119. for(unsigned int i = 0; i < objs.size(); ++i)
  120. {
  121. if(objs[i]->m_Type == OBJECT)
  122. {
  123. objs[i]->Print(out);
  124. }
  125. }
  126. cmXCodeObject::Indent(1, out);
  127. out << "};\n";
  128. }
  129. void cmXCodeObject::CopyAttributes(cmXCodeObject* copy)
  130. {
  131. this->m_ObjectAttributes = copy->m_ObjectAttributes;
  132. this->m_List = copy->m_List;
  133. this->m_String = copy->m_String;
  134. this->m_Object = copy->m_Object;
  135. }