55FindHDF5
66--------
77
8+ backported from CMake 3.18
9+
810Find Hierarchical Data Format (HDF5), a library for reading and writing
911self describing array data.
1012
@@ -132,6 +134,7 @@ The following variable can be set to guide the search for HDF5 libraries and inc
132134include (SelectLibraryConfigurations)
133135include (FindPackageHandleStandardArgs)
134136
137+ cmake_policy (PUSH)
135138cmake_policy (SET CMP0074 NEW)
136139
137140# List of the valid HDF5 components
@@ -345,35 +348,46 @@ macro( _HDF5_invoke_compiler language output return_value version is_parallel)
345348 elseif ("${language} " STREQUAL "Fortran" )
346349 set (test_file ${scratch_dir} /cmake_hdf5_test.f90)
347350 endif ()
351+ # must test that compiler wrapper actually can compile--sometimes the compiler wrapper exists,
352+ # but not the compiler. E.g. Miniconda / Anaconda Python
348353 execute_process (
349- COMMAND ${HDF5_${language} _COMPILER_EXECUTABLE} -show ${lib_type_args} ${test_file}
350- OUTPUT_VARIABLE ${output}
351- ERROR_VARIABLE ${output}
354+ COMMAND ${HDF5_${language} _COMPILER_EXECUTABLE} ${test_file}
352355 RESULT_VARIABLE ${return_value}
353356 )
354357 if (NOT ${${return_value} } EQUAL 0)
355- message (STATUS
356- "Unable to determine HDF5 ${language} flags from HDF5 wrapper." )
357- endif ()
358- execute_process (
359- COMMAND ${HDF5_${language} _COMPILER_EXECUTABLE} -showconfig
360- OUTPUT_VARIABLE config_output
361- ERROR_VARIABLE config_output
362- RESULT_VARIABLE config_return
363- )
364- if (NOT ${return_value} EQUAL 0)
365- message ( STATUS
366- "Unable to determine HDF5 ${language} version from HDF5 wrapper." )
367- endif ()
368- string (REGEX MATCH "HDF5 Version: ([a-zA-Z0-9\\ .\\ -]*)" version_match "${config_output} " )
369- if (version_match)
370- string (REPLACE "HDF5 Version: " "" ${version} "${version_match} " )
371- string (REPLACE "-patch" "." ${version} "${${version} }" )
372- endif ()
373- if (config_output MATCHES "Parallel HDF5: yes" )
374- set (${is_parallel} TRUE )
358+ message (STATUS
359+ "HDF5 ${language} compiler wrapper is unable to compile a minimal HDF5 program." )
375360 else ()
376- set (${is_parallel} FALSE )
361+ execute_process (
362+ COMMAND ${HDF5_${language} _COMPILER_EXECUTABLE} -show ${lib_type_args} ${test_file}
363+ OUTPUT_VARIABLE ${output}
364+ ERROR_VARIABLE ${output}
365+ RESULT_VARIABLE ${return_value}
366+ )
367+ if (NOT ${${return_value} } EQUAL 0)
368+ message (STATUS
369+ "Unable to determine HDF5 ${language} flags from HDF5 wrapper." )
370+ endif ()
371+ execute_process (
372+ COMMAND ${HDF5_${language} _COMPILER_EXECUTABLE} -showconfig
373+ OUTPUT_VARIABLE config_output
374+ ERROR_VARIABLE config_output
375+ RESULT_VARIABLE config_return
376+ )
377+ if (NOT ${return_value} EQUAL 0)
378+ message ( STATUS
379+ "Unable to determine HDF5 ${language} version from HDF5 wrapper." )
380+ endif ()
381+ string (REGEX MATCH "HDF5 Version: ([a-zA-Z0-9\\ .\\ -]*)" version_match "${config_output} " )
382+ if (version_match)
383+ string (REPLACE "HDF5 Version: " "" ${version} "${version_match} " )
384+ string (REPLACE "-patch" "." ${version} "${${version} }" )
385+ endif ()
386+ if (config_output MATCHES "Parallel HDF5: yes" )
387+ set (${is_parallel} TRUE )
388+ else ()
389+ set (${is_parallel} FALSE )
390+ endif ()
377391 endif ()
378392endmacro ()
379393
@@ -461,13 +475,8 @@ function(_HDF5_select_imported_config target imported_conf)
461475endfunction ()
462476
463477
464- if (NOT HDF5_ROOT)
465- set (HDF5_ROOT $ENV{HDF5_ROOT} )
466- endif ()
467- if (HDF5_ROOT)
468- set (_HDF5_SEARCH_OPTS NO_CMAKE_PATH NO_CMAKE_SYSTEM_PATH
469- NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
470- NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH)
478+ if (HDF5_ROOT OR ENV{HDF5_ROOT})
479+ set (_HDF5_SEARCH_OPTS NO_DEFAULT_PATH)
471480else ()
472481 set (_HDF5_SEARCH_OPTS)
473482endif ()
@@ -555,7 +564,7 @@ if(NOT HDF5_FOUND AND NOT HDF5_NO_FIND_PACKAGE_CONFIG_FILE)
555564 endif ()
556565endif ()
557566
558- if (NOT HDF5_FOUND AND HDF5_SEARCH_WRAPPER )
567+ if (NOT HDF5_FOUND)
559568 set (_HDF5_NEED_TO_SEARCH False )
560569 set (HDF5_COMPILER_NO_INTERROGATE True )
561570 # Only search for languages we've enabled
@@ -578,6 +587,7 @@ if(NOT HDF5_FOUND AND HDF5_SEARCH_WRAPPER)
578587 else ()
579588 continue ()
580589 endif ()
590+
581591 if (HDF5_${__lang} _COMPILER_NO_INTERROGATE)
582592 message (STATUS "HDF5: Using hdf5 compiler wrapper for all ${__lang} compiling" )
583593 set (HDF5_${__lang} _FOUND True )
@@ -766,12 +776,17 @@ if( NOT HDF5_FOUND )
766776 set (HDF5_CXX_HL_LIBRARY_NAMES hdf5_hl_cpp ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_CXX_LIBRARY_NAMES} )
767777
768778 set (HDF5_Fortran_LIBRARY_NAMES hdf5_fortran ${HDF5_C_LIBRARY_NAMES} )
769- set (HDF5_Fortran_HL_LIBRARY_NAMES hdf5_hl_fortran ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_Fortran_LIBRARY_NAMES} )
779+ set (HDF5_Fortran_HL_LIBRARY_NAMES hdf5hl_fortran ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_Fortran_LIBRARY_NAMES} )
770780
781+ # suffixes as seen on Linux, MSYS2, ...
782+ set (_lib_suffixes hdf5)
783+ if (NOT HDF5_PREFER_PARALLEL)
784+ list (APPEND _lib_suffixes hdf5/serial)
785+ endif ()
771786 if (HDF5_USE_STATIC_LIBRARIES)
772- set (_path_suffixes include /static )
787+ set (_inc_suffixes include /static )
773788 else ()
774- set (_path_suffixes include /shared)
789+ set (_inc_suffixes include /shared)
775790 endif ()
776791
777792 foreach (__lang IN LISTS HDF5_LANGUAGE_BINDINGS)
@@ -786,7 +801,7 @@ if( NOT HDF5_FOUND )
786801
787802 find_path (HDF5_${__lang} _INCLUDE_DIR ${HDF5_INCLUDE_FILENAME}
788803 PATHS $ENV{HOME} /.local/include
789- PATH_SUFFIXES include Include ${_path_suffixes }
804+ PATH_SUFFIXES include Include ${_inc_suffixes} ${_lib_suffixes }
790805 ${_HDF5_SEARCH_OPTS}
791806 )
792807 mark_as_advanced (HDF5_${__lang} _INCLUDE_DIR)
@@ -815,22 +830,14 @@ if( NOT HDF5_FOUND )
815830 endif ()
816831 find_library (HDF5_${LIB} _LIBRARY_DEBUG
817832 NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
818- PATH_SUFFIXES lib Lib
833+ PATH_SUFFIXES lib Lib ${_lib_suffixes}
819834 ${_HDF5_SEARCH_OPTS}
820835 )
821- find_library ( HDF5_${LIB} _LIBRARY_RELEASE
836+ find_library (HDF5_${LIB} _LIBRARY_RELEASE
822837 NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
823- PATH_SUFFIXES lib Lib
838+ PATH_SUFFIXES lib Lib ${_lib_suffixes}
824839 ${_HDF5_SEARCH_OPTS}
825840 )
826- # patch for HDF5 1.10.6 name change
827- if (NOT HDF5_${LIB} _LIBRARY_RELEASE AND (LIB STREQUAL hdf5_hl_fortran))
828- find_library ( HDF5_${LIB} _LIBRARY_RELEASE
829- NAMES hdf5hl_fortran hdf5hl_fortran-shared
830- PATH_SUFFIXES lib Lib
831- ${_HDF5_SEARCH_OPTS}
832- )
833- endif ()
834841
835842 select_library_configurations( HDF5_${LIB} )
836843 list (APPEND HDF5_${__lang} _LIBRARIES ${HDF5_${LIB} _LIBRARY})
@@ -861,14 +868,15 @@ if( NOT HDF5_FOUND )
861868 endif ()
862869 find_library (HDF5_${LIB} _LIBRARY_DEBUG
863870 NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
864- PATH_SUFFIXES lib Lib
871+ PATH_SUFFIXES lib Lib ${_lib_suffixes}
865872 ${_HDF5_SEARCH_OPTS}
866873 )
867- find_library ( HDF5_${LIB} _LIBRARY_RELEASE
874+ find_library (HDF5_${LIB} _LIBRARY_RELEASE
868875 NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
869- PATH_SUFFIXES lib Lib
876+ PATH_SUFFIXES lib Lib ${_lib_suffixes}
870877 ${_HDF5_SEARCH_OPTS}
871878 )
879+
872880 select_library_configurations( HDF5_${LIB} )
873881 list (APPEND HDF5_${__lang} _HL_LIBRARIES ${HDF5_${LIB} _LIBRARY})
874882 endforeach ()
@@ -969,3 +977,5 @@ if (HDF5_FIND_DEBUG)
969977 message (STATUS "HDF5_${__lang} _HL_LIBRARIES: ${HDF5_${__lang} _HL_LIBRARIES}" )
970978 endforeach ()
971979endif ()
980+
981+ cmake_policy (POP)
0 commit comments