From 203a5166a06cccc8b9bf0b190b9278634381b3be Mon Sep 17 00:00:00 2001 From: John Szakmeister Date: Sat, 8 Nov 2014 16:16:39 -0500 Subject: [PATCH] build: give priority to /sw and /opt/local on Mac OS X Unfortunately, we can't force the specific inclusion of a header file. So if anything add /opt/local/include to the include path--such as libintl--then other dependencies might be drawn from /opt/local at compile time, even though we detected them elsewhere at configure time. This, in turn, causes issues with mixed versions, such as the iconv.h header being pulled from /opt/local/include, but linked against the library in /usr/lib--which can be mismatched versions. So, despite CMake's best effort to treat /sw and /opt/local as just another system area, we really need to give them preferential treatment. To do this, we add them to CMAKE_PREFIX_PATH. This fixes an issue discovered while re-enabling iconv in #1370. --- CMakeLists.txt | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d53ba4727..485eb4ae23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,26 @@ set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin") list(APPEND CMAKE_PREFIX_PATH ${DEPS_INSTALL_DIR}) +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # CMake tries to treat /sw and /opt/local as extension of the system path, but + # that doesn't really work out very well. Once you have a dependency that + # resides there and have to add it as an include directory, then any other + # dependency that could be satisfied from there must be--otherwise you can end + # up with conflicting versions. So, let's make them more of a priority having + # them be included as one of the first places to look for dependencies. + list(APPEND CMAKE_PREFIX_PATH /sw /opt/local) + + # Work around some old, broken detection by CMake for knowing when to use the + # isystem flag. Apple's compilers have supported this for quite some time + # now. + if(CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") + endif() + if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") + endif() +endif() + # Version tokens include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT) @@ -31,17 +51,6 @@ endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# Work around some old, broken detection by CMake for knowing when to use the -# isystem flag. Apple's compilers have supported this for quite some time now. -if(APPLE) - if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") - endif() - if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") - endif() -endif() - # Default to -O2 on release builds. string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")