Skip to content

Commit bc23554

Browse files
committed
cmake: use imported targets (modernize)
1 parent 655f46a commit bc23554

File tree

8 files changed

+89
-37
lines changed

8 files changed

+89
-37
lines changed

CMakeLists.txt

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ cmake_minimum_required (VERSION 3.12) # 3.12 for Fortran submodule
22
if(NOT CMAKE_BUILD_TYPE)
33
set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug or Release")
44
endif()
5-
project(hdf5iface
5+
project(h5fortran
66
LANGUAGES Fortran
7-
VERSION 2.5.0
7+
VERSION 2.5.1
88
DESCRIPTION "thin, light, easy HDF5 Fortran interface"
99
HOMEPAGE_URL https://github.com/scivision/h5fortran)
1010
enable_testing()
@@ -13,24 +13,32 @@ option(test_shaky "run shaky tests" OFF)
1313

1414
# list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
1515

16-
include(cmake/compilers.cmake)
17-
include(cmake/hdf5.cmake)
16+
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/compilers.cmake)
17+
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/hdf5.cmake)
1818

19-
set(CTEST_TEST_TIMEOUT 15)
20-
# --- install config (before build)
19+
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
20+
set(CTEST_TEST_TIMEOUT 15)
21+
# --- install config (before build)
2122

22-
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
23-
if(WIN32)
24-
set(HOME $ENV{USERPROFILE})
25-
else()
26-
set(HOME $ENV{HOME})
27-
endif()
23+
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
24+
if(WIN32)
25+
set(HOME $ENV{USERPROFILE})
26+
else()
27+
set(HOME $ENV{HOME})
28+
endif()
2829

29-
set(CMAKE_INSTALL_PREFIX "${HOME}/.local/h5fortran" CACHE PATH "..." FORCE)
30+
set(CMAKE_INSTALL_PREFIX "${HOME}/.local/h5fortran" CACHE PATH "..." FORCE)
31+
endif()
3032
endif()
31-
32-
# -- build
33+
# --- build
3334

3435
add_subdirectory(src)
3536

3637
add_subdirectory(src/tests)
38+
39+
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
40+
set(CPACK_GENERATOR ZIP)
41+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
42+
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
43+
include(CPack)
44+
endif()

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ The library `libh5fortran` is built, link it into your program as usual.
6363

6464
### Meson
6565

66+
To build h5fortran as a standalone project
67+
6668
```sh
6769
meson build
6870

@@ -119,10 +121,15 @@ include(FetchContent)
119121
120122
FetchContent_Declare(h5fortran_proj
121123
GIT_REPOSITORY https://github.com/scivision/h5fortran.git
122-
GIT_TAG v2.4.1 # whatever desired version is
124+
GIT_TAG master # whatever desired version is
123125
)
124126
125127
FetchContent_MakeAvailable(h5fortran_proj)
128+
129+
# ------------------------------------------------------
130+
# whatever your program is
131+
add_executable(myProj main.f90)
132+
target_link_libraries(myProj h5fortran::h5fortran)
126133
```
127134

128135
## Usage

cmake/h5fortranConfig.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
check_required_components(h5fortran)

cmake/hdf5.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ endif()
1515
find_package(HDF5 REQUIRED COMPONENTS Fortran HL)
1616
if(MINGW)
1717
set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS}/static)
18-
message(${HDF5_INCLUDE_DIRS})
1918
endif()
2019

2120
set(HDF5_LIBRARIES ${HDF5_Fortran_HL_LIBRARIES} ${HDF5_Fortran_LIBRARIES} ${HDF5_LIBRARIES})

cmake/install.cmake

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# --- install / packaging
2+
3+
install(TARGETS ${PROJECT_NAME}
4+
EXPORT ${PROJECT_NAME}Targets
5+
ARCHIVE DESTINATION lib
6+
LIBRARY DESTINATION lib
7+
RUNTIME DESTINATION bin
8+
INCLUDES DESTINATION include)
9+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include)
10+
11+
12+
include(CMakePackageConfigHelpers)
13+
14+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/${PROJECT_NAME}Config.cmake.in
15+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
16+
INSTALL_DESTINATION lib)
17+
18+
write_basic_package_version_file(
19+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
20+
VERSION $${PROJECT_NAME}_VERSION}
21+
COMPATIBILITY SameMinorVersion
22+
)
23+
24+
install(EXPORT ${PROJECT_NAME}Targets
25+
FILE ${PROJECT_NAME}Targets.cmake
26+
NAMESPACE ${PROJECT_NAME}::
27+
DESTINATION lib/cmake/${PROJECT_NAME}
28+
)
29+
30+
install(FILES
31+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
32+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
33+
DESTINATION lib/cmake/${PROJECT_NAME})

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.0',
3+
version : '2.5.1',
44
default_options : ['default_library=static', 'buildtype=release', 'warning_level=3'])
55

66
subdir('meson')

