Skip to content

Commit 1238790

Browse files
committed
cmake: modernize like h5fortran
1 parent 97c77c8 commit 1238790

File tree

4 files changed

+34
-51
lines changed

4 files changed

+34
-51
lines changed

CMakeLists.txt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.11...3.25)
1+
cmake_minimum_required(VERSION 3.14...3.28)
22

33
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
44
if(NOT is_multi_config AND NOT (CMAKE_BUILD_TYPE OR DEFINED ENV{CMAKE_BUILD_TYPE}))
@@ -23,7 +23,18 @@ if(${PROJECT_NAME}_BUILD_TESTING)
2323
enable_language(CXX)
2424
endif()
2525

26-
include(cmake/options.cmake)
26+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
27+
28+
# --- avoid Anaconda libraries
29+
if(DEFINED ENV{CONDA_PREFIX})
30+
list(APPEND CMAKE_IGNORE_PREFIX_PATH $ENV{CONDA_PREFIX})
31+
list(APPEND CMAKE_IGNORE_PATH $ENV{CONDA_PREFIX}/bin)
32+
# need CMAKE_IGNORE_PATH for CMake < 3.23
33+
# and to ensure system env var PATH doesn't interfere
34+
# despite CMAKE_IGNORE_PREFIX_PATH
35+
endif()
36+
37+
include(options.cmake)
2738
include(cmake/compilers.cmake)
2839

2940
# if HDF5-MPI, ensure all the pieces are working together at configure time.
@@ -83,14 +94,9 @@ set_property(TARGET h5fortran PROPERTY VERSION ${PROJECT_VERSION})
8394
add_library(h5fortran::h5fortran INTERFACE IMPORTED GLOBAL)
8495
target_link_libraries(h5fortran::h5fortran INTERFACE h5fortran)
8596

86-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/h5fortran.mod DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
97+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/h5fortran.mod TYPE INCLUDE)
8798

88-
install(TARGETS h5fortran EXPORT ${PROJECT_NAME}-targets
89-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
90-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
91-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
92-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
93-
)
99+
install(TARGETS h5fortran EXPORT ${PROJECT_NAME}-targets)
94100

95101
add_subdirectory(src)
96102

cmake/FindHDF5.cmake

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ NAMES H5pubconf.h H5pubconf-64.h
118118
HINTS ${HDF5_C_INCLUDE_DIR}
119119
NO_DEFAULT_PATH
120120
)
121+
message(VERBOSE "HDF5 config: ${h5_conf}")
121122

122123
if(NOT h5_conf)
123124
set(HDF5_C_FOUND false)
@@ -145,23 +146,19 @@ endif()
145146
# get version
146147
# from CMake/Modules/FindHDF5.cmake
147148
file(STRINGS ${h5_conf} _def
148-
REGEX "^[ \t]*#[ \t]*define[ \t]+H5_VERSION[ \t]+" )
149-
if("${_def}" MATCHES
150-
"H5_VERSION[ \t]+\"([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?\"" )
151-
set(HDF5_VERSION "${CMAKE_MATCH_1}" )
152-
if(CMAKE_MATCH_3)
153-
set(HDF5_VERSION ${HDF5_VERSION}.${CMAKE_MATCH_3})
149+
REGEX "^[ \t]*#[ \t]*define[ \t]+H5_VERSION[ \t]+"
150+
)
151+
message(DEBUG "HDF5 version define: ${_def}")
152+
153+
if("${_def}" MATCHES "H5_VERSION[ \t]+\"([0-9]+\\.[0-9]+\\.[0-9]+)")
154+
set(HDF5_VERSION "${CMAKE_MATCH_1}")
154155
endif()
155-
endif()
156+
message(DEBUG "HDF5 version match 0, 1: ${CMAKE_MATCH_0} ${CMAKE_MATCH_1}")
156157

157158
# avoid picking up incompatible zlib over the desired zlib
158-
if(CMAKE_VERSION VERSION_LESS 3.20)
159-
get_filename_component(zlib_dir ${HDF5_C_INCLUDE_DIR} DIRECTORY)
160-
else()
161-
cmake_path(GET HDF5_C_INCLUDE_DIR PARENT_PATH zlib_dir)
162-
endif()
163159
if(NOT ZLIB_ROOT)
164-
set(ZLIB_ROOT "${HDF5_ROOT};${zlib_dir}")
160+
get_filename_component(ZLIB_ROOT ${HDF5_C_INCLUDE_DIR} DIRECTORY)
161+
list(APPEND ZLIB_ROOT ${HDF5_ROOT})
165162
endif()
166163

167164

@@ -504,13 +501,15 @@ if(HDF5_ROOT)
504501
NO_DEFAULT_PATH
505502
HINTS ${HDF5_ROOT}
506503
PATH_SUFFIXES ${hdf5_binsuf}
504+
DOC "HDF5 Fortran compiler script"
507505
)
508506
else()
509507
find_program(HDF5_Fortran_COMPILER_EXECUTABLE
510508
NAMES ${wrapper_names}
511509
NAMES_PER_DIR
512510
PATHS ${hdf5_binpref}
513511
PATH_SUFFIXES ${hdf5_binsuf}
512+
DOC "HDF5 Fortran compiler script"
514513
)
515514
endif()
516515

