cmake_minimum_required (VERSION 2.8.6)
PROJECT (HDFJAVA_JNI C)

#-----------------------------------------------------------------------------
# Option to Build Shared/Static libs, default is static
#-----------------------------------------------------------------------------
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
SET (LIB_TYPE STATIC)
SET (HDFJAVA_BUILT_AS_DYNAMIC_LIB 1)
IF (BUILD_SHARED_LIBS)
  SET (LIB_TYPE SHARED)
  SET (H4_BUILT_AS_DYNAMIC_LIB 1)
  SET (H5_BUILT_AS_DYNAMIC_LIB 1)
ELSE (BUILD_SHARED_LIBS)
  SET (H4_BUILT_AS_STATIC_LIB 1)
  SET (H5_BUILT_AS_STATIC_LIB 1)
  IF (NOT WIN32)
    # should this be a user setting : Everyone uses it anyway ?
    ADD_DEFINITIONS (-DPIC)
  ENDIF (NOT WIN32)
ENDIF (BUILD_SHARED_LIBS)

#-----------------------------------------------------------------------------
# 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)
  ENDIF (NOT CYGWIN)
ENDIF (WIN32)

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

#-----------------------------------------------------------------------------
# Add some definitions for Debug Builds
#-----------------------------------------------------------------------------
IF (CMAKE_BUILD_TYPE MATCHES Debug)
  ADD_DEFINITIONS(-DDEBUG)
  #-- NMake Makefiles will overwhelm the console with warnings if -Wall is used.
  IF (NOT WIN32)
    ADD_DEFINITIONS (-Wall)
  ENDIF (NOT WIN32)
ELSE (CMAKE_BUILD_TYPE MATCHES Debug)
  ADD_DEFINITIONS (-UH4_DEBUG_API -DNDEBUG)
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 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)

SET (EXTERNAL_HEADER_LIST "")
SET (EXTERNAL_LIBRARY_LIST "")
SET (EXTERNAL_LIBRARYDLL_LIST "")

