You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
606 lines
18 KiB
606 lines
18 KiB
# - FindHDF5.cmake
|
|
#
|
|
# The FindHDF5 module with the CMake distribution will not work if
|
|
# the HDF5 compilers are not installed or if more the one hdf5 is on the
|
|
# system. The search logic also depends on an environment variable
|
|
# HDF5_ROOT. This module removes both requirements and insteead relies on the
|
|
# libhdf5.settings file found in the library installation directory
|
|
#
|
|
# This module will ONLY work for HDF5 configured through the GNU
|
|
# autoconf script configure. When built through CMake, the *config.cmake
|
|
# files should be used.
|
|
#
|
|
#
|
|
# Based on version from MSTK which has the following:
|
|
# ACKNOWLEDGEMENT:
|
|
# This file has been adapted from the build system of the Amanzi project
|
|
# under the DOE/ASCEM code project. It is used here based on the BSD open
|
|
# source licensing of the Amanzi code base. Many thanks to the Amanzi build
|
|
# system developers
|
|
#
|
|
# @HEADER
|
|
# ************************************************************************
|
|
#
|
|
# TriBITS: Tribal Build, Integrate, and Test System
|
|
# Copyright 2016, 2021, 2022 Sandia Corporation
|
|
#
|
|
# Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
# the U.S. Government retains certain rights in this software.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# 3. Neither the name of the Corporation nor the names of the
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
|
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# ************************************************************************
|
|
# @HEADER#
|
|
|
|
# CMake includes
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
include(AddImportedLibrary)
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# Functions/Macros
|
|
#
|
|
#
|
|
macro(_hdf5_boolean_convert _var)
|
|
string(TOUPPER ${${_var}} _var_UC)
|
|
if(_var_UC)
|
|
set(${_var} TRUE)
|
|
else()
|
|
set(${_var} FALSE)
|
|
endif()
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
function(_hdf5_chomp_string old_str new_str_var)
|
|
|
|
string(REGEX REPLACE "[\t\r\n]" " " _tmp "${old_str}")
|
|
#string(REGEX REPLACE " " "S" _tmp "${_tmp}")
|
|
string(REGEX REPLACE "^ +" "" _tmp "${_tmp}")
|
|
string(REGEX REPLACE " +$" "" _tmp "${_tmp}")
|
|
|
|
set(${new_str_var} ${_tmp} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_parse_settings_file _file _key _value)
|
|
|
|
set(_tmp ${_value}-NOTFOUND)
|
|
file(STRINGS ${_file} _output
|
|
REGEX "^[ \t]*${_key}:|^${_key}")
|
|
|
|
if(_output)
|
|
# _hdf5_chomp_string will remove all tabs, newlines and returns
|
|
# It also removes leading and trailing whitespace
|
|
_hdf5_chomp_string(${_output} _output)
|
|
# Remove the key signature
|
|
string(REGEX REPLACE "${_key}:" "" _output "${_output}")
|
|
# CHOMP again to remove leading and trailing whitespace
|
|
if (_output)
|
|
_hdf5_chomp_string(${_output} _output)
|
|
endif()
|
|
# Entry is non-empty if ANY non-space character is left
|
|
if ( "${_output}" MATCHES "[^ ]" )
|
|
set(_tmp ${_output})
|
|
endif()
|
|
endif()
|
|
|
|
set(${_value} ${_tmp} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_define_version _file _var)
|
|
|
|
set(_search_key "HDF5 Version")
|
|
_hdf5_parse_settings_file(${_file} ${_search_key} _tmp)
|
|
|
|
set(${_var} ${_tmp} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_define_parallel_build _file _var)
|
|
|
|
set(_search_key "Parallel HDF5")
|
|
_hdf5_parse_settings_file(${_file} ${_search_key} _tmp)
|
|
_hdf5_boolean_convert(_tmp)
|
|
|
|
set(${_var} ${_tmp} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_extra_library_dirs _file _var)
|
|
|
|
# Settings file has several locations to list LDFLAGS
|
|
# We'll pick them all and sort out later.
|
|
set(_search_ldflags_keys "AM_LDFLAGS;H5_LDFLAGS;LDFLAGS;Extra libraries")
|
|
set(_ldflags "")
|
|
foreach ( _key ${_search_ldflags_keys})
|
|
_hdf5_parse_settings_file(${_file} ${_key} _tmp)
|
|
if ( _tmp )
|
|
set(_ldflags "${_ldflags} ${_tmp}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# Now match all the -L flags
|
|
string(REGEX MATCHALL "-L([^\" ]+|\"[^\"]+\")" _lib_path_flags ${_ldflags})
|
|
|
|
# Loop through each
|
|
set(_directories)
|
|
foreach(_dir ${_lib_path_flags})
|
|
string(REGEX REPLACE "^-L" "" _dir ${_dir})
|
|
string(REGEX REPLACE "//" "/" _dir ${_dir})
|
|
list(APPEND _directories ${_dir})
|
|
endforeach()
|
|
|
|
if(_directories)
|
|
list(REMOVE_DUPLICATES _directories)
|
|
endif()
|
|
set(${_var} ${_directories} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
function(_hdf5_library_path _file _var)
|
|
|
|
# Settings file has several locations to list LDFLAGS
|
|
# We'll pick them all and sort out later.
|
|
set(_search_key "Installation point")
|
|
_hdf5_parse_settings_file(${_file} ${_search_key} _tmp)
|
|
|
|
set(${_var} ${_tmp} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_extra_libraries _file _var)
|
|
|
|
# Find all the extra libraries defined in the file
|
|
set(_search_key "Extra libraries")
|
|
set(_libraries)
|
|
_hdf5_parse_settings_file(${_file} ${_search_key} _library_flags)
|
|
string( REGEX MATCHALL "[, ]-l([^\", ]+)|^-l([^\", ]+)" _library_name_flags ${_library_flags})
|
|
foreach ( _lib ${_library_name_flags} )
|
|
_hdf5_chomp_string(${_lib} _lib_chomp)
|
|
string( REGEX REPLACE "^[,]-l|^-l" "" _lib_chomp ${_lib_chomp})
|
|
list(APPEND _libraries ${_lib_chomp})
|
|
endforeach()
|
|
|
|
# Grab all the extra library paths to build a search list
|
|
_hdf5_extra_library_dirs(${_file} _search_list)
|
|
|
|
# Loop through each library
|
|
# (1) find_library with the search list for hints
|
|
# (2) Add library name if find succeeds, otherwise
|
|
# add the name to the list.
|
|
set(_return_list)
|
|
foreach( _lib ${_libraries})
|
|
|
|
# Search with hints
|
|
set(_lib_name _lib_name-NOTFOUND)
|
|
find_library(_lib_name
|
|
NAMES ${_lib}
|
|
HINTS ${_search_list}
|
|
)
|
|
# Search without hints if the first search fails
|
|
if ( NOT _lib_name )
|
|
find_library(_lib_name NAMES ${_lib})
|
|
endif()
|
|
|
|
# Add the full library name if either find succeeded
|
|
# otherwise add the library name.
|
|
if(_lib_name)
|
|
list(APPEND _return_list ${_lib_name})
|
|
else()
|
|
list(APPEND _return_list ${_lib})
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
set(${_var} ${_return_list} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(_hdf5_extra_include_dirs _file _var)
|
|
|
|
# Settings file has several locations to list LDFLAGS
|
|
# We'll pick them all and sort out later.
|
|
|
|
# Keys in the file changed around version 1.8.3
|
|
set(_search_cflags_keys "CFLAGS;H5_CFLAGS;AM_CFLAGS;CPPFLAGS;H5_CPPFLAGS;AM_CPPFLAGS")
|
|
|
|
if ( HDF5_VERSION_STRING )
|
|
if ( "${HDF5_VERSION_STRING}" VERSION_LESS "1.8.3")
|
|
set(_search_cflags_keys "CFLAGS/H5_CFLAGS;AM_CFLAGS;CPPFLAGS/H5_CPPFLAGS;AM_CPPFLAGS")
|
|
endif()
|
|
endif()
|
|
|
|
set(_cflags "")
|
|
foreach ( _key ${_search_cflags_keys})
|
|
_hdf5_parse_settings_file(${_file} ${_key} _tmp)
|
|
if ( _tmp )
|
|
set(_cflags "${_cflags} ${_tmp}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# Now match all the -I flags
|
|
if (${_cflags})
|
|
string(REGEX MATCHALL "-I([^\" ]+|\"[^\"]+\")" _inc_path_flags ${_cflags})
|
|
|
|
# Loop through each
|
|
set(_directories)
|
|
foreach(_dir ${_inc_path_flags})
|
|
string(REGEX REPLACE "^-I" "" _dir ${_dir})
|
|
string(REGEX REPLACE "//" "/" _dir ${_dir})
|
|
list(APPEND _directories ${_dir})
|
|
endforeach()
|
|
endif()
|
|
|
|
if(_directories)
|
|
list(REMOVE_DUPLICATES _directories)
|
|
endif()
|
|
set(${_var} ${_directories} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
#
|
|
# End Functions/Macros
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
# ------------------------------------ #
|
|
# Initialize search paths and criteria #
|
|
# ------------------------------------ #
|
|
|
|
# If HDF5_ROOT was defined in the environment, use it.
|
|
# Definition from the command line will take precedence.
|
|
if (NOT HDF5_ROOT AND NOT $ENV{HDF5_ROOT} STREQUAL "")
|
|
set(HDF5_ROOT $ENV{HDF5_ROOT})
|
|
endif()
|
|
|
|
# HDF5_DIR is DEPRECATED WARN THE USER if it is set
|
|
if (NOT HDF5_ROOT AND HDF5_DIR )
|
|
message(WARNING "The configuration parameter HDF5_DIR is deprecated."
|
|
" Please use HDF5_ROOT instead to define the HDF5 installation")
|
|
set(HDF5_ROOT ${HDF5_DIR})
|
|
endif()
|
|
|
|
# Add the usual paths for searching using the HDF5_ROOT variable
|
|
if (HDF5_ROOT)
|
|
list(APPEND _hdf5_INCLUDE_SEARCH_DIRS
|
|
${HDF5_ROOT}/include
|
|
${HDF5_ROOT}/include/hdf5/serial
|
|
${HDF5_ROOT}
|
|
)
|
|
|
|
list(APPEND _hdf5_LIBRARY_SEARCH_DIRS
|
|
${HDF5_ROOT}/lib
|
|
${HDF5_ROOT}
|
|
)
|
|
|
|
list(APPEND _hdf5_BINARY_SEARCH_DIRS
|
|
${HDF5_ROOT}/bin
|
|
${HDF5_ROOT}
|
|
)
|
|
endif()
|
|
|
|
# Restrict the search to HDF5_ROOT if user does not want other
|
|
# directories searched.
|
|
if ( HDF5_NO_SYSTEM_PATHS )
|
|
set(_hdf5_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH)
|
|
endif()
|
|
|
|
# A list of valid components
|
|
set(HDF5_VALID_COMPONENTS HL C)
|
|
|
|
# A list of requested components, invalid components are ignored.
|
|
if ( NOT HDF5_FIND_COMPONENTS )
|
|
set(HDF5_SEARCH_COMPONENTS "C")
|
|
else()
|
|
foreach ( component ${HDF5_FIND_COMPONENTS} )
|
|
list(FIND HDF5_VALID_COMPONENTS ${component} component_idx)
|
|
if ( ${component_idx} EQUAL -1 )
|
|
message(SEND_ERROR "${component} is not a valid HDF5 component")
|
|
else()
|
|
list(APPEND HDF5_SEARCH_COMPONENTS ${component})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
|
|
# ------------------------------------ #
|
|
# Perform CMake Search #
|
|
# ------------------------------------ #
|
|
|
|
|
|
|
|
if ( HDF5_INCLUDE_DIRS AND HDF5_LIBRARIES )
|
|
# Do nothing if the user has defined these on the command line
|
|
else()
|
|
|
|
# --- Target names used in both the CMake configure files
|
|
# and here to create targets
|
|
set( HDF5_C_TARGET hdf5 )
|
|
set( HDF5_HL_TARGET hdf5_hl )
|
|
|
|
# ------------------------------------------------------ #
|
|
# Search Logic
|
|
# (1) Look for a CMake configuration file(s)
|
|
# (2) If the above fails, search by name the include and
|
|
# library files.
|
|
# Step one will be bypassed if HDF5_NO_HDF5_CMAKE is set
|
|
|
|
# --- Search for a CMake Configuration
|
|
if ( NOT HDF5_NO_HDF5_CMAKE )
|
|
|
|
# Call find package only looking for CMake config files
|
|
if (WIN32)
|
|
find_package(HDF5
|
|
HINTS ${HDF5_ROOT}/lib/cmake
|
|
QUIET
|
|
NO_MODULE)
|
|
else()
|
|
find_package(HDF5
|
|
HINTS ${HDF5_ROOT}/cmake/hdf5
|
|
QUIET
|
|
NO_MODULE)
|
|
endif()
|
|
# If located a HDF5 configuration file
|
|
if (HDF5_FOUND)
|
|
|
|
message(STATUS "Found HDF5 CMake configuration file ( directory ${HDF5_CONFIG} )")
|
|
|
|
# Want consistency between this module and the CMake file
|
|
set(HDF5_VERSION ${HDF5_VERSION_STRING})
|
|
set(HDF5_IS_PARALLEL ${HDF5_ENABLE_PARALLEL})
|
|
set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
|
|
|
|
# Define HDF5_C_LIBRARIES to contain hdf5 and hdf5_hl C libraries
|
|
set(HDF5_C_LIBRARIES ${HDF5_HL_LIBRARY} ${HDF5_CLIBRARY})
|
|
|
|
if (HDF5_IS_PARALLEL)
|
|
find_package(MPI)
|
|
if (MPI_C_FOUND)
|
|
set(HDF5_LIBRARIES ${HDF5_LIBRARIES} ${MPI_C_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
set(HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
# --- If HDF5 is NOT found search for the settings file installed with the libraries
|
|
# Will allow the user to define the HDF5_SETTINGS_FILE before attempting a search.
|
|
if ( NOT HDF5_FOUND AND ( NOT HDF5_SETTINGS_FILE ) )
|
|
find_file(HDF5_SETTINGS_FILE
|
|
NAMES libhdf5.settings
|
|
HINTS ${_hdf5_LIBRARY_SEARCH_DIRS}
|
|
${_hdf5_FIND_OPTIONS})
|
|
endif()
|
|
|
|
|
|
# --- Now search by file name. HDF5_INCLUDE_DIRS and HD5_LIBRARIES will
|
|
# not be set if the CMake configuration search was successful.
|
|
|
|
# --- Search for the include files
|
|
if ( NOT HDF5_INCLUDE_DIRS )
|
|
find_path(HDF5_INCLUDE_DIR
|
|
NAMES hdf5.h
|
|
PATHS ${_hdf5_INCLUDE_SEARCH_DIRS}
|
|
${_hdf5_FIND_OPTIONS}
|
|
)
|
|
|
|
if ( NOT HDF5_INCLUDE_DIR )
|
|
message(FATAL_ERROR "Failed to locate HDF5 include file")
|
|
endif()
|
|
|
|
# Check the settings file for other include directories
|
|
if ( HDF5_SETTINGS_FILE )
|
|
_hdf5_extra_include_dirs(${HDF5_SETTINGS_FILE} extra_inc_dirs)
|
|
endif()
|
|
|
|
# Build HDF5_INCLUDE_DIRS
|
|
set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR} ${extra_inc_dirs})
|
|
list(REMOVE_DUPLICATES HDF5_INCLUDE_DIRS)
|
|
|
|
endif()
|
|
|
|
# Search for the libraries
|
|
|
|
if (HDF5_SETTINGS_FILE)
|
|
_hdf5_library_path(${HDF5_SETTINGS_FILE} _hdf5_path)
|
|
set(_hdf5_LIBRARY_SEARCH_DIRS ${_hdf5_path}/lib)
|
|
endif()
|
|
|
|
if ( NOT HDF5_LIBRARIES )
|
|
|
|
# --- Search for the C library
|
|
find_library(_HDF5_C_LIBRARY
|
|
NAMES hdf5 hdf5_serial
|
|
HINTS ${_hdf5_LIBRARY_SEARCH_DIRS}
|
|
${_hdf5_FIND_OPTIONS}
|
|
)
|
|
|
|
# Since all other libraries need this core library, throw a
|
|
# fatal error her if it is not found.
|
|
if ( NOT _HDF5_C_LIBRARY )
|
|
message(FATAL_ERROR "Could not locate the C HDF5 library")
|
|
endif()
|
|
|
|
# Define the target for the C library
|
|
if (HDF5_SETTINGS_FILE)
|
|
_hdf5_extra_libraries(${HDF5_SETTINGS_FILE} HDF5_LINK_LIBRARIES)
|
|
endif()
|
|
|
|
# Search for the high-level (HL) library
|
|
find_library(_HDF5_HL_LIBRARY
|
|
NAMES hdf5_hl hdf5_serial_hl
|
|
HINTS ${_hdf5_LIBRARY_SEARCH_DIRS}
|
|
${_hdf5_FIND_OPTIONS})
|
|
|
|
# --- Create the imported targets for each of the components found
|
|
# and update HDF5_LIBRARIES.
|
|
|
|
# HL Library
|
|
if ( _HDF5_HL_LIBRARY )
|
|
add_imported_library(${HDF5_HL_TARGET}
|
|
LOCATION ${_HDF5_HL_LIBRARY}
|
|
LINK_LANGUAGES "C"
|
|
LINK_INTERFACE_LIBRARIES "${HDF5_C_TARGET}")
|
|
set(HDF5_HL_LIBRARY ${HDF5_HL_TARGET})
|
|
endif()
|
|
|
|
add_imported_library(${HDF5_C_TARGET}
|
|
LOCATION ${_HDF5_C_LIBRARY}
|
|
LINK_LANGUAGES "C"
|
|
LINK_INTERFACE_LIBRARIES "${HDF5_LINK_LIBRARIES}")
|
|
set(HDF5_C_LIBRARY ${HDF5_C_TARGET})
|
|
|
|
# --- Search for the other possible component libraries
|
|
# Define the HDF5_<component>_LIBRARY to point to the target
|
|
foreach ( _component ${HDF5_VALID_COMPONENTS} )
|
|
if ( TARGET ${HDF5_${_component}_TARGET} )
|
|
set(HDF5_${_component}_LIBRARY ${HDF5_${_component}_TARGET})
|
|
endif()
|
|
endforeach()
|
|
|
|
# Define the HDF5_LIBRARIES variable
|
|
set(HDF5_LIBRARY_TARGETS
|
|
${HDF5_HL_LIBRARY}
|
|
${HDF5_C_LIBRARY})
|
|
|
|
# Define the HDF5_C_LIBRARIES variable
|
|
set(HDF5_C_LIBRARIES ${HDF5_HL_LIBRARY} ${HDF5_C_LIBRARY})
|
|
|
|
# HDF5 and extra libraries listed as full paths rather than
|
|
# libraries for the purposes of exporting
|
|
|
|
set(HDF5_LIBRARIES)
|
|
if ( TARGET ${HDF5_HL_TARGET} )
|
|
list(APPEND HDF5_LIBRARIES ${_HDF5_HL_LIBRARY})
|
|
endif()
|
|
if ( TARGET ${HDF5_C_TARGET} )
|
|
list(APPEND HDF5_LIBRARIES ${_HDF5_C_LIBRARY})
|
|
endif()
|
|
list(APPEND HDF5_LIBRARIES ${HDF5_LINK_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
set(HDF5_LIBRARIES_EXPORT ${HDF5_LIBRARIES})
|
|
|
|
|
|
# --- Define the version string from the settings file if not already set
|
|
if ( NOT HDF5_VERSION AND HDF5_SETTINGS_FILE )
|
|
_hdf5_define_version(${HDF5_SETTINGS_FILE} HDF5_VERSION)
|
|
endif()
|
|
|
|
if ( NOT HDF5_VERSION )
|
|
SET(HDF5_VERSION "Unknown")
|
|
endif()
|
|
|
|
# --- Define HDF5_IS_PARALLEL from the settings file if not already set
|
|
if ( NOT HDF5_IS_PARALLEL AND HDF5_SETTINGS_FILE )
|
|
_hdf5_define_parallel_build(${HDF5_SETTINGS_FILE} HDF5_IS_PARALLEL)
|
|
endif()
|
|
|
|
# --- Search for HDF5 tools
|
|
set(_hdf5_TOOLS h52gif h5copy h5debug h5diff h5dump h5import h5jam h5ls h5mkgrp h5stat)
|
|
set(HDF5_TOOLS_FOUND)
|
|
foreach( tool ${_hdf5_TOOLS})
|
|
string(TOUPPER "${tool}" tool_uc)
|
|
set(_hdf5_VAR_NAME HDF5_${tool_uc}_BINARY)
|
|
find_program(${_hdf5_VAR_NAME}
|
|
${tool}
|
|
HINTS ${_hdf5_BINARY_SEARCH_DIRS}
|
|
${_hdf5_FIND_OPTIONS})
|
|
if (${_hdf5_VAR_NAME})
|
|
list(APPEND HDF5_TOOLS_FOUND ${tool})
|
|
endif()
|
|
endforeach()
|
|
|
|
|
|
|
|
# --- Set the variables HDF5_<COMPONENT>_FOUND FLAGS
|
|
foreach ( _component ${HDF5_VALID_COMPONENTS} )
|
|
if( HDF5_${_component}_LIBRARY )
|
|
set(HDF5_${_component}_FOUND TRUE)
|
|
else()
|
|
set(HDF5_${_component}_FOUND FALSE)
|
|
endif()
|
|
endforeach()
|
|
|
|
# --- Provide a summary of what the module found
|
|
if ( NOT HDF5_FIND_QUIETLY )
|
|
|
|
# Create a not found list
|
|
|
|
message(STATUS "HDF5 Version: ${HDF5_VERSION}")
|
|
message(STATUS "\tHDF5_INCLUDE_DIRS =${HDF5_INCLUDE_DIRS}")
|
|
message(STATUS "\tHDF5_LIBRARY_TARGETS =${HDF5_LIBRARY_TARGETS}")
|
|
message(STATUS "\tHDF5_LIBRARIES =${HDF5_LIBRARIES}")
|
|
message(STATUS "\tHDF5_LIBRARIES_EXPORT =${HDF5_LIBRARIES_EXPORT}")
|
|
message(STATUS "\tHDF5_LINK_LIBRARIES =${HDF5_LINK_LIBRARIES}")
|
|
message(STATUS "\tHDF5_IS_PARALLEL =${HDF5_IS_PARALLEL}")
|
|
message(STATUS "Found the following HDF5 component libraries")
|
|
set(HDF5_COMPONENTS_NOTFOUND)
|
|
foreach (_component ${HDF5_VALID_COMPONENTS} )
|
|
if ( HDF5_${_component}_FOUND )
|
|
#message(STATUS "\t HDF5_${_component}_LIBRARY\t\t=${HDF5_${_component}_LIBRARY}")
|
|
message(STATUS "\t${HDF5_${_component}_LIBRARY}")
|
|
else()
|
|
list(APPEND HDF5_COMPONENTS_NOTFOUND ${_component})
|
|
endif()
|
|
endforeach()
|
|
if ( HDF5_COMPONENTS_NOTFOUND )
|
|
message(STATUS "\tHDF5 Components not found: ${HDF5_COMPONENTS_NOTFOUND}")
|
|
endif()
|
|
message(STATUS "\tHDF5_TOOLS_FOUND: ${HDF5_TOOLS_FOUND}")
|
|
|
|
endif()
|
|
|
|
# For compatability with TriBITS:
|
|
set(TPL_HDF5_LIBRARY_DIRS ${_hdf5_LIBRARY_SEARCH_DIRS})
|
|
set(TPL_HDF5_LIBRARIES ${HDF5_LIBRARIES})
|
|
set(TPL_HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS})
|
|
|
|
find_package_handle_standard_args( HDF5 DEFAULT_MESSAGE
|
|
HDF5_INCLUDE_DIRS
|
|
HDF5_LIBRARIES
|
|
HDF5_VERSION)
|
|
|
|
|