summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikoĊ‚aj Siedlarek <msiedlarek@nctz.net>2014-05-05 10:39:55 (GMT)
committerBrad King <brad.king@kitware.com>2014-05-07 13:04:48 (GMT)
commit1bed75a590707c311de6feddafdfb32cbb9e4afb (patch)
treecedeced7528d4a7c8b878a052b713b38f1d03565
parent1aed32faaeff40dcde2fa7cb75c7c249e68485e3 (diff)
downloadCMake-1bed75a590707c311de6feddafdfb32cbb9e4afb.zip
CMake-1bed75a590707c311de6feddafdfb32cbb9e4afb.tar.gz
CMake-1bed75a590707c311de6feddafdfb32cbb9e4afb.tar.bz2
OS X: Use -iframework for system framework directories
Just like -I flag has its -isystem counterpart which marks an include directory as a system directory and prevents unwanted warnings, on Apple systems there is -iframework -- a system directory replacement for -F. Use this flag to implement include_directories(SYSTEM) for frameworks.
-rw-r--r--Modules/Platform/Darwin-Clang.cmake3
-rw-r--r--Modules/Platform/Darwin-GNU.cmake4
-rw-r--r--Source/cmLocalGenerator.cxx20
3 files changed, 24 insertions, 3 deletions
diff --git a/Modules/Platform/Darwin-Clang.cmake b/Modules/Platform/Darwin-Clang.cmake
index 528873c..4cded47 100644
--- a/Modules/Platform/Darwin-Clang.cmake
+++ b/Modules/Platform/Darwin-Clang.cmake
@@ -24,4 +24,7 @@ macro(__darwin_compiler_clang lang)
set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
set(CMAKE_${lang}_SYSROOT_FLAG "-isysroot")
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mmacosx-version-min=")
+ if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.1)
+ set(CMAKE_${lang}_SYSTEM_FRAMEWORK_SEARCH_FLAG "-iframework ")
+ endif()
endmacro()
diff --git a/Modules/Platform/Darwin-GNU.cmake b/Modules/Platform/Darwin-GNU.cmake
index 5fee7e3..87d1d23 100644
--- a/Modules/Platform/Darwin-GNU.cmake
+++ b/Modules/Platform/Darwin-GNU.cmake
@@ -23,6 +23,10 @@ macro(__darwin_compiler_gnu lang)
# GNU does not have -shared on OS X
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
+
+ if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.3)
+ set(CMAKE_${lang}_SYSTEM_FRAMEWORK_SEARCH_FLAG "-iframework ")
+ endif()
endmacro()
macro(cmake_gnu_set_sysroot_flag lang)
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index f375b5f..c4c6428 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1344,6 +1344,12 @@ std::string cmLocalGenerator::GetIncludeFlags(
const char* fwSearchFlag =
this->Makefile->GetDefinition(fwSearchFlagVar);
+ std::string sysFwSearchFlagVar = "CMAKE_";
+ sysFwSearchFlagVar += lang;
+ sysFwSearchFlagVar += "_SYSTEM_FRAMEWORK_SEARCH_FLAG";
+ const char* sysFwSearchFlag =
+ this->Makefile->GetDefinition(sysFwSearchFlagVar);
+
bool flagUsed = false;
std::set<std::string> emitted;
#ifdef __APPLE__
@@ -1360,9 +1366,17 @@ std::string cmLocalGenerator::GetIncludeFlags(
frameworkDir = cmSystemTools::CollapseFullPath(frameworkDir.c_str());
if(emitted.insert(frameworkDir).second)
{
- includeFlags
- << fwSearchFlag << this->Convert(frameworkDir,
- START_OUTPUT, shellFormat, true)
+ if (sysFwSearchFlag && target &&
+ target->IsSystemIncludeDirectory(*i, config))
+ {
+ includeFlags << sysFwSearchFlag;
+ }
+ else
+ {
+ includeFlags << fwSearchFlag;
+ }
+ includeFlags << this->Convert(frameworkDir, START_OUTPUT,
+ shellFormat, true)
<< " ";
}
continue;