cmake_minimum_required (VERSION 2.8.6)
PROJECT (H4H5 C CXX)

#-----------------------------------------------------------------------------
# Instructions for use : Normal Build
#
# For standard build of H4H5 libraries,tests and tools. 
# Run cmake using the H4H5 source tree to generate a build tree.
# Enable/Disable options according to requirements and
# set CMAKE_INSTALL_PREFIX to the required install path.
# Make install can be used to install all components for system-wide use.
#
#-----------------------------------------------------------------------------
# Instructions for use : Sub-Project Build
#
# To include H4H5 as a sub-project within another project. 
# Set H4H5_EXTERNALLY_CONFIGURED to 1 in the parent project and
# supply values for the following variables...
#
# H4H5_EXPORTED_TARGETS :
#   Set this to the name of the targets variable which controls exports
#   If unset (because parent project does not support/use the 
#   INSTALL (EXPORT target...) syntax), then targets are not configured 
#   for export during install.
#
# H4H5_LIB_DEPENDENCIES :
#   If the build of H4H5 libs is being customized, then rules for the
#   dependencies of the H4H5 libs may be 'incomplete', add additional
#   dependencies to this variable so that external projects pick them up
#
# H4H5_EXTERNAL_LIB_PREFIX :
#   If the pa5rent project needs to install hdf libraries, but avoid 
#   name conflicts with system versions, then a prefix may be added
#   to ensure that the correct versions configured are used.
#
# Consider this example, it builds its own zlib
# library and tells H4H5 to add it as a dependency - this ensures that
# any project making use of this build of H4H5 will use the correct zlib
#
#   # Tell H4H5 that we are manually overriding certain settings
#   SET (H4H5_EXTERNALLY_CONFIGURED 1)
#   # Avoid duplicating names of installed libraries
#   SET (H4H5_EXTERNAL_LIB_PREFIX "prj")
#   # Targets linking to the H4H5 libs need to know their names
#   # if they are changed in the sub project, they should be here too
#   SET (H4H5_LIB_NAME "prjH4H5")
#   SET (H4H5_MF_LIB_NAME "prjH4H5_mf")
#   SET (H4H5_LIBRARY "${H4H5_LIB_NAME};${H4H5_MF_LIB_NAME}")
#   # Export configuration to this export variable
#   SET (H4H5_EXPORTED_TARGETS "project-targets")
#
#   # Setup all necessary overrides for zlib so that H4H5 uses our
#   # internally compiled zlib rather than any other version
#   IF (HDF_ENABLE_Z_LIB_SUPPORT)
#    # We must tell the main H4H5 library that it depends on our zlib 
#     SET (H4H5_LIB_DEPENDENCIES prjzlib)    
#     # Override the zlib header file
#     IF (PRJ_USE_SYSTEM_ZLIB)
#       SET (H4_ZLIB_HEADER "zlib.h")
#     ELSE (PRJ_USE_SYSTEM_ZLIB)
#      SET (H4_ZLIB_HEADER "prj_zlib.h")
#       # Set vars that FindZlib would have set if used in sub project
#       SET (ZLIB_INCLUDE_DIRS "${PRJ_ZLIB_INCLUDE_DIRS}")
#       SET (ZLIB_LIBRARIES prjzlib)
#     ENDIF (PRJ_USE_SYSTEM_ZLIB)
#  ENDIF (HDF_ENABLE_Z_LIB_SUPPORT)
#   
#   # Add the sub project
#   ADD_SUBDIRECTORY (Utilities/H4H5-1.2)
#   # Add the H4H5 dirs to our include path
#   SET (H4H5_INCLUDE_DIR 
#       ${PROJECT_SOURCE_DIR}/Utilities/H4H5-1.2/src
#       ${PROJECT_BINARY_DIR}/Utilities/H4H5-1.2
#   )
#
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Allow Visual Studio solution directories
#-----------------------------------------------------------------------------
# Provide a way for Visual Studio Express users to turn OFF the new FOLDER
# organization feature. Default to ON for non-Express users. Express users must
# explicitly turn off this option to build HDF5 in the Express IDE...
#
OPTION (H4H5_USE_FOLDERS "Enable folder grouping of projects in IDEs." ON)
MARK_AS_ADVANCED (H4H5_USE_FOLDERS)
IF (H4H5_USE_FOLDERS)
  SET_PROPERTY (GLOBAL PROPERTY USE_FOLDERS ON)
ENDIF (H4H5_USE_FOLDERS)
OPTION (H4H5_NO_PACKAGES "CPACK - Disable packaging" OFF)
MARK_AS_ADVANCED (H4H5_NO_PACKAGES)

#-----------------------------------------------------------------------------
# Set the core names of all the libraries
#-----------------------------------------------------------------------------
SET (H4H5_LIB_CORENAME              "H4H5")
SET (H4H5_SRC_LIB_CORENAME          "h4toh5")

#-----------------------------------------------------------------------------
# Set the true names of all the libraries if customized by external project
#-----------------------------------------------------------------------------
SET (H4H5_LIB_NAME              "${H4H5_EXTERNAL_LIB_PREFIX}${H4H5_LIB_CORENAME}")
SET (H4H5_SRC_LIB_NAME          "${H4H5_EXTERNAL_LIB_PREFIX}${H4H5_SRC_LIB_CORENAME}")

