diff --git a/CMakeLists.txt b/CMakeLists.txt index 6308cfbb9..4ce361dd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,24 +83,6 @@ include(UpdateCacheVariable) include(AddGerritCommitHook) add_gerrit_commit_hook(${Ceres_SOURCE_DIR} ${Ceres_BINARY_DIR}) -# On OS X, add the Homebrew prefix to the set of prefixes searched by -# CMake in find_path & find_library. This should ensure that we can -# still build Ceres even if Homebrew is installed in a non-standard -# location (not /usr/local). -if (CMAKE_SYSTEM_NAME MATCHES "Darwin") - find_program(HOMEBREW_EXECUTABLE brew) - mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) - if (HOMEBREW_EXECUTABLE) - # Detected a Homebrew install, query for its install prefix. - execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix - OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Detected Homebrew with install prefix: " - "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") - list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_INSTALL_PREFIX}") - endif() -endif() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Ceres_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${Ceres_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${Ceres_BINARY_DIR}/lib) diff --git a/cmake/FindCXSparse.cmake b/cmake/FindCXSparse.cmake index 3f4b0155d..8b380c90e 100644 --- a/cmake/FindCXSparse.cmake +++ b/cmake/FindCXSparse.cmake @@ -120,6 +120,27 @@ if (MSVC) set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}") endif (MSVC) +# On macOS, add the Homebrew prefix (with appropriate suffixes) to the +# respective HINTS directories (after any user-specified locations). This +# handles Homebrew installations into non-standard locations (not /usr/local). +# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of +# find_xxx(), doing so would override any user-specified HINTS locations with +# the Homebrew version if it exists. +if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + find_program(HOMEBREW_EXECUTABLE brew) + mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) + if (HOMEBREW_EXECUTABLE) + # Detected a Homebrew install, query for its install prefix. + execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix + OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected Homebrew with install prefix: " + "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") + list(APPEND CXSPARSE_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include") + list(APPEND CXSPARSE_LIBRARY_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/lib") + endif() +endif() + # Search user-installed locations first, so that we prefer user installs # to system installs where both exist. # diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake index f6d266410..d1fa6d74d 100644 --- a/cmake/FindEigen.cmake +++ b/cmake/FindEigen.cmake @@ -115,6 +115,26 @@ if (NOT DEFINED EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION set(EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION TRUE) endif() +# On macOS, add the Homebrew prefix (with appropriate suffixes) to the +# respective HINTS directories (after any user-specified locations). This +# handles Homebrew installations into non-standard locations (not /usr/local). +# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of +# find_xxx(), doing so would override any user-specified HINTS locations with +# the Homebrew version if it exists. +if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + find_program(HOMEBREW_EXECUTABLE brew) + mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) + if (HOMEBREW_EXECUTABLE) + # Detected a Homebrew install, query for its install prefix. + execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix + OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected Homebrew with install prefix: " + "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") + list(APPEND EIGEN_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include") + endif() +endif() + if (EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION) # Try to find an exported CMake configuration for Eigen. # @@ -147,6 +167,7 @@ if (EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION) # # [1] http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package find_package(Eigen3 QUIET + HINTS ${Eigen3_DIR} ${HOMEBREW_INSTALL_PREFIX} NO_MODULE NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_BUILDS_PATH) diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake index 32c04ea0c..c8151a5be 100644 --- a/cmake/FindGflags.cmake +++ b/cmake/FindGflags.cmake @@ -292,6 +292,27 @@ if (NOT DEFINED GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION set(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION TRUE) endif() +# On macOS, add the Homebrew prefix (with appropriate suffixes) to the +# respective HINTS directories (after any user-specified locations). This +# handles Homebrew installations into non-standard locations (not /usr/local). +# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of +# find_xxx(), doing so would override any user-specified HINTS locations with +# the Homebrew version if it exists. +if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + find_program(HOMEBREW_EXECUTABLE brew) + mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) + if (HOMEBREW_EXECUTABLE) + # Detected a Homebrew install, query for its install prefix. + execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix + OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected Homebrew with install prefix: " + "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") + list(APPEND GFLAGS_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include") + list(APPEND GFLAGS_LIBRARY_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/lib") + endif() +endif() + if (GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION) # Try to find an exported CMake configuration for gflags, as generated by # gflags versions >= 2.1. @@ -325,6 +346,7 @@ if (GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION) # # [1] http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package find_package(gflags QUIET + HINTS ${gflags_DIR} ${HOMEBREW_INSTALL_PREFIX} NO_MODULE NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_BUILDS_PATH) diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake index 979dceda4..4fc84da33 100644 --- a/cmake/FindGlog.cmake +++ b/cmake/FindGlog.cmake @@ -130,6 +130,27 @@ if (NOT DEFINED GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION set(GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION TRUE) endif() +# On macOS, add the Homebrew prefix (with appropriate suffixes) to the +# respective HINTS directories (after any user-specified locations). This +# handles Homebrew installations into non-standard locations (not /usr/local). +# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of +# find_xxx(), doing so would override any user-specified HINTS locations with +# the Homebrew version if it exists. +if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + find_program(HOMEBREW_EXECUTABLE brew) + mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) + if (HOMEBREW_EXECUTABLE) + # Detected a Homebrew install, query for its install prefix. + execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix + OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected Homebrew with install prefix: " + "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") + list(APPEND GLOG_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include") + list(APPEND GLOG_LIBRARY_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/lib") + endif() +endif() + if (GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION) # Try to find an exported CMake configuration for glog, as generated by # glog versions > 0.3.4 @@ -176,6 +197,7 @@ if (GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION) # [1] http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package find_package(glog QUIET NAMES google-glog glog + HINTS ${glog_DIR} ${HOMEBREW_INSTALL_PREFIX} NO_MODULE NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_BUILDS_PATH) diff --git a/cmake/FindSuiteSparse.cmake b/cmake/FindSuiteSparse.cmake index e4de8b029..453127771 100644 --- a/cmake/FindSuiteSparse.cmake +++ b/cmake/FindSuiteSparse.cmake @@ -165,6 +165,27 @@ if (MSVC) set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}") endif (MSVC) +# On macOS, add the Homebrew prefix (with appropriate suffixes) to the +# respective HINTS directories (after any user-specified locations). This +# handles Homebrew installations into non-standard locations (not /usr/local). +# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of +# find_xxx(), doing so would override any user-specified HINTS locations with +# the Homebrew version if it exists. +if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + find_program(HOMEBREW_EXECUTABLE brew) + mark_as_advanced(FORCE HOMEBREW_EXECUTABLE) + if (HOMEBREW_EXECUTABLE) + # Detected a Homebrew install, query for its install prefix. + execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix + OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Detected Homebrew with install prefix: " + "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.") + list(APPEND SUITESPARSE_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include") + list(APPEND SUITESPARSE_LIBRARY_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/lib") + endif() +endif() + # Specify search directories for include files and libraries (this is the union # of the search directories for all OSs). Search user-specified hint # directories first if supplied, and search user-installed locations first