diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake index 5f14228f4..348abfc75 100644 --- a/Modules/Platform/Darwin.cmake +++ b/Modules/Platform/Darwin.cmake @@ -44,6 +44,7 @@ IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) # now put _CMAKE_OSX_MACHINE into the cache SET(CMAKE_OSX_ARCHITECTURES ${_CMAKE_OSX_MACHINE} CACHE STRING "Build architectures for OSX") + SET(CMAKE_OSX_ARCHITECTURES_DEFAULT ${_CMAKE_OSX_MACHINE}) ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index acaaad50b..1e9c55ab8 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1941,14 +1941,31 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags, std::vector archs; cmSystemTools::ExpandListArgument(std::string(osxArch), archs); - for( std::vector::iterator i = archs.begin(); - i != archs.end(); ++i) + bool addArchFlag = true; + if(archs.size() == 1) { - flags += " -arch "; - flags += *i; + const char* archOrig = + this->Makefile->GetSafeDefinition("CMAKE_OSX_ARCHITECTURE_DEFAULT"); + if(archs[0] == archOrig) + { + addArchFlag = false; + } + } + // if there is more than one arch add the -arch and + // -isysroot flags, or if there is one arch flag, but + // it is not the default -arch flag for the system, then + // add it. Otherwize do not add -arch and -isysroot + if(addArchFlag) + { + for( std::vector::iterator i = archs.begin(); + i != archs.end(); ++i) + { + flags += " -arch "; + flags += *i; + } + flags += " -isysroot "; + flags += sysroot; } - flags += " -isysroot "; - flags += sysroot; } } this->AddConfigVariableFlags(flags, flagsVar.c_str(), config);