#-----------------------------------------------------------------------------
# Set the target names of all the libraries
#-----------------------------------------------------------------------------
SET (H4H5_LIB_TARGET              ${H4H5_LIB_CORENAME})
SET (H4H5_SRC_LIB_TARGET          ${H4H5_SRC_LIB_CORENAME})

#-----------------------------------------------------------------------------
# Define some CMake variables for use later in the project
#-----------------------------------------------------------------------------
SET (H4H5_RESOURCES_DIR       ${H4H5_SOURCE_DIR}/config/cmake)
SET (H4H5_SRC_DIR             ${H4H5_SOURCE_DIR}/lib/src)
SET (H4H5_TEST_SRC_DIR        ${H4H5_SOURCE_DIR}/lib/test)
SET (H4H5_UTILS_SRC_DIR       ${H4H5_SOURCE_DIR}/utils)

# set default prefix location
#IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
#  SET(CMAKE_INSTALL_PREFIX "h4h5" CACHE PATH "Install path prefix, prepended onto install directories" FORCE)
#ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

IF (NOT H4H5_INSTALL_BIN_DIR)
  SET (H4H5_INSTALL_BIN_DIR bin)
ENDIF (NOT H4H5_INSTALL_BIN_DIR)
IF (NOT H4H5_INSTALL_LIB_DIR)
  SET (H4H5_INSTALL_LIB_DIR lib)
ENDIF (NOT H4H5_INSTALL_LIB_DIR)
IF (NOT H4H5_INSTALL_INCLUDE_DIR)
  SET (H4H5_INSTALL_INCLUDE_DIR include)
ENDIF (NOT H4H5_INSTALL_INCLUDE_DIR)
IF (NOT H4H5_INSTALL_DATA_DIR)
  SET (H4H5_INSTALL_DATA_DIR share)
ENDIF (NOT H4H5_INSTALL_DATA_DIR)

#-----------------------------------------------------------------------------
# parse the full version number from hfile.h and include in H4_VERS_INFO
#-----------------------------------------------------------------------------
FILE (READ ${H4H5_SRC_DIR}/h4toh5.h _h4toh5_h_contents)
STRING (REGEX REPLACE ".*#define[ \t]+H4TOH5_LIBVER_MAJOR[ \t]+([0-9]*).*$"
    "\\1" H4H5_VERS_MAJOR ${_h4toh5_h_contents})
STRING (REGEX REPLACE ".*#define[ \t]+H4TOH5_LIBVER_MINOR[ \t]+([0-9]*).*$"
    "\\1" H4H5_VERS_MINOR ${_h4toh5_h_contents})
STRING (REGEX REPLACE ".*#define[ \t]+H4TOH5_LIBVER_RELEASE[ \t]+([0-9]*).*$"
    "\\1" H4H5_VERS_RELEASE ${_h4toh5_h_contents})
#MESSAGE (STATUS "VERSION: ${H4H5_VERSION}")

#-----------------------------------------------------------------------------
# Basic H4H5 stuff here
#-----------------------------------------------------------------------------
SET (H4H5_PACKAGE "H4H5")
SET (H4H5_PACKAGE_NAME "H4TOH5")
SET (H4H5_PACKAGE_VERSION "${H4H5_VERS_MAJOR}.${H4H5_VERS_MINOR}.${H4H5_VERS_RELEASE}")
SET (H4H5_PACKAGE_VERSION_MAJOR "${H4H5_VERS_MAJOR}.${H4H5_VERS_MINOR}")
SET (H4H5_PACKAGE_VERSION_MINOR "${H4H5_VERS_RELEASE}")
SET (H4H5_PACKAGE_STRING "${H4H5_PACKAGE_NAME} ${H4H5_PACKAGE_VERSION}")
SET (H4H5_PACKAGE_TARNAME "h4toh5")
SET (H4H5_PACKAGE_URL "http://www.hdfgroup.org/h4toh5")
SET (H4H5_PACKAGE_BUGREPORT "help@hdfgroup.org")

#-----------------------------------------------------------------------------
# Include some macros for reusable code
#-----------------------------------------------------------------------------
INCLUDE (${H4H5_RESOURCES_DIR}/HDFMacros.cmake)
INCLUDE (${H4H5_RESOURCES_DIR}/HDF45Macros.cmake)
INCLUDE (${H4H5_RESOURCES_DIR}/H4H5Macros.cmake)

#-----------------------------------------------------------------------------
# Setup output Directories
#-----------------------------------------------------------------------------
IF (NOT H4H5_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."
  )
