FIX: fix crashing test SubDir for xcode

This commit is contained in:
Andy Cedilnik 2005-03-11 10:53:45 -05:00
parent 213c04563c
commit 95d6107da2
2 changed files with 39 additions and 21 deletions

View File

@ -168,6 +168,7 @@ void cmGlobalXCodeGenerator::Generate()
for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it) for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
{ {
cmLocalGenerator* root = it->second[0]; cmLocalGenerator* root = it->second[0];
m_CurrentProject = root->GetMakefile()->GetProjectName();
this->SetCurrentLocalGenerator(root); this->SetCurrentLocalGenerator(root);
m_OutputDir = m_CurrentMakefile->GetHomeOutputDirectory(); m_OutputDir = m_CurrentMakefile->GetHomeOutputDirectory();
m_OutputDir = cmSystemTools::CollapseFullPath(m_OutputDir.c_str()); m_OutputDir = cmSystemTools::CollapseFullPath(m_OutputDir.c_str());
@ -722,7 +723,7 @@ cmGlobalXCodeGenerator::AddCommandsToBuildPhase(cmXCodeObject* buildphase,
for(std::vector<std::string>::const_iterator d = cc.GetDepends().begin(); for(std::vector<std::string>::const_iterator d = cc.GetDepends().begin();
d != cc.GetDepends().end(); ++d) d != cc.GetDepends().end(); ++d)
{ {
if(!this->FindTarget(m_CurrentMakefile->GetProjectName(), if(!this->FindTarget(m_CurrentProject.c_str(),
d->c_str())) d->c_str()))
{ {
makefileStream << "\\\n" << this makefileStream << "\\\n" << this
@ -1216,7 +1217,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
for(std::vector<cmStdString>::iterator lib = linkItems.begin(); for(std::vector<cmStdString>::iterator lib = linkItems.begin();
lib != linkItems.end(); ++lib) lib != linkItems.end(); ++lib)
{ {
cmTarget* t = this->FindTarget(m_CurrentMakefile->GetProjectName(), cmTarget* t = this->FindTarget(m_CurrentProject.c_str(),
lib->c_str()); lib->c_str());
cmXCodeObject* dptarget = this->FindXCodeTarget(t); cmXCodeObject* dptarget = this->FindXCodeTarget(t);
if(dptarget) if(dptarget)
@ -1241,8 +1242,20 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
= cmtarget->GetUtilities().begin(); = cmtarget->GetUtilities().begin();
i != cmtarget->GetUtilities().end(); ++i) i != cmtarget->GetUtilities().end(); ++i)
{ {
cmTarget* t = this->FindTarget(m_CurrentMakefile->GetProjectName(), cmTarget* t = this->FindTarget(m_CurrentProject.c_str(),
i->c_str()); i->c_str());
if(!t)
{
std::string m = "Error Utility: ";
m += *i;
m += " not found in project ";
m += m_CurrentProject.c_str();
m += " it is a utility of ";
m += cmtarget->GetName();
cmSystemTools::Error(m.c_str());
}
else
{
cmXCodeObject* dptarget = this->FindXCodeTarget(t); cmXCodeObject* dptarget = this->FindXCodeTarget(t);
if(dptarget) if(dptarget)
{ {
@ -1254,17 +1267,21 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
m += i->c_str(); m += i->c_str();
m += "\n"; m += "\n";
m += "cmtarget "; m += "cmtarget ";
if(t)
{
m += t->GetName(); m += t->GetName();
}
m += "\n"; m += "\n";
m += "Is on the target "; m += "Is on the target ";
m += cmtarget->GetName(); m += cmtarget->GetName();
m += "\n"; m += "\n";
m += "But it has no xcode target created yet??\n"; m += "But it has no xcode target created yet??\n";
m += "Current project is "; m += "Current project is ";
m += m_CurrentMakefile->GetProjectName(); m += m_CurrentProject.c_str();
cmSystemTools::Error(m.c_str()); cmSystemTools::Error(m.c_str());
} }
} }
}
std::vector<cmStdString> fullPathLibs; std::vector<cmStdString> fullPathLibs;
orderLibs.GetFullPathLibraries(fullPathLibs); orderLibs.GetFullPathLibraries(fullPathLibs);
for(std::vector<cmStdString>::iterator i = fullPathLibs.begin(); for(std::vector<cmStdString>::iterator i = fullPathLibs.begin();

View File

@ -143,6 +143,7 @@ private:
bool m_DoneXCodeHack; bool m_DoneXCodeHack;
std::string m_CurrentReRunCMakeMakefile; std::string m_CurrentReRunCMakeMakefile;
std::string m_CurrentXCodeHackMakefile; std::string m_CurrentXCodeHackMakefile;
std::string m_CurrentProject;
std::string m_OutputDir; std::string m_OutputDir;
std::vector<std::string> m_CurrentOutputDirectoryComponents; std::vector<std::string> m_CurrentOutputDirectoryComponents;
std::vector<std::string> m_ProjectOutputDirectoryComponents; std::vector<std::string> m_ProjectOutputDirectoryComponents;