#-----------------------------------------------------------------------------
# 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)

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 CACHE BOOL "Use External Library Building for JPEG" FORCE)
  SET (ZLIB_USE_EXTERNAL 1 CACHE BOOL "Use External Library Building for ZLIB" FORCE)
  SET (SZIP_USE_EXTERNAL 1 CACHE BOOL "Use External Library Building for SZIP" FORCE)
  SET (HDF4_USE_EXTERNAL 1 CACHE BOOL "Use External Library Building for HDF4" FORCE)
  SET (HDF5_USE_EXTERNAL 1 CACHE BOOL "Use External Library Building for HDF5" FORCE)
  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 ${HDFJAVA_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")

SET (HDF4_LINK_LIBS ${LINK_LIBS})
SET (HDF5_LINK_LIBS ${LINK_LIBS})

#-----------------------------------------------------------------------------
# Option for LibJpeg support
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_JPEG_LIB_SUPPORT "Enable libjpeg" ON)
IF (HDF_ENABLE_JPEG_LIB_SUPPORT)
  IF (NOT HJAVA_JPEGLIB_HEADER)
    IF (NOT JPEG_USE_EXTERNAL)
      FIND_PACKAGE (JPEG)
    ENDIF (NOT JPEG_USE_EXTERNAL)
    IF (JPEG_FOUND)
      SET (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIR})
      SET (HJAVA_HAVE_JPEGLIB_H 1)
      SET (HJAVA_HAVE_LIBJPEG 1)
      SET (HJAVA_JPEGLIB_HEADER "jpeglib.h")
      SET (JPEG_INCLUDE_DIR_GEN ${JPEG_INCLUDE_DIR})
    ELSE (JPEG_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 (BUILD_JPEG_WITH_PIC)
          SET (JPEG_CMAKE_C_FLAGS "-fPIC")
        ELSE (BUILD_JPEG_WITH_PIC)
          IF (DEFINED CMAKE_ANSI_CFLAGS)
            SET (JPEG_CMAKE_C_FLAGS ${CMAKE_ANSI_CFLAGS})
          ELSE (DEFINED CMAKE_ANSI_CFLAGS)
            SET (JPEG_CMAKE_C_FLAGS " ")
          ENDIF (DEFINED CMAKE_ANSI_CFLAGS)
        ENDIF (BUILD_JPEG_WITH_PIC)
        
        EXTERNAL_JPEG_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${JPEG_CMAKE_C_FLAGS})
        SET (HJAVA_HAVE_JPEGLIB_H 1)
        SET (HJAVA_HAVE_LIBJPEG 1)
        SET (HJAVA_JPEGLIB_HEADER "jpeglib.h")
        MESSAGE (STATUS "JPEGLIB is built")
      ELSE (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
        MESSAGE (FATAL_ERROR " JPEGLib is Required for JPEGLib support in HDFJAVA")
      ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
    ENDIF (JPEG_FOUND)
  ELSE (NOT HJAVA_JPEGLIB_HEADER)
    # This project is being called from within another and JPEGLib is already configured
    SET (HJAVA_HAVE_JPEGLIB_H 1)
  ENDIF (NOT HJAVA_JPEGLIB_HEADER)
  SET (LINK_LIBS ${LINK_LIBS} ${JPEG_LIBRARY})
  SET (HDF4_LINK_LIBS ${HDF4_LINK_LIBS} ${JPEG_LIBRARY})
  INCLUDE_DIRECTORIES (${JPEG_INCLUDE_DIRS})
  SET (JPEG_FOUND 1 PARENT_SCOPE)
  SET (JPEG_INCLUDE_DIR_GEN ${JPEG_INCLUDE_DIR_GEN} PARENT_SCOPE)
  MESSAGE (STATUS "JPEGLIB is ON")
ENDIF (HDF_ENABLE_JPEG_LIB_SUPPORT)

#-----------------------------------------------------------------------------
# Option for ZLib support
#-----------------------------------------------------------------------------
OPTION (HDF_ENABLE_Z_LIB_SUPPORT "Enable Zlib Filters" ON)
IF (HDF_ENABLE_Z_LIB_SUPPORT)
  IF (NOT HJAVA_ZLIB_HEADER)
    IF (NOT ZLIB_USE_EXTERNAL)
      FIND_PACKAGE (ZLIB)
    ENDIF (NOT ZLIB_USE_EXTERNAL)
    IF (ZLIB_FOUND)
      SET (HJAVA_HAVE_FILTER_DEFLATE 1)
      SET (HJAVA_HAVE_ZLIB_H 1)
      SET (HJAVA_HAVE_LIBZ 1)
      SET (HJAVA_ZLIB_HEADER "zlib.h")
      SET (ZLIB_INCLUDE_DIR_GEN ${ZLIB_INCLUDE_DIR})
    ELSE (ZLIB_FOUND)
      IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
        EXTERNAL_ZLIB_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
        SET (HJAVA_HAVE_FILTER_DEFLATE 1)
        SET (HJAVA_HAVE_ZLIB_H 1)
        SET (HJAVA_HAVE_LIBZ 1)
        MESSAGE (STATUS "Filter ZLIB is built")
      ELSE (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
        MESSAGE (FATAL_ERROR " ZLib is Required for ZLib support in HDFJAVA")
      ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
    ENDIF (ZLIB_FOUND)
  ELSE (NOT HJAVA_ZLIB_HEADER)
    # This project is being called from within another and ZLib is already configured
    SET (HJAVA_HAVE_FILTER_DEFLATE 1)
    SET (HJAVA_HAVE_ZLIB_H 1)
    SET (HJAVA_HAVE_LIBZ 1)
  ENDIF (NOT HJAVA_ZLIB_HEADER)
  SET (LINK_LIBS ${LINK_LIBS} ${ZLIB_LIBRARIES})
  SET (HDF4_LINK_LIBS ${HDF4_LINK_LIBS} ${ZLIB_LIBRARIES})
  SET (HDF5_LINK_LIBS ${HDF5_LINK_LIBS} ${ZLIB_LIBRARIES})
  INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
  SET (ZLIB_FOUND 1 PARENT_SCOPE)
  SET (ZLIB_INCLUDE_DIR_GEN ${ZLIB_INCLUDE_DIR_GEN} PARENT_SCOPE)
  MESSAGE (STATUS "Filter ZLIB is ON")
ENDIF (HDF_ENABLE_Z_LIB_SUPPORT)

#-----------------------------------------------------------------------------
# Option for SzLib support
#-----------------------------------------------------------------------------
#SET (CMAKE_MODULE_PATH ${HDFJAVA_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
OPTION (HDF_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF)
IF (HDF_ENABLE_SZIP_SUPPORT)
  OPTION (HDF_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF)
  IF (NOT SZIP_USE_EXTERNAL)
    FIND_PACKAGE (SZIP)
  ENDIF (NOT SZIP_USE_EXTERNAL)
  IF (SZIP_FOUND)
    SET (HJAVA_HAVE_FILTER_SZIP 1)
    SET (HJAVA_HAVE_SZLIB_H 1)
    SET (HJAVA_HAVE_LIBSZ 1)
    SET (SZIP_INCLUDE_DIR_GEN ${SZIP_INCLUDE_DIR})
  ELSE (SZIP_FOUND)
    IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      EXTERNAL_SZIP_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE} ${HDF_ENABLE_SZIP_ENCODING})
      SET (HJAVA_HAVE_FILTER_SZIP 1)
      SET (HJAVA_HAVE_SZLIB_H 1)
      SET (HJAVA_HAVE_LIBSZ 1)
      MESSAGE (STATUS "Filter SZIP is built")
    ELSE (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
      MESSAGE (FATAL_ERROR "SZIP is Required for SZIP support in HDFJAVA")
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (SZIP_FOUND)
  SET (LINK_LIBS ${LINK_LIBS} ${SZIP_LIBRARIES})
  SET (HDF4_LINK_LIBS ${HDF4_LINK_LIBS} ${SZIP_LIBRARIES})
  SET (HDF5_LINK_LIBS ${HDF5_LINK_LIBS} ${SZIP_LIBRARIES})
  INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS})
  SET (SZIP_FOUND 1 PARENT_SCOPE)
  SET (SZIP_INCLUDE_DIR_GEN ${SZIP_INCLUDE_DIR_GEN} PARENT_SCOPE)
  MESSAGE (STATUS "Filter SZIP is ON")
  IF (HDF_ENABLE_SZIP_ENCODING)
    SET (HDF_HAVE_SZIP_ENCODER 1)
  ENDIF (HDF_ENABLE_SZIP_ENCODING)