ELSE (NOT H4H5_EXTERNALLY_CONFIGURED)
  # if we are externally configured, but the project uses old cmake scripts
  # this may not be set and utilities like Hdetect will fail
  IF (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
    SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
  ENDIF (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Targets built within this project are exported at Install time for use
# by other projects using FindH4H5.
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXPORTED_TARGETS)
  SET (H4H5_EXPORTED_TARGETS "H4H5-targets")
ENDIF (NOT H4H5_EXPORTED_TARGETS)

#-----------------------------------------------------------------------------
# To include a library in the list exported by the project AT BUILD TIME,
# add it to this variable. This is NOT used by Make Install, but for projects
# which include H4H5 as a sub-project within their build tree
#-----------------------------------------------------------------------------
SET_GLOBAL_VARIABLE (H4H5_LIBRARIES_TO_EXPORT "")
SET_GLOBAL_VARIABLE (H4H5_APPS_TO_EXPORT "")
SET (EXTERNAL_HEADER_LIST "")
SET (EXTERNAL_LIBRARY_LIST "")
SET (EXTERNAL_LIBRARYDLL_LIST "")

#-----------------------------------------------------------------------------
# Run all the CMake configuration tests for our build environment
#-----------------------------------------------------------------------------
INCLUDE (${H4H5_RESOURCES_DIR}/ConfigureChecks.cmake)

#-----------------------------------------------------------------------------
# Option to use legacy naming for windows libs/programs, default is legacy
#-----------------------------------------------------------------------------
IF (WIN32 AND NOT CYGWIN)
  OPTION (HDF_LEGACY_NAMING "Use Legacy Names for Libraries and Programs" ON)
ENDIF (WIN32 AND NOT CYGWIN)

#-----------------------------------------------------------------------------
# Option to Build Shared/Static libs, default is static
#-----------------------------------------------------------------------------
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
SET (LIB_TYPE STATIC)
IF (BUILD_SHARED_LIBS)
  SET (LIB_TYPE SHARED)
  SET (H4H5_BUILT_AS_DYNAMIC_LIB 1)
  ADD_DEFINITIONS (-DH4H5_BUILT_AS_DYNAMIC_LIB)
  ADD_DEFINITIONS (-DH4_BUILT_AS_DYNAMIC_LIB)
  ADD_DEFINITIONS (-DH5_BUILT_AS_DYNAMIC_LIB)
ELSE (BUILD_SHARED_LIBS)
  SET (H4H5_BUILT_AS_STATIC_LIB 1)
  ADD_DEFINITIONS (-DH4H5_BUILT_AS_STATIC_LIB)
  ADD_DEFINITIONS (-DH4_BUILT_AS_STATIC_LIB)
  ADD_DEFINITIONS (-DH5_BUILT_AS_STATIC_LIB)
  IF (NOT WIN32)
    # should this be a user setting : Everyone uses it anyway ?
    ADD_DEFINITIONS (-DPIC)
  ENDIF (NOT WIN32)
ENDIF (BUILD_SHARED_LIBS)

ADD_DEFINITIONS (-DBIG_LONGS -DSWAP)
ADD_DEFINITIONS (-DHAVE_CONFIG_H)

#-----------------------------------------------------------------------------
# Option to use code coverage
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF)
IF (HDF_ENABLE_COVERAGE)
    SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
    SET (LDFLAGS "${LDFLAGS} -fprofile-arcs -ftest-coverage")   
ENDIF (HDF_ENABLE_COVERAGE)

#-----------------------------------------------------------------------------
# Include the main src and config directories
#-----------------------------------------------------------------------------
SET (H4H5_INCLUDE_DIRECTORIES
    ${H4H5_SRC_DIR} 
    ${H4H5_BINARY_DIR}
)
INCLUDE_DIRECTORIES (${H4H5_INCLUDE_DIRECTORIES} )

#-----------------------------------------------------------------------------
# When building utility executables that generate other (source) files :
# we make use of the following variables defined in the root CMakeLists.
# Certain systems may add /Debug or /Release to output paths
# and we need to call the executable from inside the CMake configuration
#-----------------------------------------------------------------------------
SET (EXE_EXT "")
IF (WIN32)
  SET (EXE_EXT ".exe")
  IF (NOT CYGWIN)
    ADD_DEFINITIONS (-DBIND_TO_CURRENT_VCLIBS_VERSION=1)
    ADD_DEFINITIONS (-D_CRT_SECURE_NO_WARNINGS)
    ADD_DEFINITIONS (-D_CONSOLE)
  ENDIF (NOT CYGWIN)
ENDIF (WIN32)

IF (MSVC)
  SET (CMAKE_MFC_FLAG 0)
ENDIF (MSVC)

SET (MAKE_SYSTEM)
IF (CMAKE_BUILD_TOOL MATCHES "make")
  SET (MAKE_SYSTEM 1)
ENDIF (CMAKE_BUILD_TOOL MATCHES "make")

SET (CFG_INIT "/${CMAKE_CFG_INTDIR}")
IF (MAKE_SYSTEM)
  SET (CFG_INIT "")
ENDIF (MAKE_SYSTEM)

#-----------------------------------------------------------------------------
# Add some definitions for Debug Builds
#-----------------------------------------------------------------------------
IF (CMAKE_BUILD_TYPE MATCHES Debug)
  #-- NMake Makefiles will overwhelm the console with warnings if -Wall is used.
  IF (NOT WIN32)
    ADD_DEFINITIONS (-Wall)
  ENDIF (NOT WIN32)
ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)