src/CMakeLists.txt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ add_library(h5fortran hdf5_interface.f90
22
read.f90 reader.f90
33
write.f90 writer.f90
44
string_utils.f90)
5-
# need BOTH includes, for some systems!
6-
target_include_directories(h5fortran PRIVATE ${HDF5_INCLUDE_DIRS})
5+
target_include_directories(h5fortran PRIVATE ${HDF5_INCLUDE_DIRS}
6+
INTERFACE
7+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
8+
$<INSTALL_INTERFACE:include>)
79
target_link_libraries(h5fortran PRIVATE ${HDF5_LIBRARIES})
810
target_compile_options(h5fortran PRIVATE ${HDF5_Fortran_DEFINITIONS})
911
set_target_properties(h5fortran PROPERTIES
10-
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}
11-
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
12-
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
12+
Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
13+
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
14+
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
15+
add_library(h5fortran::h5fortran ALIAS h5fortran)
1316

14-
install(TARGETS h5fortran
15-
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}
16-
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX})
17-
install(FILES ${CMAKE_BINARY_DIR}/h5fortran.mod DESTINATION ${CMAKE_INSTALL_PREFIX})
17+
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
18+
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/install.cmake)
19+
endif()

src/tests/CMakeLists.txt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
set(tmpdir ${CMAKE_CURRENT_BINARY_DIR})
22

33
add_executable(test_minimal test_minimal.f90)
4-
target_link_libraries(test_minimal PRIVATE h5fortran ${HDF5_LIBRARIES})
5-
target_include_directories(test_minimal PRIVATE ${CMAKE_BINARY_DIR} ${HDF5_INCLUDE_DIRS})
4+
target_link_libraries(test_minimal PRIVATE h5fortran::h5fortran ${HDF5_LIBRARIES})
5+
target_include_directories(test_minimal PRIVATE ${HDF5_INCLUDE_DIRS})
66
add_test(NAME h5fortran:minimal COMMAND $<TARGET_FILE:test_minimal> ${tmpdir})
77
if(WIN32 AND HDF5_ROOT)
88
set_tests_properties(h5fortran:minimal PROPERTIES ENVIRONMENT "PATH=${HDF5_ROOT}/bin;$ENV{PATH}")
99
endif()
1010

1111
add_executable(test_errors test_error.f90)
12-
target_link_libraries(test_errors PRIVATE h5fortran ${HDF5_LIBRARIES})
13-
target_include_directories(test_errors PRIVATE ${CMAKE_BINARY_DIR} ${HDF5_INCLUDE_DIRS})
12+
target_link_libraries(test_errors PRIVATE h5fortran::h5fortran ${HDF5_LIBRARIES})
13+
target_include_directories(test_errors PRIVATE ${HDF5_INCLUDE_DIRS})
1414
add_test(NAME h5fortran:ErrorCheck COMMAND $<TARGET_FILE:test_errors> ${tmpdir})
1515
set_tests_properties(h5fortran:ErrorCheck PROPERTIES SKIP_RETURN_CODE 77)
1616
if(WIN32 AND HDF5_ROOT)
1717
set_tests_properties(h5fortran:ErrorCheck PROPERTIES ENVIRONMENT "PATH=${HDF5_ROOT}/bin;$ENV{PATH}")
1818
endif()
1919

2020
add_executable(testh5 test_hdf5_ifc.f90)
21-
target_link_libraries(testh5 PRIVATE h5fortran ${HDF5_LIBRARIES})
22-
target_include_directories(testh5 PRIVATE ${CMAKE_BINARY_DIR} ${HDF5_INCLUDE_DIRS})
21+
target_link_libraries(testh5 PRIVATE h5fortran::h5fortran ${HDF5_LIBRARIES})
22+
target_include_directories(testh5 PRIVATE ${HDF5_INCLUDE_DIRS})
2323
if(${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU)
2424
target_compile_options(testh5 PRIVATE -Wno-compare-reals)
2525
endif()
@@ -32,8 +32,8 @@ if(WIN32 AND HDF5_ROOT)
3232
endif()
3333

3434
add_executable(test_deflate test_deflate.f90)
35-
target_link_libraries(test_deflate PRIVATE h5fortran ${HDF5_LIBRARIES})
36-
target_include_directories(test_deflate PRIVATE ${CMAKE_BINARY_DIR} ${HDF5_INCLUDE_DIRS})
35+
target_link_libraries(test_deflate PRIVATE h5fortran::h5fortran ${HDF5_LIBRARIES})
36+
target_include_directories(test_deflate PRIVATE ${HDF5_INCLUDE_DIRS})
3737
add_test(NAME h5fortran:deflate COMMAND $<TARGET_FILE:test_deflate> ${tmpdir})
3838
set_tests_properties(h5fortran:deflate PROPERTIES SKIP_RETURN_CODE 77)
3939
if(WIN32 AND HDF5_ROOT)
@@ -45,8 +45,8 @@ set(testfile ${tmpdir}/p5.h5)
4545

4646
# ====
4747
add_executable(test_shape test_shape.f90)
48-
target_link_libraries(test_shape PRIVATE h5fortran ${HDF5_LIBRARIES})
49-
target_include_directories(test_shape PRIVATE ${CMAKE_BINARY_DIR} ${HDF5_INCLUDE_DIRS})
48+
target_link_libraries(test_shape PRIVATE h5fortran::h5fortran ${HDF5_LIBRARIES})
49+
target_include_directories(test_shape PRIVATE ${HDF5_INCLUDE_DIRS})
5050

5151
add_test(NAME h5fortran:ShapeCheck COMMAND $<TARGET_FILE:test_shape> ${testfile} /group69/flux_node)
5252
set_tests_properties(h5fortran:ShapeCheck PROPERTIES

0 commit comments

Comments
 (0)