diff options
-rw-r--r-- | Modules/Platform/Darwin.cmake | 1 | ||||
-rw-r--r-- | Source/cmGlobalXCodeGenerator.cxx | 23 | ||||
-rw-r--r-- | Source/cmLocalGenerator.cxx | 12 |
3 files changed, 34 insertions, 2 deletions
diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake index dfdc8eb..ecc465c 100644 --- a/Modules/Platform/Darwin.cmake +++ b/Modules/Platform/Darwin.cmake @@ -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}") diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 33820aa..3e31a42 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -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) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index d806978..0a03028 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -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); } //---------------------------------------------------------------------------- |