#-----------------------------------------------------------------------------
# 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} -std=c99 -fomit-frame-pointer -finline-functions -fno-common")
ENDIF (CMAKE_COMPILER_IS_GNUCC)
IF (CMAKE_COMPILER_IS_GNUCXX)
  SET (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS} -fomit-frame-pointer -finline-functions -fno-common")
ENDIF (CMAKE_COMPILER_IS_GNUCXX)

#-----------------------------------------------------------------------------
# Option to use 1.6.x API
#-----------------------------------------------------------------------------
OPTION (USE_HDF5_16_API_DEFAULT "Use the HDF5 1.6.x API by default" ON)
SET (H5_USE_16_API_DEFAULT 0)
IF (USE_HDF5_16_API_DEFAULT)
  SET (H5_USE_16_API_DEFAULT 1)
ENDIF (USE_HDF5_16_API_DEFAULT)

#-----------------------------------------------------------------------------
# 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 (MSVC)
  IF (WIN32 AND NOT CYGWIN)
    ADD_DEFINITIONS (-D_CRT_SECURE_NO_WARNINGS)
  ENDIF (WIN32 AND NOT CYGWIN)
  # Borland uses -w- to suppress warnings.
  IF (BORLAND)
    SET (HDF_WARNINGS_BLOCKED 1)
    SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
  ENDIF (BORLAND)

  # 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 (NOT HDF_WARNINGS_BLOCKED)
ENDIF (HDF_DISABLE_COMPILER_WARNINGS)

#-----------------------------------------------------------------------------
# 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 (CMAKE_COMPILER_IS_GNUCC)
IF (CMAKE_COMPILER_IS_GNUCXX)
  SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
ENDIF (CMAKE_COMPILER_IS_GNUCXX)

