ENH: create mainGroup

This commit is contained in:
Bill Hoffman 2005-01-28 16:00:10 -05:00
parent 892a7c4fd9
commit 97cd380970
2 changed files with 27 additions and 13 deletions

View File

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

View File

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