Geant4 Cross Reference |
1 # - G4HDF5Shim 2 # 3 # Geant4's Geant4Config.cmake file aims to support CMake 3.8 and newer 4 # The HDF5 dependency is located through CMake's builtin FindHDF5 5 # module, but this does not supply imported targets until CMake 3.20. 6 # It may use HDF5's hdf5-config.cmake file if available, so create 7 # custom imported target hdf5::hdf5 to allow both cases to be handled 8 # without interference with either. 9 10 if(HDF5_FOUND) 11 # If we're in MT mode, found HDF5 must also support MT 12 if(GEANT4_BUILD_MULTITHREADED OR Geant4_multithreaded_FOUND) 13 include(CheckCXXSymbolExists) 14 set(CMAKE_REQUIRED_INCLUDES "${HDF5_INCLUDE_DIRS}") 15 check_cxx_symbol_exists(H5_HAVE_THREADSAFE "H5pubconf.h" GEANT4_HAVE_H5_HAVE_THREADSAFE) 16 unset(CMAKE_REQUIRED_INCLUDES) 17 18 if(NOT GEANT4_HAVE_H5_HAVE_THREADSAFE) 19 message(FATAL_ERROR 20 "Found an install of HDF5, but it was not built with support for thread safety. " 21 "Either build Geant4 in single threaded mode, or use/reinstall HDF5 with " 22 "thread safety enabled. See HDF5's install guides, available from https://support.hdfgroup.org/HDF5/release/, for instructions on this.\n" 23 ) 24 endif() 25 endif() 26 27 # If FindHDF5 does not yet supply imported targets, we 28 # create an internal INTERFACE target to wrap these. 29 # This still hard-codes include/library paths, but limits it 30 # to one place. Later, we'll create proper imported targets 31 # with re-finds but for now this is the best minimally invasive proceedure 32 if(NOT TARGET hdf5::hdf5) 33 add_library(hdf5::hdf5 IMPORTED UNKNOWN) 34 set_target_properties(hdf5::hdf5 PROPERTIES 35 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 36 IMPORTED_LOCATION "${HDF5_C_LIBRARY_hdf5}" 37 INTERFACE_INCLUDE_DIRECTORIES "${HDF5_C_INCLUDE_DIRS}" 38 INTERFACE_LINK_LIBRARIES "${HDF5_C_LIBRARIES}" 39 ) 40 endif() 41 endif()