ENH: allow users to set sysroot

This commit is contained in:
Bill Hoffman 2008-04-28 13:53:14 -04:00
parent 9bc893eb16
commit d4fdbeed64
3 changed files with 34 additions and 2 deletions

View File

@ -57,6 +57,7 @@ IF(_CMAKE_OSX_SDKS)
LIST(SORT _CMAKE_OSX_SDKS)
LIST(REVERSE _CMAKE_OSX_SDKS)
LIST(GET _CMAKE_OSX_SDKS 0 _CMAKE_OSX_SDKS)
SET(CMAKE_OSX_SYSROOT_DEFAULT "${_CMAKE_OSX_SDKS}")
# use the environment variable CMAKE_OSX_SYSROOT if it is set
IF(NOT "$ENV{CMAKE_OSX_SYSROOT}" STREQUAL "")
SET(_CMAKE_OSX_SDKS "$ENV{CMAKE_OSX_SYSROOT}")

View File

@ -2451,14 +2451,29 @@ void cmGlobalXCodeGenerator
this->CurrentMakefile->GetDefinition("CMAKE_OSX_ARCHITECTURES");
const char* sysroot =
this->CurrentMakefile->GetDefinition("CMAKE_OSX_SYSROOT");
const char* sysrootDefault =
this->CurrentMakefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
if(osxArch && sysroot)
{
bool flagsUsed = false;
// recompute this as it may have been changed since enable language
this->Architectures.clear();
cmSystemTools::ExpandListArgument(std::string(osxArch),
this->Architectures);
if(this->Architectures.size() > 1)
bool addArchFlag = true;
if(this->Architectures.size() == 1)
{
const char* archOrig =
this->
CurrentMakefile->GetSafeDefinition("CMAKE_OSX_ARCHITECTURES_DEFAULT");
if(this->Architectures[0] == archOrig)
{
addArchFlag = false;
}
}
if(addArchFlag)
{
flagsUsed = true;
buildSettings->AddAttribute("SDKROOT",
this->CreateString(sysroot));
std::string archString;
@ -2472,6 +2487,12 @@ void cmGlobalXCodeGenerator
buildSettings->AddAttribute("ARCHS",
this->CreateString(archString.c_str()));
}
if(!flagsUsed && sysrootDefault &&
strcmp(sysroot, sysrootDefault) != 0)
{
buildSettings->AddAttribute("SDKROOT",
this->CreateString(sysroot));
}
}
for( std::vector<cmXCodeObject*>::iterator i = configs.begin();
i != configs.end(); ++i)

View File

@ -1627,6 +1627,9 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
this->Makefile->GetDefinition("CMAKE_OSX_ARCHITECTURES");
const char* sysroot =
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT");
const char* sysrootDefault =
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
bool flagsUsed = false;
if(osxArch && sysroot && lang && lang[0] =='C')
{
std::vector<std::string> archs;
@ -1656,10 +1659,17 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
}
flags += " -isysroot ";
flags += sysroot;
flagsUsed = true;
}
}
if(!flagsUsed && sysroot && sysrootDefault &&
strcmp(sysroot, sysrootDefault) != 0)
{
flags += " -isysroot ";
flags += sysroot;
}
this->AddConfigVariableFlags(flags, flagsVar.c_str(), config);
}
this->AddConfigVariableFlags(flags, flagsVar.c_str(), config);
}
//----------------------------------------------------------------------------