ENH: make sure depend helper actually works, if a depend library gets updated, then the target needs to be removed, and the CONFIGURATION directory needs to be used
This commit is contained in:
parent
5b95c0a881
commit
391d3ed631
|
@ -386,6 +386,7 @@ void cmGlobalXCodeGenerator::CreateReRunCMakeFile(cmLocalGenerator* root)
|
||||||
cmSystemTools::MakeDirectory(m_CurrentReRunCMakeMakefile.c_str());
|
cmSystemTools::MakeDirectory(m_CurrentReRunCMakeMakefile.c_str());
|
||||||
m_CurrentReRunCMakeMakefile += "/ReRunCMake.make";
|
m_CurrentReRunCMakeMakefile += "/ReRunCMake.make";
|
||||||
cmGeneratedFileStream makefileStream(m_CurrentReRunCMakeMakefile.c_str());
|
cmGeneratedFileStream makefileStream(m_CurrentReRunCMakeMakefile.c_str());
|
||||||
|
makefileStream.SetCopyIfDifferent(true);
|
||||||
makefileStream << "# Generated by CMake, DO NOT EDIT\n";
|
makefileStream << "# Generated by CMake, DO NOT EDIT\n";
|
||||||
makefileStream << "CMakeFiles/cmake.check_cache: ";
|
makefileStream << "CMakeFiles/cmake.check_cache: ";
|
||||||
for(std::vector<std::string>::const_iterator i = lfiles.begin();
|
for(std::vector<std::string>::const_iterator i = lfiles.begin();
|
||||||
|
@ -845,6 +846,7 @@ cmGlobalXCodeGenerator::AddCommandsToBuildPhase(cmXCodeObject* buildphase,
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
makefileStream.SetCopyIfDifferent(true);
|
||||||
makefileStream << "# Generated by CMake, DO NOT EDIT\n";
|
makefileStream << "# Generated by CMake, DO NOT EDIT\n";
|
||||||
makefileStream << "# Custom rules for " << target.GetName() << "\n";
|
makefileStream << "# Custom rules for " << target.GetName() << "\n";
|
||||||
|
|
||||||
|
@ -1968,7 +1970,7 @@ cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
|
||||||
m_CurrentXCodeHackMakefile.c_str());
|
m_CurrentXCodeHackMakefile.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
makefileStream.SetCopyIfDifferent(true);
|
||||||
// one more pass for external depend information not handled
|
// one more pass for external depend information not handled
|
||||||
// correctly by xcode
|
// correctly by xcode
|
||||||
makefileStream << "# DO NOT EDIT\n";
|
makefileStream << "# DO NOT EDIT\n";
|
||||||
|
@ -1986,8 +1988,8 @@ cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
|
||||||
t->GetType() == cmTarget::MODULE_LIBRARY)
|
t->GetType() == cmTarget::MODULE_LIBRARY)
|
||||||
{
|
{
|
||||||
makefileStream << "\\\n\t"
|
makefileStream << "\\\n\t"
|
||||||
<< this->
|
<< this->AddConfigDir(this->
|
||||||
ConvertToRelativeForMake(this->GetTargetFullPath(target->GetcmTarget()).c_str());
|
ConvertToRelativeForMake(this->GetTargetFullPath(target->GetcmTarget()).c_str()).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
makefileStream << "\n\n";
|
makefileStream << "\n\n";
|
||||||
|
@ -2005,7 +2007,9 @@ cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
|
||||||
{
|
{
|
||||||
if(emitted.insert(*d).second)
|
if(emitted.insert(*d).second)
|
||||||
{
|
{
|
||||||
makefileStream << this->ConvertToRelativeForMake(d->c_str()) << ":\n";
|
makefileStream <<
|
||||||
|
this->AddConfigDir(this->ConvertToRelativeForMake(d->c_str()).c_str())
|
||||||
|
<< ":\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2026,20 +2030,49 @@ cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
|
||||||
{
|
{
|
||||||
std::vector<cmStdString> const& deplibs = target->GetDependLibraries();
|
std::vector<cmStdString> const& deplibs = target->GetDependLibraries();
|
||||||
std::string tfull = this->GetTargetFullPath(target->GetcmTarget());
|
std::string tfull = this->GetTargetFullPath(target->GetcmTarget());
|
||||||
makefileStream << this->ConvertToRelativeForMake(tfull.c_str()) << ": ";
|
makefileStream << this->AddConfigDir(
|
||||||
|
this->ConvertToRelativeForMake(tfull.c_str()).c_str()) << ": ";
|
||||||
for(std::vector<cmStdString>::const_iterator d = deplibs.begin();
|
for(std::vector<cmStdString>::const_iterator d = deplibs.begin();
|
||||||
d != deplibs.end(); ++d)
|
d != deplibs.end(); ++d)
|
||||||
{
|
{
|
||||||
makefileStream << "\\\n\t" << this->ConvertToRelativeForMake(d->c_str());
|
makefileStream << "\\\n\t" <<
|
||||||
|
this->AddConfigDir(
|
||||||
|
this->ConvertToRelativeForMake(d->c_str()).c_str());
|
||||||
}
|
}
|
||||||
makefileStream << "\n";
|
makefileStream << "\n";
|
||||||
makefileStream << "\t/bin/rm -f "
|
makefileStream << "\t/bin/rm -f "
|
||||||
<< this->ConvertToRelativeForMake(tfull.c_str()) << "\n";
|
<<
|
||||||
|
this->AddConfigDir(
|
||||||
|
this->ConvertToRelativeForMake(tfull.c_str()).c_str())
|
||||||
|
<< "\n";
|
||||||
makefileStream << "\n\n";
|
makefileStream << "\n\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
std::string
|
||||||
|
cmGlobalXCodeGenerator::AddConfigDir(const char* d)
|
||||||
|
{
|
||||||
|
if(m_XcodeVersion == 15)
|
||||||
|
{
|
||||||
|
return std::string(d);
|
||||||
|
}
|
||||||
|
std::string dir = d;
|
||||||
|
if(cmSystemTools::FileExists(d))
|
||||||
|
{
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
std::string::size_type pos = dir.rfind("/");
|
||||||
|
if(pos == dir.npos)
|
||||||
|
{
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
std::string ret = dir.substr(0, pos);
|
||||||
|
ret += "/${CONFIGURATION}";
|
||||||
|
ret += dir.substr(pos);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void
|
void
|
||||||
cmGlobalXCodeGenerator::OutputXCodeProject(cmLocalGenerator* root,
|
cmGlobalXCodeGenerator::OutputXCodeProject(cmLocalGenerator* root,
|
||||||
|
|
|
@ -142,6 +142,8 @@ private:
|
||||||
const std::vector<cmCustomCommand>&);
|
const std::vector<cmCustomCommand>&);
|
||||||
void CreateReRunCMakeFile(cmLocalGenerator* root);
|
void CreateReRunCMakeFile(cmLocalGenerator* root);
|
||||||
protected:
|
protected:
|
||||||
|
std::string AddConfigDir(const char* d);
|
||||||
|
|
||||||
int m_XcodeVersion;
|
int m_XcodeVersion;
|
||||||
std::vector<cmXCodeObject*> m_XCodeObjects;
|
std::vector<cmXCodeObject*> m_XCodeObjects;
|
||||||
cmXCodeObject* m_RootObject;
|
cmXCodeObject* m_RootObject;
|
||||||
|
|
Loading…
Reference in New Issue