summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-02-07 21:45:10 (GMT)
committerBrad King <brad.king@kitware.com>2014-02-10 21:18:47 (GMT)
commita22eeca3fd7fe022e06001428d5e903913467fa0 (patch)
tree1a75c0e1b3af7686937866b89ecaa8d6ddb9e9dc /Modules
parent6abdc6c16acec3cb6601cc0bdeba4dec30857a02 (diff)
downloadCMake-a22eeca3fd7fe022e06001428d5e903913467fa0.zip
CMake-a22eeca3fd7fe022e06001428d5e903913467fa0.tar.gz
CMake-a22eeca3fd7fe022e06001428d5e903913467fa0.tar.bz2
FindBoost: Search next to MPI libraries for boost_mpi (#14739)
Some distributions place boost_mpi next to the MPI libraries against which it was built instead of next to the other Boost libraries. If find_package(MPI) has already been run prior to find_package(Boost) then MPI_CXX_LIBRARIES or MPI_C_LIBRARIES may be set to the location of the MPI libraries. Teach FindBoost.cmake to look there for boost_mpi and boost_mpi_python after looking next to the other Boost libraries but not consider the location to be Boost_LIBRARY_DIR.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/FindBoost.cmake35
1 files changed, 31 insertions, 4 deletions
diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake
index ae8baab..945694d 100644
--- a/Modules/FindBoost.cmake
+++ b/Modules/FindBoost.cmake
@@ -305,10 +305,15 @@ endmacro()
macro(_Boost_FIND_LIBRARY var)
find_library(${var} ${ARGN})
- # If we found the first library save Boost_LIBRARY_DIR.
- if(${var} AND NOT Boost_LIBRARY_DIR)
- get_filename_component(_dir "${${var}}" PATH)
- set(Boost_LIBRARY_DIR "${_dir}" CACHE PATH "Boost library directory" FORCE)
+ if(${var})
+ # If this is the first library found then save Boost_LIBRARY_DIR.
+ if(NOT Boost_LIBRARY_DIR)
+ get_filename_component(_dir "${${var}}" PATH)
+ set(Boost_LIBRARY_DIR "${_dir}" CACHE PATH "Boost library directory" FORCE)
+ endif()
+ elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ # Try component-specific hints but do not save Boost_LIBRARY_DIR.
+ find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
endif()
# If Boost_LIBRARY_DIR is known then search only there.
@@ -935,6 +940,28 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
set( _boost_docstring_debug "Boost ${COMPONENT} library (debug)")
+ # Compute component-specific hints.
+ set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
+ if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python")
+ foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
+ if(IS_ABSOLUTE "${lib}")
+ get_filename_component(libdir "${lib}" PATH)
+ string(REPLACE "\\" "/" libdir "${libdir}")
+ list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
+ endif()
+ endforeach()
+ endif()
+
+ # Consolidate and report component-specific hints.
+ if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ if(Boost_DEBUG)
+ message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+ "Component-specific library search paths for ${COMPONENT}: "
+ "${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
+ endif()
+ endif()
+
#
# Find RELEASE libraries
#