ENDIF (HDF_ENABLE_SZIP_SUPPORT)

#-----------------------------------------------------------------------------
# HDF4 support
#-----------------------------------------------------------------------------
IF (NOT BUILD_SHARED_LIBS)
  SET (HDF4_USE_STATIC_LIBRARIES 1)
ENDIF (NOT BUILD_SHARED_LIBS)

IF (NOT HJAVA_HDF4_HEADER)
  IF (NOT HDF4_USE_EXTERNAL)
    FIND_PACKAGE (HDF4)
  ENDIF (NOT HDF4_USE_EXTERNAL)
  IF (HDF4_FOUND)
    SET (HJAVA_HAVE_HDF_H 1)
    SET (HJAVA_HAVE_HDF4 1)
    SET (HJAVA_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 (BUILD_JPEG_WITH_PIC)
        SET (JPEG_CMAKE_C_FLAGS "-fPIC")
      ELSE (BUILD_JPEG_WITH_PIC)
        SET (JPEG_CMAKE_C_FLAGS " ")
      ENDIF (BUILD_JPEG_WITH_PIC)
        
      EXTERNAL_HDF4_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE} ${JPEG_CMAKE_C_FLAGS})
      SET (HJAVA_HAVE_HDF_H 1)
      SET (HJAVA_HAVE_HDF4 1)
      SET (HJAVA_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  HDFJAVA")
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (HDF4_FOUND)
ELSE (NOT HJAVA_HDF4_HEADER)
  # This project is being called from within another and HDF4 is already configured
  SET (HJAVA_HAVE_HDF_H 1)
  SET (HJAVA_HAVE_HDF4 1)
ENDIF (NOT HJAVA_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})
SET (HDF4_LINK_LIBS ${HDF4_LINK_LIBS} ${HDF4_LIBRARIES})
INCLUDE_DIRECTORIES (${HDF4_INCLUDE_DIRS})
SET (HDF4_FOUND 1 PARENT_SCOPE)
SET (HDF4_INCLUDE_DIR_GEN ${HDF4_INCLUDE_DIR_GEN} PARENT_SCOPE)

