summaryrefslogtreecommitdiffstats
path: root/Modules/FindHDF5.cmake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-02-02 14:21:21 (GMT)
committerBrad King <brad.king@kitware.com>2017-02-03 14:12:05 (GMT)
commit4908969f578ded9d87f244bd8ada65ba0c51cf28 (patch)
tree2937cfa3cc56833e0dd1bde9d9f9cdcf29286cf9 /Modules/FindHDF5.cmake
parent77f6d22ad1f1b461297a463eb5f40fbb0d0825aa (diff)
downloadCMake-4908969f578ded9d87f244bd8ada65ba0c51cf28.zip
CMake-4908969f578ded9d87f244bd8ada65ba0c51cf28.tar.gz
CMake-4908969f578ded9d87f244bd8ada65ba0c51cf28.tar.bz2
FindHDF5: Fix search with HDF5_ROOT
Refactoring in commit v3.6.0-rc1~72^2 (HDF5: Rework component searching to correctly find HL for all bindings, 2016-05-12) turned off a large amount of its logic when HDF5_ROOT is set. This caused use of the hdf5 compiler wrapper to extract all needed libraries (e.g. z, dl as dependencies of hdf5 static libraries) to be skipped when using HDF5_ROOT. Fix the search logic to honor HDF5_ROOT in all code paths. Restrict the search for hdf5-specific components to this root, but allow external libraries to be found anywhere. Fixes: #16566
Diffstat (limited to 'Modules/FindHDF5.cmake')
-rw-r--r--Modules/FindHDF5.cmake41
1 files changed, 33 insertions, 8 deletions
diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake
index f07d0c7..94a8729 100644
--- a/Modules/FindHDF5.cmake
+++ b/Modules/FindHDF5.cmake
@@ -383,10 +383,18 @@ endmacro()
if(NOT HDF5_ROOT)
set(HDF5_ROOT $ENV{HDF5_ROOT})
endif()
+if(HDF5_ROOT)
+ set(_HDF5_SEARCH_OPTS NO_DEFAULT_PATH)
+else()
+ set(_HDF5_SEARCH_OPTS)
+endif()
# Try to find HDF5 using an installed hdf5-config.cmake
-if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
- find_package(HDF5 QUIET NO_MODULE)
+if(NOT HDF5_FOUND)
+ find_package(HDF5 QUIET NO_MODULE
+ HINTS ${HDF5_ROOT}
+ ${_HDF5_SEARCH_OPTS}
+ )
if( HDF5_FOUND)
set(HDF5_IS_PARALLEL ${HDF5_ENABLE_PARALLEL})
set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
@@ -440,7 +448,7 @@ if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
endif()
endif()
-if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
+if(NOT HDF5_FOUND)
set(_HDF5_NEED_TO_SEARCH False)
set(HDF5_COMPILER_NO_INTERROGATE True)
# Only search for languages we've enabled
@@ -488,8 +496,10 @@ if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
# search options with the wrapper
find_program(HDF5_${__lang}_COMPILER_EXECUTABLE
NAMES ${HDF5_${__lang}_COMPILER_NAMES} NAMES_PER_DIR
+ HINTS ${HDF5_ROOT}
PATH_SUFFIXES bin Bin
DOC "HDF5 ${__lang} Wrapper compiler. Used only to detect HDF5 compile flags."
+ ${_HDF5_SEARCH_OPTS}
)
mark_as_advanced( HDF5_${__lang}_COMPILER_EXECUTABLE )
unset(HDF5_${__lang}_COMPILER_NAMES)
@@ -516,10 +526,20 @@ if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
endif()
foreach(L IN LISTS HDF5_${__lang}_LIBRARY_NAMES)
+ if(x"${L}" MATCHES "hdf5")
+ # hdf5 library
+ set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
+ else()
+ # external library
+ set(_HDF5_SEARCH_OPTS_LOCAL)
+ endif()
find_library(HDF5_${__lang}_LIBRARY_${L}
NAMES ${L}
HINTS ${HDF5_${__lang}_LIBRARY_DIRS}
+ ${HDF5_ROOT}
+ ${_HDF5_SEARCH_OPTS_LOCAL}
)
+ unset(_HDF5_SEARCH_OPTS_LOCAL)
if(HDF5_${__lang}_LIBRARY_${L})
list(APPEND HDF5_${__lang}_LIBRARIES ${HDF5_${__lang}_LIBRARY_${L}})
else()
@@ -529,10 +549,20 @@ if(NOT HDF5_FOUND AND NOT HDF5_ROOT)
if(FIND_HL)
set(HDF5_${__lang}_HL_LIBRARIES)
foreach(L IN LISTS HDF5_${__lang}_HL_LIBRARY_NAMES)
+ if("x${L}" MATCHES "hdf5")
+ # hdf5 library
+ set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
+ else()
+ # external library
+ set(_HDF5_SEARCH_OPTS_LOCAL)
+ endif()
find_library(HDF5_${__lang}_LIBRARY_${L}
NAMES ${L}
HINTS ${HDF5_${__lang}_LIBRARY_DIRS}
+ ${HDF5_ROOT}
+ ${_HDF5_SEARCH_OPTS_LOCAL}
)
+ unset(_HDF5_SEARCH_OPTS_LOCAL)
if(HDF5_${__lang}_LIBRARY_${L})
list(APPEND HDF5_${__lang}_HL_LIBRARIES ${HDF5_${__lang}_LIBRARY_${L}})
else()
@@ -614,11 +644,6 @@ elseif(NOT HDF5_FOUND AND NOT _HDF5_NEED_TO_SEARCH)
endif()
endif()
-if(HDF5_ROOT)
- set(_HDF5_SEARCH_OPTS NO_DEFAULT_PATH)
-else()
- set(_HDF5_SEARCH_OPTS)
-endif()
find_program( HDF5_DIFF_EXECUTABLE
NAMES h5diff
HINTS ${HDF5_ROOT}