@@ -559,13 +558,15 @@ if(HDF5_ROOT)
559558
NO_DEFAULT_PATH
560559
HINTS ${HDF5_ROOT}
561560
PATH_SUFFIXES ${hdf5_binsuf}
561+
DOC "HDF5 C++ compiler script"
562562
)
563563
else()
564564
find_program(HDF5_CXX_COMPILER_EXECUTABLE
565565
NAMES ${wrapper_names}
566566
NAMES_PER_DIR
567567
PATHS ${hdf5_binpref}
568568
PATH_SUFFIXES ${hdf5_binsuf}
569+
DOC "HDF5 C++ compiler script"
569570
)
570571
endif()
571572

@@ -608,13 +609,15 @@ if(HDF5_ROOT)
608609
NO_DEFAULT_PATH
609610
HINTS ${HDF5_ROOT}
610611
PATH_SUFFIXES ${hdf5_binsuf}
612+
DOC "HDF5 C compiler script"
611613
)
612614
else()
613615
find_program(HDF5_C_COMPILER_EXECUTABLE
614616
NAMES ${wrapper_names}
615617
NAMES_PER_DIR
616618
PATHS ${hdf5_binpref}
617619
PATH_SUFFIXES ${hdf5_binsuf}
620+
DOC "HDF5 C compiler script"
618621
)
619622
endif()
620623

@@ -782,15 +785,6 @@ if(NOT HDF5_ROOT)
782785
endif()
783786
endif()
784787

785-
# Conda causes numerous problems with finding HDF5, so exclude from search
786-
if(DEFINED ENV{CONDA_PREFIX})
787-
set(h5_ignore_path
788-
$ENV{CONDA_PREFIX}/bin $ENV{CONDA_PREFIX}/lib $ENV{CONDA_PREFIX}/include
789-
$ENV{CONDA_PREFIX}/Library/bin $ENV{CONDA_PREFIX}/Library/lib $ENV{CONDA_PREFIX}/Library/include
790-
)
791-
list(APPEND CMAKE_IGNORE_PATH ${h5_ignore_path})
792-
endif()
793-
794788
# --- library suffixes
795789

796790
set(hdf5_lsuf lib hdf5/lib) # need explicit "lib" for self-built HDF5
@@ -877,11 +871,6 @@ check_hdf5_link()
877871
set(CMAKE_REQUIRED_LIBRARIES)
878872
set(CMAKE_REQUIRED_INCLUDES)
879873

880-
# pop off ignored paths so rest of script can find Python
881-
if(DEFINED CMAKE_IGNORE_PATH)
882-
list(REMOVE_ITEM CMAKE_IGNORE_PATH "${h5_ignore_path}")
883-
endif()
884-
885874
include(FindPackageHandleStandardArgs)
886875
find_package_handle_standard_args(HDF5
887876
REQUIRED_VARS HDF5_C_LIBRARIES HDF5_links

cmake/hdf5.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ set(HDF5_LIBRARIES)
1717
foreach(_name hdf5_hl_fortran hdf5_hl_f90cstub hdf5_fortran hdf5_f90cstub hdf5_hl hdf5)
1818
if(BUILD_SHARED_LIBS)
1919
if(WIN32)
20-
list(APPEND HDF5_LIBRARIES ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/lib${_name}${CMAKE_SHARED_LIBRARY_SUFFIX})
20+
list(APPEND HDF5_LIBRARIES ${CMAKE_INSTALL_FULL_BINDIR}/lib${_name}${CMAKE_SHARED_LIBRARY_SUFFIX})
2121
else()
2222
list(APPEND HDF5_LIBRARIES ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/lib${_name}${CMAKE_SHARED_LIBRARY_SUFFIX})
2323
endif()
@@ -26,7 +26,7 @@ foreach(_name hdf5_hl_fortran hdf5_hl_f90cstub hdf5_fortran hdf5_f90cstub hdf5_h
2626
endif()
2727
endforeach()
2828

29-
set(HDF5_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
29+
set(HDF5_INCLUDE_DIRS ${CMAKE_INSTALL_FULL_INCLUDEDIR})
3030

3131
# --- Zlib
3232
if(NOT TARGET ZLIB::ZLIB)

cmake/options.cmake renamed to options.cmake

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ option(tidy "Run clang-tidy on the code")
88

99
option(hdf5_parallel "use HDF5-MPI layer" true)
1010

11-
set(CMAKE_TLS_VERIFY true)
11+
option(CMAKE_TLS_VERIFY "Verify TLS certificates" true)
1212

1313
include(GNUInstallDirs)
1414

@@ -18,19 +18,7 @@ if(BUILD_SHARED_LIBS AND MSVC)
1818
cmake -DBUILD_SHARED_LIBS=off")
1919
endif()
2020

21-
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
22-
23-
# Rpath options necessary for shared library install to work correctly in user projects
24-
set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
25-
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
26-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
27-
2821
# Necessary for shared library with Visual Studio / Windows oneAPI
2922
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS true)
3023

31-
# allow CMAKE_PREFIX_PATH with ~ expand
32-
if(CMAKE_PREFIX_PATH)
33-
get_filename_component(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ABSOLUTE)
34-
endif()
35-
3624
file(GENERATE OUTPUT .gitignore CONTENT "*")

0 commit comments

Comments
 (0)