#-----------------------------------------------------------------------------
# HDF5 support
#-----------------------------------------------------------------------------
IF (NOT BUILD_SHARED_LIBS)
  SET (HDF5_USE_STATIC_LIBRARIES 1)
ENDIF (NOT BUILD_SHARED_LIBS)

IF (NOT HJAVA_HDF5_HEADER)
  IF (NOT HDF5_USE_EXTERNAL)
    FIND_PACKAGE (HDF5)
  ENDIF (NOT HDF5_USE_EXTERNAL)
  IF (HDF5_FOUND)
    SET (HJAVA_HAVE_H5PUBCONF_H 1)
    SET (HJAVA_HAVE_HDF5 1)
    SET (HJAVA_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 (HJAVA_HAVE_H5PUBCONF_H 1)
      SET (HJAVA_HAVE_HDF5 1)
      SET (HJAVA_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  HDFJAVA")
    ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  ENDIF (HDF5_FOUND)
ELSE (NOT HJAVA_HDF5_HEADER)
  # This project is being called from within another and HDF5 is already configured
  SET (HJAVA_HAVE_H5PUBCONF_H 1)
  SET (HJAVA_HAVE_HDF5 1)
ENDIF (NOT HJAVA_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})
SET (HDF5_LINK_LIBS ${HDF5_LINK_LIBS} ${HDF5_LIBRARIES})
INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIRS})
SET (HDF5_FOUND 1 PARENT_SCOPE)
SET (HDF5_INCLUDE_DIR_GEN ${HDF5_INCLUDE_DIR_GEN} PARENT_SCOPE)

#-----------------------------------------------------------------------------
# Option for external libraries
#-----------------------------------------------------------------------------
OPTION (HDF_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF)
IF (HDF_PACKAGE_EXTLIBS)
  IF (HDF_ENABLE_JPEG_LIB_SUPPORT AND JPEG_FOUND)
    PACKAGE_JPEG_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT})
  ENDIF (HDF_ENABLE_JPEG_LIB_SUPPORT AND JPEG_FOUND)

  IF (HDF_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
    PACKAGE_ZLIB_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
  ENDIF (HDF_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
    
  IF (HDF_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
    PACKAGE_SZIP_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
  ENDIF (HDF_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
    
  IF (HDF4_FOUND)
    PACKAGE_HDF4_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
  ENDIF (HDF4_FOUND)
    
  IF (HDF5_FOUND)
    PACKAGE_HDF5_LIBRARY (${HDF_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
  ENDIF (HDF5_FOUND)
ENDIF (HDF_PACKAGE_EXTLIBS)

ADD_SUBDIRECTORY(${HDFJAVA_JNI_SOURCE_DIR}/hdflib      hdflib)
ADD_SUBDIRECTORY(${HDFJAVA_JNI_SOURCE_DIR}/hdf5lib     hdf5lib)

IF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
  IF (JPEG_FOUND AND JPEG_USE_EXTERNAL)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF_LIB_TARGET} JPEG)
  ENDIF (JPEG_FOUND AND JPEG_USE_EXTERNAL)
  IF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF_LIB_TARGET} ZLIB)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF5_LIB_TARGET} ZLIB)
  ENDIF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
  IF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF_LIB_TARGET} SZIP)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF5_LIB_TARGET} SZIP)
  ENDIF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
  IF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
    ADD_DEPENDENCIES (HDF4 JPEG)
    ADD_DEPENDENCIES (HDF4 ZLIB)
    ADD_DEPENDENCIES (HDF4 SZIP)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF_LIB_TARGET} HDF4)
  ENDIF (HDF4_FOUND AND HDF4_USE_EXTERNAL)
  IF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
    ADD_DEPENDENCIES (HDF5 ZLIB)
    ADD_DEPENDENCIES (HDF5 SZIP)
    ADD_DEPENDENCIES (${HDFJAVA_JNI_HDF5_LIB_TARGET} HDF5)
  ENDIF (HDF5_FOUND AND HDF5_USE_EXTERNAL)
ENDIF (HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
