mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-03-01 17:06:03 +08:00
Merge branch 'main' into cmake-better-fix-hdf5-check
This commit is contained in:
commit
a8f8f1f1ee
@ -10,13 +10,13 @@
|
||||
# build binary installers.
|
||||
#####
|
||||
|
||||
SET(CPACK_PACKAGE_VENDOR "Unidata")
|
||||
set(CPACK_PACKAGE_VENDOR "Unidata")
|
||||
|
||||
##
|
||||
# Declare exclusions list used when building a source file.
|
||||
# NOTE!! This list uses regular expressions, NOT wildcards!!
|
||||
##
|
||||
SET(CPACK_SOURCE_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}"
|
||||
set(CPACK_SOURCE_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}"
|
||||
"/expecttds3/"
|
||||
"/nocacheremote3/"
|
||||
"/nocacheremote4/"
|
||||
@ -46,21 +46,21 @@ SET(CPACK_SOURCE_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}"
|
||||
# Nullsoft Installation System (NSIS)
|
||||
###
|
||||
|
||||
SET(CPACK_PACKAGE_CONTACT "NetCDF Support <support-netcdf@unidata.ucar.edu>")
|
||||
set(CPACK_PACKAGE_CONTACT "NetCDF Support <support-netcdf@unidata.ucar.edu>")
|
||||
|
||||
IF(WIN32)
|
||||
SET(CPACK_NSIS_MODIFY_PATH ON)
|
||||
SET(CPACK_NSIS_DISPLAY_NAME "NetCDF ${netCDF_VERSION}")
|
||||
SET(CPACK_NSIS_PACKAGE_NAME "NetCDF ${netCDF_VERSION}")
|
||||
SET(CPACK_NSIS_HELP_LINK "https://www.unidata.ucar.edu/netcdf")
|
||||
SET(CPACK_NSIS_URL_INFO_ABOUT "https://www.unidata.ucar.edu/netcdf")
|
||||
SET(CPACK_NSIS_CONTACT "support-netcdf@unidata.ucar.edu")
|
||||
SET(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
|
||||
SET(CPACK_NSIS_MENU_LINKS
|
||||
if(WIN32)
|
||||
set(CPACK_NSIS_MODIFY_PATH ON)
|
||||
set(CPACK_NSIS_DISPLAY_NAME "NetCDF ${netCDF_VERSION}")
|
||||
set(CPACK_NSIS_PACKAGE_NAME "NetCDF ${netCDF_VERSION}")
|
||||
set(CPACK_NSIS_HELP_LINK "https://www.unidata.ucar.edu/netcdf")
|
||||
set(CPACK_NSIS_URL_INFO_ABOUT "https://www.unidata.ucar.edu/netcdf")
|
||||
set(CPACK_NSIS_CONTACT "support-netcdf@unidata.ucar.edu")
|
||||
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
|
||||
set(CPACK_NSIS_MENU_LINKS
|
||||
"https://www.unidata.ucar.edu/software/netcdf" "Unidata Website"
|
||||
"https://docs.unidata.ucar.edu/netcdf-c" "NetCDF Stable Documentation")
|
||||
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
###
|
||||
# Set debian-specific options used when
|
||||
@ -70,52 +70,48 @@ ENDIF()
|
||||
###
|
||||
|
||||
# This should be set using the output of dpkg --print-architecture.
|
||||
FIND_PROGRAM(NC_DPKG NAMES dpkg)
|
||||
IF(NC_DPKG)
|
||||
if(NC_DPKG)
|
||||
# Define a macro for getting the dpkg architecture.
|
||||
MACRO(getdpkg_arch arch)
|
||||
execute_process(COMMAND "${NC_DPKG}" "--print-architecture" OUTPUT_VARIABLE "${arch}" OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
ENDMACRO(getdpkg_arch)
|
||||
getdpkg_arch(dpkg_arch)
|
||||
|
||||
SET(CPACK_DEBIAN_PACKAGE_NAME "netcdf4-dev")
|
||||
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${dpkg_arch}")
|
||||
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g (>= 1:1.2.3.4), libhdf5-7 (>= 1.8.11), libcurl4-openssl-dev (>= 7.22.0)")
|
||||
ENDIF()
|
||||
set(CPACK_DEBIAN_PACKAGE_NAME "netcdf4-dev")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${dpkg_arch}")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g (>= 1:1.2.3.4), libhdf5-7 (>= 1.8.11), libcurl4-openssl-dev (>= 7.22.0)")
|
||||
endif()
|
||||
|
||||
|
||||
##
|
||||
# Set Copyright, License info for CPack.
|
||||
##
|
||||
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT
|
||||
${CMAKE_CURRENT_BINARY_DIR}/COPYRIGHT.txt
|
||||
@ONLY
|
||||
)
|
||||
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/COPYRIGHT.txt")
|
||||
IF(NOT CPACK_PACK_VERSION)
|
||||
SET(CPACK_PACKAGE_VERSION ${VERSION})
|
||||
ENDIF()
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/COPYRIGHT.txt")
|
||||
if(NOT CPACK_PACK_VERSION)
|
||||
set(CPACK_PACKAGE_VERSION ${VERSION})
|
||||
endif()
|
||||
|
||||
IF(UNIX)
|
||||
SET(CPACK_GENERATOR "STGZ" "TBZ2" "DEB" "ZIP")
|
||||
ENDIF()
|
||||
if(UNIX)
|
||||
set(CPACK_GENERATOR "STGZ" "TBZ2" "DEB" "ZIP")
|
||||
endif()
|
||||
|
||||
IF(APPLE)
|
||||
SET(CPACK_SOURCE_GENERATOR "TGZ")
|
||||
SET(CPACK_GENERATOR "productbuild" "STGZ" "TBZ2" "TGZ" "ZIP")
|
||||
ENDIF()
|
||||
if(APPLE)
|
||||
set(CPACK_SOURCE_GENERATOR "TGZ")
|
||||
set(CPACK_GENERATOR "productbuild" "STGZ" "TBZ2" "TGZ" "ZIP")
|
||||
endif()
|
||||
|
||||
##
|
||||
# Create an 'uninstall' target.
|
||||
##
|
||||
CONFIGURE_FILE(
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
|
||||
|
||||
ADD_CUSTOM_TARGET(uninstall
|
||||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
|
||||
##
|
||||
@ -133,4 +129,4 @@ set(CPACK_COMPONENT_DEPENDENCIES_DESCRIPTION
|
||||
set(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION
|
||||
"The NetCDF-C user documentation.")
|
||||
|
||||
INCLUDE(CPack)
|
||||
include(CPack)
|
2142
CMakeLists.txt
2142
CMakeLists.txt
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
EXECUTE_PROCESS(COMMAND sh -c "${CMAKE_BINARY_DIR}/postinstall.sh -t cmake")
|
||||
execute_process(COMMAND sh -c "${CMAKE_BINARY_DIR}/postinstall.sh -t cmake")
|
@ -1,80 +1,78 @@
|
||||
include(netcdf_functions_macros)
|
||||
|
||||
################################
|
||||
# PkgConfig
|
||||
################################
|
||||
FIND_PACKAGE(PkgConfig QUIET)
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
################################
|
||||
# MakeDist
|
||||
################################
|
||||
# Enable 'dist and distcheck'.
|
||||
# File adapted from http://ensc.de/cmake/FindMakeDist.cmake
|
||||
FIND_PACKAGE(MakeDist)
|
||||
find_package(MakeDist)
|
||||
# End 'enable dist and distcheck'
|
||||
|
||||
################################
|
||||
# HDF4
|
||||
################################
|
||||
IF(ENABLE_HDF4)
|
||||
SET(USE_HDF4 ON )
|
||||
if(ENABLE_HDF4)
|
||||
set(USE_HDF4 ON )
|
||||
# Check for include files, libraries.
|
||||
|
||||
FIND_PATH(MFHDF_H_INCLUDE_DIR mfhdf.h)
|
||||
IF(NOT MFHDF_H_INCLUDE_DIR)
|
||||
MESSAGE(FATAL_ERROR "HDF4 Support specified, cannot find file mfhdf.h")
|
||||
ELSE()
|
||||
INCLUDE_DIRECTORIES(${MFHDF_H_INCLUDE_DIR})
|
||||
ENDIF()
|
||||
find_path(MFHDF_H_INCLUDE_DIR mfhdf.h)
|
||||
if(NOT MFHDF_H_INCLUDE_DIR)
|
||||
message(FATAL_ERROR "HDF4 Support specified, cannot find file mfhdf.h")
|
||||
else()
|
||||
include_directories(${MFHDF_H_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
FIND_LIBRARY(HDF4_DF_LIB NAMES df libdf hdf)
|
||||
IF(NOT HDF4_DF_LIB)
|
||||
MESSAGE(FATAL_ERROR "Can't find or link to the hdf4 df library.")
|
||||
ENDIF()
|
||||
find_library(HDF4_DF_LIB NAMES df libdf hdf)
|
||||
if(NOT HDF4_DF_LIB)
|
||||
message(FATAL_ERROR "Can't find or link to the hdf4 df library.")
|
||||
endif()
|
||||
|
||||
FIND_LIBRARY(HDF4_MFHDF_LIB NAMES mfhdf libmfhdf)
|
||||
IF(NOT HDF4_MFHDF_LIB)
|
||||
MESSAGE(FATAL_ERROR "Can't find or link to the hdf4 mfhdf library.")
|
||||
ENDIF()
|
||||
find_library(HDF4_MFHDF_LIB NAMES mfhdf libmfhdf)
|
||||
if(NOT HDF4_MFHDF_LIB)
|
||||
message(FATAL_ERROR "Can't find or link to the hdf4 mfhdf library.")
|
||||
endif()
|
||||
|
||||
SET(HAVE_LIBMFHDF TRUE )
|
||||
set(HAVE_LIBMFHDF TRUE )
|
||||
|
||||
SET(HDF4_LIBRARIES ${HDF4_DF_LIB} ${HDF4_MFHDF_LIB} )
|
||||
set(HDF4_LIBRARIES ${HDF4_DF_LIB} ${HDF4_MFHDF_LIB} )
|
||||
# End include files, libraries.
|
||||
MESSAGE(STATUS "HDF4 libraries: ${HDF4_DF_LIB}, ${HDF4_MFHDF_LIB}")
|
||||
message(STATUS "HDF4 libraries: ${HDF4_DF_LIB}, ${HDF4_MFHDF_LIB}")
|
||||
|
||||
MESSAGE(STATUS "Seeking HDF4 jpeg dependency.")
|
||||
message(STATUS "Seeking HDF4 jpeg dependency.")
|
||||
|
||||
# Look for the jpeglib.h header file.
|
||||
FIND_PATH(JPEGLIB_H_INCLUDE_DIR jpeglib.h)
|
||||
IF(NOT JPEGLIB_H_INCLUDE_DIR)
|
||||
MESSAGE(FATAL_ERROR "HDF4 Support enabled but cannot find jpeglib.h")
|
||||
ELSE()
|
||||
SET(HAVE_JPEGLIB_H ON CACHE BOOL "")
|
||||
SET(HAVE_LIBJPEG TRUE )
|
||||
INCLUDE_DIRECTORIES(${JPEGLIB_H_INCLUDE_DIR})
|
||||
ENDIF()
|
||||
find_path(JPEGLIB_H_INCLUDE_DIR jpeglib.h)
|
||||
if(NOT JPEGLIB_H_INCLUDE_DIR)
|
||||
message(FATAL_ERROR "HDF4 Support enabled but cannot find jpeglib.h")
|
||||
else()
|
||||
set(HAVE_JPEGLIB_H ON CACHE BOOL "")
|
||||
set(HAVE_LIBJPEG TRUE )
|
||||
include_directories(${JPEGLIB_H_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
FIND_LIBRARY(JPEG_LIB NAMES jpeg libjpeg)
|
||||
IF(NOT JPEG_LIB)
|
||||
MESSAGE(FATAL_ERROR "HDF4 Support enabled but cannot find libjpeg")
|
||||
ENDIF()
|
||||
SET(HDF4_LIBRARIES ${JPEG_LIB} ${HDF4_LIBRARIES} )
|
||||
MESSAGE(STATUS "Found JPEG libraries: ${JPEG_LIB}")
|
||||
find_library(JPEG_LIB NAMES jpeg libjpeg)
|
||||
if(NOT JPEG_LIB)
|
||||
message(FATAL_ERROR "HDF4 Support enabled but cannot find libjpeg")
|
||||
endif()
|
||||
set(HDF4_LIBRARIES ${JPEG_LIB} ${HDF4_LIBRARIES} )
|
||||
message(STATUS "Found JPEG libraries: ${JPEG_LIB}")
|
||||
|
||||
# Option to enable HDF4 file tests.
|
||||
OPTION(ENABLE_HDF4_FILE_TESTS "Run HDF4 file tests. This fetches sample HDF4 files from the Unidata ftp site to test with (requires curl)." ON)
|
||||
IF(ENABLE_HDF4_FILE_TESTS)
|
||||
FIND_PROGRAM(PROG_CURL NAMES curl)
|
||||
IF(PROG_CURL)
|
||||
SET(USE_HDF4_FILE_TESTS ON )
|
||||
ELSE()
|
||||
MESSAGE(STATUS "Unable to locate 'curl'. Disabling hdf4 file tests.")
|
||||
SET(USE_HDF4_FILE_TESTS OFF )
|
||||
ENDIF()
|
||||
SET(USE_HDF4_FILE_TESTS ${USE_HDF4_FILE_TESTS} )
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
option(ENABLE_HDF4_FILE_TESTS "Run HDF4 file tests. This fetches sample HDF4 files from the Unidata ftp site to test with (requires curl)." ON)
|
||||
if(ENABLE_HDF4_FILE_TESTS)
|
||||
find_program(PROG_CURL NAMES curl)
|
||||
if(PROG_CURL)
|
||||
set(USE_HDF4_FILE_TESTS ON )
|
||||
else()
|
||||
message(STATUS "Unable to locate 'curl'. Disabling hdf4 file tests.")
|
||||
set(USE_HDF4_FILE_TESTS OFF )
|
||||
endif()
|
||||
set(USE_HDF4_FILE_TESTS ${USE_HDF4_FILE_TESTS} )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################
|
||||
# HDF5
|
||||
@ -96,12 +94,12 @@ ENDIF()
|
||||
# * HDF5_INCLUDE_DIR
|
||||
# *
|
||||
##
|
||||
IF(USE_HDF5)
|
||||
if(USE_HDF5)
|
||||
|
||||
##
|
||||
# Assert HDF5 version meets minimum required version.
|
||||
##
|
||||
SET(HDF5_VERSION_REQUIRED 1.8.10)
|
||||
set(HDF5_VERSION_REQUIRED 1.8.10)
|
||||
|
||||
|
||||
##
|
||||
@ -112,14 +110,14 @@ IF(USE_HDF5)
|
||||
#
|
||||
# This script will attempt to determine the version of the HDF5 library programatically.
|
||||
##
|
||||
IF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
|
||||
SET(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY} )
|
||||
SET(HDF5_C_LIBRARIES ${HDF5_C_LIBRARY} )
|
||||
SET(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} )
|
||||
SET(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} )
|
||||
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
|
||||
MESSAGE(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}")
|
||||
MESSAGE(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}")
|
||||
if(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
|
||||
set(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY} )
|
||||
set(HDF5_C_LIBRARIES ${HDF5_C_LIBRARY} )
|
||||
set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} )
|
||||
set(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} )
|
||||
include_directories(${HDF5_INCLUDE_DIR})
|
||||
message(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}")
|
||||
message(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}")
|
||||
if (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h")
|
||||
file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
|
||||
REGEX "#define[ \t]+H5_VERSION")
|
||||
@ -129,24 +127,24 @@ IF(USE_HDF5)
|
||||
unset(_hdf5_version)
|
||||
unset(_hdf5_version_lines)
|
||||
endif ()
|
||||
MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
|
||||
message(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
|
||||
###
|
||||
# If HDF5_VERSION is still empty, we have a problem.
|
||||
# Error out.
|
||||
###
|
||||
IF("${HDF5_VERSION}" STREQUAL "")
|
||||
MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
|
||||
ENDIF()
|
||||
if("${HDF5_VERSION}" STREQUAL "")
|
||||
message(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
|
||||
endif()
|
||||
|
||||
###
|
||||
# Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
|
||||
# and toggle various options.
|
||||
###
|
||||
IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
|
||||
MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
|
||||
ENDIF()
|
||||
if(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
|
||||
message(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
|
||||
endif()
|
||||
|
||||
ELSE(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package.
|
||||
else(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package.
|
||||
###
|
||||
# For now we assume that if we are building netcdf
|
||||
# as a shared library, we will use hdf5 as a shared
|
||||
@ -154,15 +152,15 @@ IF(USE_HDF5)
|
||||
# we will use a static library. This can be toggled
|
||||
# by explicitly modifying NC_FIND_SHARED_LIBS.
|
||||
##
|
||||
IF(NC_FIND_SHARED_LIBS)
|
||||
SET(NC_HDF5_LINK_TYPE "shared")
|
||||
SET(NC_HDF5_LINK_TYPE_UPPER "SHARED")
|
||||
if(NC_FIND_SHARED_LIBS)
|
||||
set(NC_HDF5_LINK_TYPE "shared")
|
||||
set(NC_HDF5_LINK_TYPE_UPPER "SHARED")
|
||||
ADD_DEFINITIONS(-DH5_BUILT_AS_DYNAMIC_LIB)
|
||||
ELSE(NC_FIND_SHARED_LIBS)
|
||||
SET(NC_HDF5_LINK_TYPE "static")
|
||||
SET(NC_HDF5_LINK_TYPE_UPPER "STATIC")
|
||||
else(NC_FIND_SHARED_LIBS)
|
||||
set(NC_HDF5_LINK_TYPE "static")
|
||||
set(NC_HDF5_LINK_TYPE_UPPER "STATIC")
|
||||
ADD_DEFINITIONS(-DH5_BUILT_AS_STATIC_LIB )
|
||||
ENDIF(NC_FIND_SHARED_LIBS)
|
||||
endif(NC_FIND_SHARED_LIBS)
|
||||
|
||||
#####
|
||||
# First, find the C and HL libraries.
|
||||
@ -171,12 +169,12 @@ IF(USE_HDF5)
|
||||
# examples, even though the previous version of what we
|
||||
# had worked.
|
||||
#####
|
||||
IF(MSVC)
|
||||
SET(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME})
|
||||
FIND_PACKAGE(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE})
|
||||
ELSE(MSVC)
|
||||
FIND_PACKAGE(HDF5 COMPONENTS C HL REQUIRED)
|
||||
ENDIF(MSVC)
|
||||
if(MSVC)
|
||||
set(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME})
|
||||
find_package(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE})
|
||||
else(MSVC)
|
||||
find_package(HDF5 COMPONENTS C HL REQUIRED)
|
||||
endif(MSVC)
|
||||
|
||||
##
|
||||
# Next, check the HDF5 version. This will inform which
|
||||
@ -184,16 +182,16 @@ IF(USE_HDF5)
|
||||
##
|
||||
|
||||
# Some versions of HDF5 set HDF5_VERSION_STRING instead of HDF5_VERSION
|
||||
IF(HDF5_VERSION_STRING AND NOT HDF5_VERSION)
|
||||
SET(HDF5_VERSION ${HDF5_VERSION_STRING})
|
||||
ENDIF()
|
||||
if(HDF5_VERSION_STRING AND NOT HDF5_VERSION)
|
||||
set(HDF5_VERSION ${HDF5_VERSION_STRING})
|
||||
endif()
|
||||
|
||||
|
||||
###
|
||||
# If HDF5_VERSION is undefined, attempt to determine it programatically.
|
||||
###
|
||||
IF("${HDF5_VERSION}" STREQUAL "")
|
||||
MESSAGE(STATUS "HDF5_VERSION not detected. Attempting to determine programatically.")
|
||||
if("${HDF5_VERSION}" STREQUAL "")
|
||||
message(STATUS "HDF5_VERSION not detected. Attempting to determine programatically.")
|
||||
IF (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h")
|
||||
file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
|
||||
REGEX "#define[ \t]+H5_VERSION")
|
||||
@ -201,46 +199,46 @@ IF(USE_HDF5)
|
||||
set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "")
|
||||
unset(_hdf5_version)
|
||||
unset(_hdf5_version_lines)
|
||||
MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
SET(HDF5_VERSION ${HDF5_VERSION} CACHE STRING "")
|
||||
ENDIF()
|
||||
message(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
|
||||
endif()
|
||||
else()
|
||||
set(HDF5_VERSION ${HDF5_VERSION} CACHE STRING "")
|
||||
endif()
|
||||
|
||||
###
|
||||
# If HDF5_VERSION is still empty, we have a problem.
|
||||
# Error out.
|
||||
###
|
||||
IF("${HDF5_VERSION}" STREQUAL "")
|
||||
MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
|
||||
ENDIF()
|
||||
if("${HDF5_VERSION}" STREQUAL "")
|
||||
message(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
|
||||
endif()
|
||||
|
||||
###
|
||||
# Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
|
||||
# and toggle various options.
|
||||
###
|
||||
|
||||
IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
|
||||
MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
|
||||
ENDIF()
|
||||
if(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
|
||||
message(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
##
|
||||
# Include the HDF5 include directory.
|
||||
##
|
||||
IF(HDF5_INCLUDE_DIRS AND NOT HDF5_INCLUDE_DIR)
|
||||
SET(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS} )
|
||||
ENDIF()
|
||||
MESSAGE(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}")
|
||||
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
|
||||
if(HDF5_INCLUDE_DIRS AND NOT HDF5_INCLUDE_DIR)
|
||||
set(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS} )
|
||||
endif()
|
||||
message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}")
|
||||
include_directories(${HDF5_INCLUDE_DIR})
|
||||
|
||||
###
|
||||
# This is the block where we figure out what the appropriate
|
||||
# variables are, and we ensure that we end up with
|
||||
# HDF5_C_LIBRARY, HDF5_HL_LIBRARY and HDF5_LIBRARIES.
|
||||
###
|
||||
IF(MSVC)
|
||||
if(MSVC)
|
||||
####
|
||||
# Environmental variables in Windows when using MSVC
|
||||
# are a hot mess between versions.
|
||||
@ -249,60 +247,60 @@ IF(USE_HDF5)
|
||||
##
|
||||
# HDF5 1.8.15 defined HDF5_LIBRARIES.
|
||||
##
|
||||
IF(${HDF5_VERSION} VERSION_LESS "1.8.16")
|
||||
SET(HDF5_C_LIBRARY hdf5 )
|
||||
SET(HDF5_C_LIBRARY_hdf5 hdf5 )
|
||||
ENDIF(${HDF5_VERSION} VERSION_LESS "1.8.16")
|
||||
if(${HDF5_VERSION} VERSION_LESS "1.8.16")
|
||||
set(HDF5_C_LIBRARY hdf5 )
|
||||
set(HDF5_C_LIBRARY_hdf5 hdf5 )
|
||||
endif(${HDF5_VERSION} VERSION_LESS "1.8.16")
|
||||
|
||||
IF(${HDF5_VERSION} VERSION_GREATER "1.8.15")
|
||||
IF(NOT HDF5_LIBRARIES AND HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY AND HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY)
|
||||
SET(HDF5_C_LIBRARY ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
SET(HDF5_C_LIBRARY_hdf5 ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
SET(HDF5_HL_LIBRARY ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
if(${HDF5_VERSION} VERSION_GREATER "1.8.15")
|
||||
if(NOT HDF5_LIBRARIES AND HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY AND HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY)
|
||||
set(HDF5_C_LIBRARY ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
set(HDF5_HL_LIBRARY ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
|
||||
SET(HDF5_LIBRARIES ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
ENDIF()
|
||||
ENDIF(${HDF5_VERSION} VERSION_GREATER "1.8.15")
|
||||
set(HDF5_LIBRARIES ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} )
|
||||
endif()
|
||||
endif(${HDF5_VERSION} VERSION_GREATER "1.8.15")
|
||||
|
||||
ELSE(MSVC)
|
||||
else(MSVC)
|
||||
|
||||
# Depending on the install, either HDF5_hdf_library or
|
||||
# HDF5_C_LIBRARIES may be defined. We must check for either.
|
||||
IF(HDF5_C_LIBRARIES AND NOT HDF5_hdf5_LIBRARY)
|
||||
SET(HDF5_hdf5_LIBRARY ${HDF5_C_LIBRARIES} )
|
||||
ENDIF()
|
||||
if(HDF5_C_LIBRARIES AND NOT HDF5_hdf5_LIBRARY)
|
||||
set(HDF5_hdf5_LIBRARY ${HDF5_C_LIBRARIES} )
|
||||
endif()
|
||||
|
||||
# Some versions of FIND_PACKAGE set HDF5_C_LIBRARIES, but not HDF5_C_LIBRARY
|
||||
# Some versions of find_package set HDF5_C_LIBRARIES, but not HDF5_C_LIBRARY
|
||||
# We use HDF5_C_LIBRARY below, so need to make sure it is set.
|
||||
IF(HDF5_C_LIBRARIES AND NOT HDF5_C_LIBRARY)
|
||||
SET(HDF5_C_LIBRARY ${HDF5_C_LIBRARIES} )
|
||||
ENDIF()
|
||||
if(HDF5_C_LIBRARIES AND NOT HDF5_C_LIBRARY)
|
||||
set(HDF5_C_LIBRARY ${HDF5_C_LIBRARIES} )
|
||||
endif()
|
||||
|
||||
# Same issue as above...
|
||||
IF(HDF5_HL_LIBRARIES AND NOT HDF5_HL_LIBRARY)
|
||||
SET(HDF5_HL_LIBRARY ${HDF5_HL_LIBRARIES} )
|
||||
ENDIF()
|
||||
if(HDF5_HL_LIBRARIES AND NOT HDF5_HL_LIBRARY)
|
||||
set(HDF5_HL_LIBRARY ${HDF5_HL_LIBRARIES} )
|
||||
endif()
|
||||
|
||||
ENDIF(MSVC)
|
||||
IF(NOT HDF5_C_LIBRARY)
|
||||
SET(HDF5_C_LIBRARY hdf5 )
|
||||
ENDIF()
|
||||
endif(MSVC)
|
||||
if(NOT HDF5_C_LIBRARY)
|
||||
set(HDF5_C_LIBRARY hdf5 )
|
||||
endif()
|
||||
|
||||
ENDIF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
|
||||
endif(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
|
||||
|
||||
FIND_PACKAGE(Threads)
|
||||
find_package(Threads)
|
||||
|
||||
# There is a missing case in the above code so default it
|
||||
IF(NOT HDF5_C_LIBRARY_hdf5 OR "${HDF5_C_LIBRARY_hdf5}" STREQUAL "" )
|
||||
SET(HDF5_C_LIBRARY_hdf5 "${HDF5_C_LIBRARY}" )
|
||||
ENDIF()
|
||||
if(NOT HDF5_C_LIBRARY_hdf5 OR "${HDF5_C_LIBRARY_hdf5}" STREQUAL "" )
|
||||
set(HDF5_C_LIBRARY_hdf5 "${HDF5_C_LIBRARY}" )
|
||||
endif()
|
||||
|
||||
FIND_PATH(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH)
|
||||
IF(NOT HAVE_HDF5_H)
|
||||
MESSAGE(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.")
|
||||
ELSE(NOT HAVE_HDF5_H)
|
||||
INCLUDE_DIRECTORIES(${HAVE_HDF5_H})
|
||||
ENDIF(NOT HAVE_HDF5_H)
|
||||
find_path(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH)
|
||||
if(NOT HAVE_HDF5_H)
|
||||
message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.")
|
||||
else(NOT HAVE_HDF5_H)
|
||||
include_directories(${HAVE_HDF5_H})
|
||||
endif(NOT HAVE_HDF5_H)
|
||||
|
||||
include(cmake/check_hdf5.cmake)
|
||||
|
||||
@ -310,37 +308,40 @@ IF(USE_HDF5)
|
||||
# This needs to be near the beginning since we
|
||||
# need to know whether to add "-lz" to the symbol
|
||||
# tests below.
|
||||
|
||||
check_hdf5_feature(HAVE_HDF5_ZLIB H5_HAVE_ZLIB_H)
|
||||
IF(NOT HAVE_HDF5_ZLIB)
|
||||
MESSAGE(FATAL_ERROR "HDF5 was built without zlib. Rebuild HDF5 with zlib.")
|
||||
ELSE()
|
||||
if(NOT HAVE_HDF5_ZLIB)
|
||||
message(FATAL_ERROR "HDF5 was built without zlib. Rebuild HDF5 with zlib.")
|
||||
else()
|
||||
# If user has specified the `ZLIB_LIBRARY`, use it; otherwise try to find...
|
||||
IF(NOT ZLIB_LIBRARY)
|
||||
if(NOT ZLIB_LIBRARY)
|
||||
find_package(ZLIB)
|
||||
IF(ZLIB_FOUND)
|
||||
SET(ZLIB_LIBRARY ${ZLIB_LIBRARIES} )
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "HDF5 Requires ZLIB, but cannot find libz.")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
SET(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY} ${CMAKE_REQUIRED_LIBRARIES} )
|
||||
MESSAGE(STATUS "HDF5 has zlib.")
|
||||
ENDIF()
|
||||
if(ZLIB_FOUND)
|
||||
set(ZLIB_LIBRARY ${ZLIB_LIBRARIES} )
|
||||
else()
|
||||
message(FATAL_ERROR "HDF5 Requires ZLIB, but cannot find libz.")
|
||||
endif()
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY} ${CMAKE_REQUIRED_LIBRARIES} )
|
||||
message(STATUS "HDF5 has zlib.")
|
||||
endif()
|
||||
|
||||
|
||||
# Check to see if H5Z_SZIP exists in HDF5_Libraries. If so, we must use szip library.
|
||||
check_hdf5_feature(HAVE_H5Z_SZIP H5_HAVE_FILTER_SZIP)
|
||||
|
||||
|
||||
####
|
||||
# Check to see if HDF5 library is 1.10.6 or greater.
|
||||
# Used to control path name conversion
|
||||
####
|
||||
IF(${HDF5_VERSION} VERSION_GREATER "1.10.5")
|
||||
SET(HDF5_UTF8_PATHS ON )
|
||||
ELSE()
|
||||
SET(HDF5_UTF8_PATHS OFF )
|
||||
ENDIF()
|
||||
if(${HDF5_VERSION} VERSION_GREATER "1.10.5")
|
||||
set(HDF5_UTF8_PATHS ON )
|
||||
else()
|
||||
set(HDF5_UTF8_PATHS OFF )
|
||||
endif()
|
||||
|
||||
MESSAGE("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
|
||||
message("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
|
||||
|
||||
# Find out if HDF5 was built with parallel support.
|
||||
# Do that by checking for the targets H5Pget_fapl_mpiposx and
|
||||
@ -351,21 +352,21 @@ IF(USE_HDF5)
|
||||
# CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpiposix "" HDF5_IS_PARALLEL_MPIPOSIX)
|
||||
|
||||
CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpio "" HDF5_IS_PARALLEL_MPIO)
|
||||
IF(HDF5_IS_PARALLEL_MPIO)
|
||||
SET(HDF5_PARALLEL ON)
|
||||
ELSE()
|
||||
SET(HDF5_PARALLEL OFF)
|
||||
ENDIF()
|
||||
SET(HDF5_PARALLEL ${HDF5_PARALLEL} )
|
||||
if(HDF5_IS_PARALLEL_MPIO)
|
||||
set(HDF5_PARALLEL ON)
|
||||
else()
|
||||
set(HDF5_PARALLEL OFF)
|
||||
endif()
|
||||
set(HDF5_PARALLEL ${HDF5_PARALLEL} )
|
||||
|
||||
#Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0)
|
||||
CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS)
|
||||
|
||||
IF(HDF5_PARALLEL)
|
||||
SET(HDF5_CC h5pcc )
|
||||
ELSE()
|
||||
SET(HDF5_CC h5cc )
|
||||
ENDIF()
|
||||
if(HDF5_PARALLEL)
|
||||
set(HDF5_CC h5pcc )
|
||||
else()
|
||||
set(HDF5_CC h5cc )
|
||||
endif()
|
||||
|
||||
# Check to see if H5Dread_chunk is available
|
||||
CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HAS_READCHUNKS)
|
||||
@ -374,57 +375,57 @@ IF(USE_HDF5)
|
||||
CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_fapl_ros3 "" HAS_HDF5_ROS3)
|
||||
|
||||
# Check to see if this is hdf5-1.10.3 or later.
|
||||
IF(HAS_READCHUNKS)
|
||||
SET(HDF5_SUPPORTS_PAR_FILTERS ON )
|
||||
SET(ENABLE_NCDUMPCHUNKS ON )
|
||||
ENDIF()
|
||||
if(HAS_READCHUNKS)
|
||||
set(HDF5_SUPPORTS_PAR_FILTERS ON )
|
||||
set(ENABLE_NCDUMPCHUNKS ON )
|
||||
endif()
|
||||
|
||||
# Record if ROS3 Driver is available
|
||||
IF(HAS_HDF5_ROS3)
|
||||
SET(ENABLE_HDF5_ROS3 ON )
|
||||
ENDIF()
|
||||
if(HAS_HDF5_ROS3)
|
||||
set(ENABLE_HDF5_ROS3 ON )
|
||||
endif()
|
||||
|
||||
IF (HDF5_SUPPORTS_PAR_FILTERS)
|
||||
SET(HDF5_HAS_PAR_FILTERS TRUE CACHE BOOL "" )
|
||||
SET(HAS_PAR_FILTERS yes CACHE STRING "" )
|
||||
ELSE()
|
||||
SET(HDF5_HAS_PAR_FILTERS FALSE CACHE BOOL "" )
|
||||
SET(HAS_PAR_FILTERS no CACHE STRING "" )
|
||||
ENDIF()
|
||||
set(HDF5_HAS_PAR_FILTERS TRUE CACHE BOOL "" )
|
||||
set(HAS_PAR_FILTERS yes CACHE STRING "" )
|
||||
else()
|
||||
set(HDF5_HAS_PAR_FILTERS FALSE CACHE BOOL "" )
|
||||
set(HAS_PAR_FILTERS no CACHE STRING "" )
|
||||
endif()
|
||||
|
||||
FIND_PATH(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH)
|
||||
IF(NOT HAVE_HDF5_H)
|
||||
MESSAGE(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.")
|
||||
ELSE(NOT HAVE_HDF5_H)
|
||||
INCLUDE_DIRECTORIES(${HAVE_HDF5_H})
|
||||
ENDIF(NOT HAVE_HDF5_H)
|
||||
find_path(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH)
|
||||
if(NOT HAVE_HDF5_H)
|
||||
message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.")
|
||||
else(NOT HAVE_HDF5_H)
|
||||
include_directories(${HAVE_HDF5_H})
|
||||
endif(NOT HAVE_HDF5_H)
|
||||
|
||||
#option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install
|
||||
INCLUDE_DIRECTORIES(${HDF5_HL_INCLUDE_DIR})
|
||||
include_directories(${HDF5_HL_INCLUDE_DIR})
|
||||
|
||||
ENDIF(USE_HDF5)
|
||||
endif(USE_HDF5)
|
||||
|
||||
################################
|
||||
# Curl
|
||||
################################
|
||||
# See if we have libcurl
|
||||
FIND_PACKAGE(CURL)
|
||||
find_package(CURL)
|
||||
ADD_DEFINITIONS(-DCURL_STATICLIB=1)
|
||||
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
|
||||
include_directories(${CURL_INCLUDE_DIRS})
|
||||
|
||||
# Define a test flag for have curl library
|
||||
IF(CURL_LIBRARIES OR CURL_LIBRARY)
|
||||
SET(FOUND_CURL TRUE)
|
||||
ELSE()
|
||||
SET(FOUND_CURL FALSE)
|
||||
ENDIF()
|
||||
SET(FOUND_CURL ${FOUND_CURL} TRUE )
|
||||
if(CURL_LIBRARIES OR CURL_LIBRARY)
|
||||
set(FOUND_CURL TRUE)
|
||||
else()
|
||||
set(FOUND_CURL FALSE)
|
||||
endif()
|
||||
set(FOUND_CURL ${FOUND_CURL} TRUE )
|
||||
|
||||
# Start disabling if curl not found
|
||||
IF(NOT FOUND_CURL)
|
||||
MESSAGE(WARNING "ENABLE_REMOTE_FUNCTIONALITY requires libcurl; disabling")
|
||||
SET(ENABLE_REMOTE_FUNCTIONALITY OFF CACHE BOOL "ENABLE_REMOTE_FUNCTIONALITY requires libcurl; disabling" FORCE )
|
||||
ENDIF()
|
||||
if(NOT FOUND_CURL)
|
||||
message(WARNING "ENABLE_REMOTE_FUNCTIONALITY requires libcurl; disabling")
|
||||
set(ENABLE_REMOTE_FUNCTIONALITY OFF CACHE BOOL "ENABLE_REMOTE_FUNCTIONALITY requires libcurl; disabling" FORCE )
|
||||
endif()
|
||||
|
||||
set (CMAKE_REQUIRED_INCLUDES ${CURL_INCLUDE_DIRS})
|
||||
# Check to see if we have libcurl 7.66 or later
|
||||
@ -446,7 +447,7 @@ IF (HAVE_LIBCURL_766)
|
||||
set(HAVE_CURLINFO_HTTP_CONNECTCODE TRUE)
|
||||
set(HAVE_CURLOPT_BUFFERSIZE TRUE)
|
||||
set(HAVE_CURLOPT_KEEPALIVE TRUE)
|
||||
ELSE()
|
||||
else()
|
||||
# Check to see if CURLOPT_USERNAME is defined.
|
||||
# It is present starting version 7.19.1.
|
||||
CHECK_C_SOURCE_COMPILES("
|
||||
@ -488,82 +489,82 @@ ELSE()
|
||||
CHECK_C_SOURCE_COMPILES("
|
||||
#include <curl/curl.h>
|
||||
int main() {int x = CURLOPT_TCP_KEEPALIVE;}" HAVE_CURLOPT_KEEPALIVE)
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
################################
|
||||
# Math
|
||||
################################
|
||||
# Check for the math library so it can be explicitly linked.
|
||||
IF(NOT WIN32)
|
||||
FIND_LIBRARY(HAVE_LIBM NAMES math m libm)
|
||||
IF(NOT HAVE_LIBM)
|
||||
if(NOT WIN32)
|
||||
find_library(HAVE_LIBM NAMES math m libm)
|
||||
if(NOT HAVE_LIBM)
|
||||
CHECK_FUNCTION_EXISTS(exp HAVE_LIBM_FUNC)
|
||||
IF(NOT HAVE_LIBM_FUNC)
|
||||
MESSAGE(FATAL_ERROR "Unable to find the math library.")
|
||||
ELSE(NOT HAVE_LIBM_FUNC)
|
||||
SET(HAVE_LIBM "")
|
||||
ENDIF()
|
||||
ELSE(NOT HAVE_LIBM)
|
||||
MESSAGE(STATUS "Found Math library: ${HAVE_LIBM}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
if(NOT HAVE_LIBM_FUNC)
|
||||
message(FATAL_ERROR "Unable to find the math library.")
|
||||
else(NOT HAVE_LIBM_FUNC)
|
||||
set(HAVE_LIBM "")
|
||||
endif()
|
||||
else(NOT HAVE_LIBM)
|
||||
message(STATUS "Found Math library: ${HAVE_LIBM}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################
|
||||
# zlib
|
||||
################################
|
||||
# See if we have zlib
|
||||
FIND_PACKAGE(ZLIB)
|
||||
find_package(ZLIB)
|
||||
|
||||
# Define a test flag for have zlib library
|
||||
IF(ZLIB_FOUND)
|
||||
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
|
||||
SET(ENABLE_ZLIB TRUE)
|
||||
ELSE()
|
||||
SET(ENABLE_ZLIB FALSE)
|
||||
ENDIF()
|
||||
if(ZLIB_FOUND)
|
||||
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||
set(ENABLE_ZLIB TRUE)
|
||||
else()
|
||||
set(ENABLE_ZLIB FALSE)
|
||||
endif()
|
||||
|
||||
################################
|
||||
# Zips
|
||||
################################
|
||||
IF (ENABLE_FILTER_SZIP)
|
||||
FIND_PACKAGE(Szip)
|
||||
ELSEIF(ENABLE_NCZARR)
|
||||
FIND_PACKAGE(Szip)
|
||||
ENDIF()
|
||||
find_package(Szip)
|
||||
elseif(ENABLE_NCZARR)
|
||||
find_package(Szip)
|
||||
endif()
|
||||
IF (ENABLE_FILTER_BZ2)
|
||||
FIND_PACKAGE(Bz2)
|
||||
ENDIF()
|
||||
find_package(Bz2)
|
||||
endif()
|
||||
IF (ENABLE_FILTER_BLOSC)
|
||||
FIND_PACKAGE(Blosc)
|
||||
ENDIF()
|
||||
find_package(Blosc)
|
||||
endif()
|
||||
IF (ENABLE_FILTER_ZSTD)
|
||||
FIND_PACKAGE(Zstd)
|
||||
ENDIF()
|
||||
find_package(Zstd)
|
||||
endif()
|
||||
|
||||
# Accumulate standard filters
|
||||
set(STD_FILTERS "deflate") # Always have deflate*/
|
||||
set_std_filter(Szip)
|
||||
SET(HAVE_SZ ${Szip_FOUND})
|
||||
SET(USE_SZIP ${HAVE_SZ})
|
||||
set(HAVE_SZ ${Szip_FOUND})
|
||||
set(USE_SZIP ${HAVE_SZ})
|
||||
set_std_filter(Blosc)
|
||||
IF(Zstd_FOUND)
|
||||
if(Zstd_FOUND)
|
||||
set_std_filter(Zstd)
|
||||
SET(HAVE_ZSTD ON)
|
||||
ENDIF()
|
||||
IF(Bz2_FOUND)
|
||||
set(HAVE_ZSTD ON)
|
||||
endif()
|
||||
if(Bz2_FOUND)
|
||||
set_std_filter(Bz2)
|
||||
ELSE()
|
||||
else()
|
||||
# The reason we use a local version is to support a more comples test case
|
||||
MESSAGE("libbz2 not found using built-in version")
|
||||
SET(HAVE_LOCAL_BZ2 ON)
|
||||
SET(HAVE_BZ2 ON CACHE BOOL "")
|
||||
message("libbz2 not found using built-in version")
|
||||
set(HAVE_LOCAL_BZ2 ON)
|
||||
set(HAVE_BZ2 ON CACHE BOOL "")
|
||||
set(STD_FILTERS "${STD_FILTERS} bz2")
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
IF (ENABLE_NCZARR_ZIP)
|
||||
FIND_PACKAGE(Zip REQUIRED)
|
||||
INCLUDE_DIRECTORIES(${Zip_INCLUDE_DIRS})
|
||||
ENDIF ()
|
||||
find_package(Zip REQUIRED)
|
||||
include_directories(${Zip_INCLUDE_DIRS})
|
||||
endif ()
|
||||
|
||||
################################
|
||||
# S3
|
||||
@ -571,71 +572,79 @@ ENDIF ()
|
||||
# Note we check for the library after checking for enable_s3
|
||||
# because for some reason this screws up if we unconditionally test for sdk
|
||||
# and it is not available. Fix someday
|
||||
IF(ENABLE_S3)
|
||||
IF(NOT ENABLE_S3_INTERNAL)
|
||||
if(ENABLE_S3)
|
||||
if(NOT ENABLE_S3_INTERNAL)
|
||||
# See if aws-s3-sdk is available
|
||||
find_package(AWSSDK REQUIRED COMPONENTS s3;transfer)
|
||||
IF(AWSSDK_FOUND)
|
||||
SET(ENABLE_S3_AWS ON CACHE BOOL "S3 AWS" FORCE)
|
||||
INCLUDE_DIRECTORIES(${AWSSDK_INCLUDE_DIR})
|
||||
ELSE(AWSSDK_FOUND)
|
||||
SET(ENABLE_S3_AWS OFF CACHE BOOL "S3 AWS" FORCE)
|
||||
ENDIF(AWSSDK_FOUND)
|
||||
ELSE(NOT ENABLE_S3_INTERNAL)
|
||||
if(AWSSDK_FOUND)
|
||||
set(ENABLE_S3_AWS ON CACHE BOOL "S3 AWS" FORCE)
|
||||
include_directories(${AWSSDK_INCLUDE_DIR})
|
||||
else(AWSSDK_FOUND)
|
||||
set(ENABLE_S3_AWS OFF CACHE BOOL "S3 AWS" FORCE)
|
||||
endif(AWSSDK_FOUND)
|
||||
else(NOT ENABLE_S3_INTERNAL)
|
||||
# Find crypto libraries required with testing with the internal s3 api.
|
||||
#FIND_LIBRARY(SSL_LIB NAMES ssl openssl)
|
||||
#find_library(SSL_LIB NAMES ssl openssl)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
IF(NOT OpenSSL_FOUND)
|
||||
MESSAGE(FATAL_ERROR "Can't find an ssl library, required by S3_INTERNAL")
|
||||
ENDIF(NOT OpenSSL_FOUND)
|
||||
if(NOT OpenSSL_FOUND)
|
||||
message(FATAL_ERROR "Can't find an ssl library, required by S3_INTERNAL")
|
||||
endif(NOT OpenSSL_FOUND)
|
||||
|
||||
#find_package(Crypto REQUIRED)
|
||||
#IF(NOT CRYPTO_LIB)
|
||||
# MESSAGE(FATAL_ERROR "Can't find a crypto library, required by S3_INTERNAL")
|
||||
#ENDIF(NOT CRYPTO_LIB)
|
||||
#if(NOT CRYPTO_LIB)
|
||||
# message(FATAL_ERROR "Can't find a crypto library, required by S3_INTERNAL")
|
||||
#endif(NOT CRYPTO_LIB)
|
||||
|
||||
ENDIF(NOT ENABLE_S3_INTERNAL)
|
||||
ELSE()
|
||||
SET(ENABLE_S3_AWS OFF CACHE BOOL "S3 AWS" FORCE)
|
||||
ENDIF()
|
||||
endif(NOT ENABLE_S3_INTERNAL)
|
||||
else()
|
||||
set(ENABLE_S3_AWS OFF CACHE BOOL "S3 AWS" FORCE)
|
||||
endif()
|
||||
|
||||
################################
|
||||
# LibXML
|
||||
################################
|
||||
# see if we have libxml2
|
||||
IF(ENABLE_LIBXML2)
|
||||
if(ENABLE_LIBXML2)
|
||||
find_package(LibXml2)
|
||||
IF(LibXml2_FOUND)
|
||||
SET(HAVE_LIBXML2 TRUE)
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIRS})
|
||||
SET(XMLPARSER "libxml2")
|
||||
ELSE()
|
||||
SET(HAVE_LIBXML2 FALSE)
|
||||
ENDIF()
|
||||
ENDIF(ENABLE_LIBXML2)
|
||||
if(LibXml2_FOUND)
|
||||
set(HAVE_LIBXML2 TRUE)
|
||||
include_directories(${LIBXML2_INCLUDE_DIRS})
|
||||
set(XMLPARSER "libxml2")
|
||||
else()
|
||||
set(HAVE_LIBXML2 FALSE)
|
||||
endif()
|
||||
endif(ENABLE_LIBXML2)
|
||||
|
||||
################################
|
||||
# MPI
|
||||
################################
|
||||
IF(ENABLE_PARALLEL4 OR HDF5_PARALLEL)
|
||||
FIND_PACKAGE(MPI REQUIRED)
|
||||
ENDIF()
|
||||
if(ENABLE_PARALLEL4 OR HDF5_PARALLEL)
|
||||
find_package(MPI REQUIRED)
|
||||
endif()
|
||||
|
||||
################################
|
||||
# parallel IO
|
||||
################################
|
||||
IF(ENABLE_PNETCDF)
|
||||
FIND_LIBRARY(PNETCDF NAMES pnetcdf)
|
||||
FIND_PATH(PNETCDF_INCLUDE_DIR pnetcdf.h)
|
||||
IF(NOT PNETCDF)
|
||||
MESSAGE(STATUS "Cannot find PnetCDF library. Disabling PnetCDF support.")
|
||||
SET(USE_PNETCDF OFF CACHE BOOL "")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
if(ENABLE_PNETCDF)
|
||||
find_library(PNETCDF NAMES pnetcdf)
|
||||
find_path(PNETCDF_INCLUDE_DIR pnetcdf.h)
|
||||
if(NOT PNETCDF)
|
||||
message(STATUS "Cannot find PnetCDF library. Disabling PnetCDF support.")
|
||||
set(USE_PNETCDF OFF CACHE BOOL "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################
|
||||
# Doxygen
|
||||
################################
|
||||
IF(ENABLE_DOXYGEN)
|
||||
FIND_PACKAGE(Doxygen REQUIRED)
|
||||
ENDIF()
|
||||
|
||||
if(ENABLE_DOXYGEN)
|
||||
find_package(Doxygen REQUIRED)
|
||||
endif()
|
||||
|
||||
################################
|
||||
# NC_DPKG
|
||||
################################
|
||||
if (NETCDF_PACKAGE)
|
||||
find_program(NC_DPKG NAMES dpkg)
|
||||
endif()
|
||||
|
@ -1,20 +1,329 @@
|
||||
################################
|
||||
# Macros
|
||||
################################
|
||||
|
||||
macro(set_std_filter filter)
|
||||
# Upper case the filter name
|
||||
string(TOUPPER "${filter}" upfilter)
|
||||
string(TOLOWER "${filter}" downfilter)
|
||||
if(ENABLE_FILTER_${upfilter})
|
||||
# Define a test flag for filter
|
||||
IF(${filter}_FOUND)
|
||||
INCLUDE_DIRECTORIES(${${filter}_INCLUDE_DIRS})
|
||||
SET(ENABLE_${upfilter} TRUE)
|
||||
SET(HAVE_${upfilter} ON)
|
||||
SET(STD_FILTERS "${STD_FILTERS} ${downfilter}")
|
||||
MESSAGE(">>> Standard Filter: ${downfilter}")
|
||||
ELSE()
|
||||
SET(ENABLE_${upfilter} FALSE)
|
||||
SET(HAVE_${upfilter} OFF)
|
||||
ENDIF()
|
||||
ELSE()
|
||||
SET(HAVE_${upfilter} OFF)
|
||||
ENDIF()
|
||||
endmacro(set_std_filter)
|
||||
# Upper case the filter name
|
||||
string(TOUPPER "${filter}" upfilter)
|
||||
string(TOLOWER "${filter}" downfilter)
|
||||
if(ENABLE_FILTER_${upfilter})
|
||||
# Define a test flag for filter
|
||||
if(${filter}_FOUND)
|
||||
include_directories(${${filter}_INCLUDE_DIRS})
|
||||
set(ENABLE_${upfilter} TRUE)
|
||||
set(HAVE_${upfilter} ON)
|
||||
set(STD_FILTERS "${STD_FILTERS} ${downfilter}")
|
||||
message(">>> Standard Filter: ${downfilter}")
|
||||
else()
|
||||
set(ENABLE_${upfilter} FALSE)
|
||||
set(HAVE_${upfilter} OFF)
|
||||
endif()
|
||||
else()
|
||||
set(HAVE_${upfilter} OFF)
|
||||
endif()
|
||||
endmacro(set_std_filter)
|
||||
|
||||
macro(getuname name flag)
|
||||
execute_process(COMMAND "${UNAME}" "${flag}" OUTPUT_VARIABLE "${name}" OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endmacro(getuname)
|
||||
|
||||
# A macro to check if a C linker supports a particular flag.
|
||||
macro(CHECK_C_LINKER_FLAG M_FLAG M_RESULT)
|
||||
set(T_REQ_FLAG "${CMAKE_REQUIRED_FLAGS}")
|
||||
set(CMAKE_REQUIRED_FLAGS "${M_FLAG}")
|
||||
CHECK_C_SOURCE_COMPILES("int main() {return 0;}" ${M_RESULT})
|
||||
set(CMAKE_REQUIRED_FLAGS "${T_REQ_FLAG}")
|
||||
endmacro()
|
||||
|
||||
# Macro for replacing '/MD' with '/MT'.
|
||||
# Used only on Windows, /MD tells VS to use the shared
|
||||
# CRT libs, MT tells VS to use the static CRT libs.
|
||||
#
|
||||
# Taken From:
|
||||
# http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
|
||||
#
|
||||
macro(specify_static_crt_flag)
|
||||
set(vars
|
||||
CMAKE_C_FLAGS
|
||||
CMAKE_C_FLAGS_DEBUG
|
||||
CMAKE_C_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS_MINSIZEREL
|
||||
CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG
|
||||
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||
|
||||
foreach(flag_var ${vars})
|
||||
if(${flag_var} MATCHES "/MD")
|
||||
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach(flag_var ${vars})
|
||||
message(STATUS " '${flag_var}': ${${flag_var}}")
|
||||
endforeach()
|
||||
message(STATUS "")
|
||||
endmacro()
|
||||
|
||||
# Macro to append files to the EXTRA_DIST files.
|
||||
# Note: can only be used in subdirectories because of the use of PARENT_SCOPE
|
||||
set(EXTRA_DIST "")
|
||||
macro(ADD_EXTRA_DIST files)
|
||||
foreach(F ${files})
|
||||
set(EXTRA_DIST ${EXTRA_DIST} ${CMAKE_CURRENT_SOURCE_DIR}/${F})
|
||||
set(EXTRA_DIST ${EXTRA_DIST} PARENT_SCOPE)
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
macro(GEN_m4 filename)
|
||||
|
||||
set(fallbackdest "${CMAKE_CURRENT_SOURCE_DIR}/${filename}.c")
|
||||
set(dest "${CMAKE_CURRENT_BINARY_DIR}/${filename}.c")
|
||||
|
||||
# If m4 isn't present, and the generated file doesn't exist,
|
||||
# it cannot be generated and an error should be thrown.
|
||||
if(NOT HAVE_M4)
|
||||
if(NOT EXISTS ${fallbackdest})
|
||||
message(FATAL_ERROR "m4 is required to generate ${filename}.c. Please install m4 so that it is on the PATH and try again.")
|
||||
else()
|
||||
set(dest ${fallbackdest})
|
||||
endif()
|
||||
else()
|
||||
add_custom_command(
|
||||
OUTPUT ${dest}
|
||||
COMMAND ${NC_M4}
|
||||
ARGS ${M4FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/${filename}.m4 > ${dest}
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
endif()
|
||||
endmacro(GEN_m4)
|
||||
|
||||
# Binary tests, but ones which depend on value of 'TEMP_LARGE' being defined.
|
||||
macro(add_bin_env_temp_large_test prefix F)
|
||||
add_executable(${prefix}_${F} ${F}.c)
|
||||
target_link_libraries(${prefix}_${F} netcdf)
|
||||
IF(MSVC)
|
||||
set_target_properties(${prefix}_${F}
|
||||
PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT"
|
||||
)
|
||||
endif()
|
||||
|
||||
add_test(${prefix}_${F} bash "-c" "TEMP_LARGE=${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${prefix}_${F}")
|
||||
if(MSVC)
|
||||
set_property(TARGET ${prefix}_${F} PROPERTY FOLDER "tests")
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Tests which are binary, but depend on a particular environmental variable.
|
||||
macro(add_bin_env_test prefix F)
|
||||
add_executable(${prefix}_${F} ${F}.c)
|
||||
target_link_libraries(${prefix}_${F} netcdf)
|
||||
if(MSVC)
|
||||
set_target_properties(${prefix}_${F}
|
||||
PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT"
|
||||
)
|
||||
endif()
|
||||
|
||||
add_test(${prefix}_${F} bash "-c" "TOPSRCDIR=${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${prefix}_${F}")
|
||||
if(MSVC)
|
||||
set_property(TARGET ${prefix}_${F} PROPERTY FOLDER "tests")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Build a binary used by a script, but don't make a test out of it.
|
||||
macro(build_bin_test F)
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${F}.c")
|
||||
add_executable(${F} "${CMAKE_CURRENT_SOURCE_DIR}/${F}.c" ${ARGN})
|
||||
else()
|
||||
# File should have been copied to the binary directory
|
||||
add_executable(${F} "${CMAKE_CURRENT_BINARY_DIR}/${F}.c" ${ARGN})
|
||||
endif()
|
||||
target_link_libraries(${F} netcdf ${ALL_TLL_LIBS})
|
||||
if(MSVC)
|
||||
set_target_properties(${F}
|
||||
PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT"
|
||||
)
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Binary tests which are used by a script looking for a specific name.
|
||||
macro(add_bin_test_no_prefix F)
|
||||
build_bin_test(${F} ${ARGN})
|
||||
add_test(${F} ${EXECUTABLE_OUTPUT_PATH}/${F})
|
||||
if(MSVC)
|
||||
set_property(TEST ${F} PROPERTY FOLDER "tests/")
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Binary tests which are used by a script looking for a specific name.
|
||||
macro(build_bin_test_no_prefix F)
|
||||
build_bin_test(${F})
|
||||
if(MSVC)
|
||||
#SET_PROPERTY(TEST ${F} PROPERTY FOLDER "tests/")
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Build a test and add it to the test list.
|
||||
macro(add_bin_test prefix F)
|
||||
add_executable(${prefix}_${F} ${F}.c ${ARGN})
|
||||
target_link_libraries(${prefix}_${F}
|
||||
${ALL_TLL_LIBS}
|
||||
netcdf
|
||||
)
|
||||
if(MSVC)
|
||||
set_target_properties(${prefix}_${F}
|
||||
PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT"
|
||||
)
|
||||
endif()
|
||||
add_test(${prefix}_${F}
|
||||
${EXECUTABLE_OUTPUT_PATH}/${prefix}_${F}
|
||||
)
|
||||
if(MSVC)
|
||||
set_property(TEST ${prefix}_${F} PROPERTY FOLDER "tests/")
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# A cmake script to print out information at the end of the configuration step.
|
||||
macro(print_conf_summary)
|
||||
message("")
|
||||
message("")
|
||||
message("Configuration Summary:")
|
||||
message("")
|
||||
message(STATUS "Building Shared Libraries: ${BUILD_SHARED_LIBS}")
|
||||
message(STATUS "Building netCDF-4: ${ENABLE_NETCDF_4}")
|
||||
message(STATUS "Building DAP2 Support: ${ENABLE_DAP2}")
|
||||
message(STATUS "Building DAP4 Support: ${ENABLE_DAP4}")
|
||||
message(STATUS "Building Byte-range Support: ${ENABLE_BYTERANGE}")
|
||||
message(STATUS "Building Utilities: ${BUILD_UTILITIES}")
|
||||
if(CMAKE_PREFIX_PATH)
|
||||
message(STATUS "CMake Prefix Path: ${CMAKE_PREFIX_PATH}")
|
||||
endif()
|
||||
message("")
|
||||
|
||||
if(${STATUS_PNETCDF} OR ${STATUS_PARALLEL})
|
||||
message("Building Parallel NetCDF")
|
||||
message(STATUS "Using PnetCDF: ${STATUS_PNETCDF}")
|
||||
message(STATUS "Using Parallel IO: ${STATUS_PARALLEL}")
|
||||
message("")
|
||||
endif()
|
||||
|
||||
message("Tests Enabled: ${ENABLE_TESTS}")
|
||||
if(ENABLE_TESTS)
|
||||
message(STATUS "DAP Remote Tests: ${ENABLE_DAP_REMOTE_TESTS}")
|
||||
message(STATUS "Extra Tests: ${ENABLE_EXTRA_TESTS}")
|
||||
message(STATUS "Coverage Tests: ${ENABLE_COVERAGE_TESTS}")
|
||||
message(STATUS "Parallel Tests: ${ENABLE_PARALLEL_TESTS}")
|
||||
message(STATUS "Large File Tests: ${ENABLE_LARGE_FILE_TESTS}")
|
||||
message(STATUS "Extreme Numbers: ${ENABLE_EXTREME_NUMBERS}")
|
||||
message(STATUS "Unit Tests: ${ENABLE_UNIT_TESTS}")
|
||||
endif()
|
||||
|
||||
message("")
|
||||
message("Compiler:")
|
||||
message("")
|
||||
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
|
||||
message(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}")
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
||||
message(STATUS "CMAKE_C_FLAGS_DEBUG: ${CMAKE_C_FLAGS_DEBUG}")
|
||||
endif()
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
|
||||
message(STATUS "CMAKE_C_FLAGS_RELEASE: ${CMAKE_C_FLAGS_RELEASE}")
|
||||
endif()
|
||||
|
||||
message(STATUS "Linking against: ${ALL_TLL_LIBS}")
|
||||
|
||||
message("")
|
||||
endmacro()
|
||||
|
||||
macro(add_sh_test prefix F)
|
||||
if(HAVE_BASH)
|
||||
add_test(${prefix}_${F} bash "-c" "export srcdir=${CMAKE_CURRENT_SOURCE_DIR};export TOPSRCDIR=${CMAKE_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}/${F}.sh ${ARGN}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(getdpkg_arch arch)
|
||||
execute_process(COMMAND "${NC_DPKG}" "--print-architecture" OUTPUT_VARIABLE "${arch}" OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endmacro(getdpkg_arch)
|
||||
|
||||
################################
|
||||
# Functions
|
||||
################################
|
||||
|
||||
function(booleanize VALUE RETVAR)
|
||||
# force case
|
||||
string(TOLOWER "${VALUE}" LCVALUE)
|
||||
# Now do all the comparisons
|
||||
if(LCVALUE IN_LIST TRUELIST OR LCVALUE GREATER 0)
|
||||
set(${RETVAR} TRUE PARENT_SCOPE)
|
||||
elseif(LCVALUE IN_LIST FALSELIST OR LCVALUE MATCHES ".*-notfound" OR LCVALUE STREQUAL "")
|
||||
set(${RETVAR} FALSE PARENT_SCOPE)
|
||||
else()
|
||||
set(${RETVAR} NOTFOUND PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
# A function used to create autotools-style 'yes/no' definitions.
|
||||
# If a variable is set, it 'yes' is returned. Otherwise, 'no' is
|
||||
# returned.
|
||||
#
|
||||
# Also creates a version of the ret_val prepended with 'NC',
|
||||
# when feature is true, which is used to generate netcdf_meta.h.
|
||||
function(is_enabled feature ret_val)
|
||||
if(${feature})
|
||||
set(${ret_val} "yes" PARENT_SCOPE)
|
||||
set("NC_${ret_val}" 1 PARENT_SCOPE)
|
||||
else()
|
||||
set(${ret_val} "no" PARENT_SCOPE)
|
||||
set("NC_${ret_val}" 0 PARENT_SCOPE)
|
||||
endif(${feature})
|
||||
endfunction()
|
||||
|
||||
# A function used to create autotools-style 'yes/no' definitions.
|
||||
# If a variable is set, it 'yes' is returned. Otherwise, 'no' is
|
||||
# returned.
|
||||
#
|
||||
# Also creates a version of the ret_val prepended with 'NC',
|
||||
# when feature is true, which is used to generate netcdf_meta.h.
|
||||
function(is_disabled feature ret_val)
|
||||
if(${feature})
|
||||
set(${ret_val} "no" PARENT_SCOPE)
|
||||
else()
|
||||
set(${ret_val} "yes" PARENT_SCOPE)
|
||||
set("NC_${ret_val}" 1 PARENT_SCOPE)
|
||||
endif(${feature})
|
||||
endfunction()
|
Loading…
Reference in New Issue
Block a user