Selaa lähdekoodia

ENH: create mainGroup

Bill Hoffman 21 vuotta sitten
vanhempi
sitoutus
97cd380970
2 muutettua tiedostoa jossa 27 lisäystä ja 13 poistoa
  1. 22 11
      Source/cmGlobalXCodeGenerator.cxx
  2. 5 2
      Source/cmGlobalXCodeGenerator.h

+ 22 - 11
Source/cmGlobalXCodeGenerator.cxx

@@ -100,16 +100,22 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateString(const char* s)
   obj->SetString(s);
   return obj;
 }
+cmXCodeObject* cmGlobalXCodeGenerator::CreateObjectReference(cmXCodeObject* ref)
+{
+  cmXCodeObject* obj = this->CreateObject(cmXCodeObject::OBJECT_REF);
+  obj->SetObject(ref);
+  return obj;
+}
 
 cmXCodeObject* 
 cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg, 
-                                              cmSourceFile* sf)
+                                              cmSourceFile* sf,
+                                              cmXCodeObject* mainGroupChildren)
 {
   cmXCodeObject* fileRef = this->CreateObject(cmXCodeObject::PBXFileReference);
-  cmXCodeObject* fileRefPtr = this->CreateObject(cmXCodeObject::OBJECT_REF);
-  fileRefPtr->SetObject(fileRef);
+  mainGroupChildren->AddObject(fileRef);
   cmXCodeObject* buildFile = this->CreateObject(cmXCodeObject::PBXBuildFile);
-  buildFile->AddAttribute("fileRef", fileRefPtr);
+  buildFile->AddAttribute("fileRef", this->CreateObjectReference(fileRef));
   cmXCodeObject* settings = this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
   buildFile->AddAttribute("settings", settings);
   fileRef->AddAttribute("fileEncoding", this->CreateString("4"));
@@ -123,7 +129,8 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg,
 
 //----------------------------------------------------------------------------
 void cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
-                                                std::vector<cmXCodeObject*>& targets)
+                                                std::vector<cmXCodeObject*>& targets,
+                                                cmXCodeObject* mainGroupChildren)
 {
   cmTargets &tgts = gen->GetMakefile()->GetTargets();
   for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); l++)
@@ -139,7 +146,7 @@ void cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
     for(std::vector<cmSourceFile*>::iterator i = classes.begin(); 
         i != classes.end(); ++i)
       {
-      buildFiles->AddObject(this->CreateXCodeSourceFile(gen, *i));
+      buildFiles->AddObject(this->CreateXCodeSourceFile(gen, *i, mainGroupChildren));
       }
     // create header build phase
     cmXCodeObject* headerBuildPhase = this->CreateObject(cmXCodeObject::PBXHeadersBuildPhase);
@@ -193,9 +200,7 @@ void cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
       fileRef->AddAttribute("path", this->CreateString(l->first.c_str()));
       fileRef->AddAttribute("refType", this->CreateString("3"));
       fileRef->AddAttribute("sourceTree", this->CreateString("BUILT_PRODUCTS_DIR"));
-      cmXCodeObject* fileRefPtr = this->CreateObject(cmXCodeObject::OBJECT_REF);
-      fileRefPtr->SetObject(fileRef);
-      target->AddAttribute("productReference", fileRefPtr);
+      target->AddAttribute("productReference", this->CreateObjectReference(fileRef));
       target->AddAttribute("productType", this->CreateString("\"com.apple.product-type.tool\""));
       }
     else if (l->second.GetType() == cmTarget::UTILITY)
@@ -229,9 +234,15 @@ void cmGlobalXCodeGenerator::CreateXCodeObjects(cmLocalGenerator* ,
   listObjs->AddObject(developBuildStyle);
   listObjs->AddObject(deployBuildStyle);
   
-  
+  cmXCodeObject* mainGroup = this->CreateObject(cmXCodeObject::PBXGroup);
+  cmXCodeObject* mainGroupChildren = this->CreateObject(cmXCodeObject::OBJECT_LIST);
+  mainGroup->AddAttribute("children", mainGroupChildren);
+  mainGroup->AddAttribute("refType", this->CreateString("4"));
+  mainGroup->AddAttribute("sourceTree", this->CreateString("\"<group>\""));
+
   m_RootObject = this->CreateObject(cmXCodeObject::PBXProject);
   group = this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
+  m_RootObject->AddAttribute("mainGroup", this->CreateObjectReference(mainGroup));
   m_RootObject->AddAttribute("buildSettings", group);
   m_RootObject->AddAttribute("buildSyles", listObjs);
   m_RootObject->AddAttribute("hasScannedForEncodings", this->CreateString("0"));
@@ -239,7 +250,7 @@ void cmGlobalXCodeGenerator::CreateXCodeObjects(cmLocalGenerator* ,
   for(std::vector<cmLocalGenerator*>::iterator i = generators.begin();
       i != generators.end(); ++i)
     {
-    this->CreateXCodeTargets(*i, targets);
+    this->CreateXCodeTargets(*i, targets, mainGroupChildren);
     }
   cmXCodeObject* allTargets = this->CreateObject(cmXCodeObject::OBJECT_LIST);
   for(std::vector<cmXCodeObject*>::iterator i = targets.begin();

+ 5 - 2
Source/cmGlobalXCodeGenerator.h

@@ -70,6 +70,7 @@ private:
   cmXCodeObject* CreateObject(cmXCodeObject::PBXType ptype);
   cmXCodeObject* CreateObject(cmXCodeObject::Type type);
   cmXCodeObject* CreateString(const char* s);
+  cmXCodeObject* CreateObjectReference(cmXCodeObject*);
   
   // delete all objects in the m_XCodeObjects vector.
   void ClearXCodeObjects();
@@ -80,8 +81,10 @@ private:
   void  WriteXCodePBXProj(std::ostream& fout,
                           cmLocalGenerator* root,
                           std::vector<cmLocalGenerator*>& generators);
-  cmXCodeObject* CreateXCodeSourceFile(cmLocalGenerator* gen, cmSourceFile* sf);
-  void CreateXCodeTargets(cmLocalGenerator* gen, std::vector<cmXCodeObject*>&);  
+  cmXCodeObject* CreateXCodeSourceFile(cmLocalGenerator* gen, cmSourceFile* sf,
+                                       cmXCodeObject* mainGroupChildren);
+  void CreateXCodeTargets(cmLocalGenerator* gen, std::vector<cmXCodeObject*>&,
+                          cmXCodeObject* mainGroupChildren);  
   
   std::vector<cmXCodeObject*> m_XCodeObjects;
   cmXCodeObject* m_RootObject;