summaryrefslogtreecommitdiffstats
path: root/HDF5Examples/config/cmake/HDFExampleMacros.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'HDF5Examples/config/cmake/HDFExampleMacros.cmake')
-rw-r--r--HDF5Examples/config/cmake/HDFExampleMacros.cmake368
1 files changed, 368 insertions, 0 deletions
diff --git a/HDF5Examples/config/cmake/HDFExampleMacros.cmake b/HDF5Examples/config/cmake/HDFExampleMacros.cmake
new file mode 100644
index 0000000..d9bf67f
--- /dev/null
+++ b/HDF5Examples/config/cmake/HDFExampleMacros.cmake
@@ -0,0 +1,368 @@
+#-------------------------------------------------------------------------------
+macro (BASIC_SETTINGS varname)
+ string (TOUPPER ${varname} EXAMPLE_PACKAGE_VARNAME)
+ string (TOLOWER ${varname} EXAMPLE_VARNAME)
+ set (H5${EXAMPLE_PACKAGE_VARNAME}_PACKAGE "h5${EXAMPLE_VARNAME}")
+ set (H5${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME "h5${EXAMPLE_VARNAME}")
+ string (TOUPPER ${H5${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_PACKAGE_NAME)
+ string (TOLOWER ${H5${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_NAME)
+ set (CMAKE_NO_SYSTEM_FROM_IMPORTED 1)
+
+ #-----------------------------------------------------------------------------
+ # Define some CMake variables for use later in the project
+ #-----------------------------------------------------------------------------
+ set (${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR ${${EXAMPLE_PACKAGE_NAME}_SOURCE_DIR}/config/cmake)
+ set (${EXAMPLE_PACKAGE_NAME}_SRC_DIR ${${EXAMPLE_PACKAGE_NAME}_SOURCE_DIR}/src)
+
+ #-----------------------------------------------------------------------------
+ # Setup output Directories
+ #-----------------------------------------------------------------------------
+ if (NOT ${EXAMPLE_PACKAGE_NAME}_EXTERNALLY_CONFIGURED)
+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables."
+ )
+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all Libraries"
+ )
+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all static libraries."
+ )
+ set (CMAKE_Fortran_MODULE_DIRECTORY
+ ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all fortran modules."
+ )
+ get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ if(_isMultiConfig)
+ set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
+ set (CMAKE_PDB_OUTPUT_DIRECTORY
+ ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all pdb files."
+ )
+ else ()
+ set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+ endif ()
+ else ()
+ # if we are externally configured, but the project uses old cmake scripts
+ # this may not be set
+ if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
+ endif ()
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use Shared/Static libs, default is static
+ #-----------------------------------------------------------------------------
+ set (LIB_TYPE STATIC)
+ if (BUILD_SHARED_LIBS)
+ set (LIB_TYPE SHARED)
+ endif ()
+ set (CMAKE_POSITION_INDEPENDENT_CODE ON)
+
+ if (MSVC)
+ set (CMAKE_MFC_FLAG 0)
+ endif ()
+
+ set (CMAKE_C_STANDARD 99)
+ set (CMAKE_C_STANDARD_REQUIRED TRUE)
+
+ set (CMAKE_CXX_STANDARD 98)
+ set (CMAKE_CXX_STANDARD_REQUIRED TRUE)
+ set (CMAKE_CXX_EXTENSIONS OFF)
+
+ #-----------------------------------------------------------------------------
+ # Compiler specific flags : Shouldn't there be compiler tests for these
+ #-----------------------------------------------------------------------------
+ if (CMAKE_COMPILER_IS_GNUCC)
+ set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
+ endif ()
+ if (CMAKE_COMPILER_IS_GNUCXX)
+ set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS}")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # This is in here to help some of the GCC based IDES like Eclipse
+ # and code blocks parse the compiler errors and warnings better.
+ #-----------------------------------------------------------------------------
+ if (CMAKE_COMPILER_IS_GNUCC)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
+ endif ()
+ if (CMAKE_COMPILER_IS_GNUCXX)
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to allow the user to disable compiler warnings
+ #-----------------------------------------------------------------------------
+ option (HDF_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
+ if (HDF_DISABLE_COMPILER_WARNINGS)
+ # MSVC uses /w to suppress warnings. It also complains if another
+ # warning level is given, so remove it.
+ if (MSVC)
+ set (HDF_WARNINGS_BLOCKED 1)
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /w")
+ string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w")
+ endif ()
+ if (WIN32)
+ add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+ endif ()
+ # Borland uses -w- to suppress warnings.
+ if (BORLAND)
+ set (HDF_WARNINGS_BLOCKED 1)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
+ endif ()
+
+ # Most compilers use -w to suppress warnings.
+ if (NOT HDF_WARNINGS_BLOCKED)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
+ endif ()
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Set includes needed for build
+ #-----------------------------------------------------------------------------
+ set (${EXAMPLE_PACKAGE_NAME}_INCLUDES_BUILD_TIME
+ ${${EXAMPLE_PACKAGE_NAME}_SRC_DIR} ${${EXAMPLE_PACKAGE_NAME}_BINARY_DIR}
+ )
+
+ #-----------------------------------------------------------------------------
+ # Option to build JAVA examples
+ #-----------------------------------------------------------------------------
+ option (HDF_BUILD_JAVA "Build JAVA support" OFF)
+ if (HDF_BUILD_JAVA)
+ find_package (Java)
+ INCLUDE_DIRECTORIES (
+ ${JAVA_INCLUDE_PATH}
+ ${JAVA_INCLUDE_PATH2}
+ )
+
+ include (${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR}/UseJava.cmake)
+ endif ()
+endmacro ()
+
+macro (HDF5_SUPPORT)
+ set (CMAKE_MODULE_PATH ${${EXAMPLE_PACKAGE_NAME}_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
+ option (USE_SHARED_LIBS "Use Shared Libraries" ON)
+
+ if (NOT H5EX_HDF5_HEADER)
+ if (USE_SHARED_LIBS)
+ set (FIND_HDF_COMPONENTS C shared)
+ else ()
+ set (FIND_HDF_COMPONENTS C static)
+ set (HDF_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
+ message (STATUS "Using static HDF5 - disable build of Java examples")
+ endif ()
+ if (HDF_BUILD_FORTRAN)
+ set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran)
+ endif ()
+ if (HDF_BUILD_JAVA)
+ set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java)
+ set (HDF5_Java_FOUND 1) #default setting for 1.10.1 and earlier
+ endif ()
+ message (STATUS "HDF5 find comps: ${FIND_HDF_COMPONENTS}")
+ set (SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME})
+
+ find_package (HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS})
+ message (STATUS "HDF5 C libs:${HDF5_FOUND} static:${HDF5_static_C_FOUND} and shared:${HDF5_shared_C_FOUND}")
+ message (STATUS "HDF5 Fortran libs: static:${HDF5_static_Fortran_FOUND} and shared:${HDF5_shared_Fortran_FOUND}")
+ message (STATUS "HDF5 Java libs: ${HDF5_Java_FOUND}")
+ if (HDF5_FOUND)
+ if (USE_SHARED_LIBS)
+ if (NOT TARGET ${HDF5_NAMESPACE}h5dump-shared)
+ add_executable (${HDF5_NAMESPACE}h5dump-shared IMPORTED)
+ endif ()
+ set (H5EX_HDF5_DUMP_EXECUTABLE $<TARGET_FILE:${HDF5_NAMESPACE}h5dump-shared>)
+ else ()
+ if (NOT TARGET ${HDF5_NAMESPACE}h5dump)
+ add_executable (${HDF5_NAMESPACE}h5dump IMPORTED)
+ endif()
+ set (H5EX_HDF5_DUMP_EXECUTABLE $<TARGET_FILE:${HDF5_NAMESPACE}h5dump>)
+ endif()
+
+ if (NOT HDF5_static_C_FOUND AND NOT HDF5_shared_C_FOUND)
+ #find library from non-dual-binary package
+ set (FIND_HDF_COMPONENTS C)
+ if (HDF_BUILD_FORTRAN)
+ set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran)
+ endif ()
+ if (HDF_BUILD_JAVA)
+ set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java)
+ endif ()
+ message (STATUS "HDF5 find comps: ${FIND_HDF_COMPONENTS}")
+
+ find_package (HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS})
+ message (STATUS "HDF5 libs:${HDF5_FOUND} C:${HDF5_C_FOUND} Fortran:${HDF5_Fortran_FOUND} Java:${HDF5_Java_FOUND}")
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_LIBRARIES})
+ if (HDF5_BUILD_SHARED_LIBS)
+ add_definitions (-DH5_BUILT_AS_DYNAMIC_LIB)
+ else ()
+ add_definitions (-DH5_BUILT_AS_STATIC_LIB)
+ endif ()
+ if (USE_SHARED_LIBS AND WIN32)
+ set_property (TARGET ${HDF5_NAMESPACE}h5dump PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5dumpdll")
+ else ()
+ set_property (TARGET ${HDF5_NAMESPACE}h5dump PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5dump")
+ endif ()
+ if (HDF_BUILD_JAVA)
+ set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF5_JAVA_INCLUDE_DIRS}")
+ message (STATUS "HDF5 jars:${HDF5_JAVA_INCLUDE_DIRS}")
+ endif ()
+ set (H5EX_HDF5_DUMP_EXECUTABLE $<TARGET_FILE:${HDF5_NAMESPACE}h5dump>)
+ else ()
+ if (USE_SHARED_LIBS AND HDF5_shared_C_FOUND)
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_C_SHARED_LIBRARY})
+ set (HDF5_LIBRARY_PATH ${PACKAGE_PREFIX_DIR}/lib)
+ set_property (TARGET ${HDF5_NAMESPACE}h5dump-shared PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5dump-shared")
+ else ()
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_C_STATIC_LIBRARY})
+ set_property (TARGET ${HDF5_NAMESPACE}h5dump PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5dump")
+ endif ()
+ if (HDF_BUILD_FORTRAN AND ${HDF5_BUILD_FORTRAN})
+ if (BUILD_SHARED_LIBS AND HDF5_shared_Fortran_FOUND)
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_FORTRAN_SHARED_LIBRARY})
+ elseif (HDF5_static_Fortran_FOUND)
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_FORTRAN_STATIC_LIBRARY})
+ else ()
+ set (HDF_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE)
+ message (STATUS "HDF5 Fortran libs not found - disable build of Fortran examples")
+ endif ()
+ else ()
+ set (HDF_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE)
+ message (STATUS "HDF5 Fortran libs not found - disable build of Fortran examples")
+ endif ()
+ if (HDF_BUILD_JAVA)
+ if (${HDF5_BUILD_JAVA} AND HDF5_Java_FOUND)
+ set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF5_JAVA_INCLUDE_DIRS}")
+ message (STATUS "HDF5 jars:${HDF5_JAVA_INCLUDE_DIRS}}")
+ else ()
+ set (HDF_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
+ message (STATUS "HDF5 Java libs not found - disable build of Java examples")
+ endif ()
+ else ()
+ set (HDF_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
+ endif ()
+ endif ()
+ else ()
+ find_package (HDF5) # Legacy find
+ #Legacy find_package does not set HDF5_TOOLS_DIR, so we set it here
+ set (HDF5_TOOLS_DIR ${HDF5_LIBRARY_DIRS}/../bin)
+ #Legacy find_package does not set HDF5_BUILD_SHARED_LIBS, so we set it here
+ if (USE_SHARED_LIBS AND EXISTS "${HDF5_LIBRARY_DIRS}/libhdf5.so")
+ set (HDF5_BUILD_SHARED_LIBS 1)
+ else ()
+ set (HDF5_BUILD_SHARED_LIBS 0)
+ endif ()
+ set (H5EX_HDF5_LINK_LIBS ${H5EX_HDF5_LINK_LIBS} ${HDF5_LIBRARIES})
+ add_executable (${HDF5_NAMESPACE}h5dump IMPORTED)
+ set_property (TARGET ${HDF5_NAMESPACE}h5dump PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5dump")
+ set (H5EX_HDF5_DUMP_EXECUTABLE $<TARGET_FILE:${HDF5_NAMESPACE}h5dump>)
+ endif ()
+
+ set (HDF5_PACKAGE_NAME ${SEARCH_PACKAGE_NAME})
+
+ if (HDF5_FOUND)
+ set (H5EX_HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
+ set (H5EX_HDF5_HAVE_H5PUBCONF_H 1)
+ set (H5EX_HDF5_HAVE_HDF5 1)
+ set (H5EX_HDF5_HEADER "h5pubconf.h")
+ message (STATUS "HDF5-${HDF5_VERSION_STRING} found: INC=${HDF5_INCLUDE_DIR} TOOLS=${HDF5_TOOLS_DIR}")
+ else ()
+ message (FATAL_ERROR " HDF5 is Required for HDF5 Examples")
+ endif ()
+ else ()
+ # This project is being called from within another and HDF5 is already configured
+ set (H5EX_HDF5_HAVE_H5PUBCONF_H 1)
+ set (H5EX_HDF5_HAVE_HDF5 1)
+ message (STATUS "HDF5-${HDF5_VERSION_STRING} used")
+ endif ()
+ if (HDF_BUILD_FORTRAN)
+ list (APPEND H5EX_HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR_FORTRAN})
+ endif ()
+ message (STATUS "HDF5 link libs: ${H5EX_HDF5_LINK_LIBS} Includes: ${H5EX_HDF5_INCLUDE_DIRS}")
+
+ if (USE_SHARED_LIBS)
+ set (H5_LIB_TYPE SHARED)
+ else ()
+ set (H5_LIB_TYPE STATIC)
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to build filter examples
+ #-----------------------------------------------------------------------------
+ option (HDF_BUILD_FILTERS "Test filter support" OFF)
+endmacro ()
+
+#-------------------------------------------------------------------------------
+# Purpose:
+# Breaking down three numbered versions (x.y.z) into their components, and
+# returning a major and minor version (xy).
+#
+# Parameters:
+# version [in] The version string.
+# xyapi [out] A "majorminor" API version.
+#
+macro (APIVersion version xyapi)
+ string (REGEX REPLACE "(\-[0-9]+)" "" xyz ${version})
+ message (VERBOSE "version=${version}")
+
+ string (REGEX REPLACE "([0-9]+).[0-9]+.[0-9]+" "\\1" major ${xyz})
+ string (REGEX REPLACE "[0-9]+.([0-9]+).[0-9]+" "\\1" minor ${xyz})
+ string (REGEX REPLACE "[0-9]+.[0-9]+.([0-9]+)" "\\1" patch ${xyz})
+ message (VERBOSE "major=${major} minor=${minor}")
+
+ # Round up to the next major release if minor is odd-numbered
+ math (EXPR rem "${minor}%2")
+ if (NOT ${rem} STREQUAL "0")
+ math (EXPR minor "${minor} + 1")
+ endif ()
+
+ set (${xyapi} "${major}${minor}")
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.6.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_16_API "Use the HDF5 1.6.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_16_API AND ${xyapi} GREATER 16)
+ set (${xyapi} "16")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.8.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_18_API "Use the HDF5 1.8.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_18_API AND ${xyapi} GREATER 18)
+ set (${xyapi} "18")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.10.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_110_API "Use the HDF5 1.10.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_110_API AND ${xyapi} GREATER 110)
+ set (${xyapi} "110")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.12.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_112_API "Use the HDF5 1.12.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_112_API AND ${xyapi} GREATER 112)
+ set (${xyapi} "112")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.14.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_114_API "Use the HDF5 1.14.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_114_API AND ${xyapi} GREATER 114)
+ set (${xyapi} "114")
+ endif ()
+
+ #-----------------------------------------------------------------------------
+ # Option to use 1.16.x API
+ #-----------------------------------------------------------------------------
+ option (${EXAMPLE_VARNAME}_USE_116_API "Use the HDF5 1.16.x API" OFF)
+ if (${EXAMPLE_VARNAME}_USE_116_API AND ${xyapi} GREATER 116)
+ set (${xyapi} "116")
+ endif ()
+endmacro ()