#-----------------------------------------------------------------------------
# Option to Enable MPI Parallel
#-----------------------------------------------------------------------------
SET (CMAKE_MODULE_PATH ${H4H5_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
OPTION (H4H5_ENABLE_PARALLEL "Enable parallel build (requires MPI)" OFF)
IF (H4H5_ENABLE_PARALLEL)
  INCLUDE (FindMPI)
  INCLUDE_DIRECTORIES (${MPI_C_INCLUDE_PATH})
  IF (MPI_C_FOUND)
    SET (H4H5_HAVE_PARALLEL 1)
    # MPI checks, only do these if MPI_C_FOUND is true, otherwise they always fail
    # and once set, they are cached as false and not regenerated
    SET (CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}" )
    CHECK_FUNCTION_EXISTS (MPI_File_get_size H4H5_HAVE_MPI_GET_SIZE) 
    # Used by Fortran + MPI
    CHECK_SYMBOL_EXISTS (MPI_Comm_c2f "${MPI_C_INCLUDE_PATH}/mpi.h"  H4H5_HAVE_MPI_MULTI_LANG_Comm)
    CHECK_SYMBOL_EXISTS (MPI_Info_c2f "${MPI_C_INCLUDE_PATH}/mpi.h"  H4H5_HAVE_MPI_MULTI_LANG_Info)
  ENDIF (MPI_C_FOUND)
ENDIF (H4H5_ENABLE_PARALLEL)

# Parallel IO usage requires MPI to be Linked and Included
IF (H4H5_HAVE_PARALLEL)
  SET (LINK_LIBS ${LINK_LIBS} ${MPI_C_LIBRARIES})
  IF (MPI_C_LINK_FLAGS)
    SET (CMAKE_EXE_LINKER_FLAGS ${MPI_C_LINK_FLAGS} ${CMAKE_EXE_LINKER_FLAGS})
  ENDIF (MPI_C_LINK_FLAGS)
ENDIF (H4H5_HAVE_PARALLEL)

INCLUDE (ExternalProject)
OPTION (HDF_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building" "NO")
OPTION (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" 0)
OPTION (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 0)
OPTION (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 0)
OPTION (HDF4_USE_EXTERNAL "Use External Library Building for HDF4" 0)
OPTION (HDF5_USE_EXTERNAL "Use External Library Building for HDF5" 0)
IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  SET (JPEG_USE_EXTERNAL 1)
  SET (ZLIB_USE_EXTERNAL 1)
  SET (SZIP_USE_EXTERNAL 1)
  SET (HDF4_USE_EXTERNAL 1)
  SET (HDF5_USE_EXTERNAL 1)
  IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN")
    SET (JPEG_URL ${JPEG_SVN_URL})
    SET (ZLIB_URL ${ZLIB_SVN_URL})
    SET (SZIP_URL ${SZIP_SVN_URL})
    SET (HDF4_URL ${HDF4_SVN_URL})
    SET (HDF5_URL ${HDF5_SVN_URL})
  ELSEIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
    IF (NOT TGZ_PATH)
      SET (TGZ_PATH ${H4H5_SOURCE_DIR})
    ENDIF (NOT TGZ_PATH)
    SET (JPEG_URL ${TGZ_PATH}/${JPEG_TGZ_NAME})
    SET (ZLIB_URL ${TGZ_PATH}/${ZLIB_TGZ_NAME})
    SET (SZIP_URL ${TGZ_PATH}/${SZIP_TGZ_NAME})
    SET (HDF4_URL ${TGZ_PATH}/${HDF4_TGZ_NAME})
    SET (HDF5_URL ${TGZ_PATH}/${HDF5_TGZ_NAME})
  ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN")
ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")

#-----------------------------------------------------------------------------
# Option for LibJpeg support
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_JPEG_LIB_SUPPORT "Enable jpeg" ON)

#-----------------------------------------------------------------------------
# Option for ZLib support
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_Z_LIB_SUPPORT "Enable Zlib Filters" ON)

#-----------------------------------------------------------------------------
# Option for SzLib support
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF)
IF (HDF4_ENABLE_SZIP_SUPPORT)
  OPTION (HDF4_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF)
ENDIF (HDF4_ENABLE_SZIP_SUPPORT)

#-----------------------------------------------------------------------------
# HDF4 support
#-----------------------------------------------------------------------------
IF (NOT BUILD_SHARED_LIBS)
  SET (HDF4_USE_STATIC_LIBRARIES 1)
ENDIF (NOT BUILD_SHARED_LIBS)
IF (NOT H425_HDF4_HEADER)
  IF (NOT HDF4_USE_EXTERNAL)
    FIND_PACKAGE (HDF4)
  ENDIF (NOT HDF4_USE_EXTERNAL)
  IF (HDF4_FOUND)
    SET (H425_HAVE_HDF_H 1)
    SET (H425_HAVE_HDF4 1)
    SET (H425_HDF4_HEADER "hdf.h")
    SET (HDF4_INCLUDE_DIR_GEN ${HDF4_INCLUDE_DIR})
    MESSAGE (STATUS "HDF4 found")
  ELSE (HDF4_FOUND)
    IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      # May need to build JPEG with PIC on x64 machines with gcc
      # Need to use CMAKE_ANSI_CFLAGS define so that compiler test works
      IF (NOT CMAKE_ANSI_CFLAGS)
        SET (CMAKE_ANSI_CFLAGS " ")
      ENDIF (NOT CMAKE_ANSI_CFLAGS)
      IF (BUILD_JPEG_WITH_PIC)
        SET (CMAKE_ANSI_CFLAGS "${CMAKE_ANSI_CFLAGS} -fPIC")
      ENDIF (BUILD_JPEG_WITH_PIC)
        
      EXTERNAL_HDF4_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
      SET (H425_HAVE_HDF_H 1)
      SET (H425_HAVE_HDF4 1)
      SET (H425_HDF4_HEADER "hdf.h")
      MESSAGE (STATUS "HDF4 is built")
    ELSE (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      MESSAGE (FATAL_ERROR " HDF4 is Required for  H4H5")
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (HDF4_FOUND)
ELSE (NOT H425_HDF4_HEADER)
  # This project is being called from within another and HDF4 is already configured
  SET (H425_HAVE_HDF_H 1)
  SET (H425_HAVE_HDF4 1)
ENDIF (NOT H425_HDF4_HEADER)
IF (NOT HDF4_LIBRARY)
  SET (HDF4_LIBRARY ${HDF4_LIBRARIES})
ENDIF (NOT HDF4_LIBRARY)
IF (NOT TARGET "hdiff")
  ADD_EXECUTABLE (hdiff IMPORTED)
  IF (USE_SHARED_LIBS AND WIN32)
    SET_PROPERTY (TARGET hdiff PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdiffdll")
  ELSE (USE_SHARED_LIBS AND WIN32)
    SET_PROPERTY (TARGET hdiff PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdiff")
  ENDIF (USE_SHARED_LIBS AND WIN32)
  SET (HDF4_DIFF_EXECUTABLE $<TARGET_FILE:hdiff>)
ENDIF (NOT TARGET "hdiff")
SET (LINK_LIBS ${LINK_LIBS} ${HDF4_LIBRARIES})
INCLUDE_DIRECTORIES (${HDF4_INCLUDE_DIRS})

#-----------------------------------------------------------------------------
# HDF5 support
#-----------------------------------------------------------------------------
IF (NOT BUILD_SHARED_LIBS)
  SET (HDF5_USE_STATIC_LIBRARIES 1)
ENDIF (NOT BUILD_SHARED_LIBS)
IF (NOT H425_HDF5_HEADER)
  IF (NOT HDF5_USE_EXTERNAL)
    FIND_PACKAGE (HDF5)
  ENDIF (NOT HDF5_USE_EXTERNAL)
  IF (HDF5_FOUND)
    SET (H425_HAVE_H5PUBCONF_H 1)
    SET (H425_HAVE_HDF5 1)
    SET (H425_HDF5_HEADER "h5pubconf.h")
    SET (HDF5_INCLUDE_DIR_GEN ${HDF5_INCLUDE_DIR})
    MESSAGE (STATUS "HDF5 found")
  ELSE (HDF5_FOUND)
    IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      EXTERNAL_HDF5_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
      SET (H425_HAVE_H5PUBCONF_H 1)
      SET (H425_HAVE_HDF5 1)
      SET (H425_HDF5_HEADER "h5pubconf.h")
      MESSAGE (STATUS "HDF5 is built")
    ELSE (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      MESSAGE (FATAL_ERROR " HDF5 is Required for  H4H5")
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (HDF5_FOUND)
ELSE (NOT H425_HDF5_HEADER)
  # This project is being called from within another and HDF5 is already configured
  SET (H425_HAVE_H5PUBCONF_H 1)
  SET (H425_HAVE_HDF5 1)
ENDIF (NOT H425_HDF5_HEADER)
IF (NOT HDF5_LIBRARY)
  SET (HDF5_LIBRARY ${HDF5_LIBRARIES})
ENDIF (NOT HDF5_LIBRARY)
IF (NOT TARGET "h5diff")
  ADD_EXECUTABLE (h5diff IMPORTED)
  IF (USE_SHARED_LIBS AND WIN32)
    SET_PROPERTY (TARGET h5diff PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5diffdll")
  ELSE (USE_SHARED_LIBS AND WIN32)
    SET_PROPERTY (TARGET h5diff PROPERTY IMPORTED_LOCATION "${HDF5_TOOLS_DIR}/h5diff")
  ENDIF (USE_SHARED_LIBS AND WIN32)
  SET (HDF5_DIFF_EXECUTABLE $<TARGET_FILE:h5diff>)
ENDIF (NOT TARGET "h5diff")
SET (LINK_LIBS ${LINK_LIBS} ${HDF5_LIBRARIES})
INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIRS})

#-----------------------------------------------------------------------------
# Option for external libraries
#-----------------------------------------------------------------------------
OPTION (HDF_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF)
IF (HDF_PACKAGE_EXTLIBS)
  IF (HDF4_FOUND)
    PACKAGE_HDF4_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT})
  ENDIF (HDF4_FOUND)
    
  IF (HDF5_FOUND)
    PACKAGE_HDF5_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT})
  ENDIF (HDF5_FOUND)
