Skip to content

Commit 7da83f0

Browse files
committed
cmake: findhdf5 cmake 3.18 backport
v2.5.3
1 parent 07d1aae commit 7da83f0

File tree

4 files changed

+64
-56
lines changed

4 files changed

+64
-56
lines changed

CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ if(NOT CMAKE_BUILD_TYPE)
44
endif()
55
project(h5fortran
66
LANGUAGES Fortran
7-
VERSION 2.5.2
7+
VERSION 2.5.3
88
DESCRIPTION "thin, light, easy HDF5 Fortran interface"
99
HOMEPAGE_URL https://github.com/scivision/h5fortran)
1010
enable_testing()
1111

1212
option(test_shaky "run shaky tests" OFF)
1313

14-
# list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
14+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
15+
# set(HDF5_FIND_DEBUG true)
1516

1617
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/compilers.cmake)
1718
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/hdf5.cmake)

cmake/Modules/FindHDF5.cmake

Lines changed: 60 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
FindHDF5
66
--------
77
8+
backported from CMake 3.18
9+
810
Find Hierarchical Data Format (HDF5), a library for reading and writing
911
self describing array data.
1012
@@ -132,6 +134,7 @@ The following variable can be set to guide the search for HDF5 libraries and inc
132134
include(SelectLibraryConfigurations)
133135
include(FindPackageHandleStandardArgs)
134136

137+
cmake_policy(PUSH)
135138
cmake_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()
378392
endmacro()
379393

@@ -461,13 +475,8 @@ function(_HDF5_select_imported_config target imported_conf)
461475
endfunction()
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)
471480
else()
472481
set(_HDF5_SEARCH_OPTS)
473482
endif()
@@ -555,7 +564,7 @@ if(NOT HDF5_FOUND AND NOT HDF5_NO_FIND_PACKAGE_CONFIG_FILE)
555564
endif()
556565
endif()
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()
971979
endif()
980+
981+
cmake_policy(POP)

cmake/hdf5.cmake

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# don't enclose this all in "if(NOT DEFINED HDF5OK)" because CMake intermittantly doesn't cache needed HDF5 variables.
22

3-
set(HDF5_SEARCH_WRAPPER true)
43
set(HDF5_USE_STATIC_LIBRARIES true)
54

65
# Intel HDF5 for Windows has some real issues from the factory, this makes it work:
@@ -10,8 +9,6 @@ if(WIN32 AND CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
109
set(HDF5_USE_STATIC_LIBRARIES false)
1110
endif()
1211

13-
# set(HDF5_FIND_DEBUG true)
14-
1512
find_package(HDF5 REQUIRED COMPONENTS Fortran HL)
1613
if(MINGW)
1714
set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS}/static)

meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
project('h5fortran', 'fortran',
22
meson_version : '>=0.52.0',
3-
version : '2.5.2',
3+
version : '2.5.3',
44
default_options : ['default_library=static', 'buildtype=release', 'warning_level=3'])
55

66
subdir('meson')

0 commit comments

Comments
 (0)