@@ -94,6 +94,20 @@ set(${outvar} ${_v} PARENT_SCOPE)
94
94
95
95
endfunction (pop_flag)
96
96
97
+ macro (find_mpi)
98
+ # non-cache set by FindMPI are not visible outside function -- need macro just to see within that function
99
+ set (mpi_comp C)
100
+ if (Fortran IN_LIST HDF5_FIND_COMPONENTS)
101
+ list (APPEND mpi_comp Fortran)
102
+ endif ()
103
+ if (HDF5_FIND_REQUIRED)
104
+ find_package (MPI COMPONENTS ${mpi_comp} REQUIRED)
105
+ else ()
106
+ find_package (MPI COMPONENTS ${mpi_comp} )
107
+ endif ()
108
+
109
+ endmacro (find_mpi)
110
+
97
111
98
112
macro (detect_config)
99
113
@@ -121,8 +135,8 @@ check_symbol_exists(H5_HAVE_PARALLEL ${h5_conf} HDF5_HAVE_PARALLEL)
121
135
set (HDF5_parallel_FOUND false )
122
136
123
137
if (HDF5_HAVE_PARALLEL)
138
+ find_mpi()
124
139
if (NOT MPI_FOUND)
125
- message (WARNING "user CMakeLists.txt must do find_package(MPI) if using parallel HDF5" )
126
140
return ()
127
141
endif ()
128
142
@@ -638,10 +652,11 @@ endfunction(hdf5_c_wrap)
638
652
639
653
function (check_c_links)
640
654
641
- list (INSERT CMAKE_REQUIRED_LIBRARIES 0 ${HDF5_C_LIBRARIES} )
655
+ list (PREPEND CMAKE_REQUIRED_LIBRARIES ${HDF5_C_LIBRARIES} )
642
656
set (CMAKE_REQUIRED_INCLUDES ${HDF5_C_INCLUDE_DIR} )
643
657
644
658
if (HDF5_parallel_FOUND)
659
+ find_mpi()
645
660
646
661
list (APPEND CMAKE_REQUIRED_INCLUDES ${MPI_C_INCLUDE_DIRS} )
647
662
list (APPEND CMAKE_REQUIRED_LIBRARIES ${MPI_C_LIBRARIES} )
@@ -687,10 +702,11 @@ endfunction(check_c_links)
687
702
688
703
function (check_fortran_links)
689
704
690
- list (INSERT CMAKE_REQUIRED_LIBRARIES 0 ${HDF5_Fortran_LIBRARIES} ${HDF5_C_LIBRARIES} )
705
+ list (PREPEND CMAKE_REQUIRED_LIBRARIES ${HDF5_Fortran_LIBRARIES} ${HDF5_C_LIBRARIES} )
691
706
set (CMAKE_REQUIRED_INCLUDES ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_C_INCLUDE_DIR} )
692
707
693
708
if (HDF5_parallel_FOUND)
709
+ find_mpi()
694
710
695
711
list (APPEND CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_DIRS} )
696
712
list (APPEND CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES} )
@@ -727,6 +743,15 @@ endfunction(check_fortran_links)
727
743
728
744
function (check_hdf5_link)
729
745
746
+ # HDF5 bug #3663 for HDF5 1.14.2, 1.14.3, ...?
747
+ # https://github.com/HDFGroup/hdf5/issues/3663
748
+ if (WIN32 AND CMAKE_Fortran_COMPILER_ID MATCHES "^Intel" )
749
+ if (HDF5_VERSION MATCHES "1.14.[2-3]" )
750
+ message (VERBOSE "FindHDF5: applying workaround for HDF5 bug #3663 with Intel oneAPI on Windows" )
751
+ list (APPEND CMAKE_REQUIRED_LIBRARIES shlwapi)
752
+ endif ()
753
+ endif ()
754
+
730
755
if (NOT HDF5_C_FOUND)
731
756
return ()
732
757
endif ()
@@ -774,10 +799,10 @@ endif()
774
799
775
800
set (hdf5_lsuf lib hdf5/lib) # need explicit "lib" for self-built HDF5
776
801
if (NOT HDF5_ROOT)
777
- list (INSERT hdf5_lsuf 0 hdf5/openmpi hdf5/mpich) # Ubuntu
778
- list (INSERT hdf5_lsuf 0 openmpi/lib mpich/lib) # CentOS
802
+ list (PREPEND hdf5_lsuf hdf5/openmpi hdf5/mpich) # Ubuntu
803
+ list (PREPEND hdf5_lsuf openmpi/lib mpich/lib) # CentOS
779
804
if (NOT parallel IN_LIST HDF5_FIND_COMPONENTS)
780
- list (INSERT hdf5_lsuf 0 hdf5/serial) # Ubuntu
805
+ list (PREPEND hdf5_lsuf hdf5/serial) # Ubuntu
781
806
endif ()
782
807
endif ()
783
808
@@ -792,13 +817,13 @@ else()
792
817
endif ()
793
818
794
819
# Ubuntu
795
- list (INSERT hdf5_isuf 0 hdf5/openmpi hdf5/mpich)
796
- list (INSERT hdf5_msuf 0 hdf5/openmpi hdf5/mpich)
820
+ list (PREPEND hdf5_isuf hdf5/openmpi hdf5/mpich)
821
+ list (PREPEND hdf5_msuf hdf5/openmpi hdf5/mpich)
797
822
798
823
if (NOT parallel IN_LIST HDF5_FIND_COMPONENTS)
799
824
# Ubuntu
800
- list (INSERT hdf5_isuf 0 hdf5/serial)
801
- list (INSERT hdf5_msuf 0 hdf5/serial)
825
+ list (PREPEND hdf5_isuf hdf5/serial)
826
+ list (PREPEND hdf5_msuf hdf5/serial)
802
827
endif ()
803
828
804
829
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64)" )
@@ -810,7 +835,7 @@ endif()
810
835
if (NOT HDF5_ROOT AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
811
836
# CentOS paths
812
837
if (parallel IN_LIST HDF5_FIND_COMPONENTS)
813
- list (INSERT hdf5_msuf 0 gfortran/modules/openmpi gfortran/modules/mpich)
838
+ list (PREPEND hdf5_msuf gfortran/modules/openmpi gfortran/modules/mpich)
814
839
else ()
815
840
list (APPEND hdf5_msuf gfortran/modules)
816
841
endif ()
0 commit comments