ENDIF (HDF_PACKAGE_EXTLIBS)

#-----------------------------------------------------------------------------
# Build utility to copy and strip X lines of file
#-----------------------------------------------------------------------------
IF (HDF_BUILD_TOOLS AND BUILD_TESTING)
  SET (XLATE_UTILITY "xlatefile")
  ADD_EXECUTABLE(${XLATE_UTILITY} ${H4H5_RESOURCES_DIR}/xlatefile.c)
ENDIF (HDF_BUILD_TOOLS AND BUILD_TESTING)

#-----------------------------------------------------------------------------
# Dashboard and Testing Settings
#-----------------------------------------------------------------------------
OPTION (BUILD_TESTING "Build H4H5 Unit Testing" OFF)
IF (BUILD_TESTING)
  SET (DART_TESTING_TIMEOUT 1200
      CACHE INTEGER
      "Timeout in seconds for each test (default 1200=20minutes)"
  )
  ENABLE_TESTING ()
  INCLUDE (CTest)
  IF (NOT H4H5_EXTERNALLY_CONFIGURED)
    ADD_SUBDIRECTORY(${H4H5_SOURCE_DIR}/lib/test ${PROJECT_BINARY_DIR}/lib/test)
  ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)
  INCLUDE (${H4H5_SOURCE_DIR}/CTestConfig.cmake)
  CONFIGURE_FILE (${H4H5_RESOURCES_DIR}/CTestCustom.cmake ${H4H5_BINARY_DIR}/CTestCustom.ctest @ONLY)
ENDIF (BUILD_TESTING)

#-----------------------------------------------------------------------------
# Add the H4H5 Library Target to the build
#-----------------------------------------------------------------------------
ADD_SUBDIRECTORY (${H4H5_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR}/lib)

IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  IF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
    ADD_DEPENDENCIES (${H4H5_SRC_LIB_TARGET} HDF4)
  ENDIF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
  IF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
    ADD_DEPENDENCIES (${H4H5_SRC_LIB_TARGET} HDF5)
  ENDIF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")

#-----------------------------------------------------------------------------
# Option to build H4H5 Utilities
#-----------------------------------------------------------------------------
OPTION (HDF_BUILD_UTILS  "Build H4H5 Utilities" OFF)
IF (HDF_BUILD_UTILS)
  ADD_SUBDIRECTORY (${H4H5_SOURCE_DIR}/utils ${PROJECT_BINARY_DIR}/utils)
ENDIF (HDF_BUILD_UTILS)

#-----------------------------------------------------------------------------
# Add Target(s) to CMake Install for import into other projects
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXTERNALLY_CONFIGURED)
  INSTALL (
      EXPORT ${H4H5_EXPORTED_TARGETS}
      DESTINATION ${H4H5_INSTALL_DATA_DIR}/cmake/H4H5
      FILE H4H5-targets.cmake
      COMPONENT configinstall
  )
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Export all exported targets to the build tree for use by parent project
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXTERNALLY_CONFIGURED)
  EXPORT (
      TARGETS ${H4H5_LIBRARIES_TO_EXPORT} ${H4H5_LIB_DEPENDENCIES}
      FILE H4H5-targets.cmake
  )
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Configure the H4H5-config.cmake file for the build directory
#-----------------------------------------------------------------------------
SET (H4H5_INCLUDES_BUILD_TIME
    ${H4H5_SRC_DIR}
    ${H4H5_BINARY_DIR}
)
SET (H4H5_VERSION_STRING @H4H5_PACKAGE_VERSION@)
SET (H4H5_VERSION_MAJOR  @H4H5_PACKAGE_VERSION_MAJOR@)
SET (H4H5_VERSION_MINOR  @H4H5_PACKAGE_VERSION_MINOR@)

CONFIGURE_FILE (
    ${H4H5_RESOURCES_DIR}/H4H5-config.cmake.build.in 
    ${H4H5_BINARY_DIR}/H4H5-config.cmake @ONLY
)

#-----------------------------------------------------------------------------
# Configure the H4H5-config.cmake file for the install directory
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXTERNALLY_CONFIGURED)
  CONFIGURE_FILE (
      ${H4H5_RESOURCES_DIR}/H4H5-config.cmake.install.in
      ${H4H5_BINARY_DIR}/CMakeFiles/H4H5-config.cmake @ONLY
  )
  INSTALL (
      FILES ${H4H5_BINARY_DIR}/CMakeFiles/H4H5-config.cmake
      DESTINATION ${H4H5_INSTALL_DATA_DIR}/cmake/H4H5
      COMPONENT configinstall
  )
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Configure the H4H5-config-version .cmake file for the install directory
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXTERNALLY_CONFIGURED)
  CONFIGURE_FILE (
      ${H4H5_RESOURCES_DIR}/H4H5-config-version.cmake.in
      ${H4H5_BINARY_DIR}/CMakeFiles/H4H5-config-version.cmake @ONLY
  )
  INSTALL (
      FILES ${H4H5_BINARY_DIR}/CMakeFiles/H4H5-config-version.cmake
      DESTINATION ${H4H5_INSTALL_DATA_DIR}/cmake/H4H5
      COMPONENT configinstall
  )
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Add Document File(s) to CMake Install
#-----------------------------------------------------------------------------
IF (NOT H4H5_EXTERNALLY_CONFIGURED)
  INSTALL (
      FILES
          ${H4H5_SOURCE_DIR}/COPYING
          ${H4H5_SOURCE_DIR}/README.txt
      DESTINATION ${H4H5_INSTALL_DATA_DIR}
      COMPONENT hdfdocuments
  )
  IF (EXISTS "${H4H5_SOURCE_DIR}/doc" AND IS_DIRECTORY "${H4H5_SOURCE_DIR}/doc")
    SET (doc_files
        ${H4H5_SOURCE_DIR}/doc/H4H5ProgrammersNotes.pdf
        ${H4H5_SOURCE_DIR}/doc/h4toh5lib_RM.pdf
        ${H4H5_SOURCE_DIR}/doc/h4toh5lib_UG.pdf
    )
    INSTALL (
        FILES ${doc_files}
        DESTINATION ${H4H5_INSTALL_DATA_DIR}/release_docs
        COMPONENT hdfdocuments
    )
  ENDIF (EXISTS "${H4H5_SOURCE_DIR}/doc" AND IS_DIRECTORY "${H4H5_SOURCE_DIR}/doc")
  IF (EXISTS "${H4H5_SOURCE_DIR}/release_docs" AND IS_DIRECTORY "${H4H5_SOURCE_DIR}/release_docs")
    SET (release_files
        ${H4H5_SOURCE_DIR}/release_docs/CMake.txt
        ${H4H5_SOURCE_DIR}/release_docs/Using_CMake.txt
        ${H4H5_SOURCE_DIR}/release_docs/HISTORY.txt
        ${H4H5_SOURCE_DIR}/release_docs/RELEASE.txt
    )
    IF (WIN32 AND NOT CYGWIN)
      SET (release_files
          ${release_files}
          ${H4H5_SOURCE_DIR}/release_docs/INSTALL_Windows.txt
      )
    ELSE (WIN32 AND NOT CYGWIN)
      SET (release_files
          ${release_files}
          ${H4H5_SOURCE_DIR}/release_docs/INSTALL_Unix.txt
      )
    ENDIF (WIN32 AND NOT CYGWIN)
    INSTALL (
        FILES ${release_files}
        DESTINATION ${H4H5_INSTALL_DATA_DIR}/release_docs
        COMPONENT hdfdocuments
    )
  ENDIF (EXISTS "${H4H5_SOURCE_DIR}/release_docs" AND IS_DIRECTORY "${H4H5_SOURCE_DIR}/release_docs")
ENDIF (NOT H4H5_EXTERNALLY_CONFIGURED)

#-----------------------------------------------------------------------------
# Set the cpack variables
#-----------------------------------------------------------------------------
SET (CPACK_PACKAGE_VENDOR "HDF Group")
SET (CPACK_PACKAGE_DESCRIPTION_SUMMARY "HDF4 to HDF5 Utility Installation")
SET (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt")
SET (CPACK_PACKAGE_NAME "${H4H5_PACKAGE_NAME}")
SET (CPACK_PACKAGE_INSTALL_DIRECTORY "${H4H5_PACKAGE_NAME}")
SET (CPACK_PACKAGE_VERSION "${H4H5_PACKAGE_VERSION}")
SET (CPACK_PACKAGE_VERSION_MAJOR "${H4H5_PACKAGE_VERSION_MAJOR}")
SET (CPACK_PACKAGE_VERSION_MINOR "${H4H5_PACKAGE_VERSION_MINOR}")
SET (CPACK_PACKAGE_VERSION_PATCH "")
SET (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
SET (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt")
SET (CPACK_PACKAGE_RELOCATABLE TRUE)
SET (CPACK_MONOLITHIC_INSTALL ON)

IF (WIN32)
  SET (CPACK_NSIS_CONTACT "help@hdfgroup.org")
  SET (CPACK_NSIS_MODIFY_PATH ON)
  SET (CPACK_NSIS_PACKAGE_NAME "H4H5 ${H4H5_PACKAGE_VERSION}")
ELSE (WIN32)
  SET (CPACK_RPM_COMPONENT_INSTALL ON)
  SET (CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "/sbin/ldconfig")
  SET (CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "/sbin/ldconfig")
  SET (CPACK_RPM_POST_INSTALL_SCRIPT_FILE "/sbin/ldconfig")
  SET (CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "/sbin/ldconfig")
  SET (CPACK_RPM_PACKAGE_GROUP "Development/Tools")
  SET (CPACK_RPM_PACKAGE_LICENSE "BSD-style")
  SET (CPACK_RPM_PACKAGE_URL "http://www.hdfgroup.org/")
  SET (CPACK_STRIP_FILES "${H4H5_LIBRARIES_TO_EXPORT};${H4H5_APPS_TO_EXPORT};${EXTERNAL_LIBRARY_LIST}")
ENDIF (WIN32)

INCLUDE(InstallRequiredSystemLibraries)

  SET (CPACK_INSTALL_CMAKE_PROJECTS "${H4H5_BINARY_DIR};H4H5;ALL;/")
  
  IF (HDF_PACKAGE_EXTLIBS)
    IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      IF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF4_INCLUDE_DIR_GEN};HDF4;libraries;/")
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF4_INCLUDE_DIR_GEN};HDF4;headers;/")
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF4_INCLUDE_DIR_GEN};HDF4;configinstall;/")
        IF (JPEG_USE_EXTERNAL)
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${JPEG_INCLUDE_DIR_GEN};jpeg;libraries;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${JPEG_INCLUDE_DIR_GEN};jpeg;headers;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${JPEG_INCLUDE_DIR_GEN};jpeg;configinstall;/")
        ENDIF (JPEG_USE_EXTERNAL)
        IF (ZLIB_USE_EXTERNAL)
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};zlib;libraries;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};zlib;headers;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};zlib;configinstall;/")
        ENDIF (ZLIB_USE_EXTERNAL)
        IF (SZIP_USE_EXTERNAL)
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};szip;libraries;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};szip;headers;/")
          SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};szip;configinstall;/")
        ENDIF (SZIP_USE_EXTERNAL)
      ENDIF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
      IF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF5_INCLUDE_DIR_GEN};HDF5;libraries;/")
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF5_INCLUDE_DIR_GEN};HDF5;headers;/")
        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${HDF5_INCLUDE_DIR_GEN};HDF5;configinstall;/")
      ENDIF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (HDF_PACKAGE_EXTLIBS)

INCLUDE (CPack)

#-----------------------------------------------------------------------------
# Now list the cpack commands
#-----------------------------------------------------------------------------
CPACK_ADD_COMPONENT (applications 
    DISPLAY_NAME "H4H5 Applications" 
    DEPENDS libraries
    GROUP Applications
)
CPACK_ADD_COMPONENT (libraries 
    DISPLAY_NAME "H4H5 Libraries"
    GROUP Runtime
)
CPACK_ADD_COMPONENT (headers 
    DISPLAY_NAME "H4H5 Headers" 
    DEPENDS libraries
    GROUP Development
)
CPACK_ADD_COMPONENT (hdfdocuments 
    DISPLAY_NAME "H4H5 Documents"
    GROUP Documents
)
CPACK_ADD_COMPONENT (configinstall 
    DISPLAY_NAME "H4H5 CMake files" 
    DEPENDS libraries
    GROUP Development
)

IF (HDF_BUILD_TOOLS)
  CPACK_ADD_COMPONENT (toolsapplications 
      DISPLAY_NAME "H4H5 Tools Applications" 
      DEPENDS toolslibraries
      GROUP Applications
  )
  CPACK_ADD_COMPONENT (toolslibraries 
      DISPLAY_NAME "H4H5 Tools Libraries" 
      DEPENDS libraries
      GROUP Runtime
  )
  CPACK_ADD_COMPONENT (toolsheaders 
      DISPLAY_NAME "H4H5 Tools Headers" 
      DEPENDS toolslibraries
      GROUP Development
  )
ENDIF (HDF_BUILD_TOOLS)
