cmake_minimum_required (VERSION 2.8.6)
PROJECT (HDF4_HDF_UTIL C CXX)

INCLUDE_DIRECTORIES (${HDF4_HDFSOURCE_DIR})

IF (WIN32 AND NOT CYGWIN)
  ADD_DEFINITIONS (-DDOS_FS)
ENDIF (WIN32 AND NOT CYGWIN)

#-- Adding utility hdfls
ADD_EXECUTABLE (hdfls ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfls.c)
TARGET_NAMING (hdfls ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdfls ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdf2gif

SET (hdf2gif_SRCS
    ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf2gif.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfgifwr.c
)
  
ADD_EXECUTABLE (hdf2gif ${hdf2gif_SRCS})
TARGET_NAMING (hdf2gif ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdf2gif ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility gif2hdf

SET (gif2hdf_SRCS
    ${HDF4_HDF_UTIL_SOURCE_DIR}/gif2hdf.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/gif2mem.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/gifread.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/decompress.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/writehdf.c
)
  
ADD_EXECUTABLE (gif2hdf ${gif2hdf_SRCS})
TARGET_NAMING (gif2hdf ${LIB_TYPE})
TARGET_LINK_LIBRARIES (gif2hdf ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdf24to8
ADD_EXECUTABLE (hdf24to8 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf24to8.c)
TARGET_NAMING (hdf24to8 ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdf24to8 ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdftor8
ADD_EXECUTABLE (hdftor8 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdftor8.c)
TARGET_NAMING (hdftor8 ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdftor8 ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdfed

SET (hdfed_SRCS
    ${HDF4_HDF_UTIL_SOURCE_DIR}/he_cntrl.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/he_disp.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/he_file.c
    ${HDF4_HDF_UTIL_SOURCE_DIR}/he_main.c
)
  
ADD_EXECUTABLE (hdfed ${hdfed_SRCS})
TARGET_NAMING (hdfed ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdfed ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility ristosds
ADD_EXECUTABLE (ristosds ${HDF4_HDF_UTIL_SOURCE_DIR}/ristosds.c)
TARGET_NAMING (ristosds ${LIB_TYPE})
TARGET_LINK_LIBRARIES (ristosds ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdfpack
ADD_EXECUTABLE (hdfpack ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfpack.c)
TARGET_NAMING (hdfpack ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdfpack ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility paltohdf
ADD_EXECUTABLE (paltohdf ${HDF4_HDF_UTIL_SOURCE_DIR}/paltohdf.c)
TARGET_NAMING (paltohdf ${LIB_TYPE})
TARGET_LINK_LIBRARIES (paltohdf ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdftopal
ADD_EXECUTABLE (hdftopal ${HDF4_HDF_UTIL_SOURCE_DIR}/hdftopal.c)
TARGET_NAMING (hdftopal ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdftopal ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility r8tohdf
ADD_EXECUTABLE (r8tohdf ${HDF4_HDF_UTIL_SOURCE_DIR}/r8tohdf.c)
TARGET_NAMING (r8tohdf ${LIB_TYPE})
TARGET_LINK_LIBRARIES (r8tohdf ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdfcomp
ADD_EXECUTABLE (hdfcomp ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfcomp.c)
TARGET_NAMING (hdfcomp ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdfcomp ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility jpeg2hdf
ADD_EXECUTABLE (jpeg2hdf ${HDF4_HDF_UTIL_SOURCE_DIR}/jpeg2hdf.c)
TARGET_NAMING (jpeg2hdf ${LIB_TYPE})
TARGET_LINK_LIBRARIES (jpeg2hdf ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdf2jpeg
ADD_EXECUTABLE (hdf2jpeg ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf2jpeg.c)
TARGET_NAMING (hdf2jpeg ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdf2jpeg ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdf8to24
ADD_EXECUTABLE (hdf8to24 ${HDF4_HDF_UTIL_SOURCE_DIR}/hdf8to24.c)
TARGET_NAMING (hdf8to24 ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdf8to24 ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility hdfunpac
ADD_EXECUTABLE (hdfunpac ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfunpac.c)
TARGET_NAMING (hdfunpac ${LIB_TYPE})
TARGET_LINK_LIBRARIES (hdfunpac ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility vmake
ADD_EXECUTABLE (vmake ${HDF4_HDF_UTIL_SOURCE_DIR}/vmake.c)
TARGET_NAMING (vmake ${LIB_TYPE})
TARGET_LINK_LIBRARIES (vmake ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

#-- Adding utility vshow
ADD_EXECUTABLE (vshow ${HDF4_HDF_UTIL_SOURCE_DIR}/vshow.c)
TARGET_NAMING (vshow ${LIB_TYPE})
TARGET_LINK_LIBRARIES (vshow ${HDF4_MF_LIB_TARGET} ${HDF4_SRC_LIB_TARGET} ${LINK_LIBS})

##############################################################################
##############################################################################
###           T E S T I N G                                                ###
##############################################################################
##############################################################################

IF (BUILD_TESTING)
  
##############################################################################
# --------------------------------------------------------------------
# Copy all the files from the test directory into the source directory
# --------------------------------------------------------------------
##############################################################################

  #-- Copy all the hdfls data files from the source directory into the test directory
  SET (HDF4_LS_TEST_FILES
      hdfcomp.out1.1
      hdfcomp.out1.2
      hdfed.input1
#      hdfed.out1
      hdfpack.out1.1
      hdfpack.out1.2
      hdftor8.out1
      jpeg2hdf.out1
      ristosds.input1
      ristosds.out1
  )
  
  FOREACH (h4_file ${HDF4_LS_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdfls
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_LS_TEST_FILES})
  
  IF (WIN32 AND NOT CYGWIN)
    ADD_CUSTOM_COMMAND (
        TARGET     hdfls
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfed-w.out1 ${PROJECT_BINARY_DIR}/hdfed.out1
    )
  ELSE (WIN32 AND NOT CYGWIN)
    ADD_CUSTOM_COMMAND (
        TARGET     hdfls
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/hdfed.out1 ${PROJECT_BINARY_DIR}/hdfed.out1
    )
  ENDIF (WIN32 AND NOT CYGWIN)

  #-- Copy all the hdf2gif data files from the source directory into the test directory
  SET (HDF4_HDF2GIF_TEST_FILES
      skull.hdf
  )
  FOREACH (h4_file ${HDF4_HDF2GIF_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdf2gif
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_HDF2GIF_TEST_FILES})

  #-- Copy all the gif2hdf data files from the source directory into the test directory
  SET (HDF4_GIF2HDF_TEST_FILES
      SunWheel.gif
      bttrfly.gif
  )
  FOREACH (h4_file ${HDF4_GIF2HDF_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     gif2hdf
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_GIF2HDF_TEST_FILES})

  #-- Copy all the hdftor8 data files from the source directory into the test directory
  SET (HDF4_HDFTOR8_TEST_FILES
      head.r24
      head.r8
  )
  FOREACH (h4_file ${HDF4_HDFTOR8_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdftor8
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_HDFTOR8_TEST_FILES})

  #-- Copy all the hdfed data files from the source directory into the test directory
  SET (HDF4_HDFED_TEST_FILES
      storm110.hdf
      ntcheck.hdf
  )
  FOREACH (h4_file ${HDF4_HDFED_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdfed
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_HDFED_TEST_FILES})

  #-- Copy all the ristosds data files from the source directory into the test directory
  SET (HDF4_RISTOSDS_TEST_FILES
      storm110.hdf
      storm120.hdf
      storm130.hdf
  )
  FOREACH (h4_file ${HDF4_RISTOSDS_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     ristosds
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_RISTOSDS_TEST_FILES})

  #-- Copy all the hdfpack data files from the source directory into the test directory
  SET (HDF4_HDFPACK_TEST_FILES
      test.hdf
  )
  FOREACH (h4_file ${HDF4_HDFPACK_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdfpack
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_HDFPACK_TEST_FILES})

  #-- Copy all the paltohdf data files from the source directory into the test directory
  SET (HDF4_PALTOHDF_TEST_FILES
      palette.raw
  )
  FOREACH (h4_file ${HDF4_PALTOHDF_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     paltohdf
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_PALTOHDF_TEST_FILES})

  #-- Copy all the r8tohdf data files from the source directory into the test directory
  SET (HDF4_R8TOHDF_TEST_FILES
      storm110.raw
      storm120.raw
      storm130.raw
      storm140.raw
  )
  FOREACH (h4_file ${HDF4_R8TOHDF_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     r8tohdf
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_R8TOHDF_TEST_FILES})

  #-- Copy all the hdfcomp data files from the source directory into the test directory
  SET (HDF4_HDFCOMP_TEST_FILES
      storm110.hdf
      storm120.hdf
      storm130.hdf
  )
  FOREACH (h4_file ${HDF4_HDFCOMP_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     hdfcomp
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_HDFCOMP_TEST_FILES})

  #-- Copy all the jpeg2hdf data files from the source directory into the test directory
  SET (HDF4_JPEG2HDF_TEST_FILES
      jpeg_img.jpg
  )
  FOREACH (h4_file ${HDF4_JPEG2HDF_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h4_file}")
    #MESSAGE (STATUS " Copying ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} to ${PROJECT_BINARY_DIR}/")
    ADD_CUSTOM_COMMAND (
        TARGET     jpeg2hdf
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF4_HDF_UTIL_SOURCE_DIR}/testfiles/${h4_file} ${dest}
    )
  ENDFOREACH (h4_file ${HDF4_JPEG2HDF_TEST_FILES})
  
##############################################################################
##############################################################################
###           T H E   T E S T S  M A C R O S                               ###
##############################################################################
##############################################################################

  MACRO (ADD_LS_TEST_NOL testfile resultfile resultcode)
    IF (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (NAME HDFLS_NOL-${testfile} COMMAND $<TARGET_FILE:hdfls> ${testfile})
    ELSE (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (
          NAME HDFLS_NOL-${testfile}
          COMMAND "${CMAKE_COMMAND}"
              -D "TEST_PROGRAM=$<TARGET_FILE:hdfls>"
              -D "TEST_ARGS:STRING=${testfile}"
              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
              -D "TEST_OUTPUT=${testfile}.tmp"
              -D "TEST_EXPECT=${resultcode}"
              -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n"
              -D "TEST_REFERENCE=${resultfile}"
              -P "${HDF4_RESOURCES_DIR}/runTest.cmake"
      )
    ENDIF (HDF4_ENABLE_USING_MEMCHECKER)
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HDFLS_NOL-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HDFLS_NOL-${testfile} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "HDFLS_NOL-${testfile}")
  ENDMACRO (ADD_LS_TEST_NOL)

  MACRO (ADD_LS_TEST testfile resultfile resultcode)
    IF (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (NAME HDFLS-${testfile} COMMAND $<TARGET_FILE:hdfls> -l ${testfile})
    ELSE (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (
          NAME HDFLS-${testfile}
          COMMAND "${CMAKE_COMMAND}"
              -D "TEST_PROGRAM=$<TARGET_FILE:hdfls>"
              -D "TEST_ARGS:STRING=-l;${testfile}"
              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
              -D "TEST_OUTPUT=${testfile}.tmp"
              -D "TEST_EXPECT=${resultcode}"
              -D "TEST_FILTER:STRING=(File library|String)[^\n]+\n"
              -D "TEST_REFERENCE=${resultfile}"
              -P "${HDF4_RESOURCES_DIR}/runTest.cmake"
      )
    ENDIF (HDF4_ENABLE_USING_MEMCHECKER)
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HDFLS-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HDFLS-${testfile} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "HDFLS-${testfile}")
  ENDMACRO (ADD_LS_TEST)

  MACRO (ADD_H4_TEST_ED testfile resultfile resultcode)
    IF (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (NAME HEDIT-${testfile} COMMAND $<TARGET_FILE:hdfed> -batch)
    ELSE (HDF4_ENABLE_USING_MEMCHECKER)
      ADD_TEST (
          NAME HEDIT-${testfile}
          COMMAND "${CMAKE_COMMAND}"
              -D "TEST_PROGRAM=$<TARGET_FILE:hdfed>"
              -D "TEST_ARGS:STRING=-batch"
              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
              -D "TEST_INPUT=${testfile}"
              -D "TEST_OUTPUT=${testfile}.tmp"
              -D "TEST_EXPECT=${resultcode}"
              -D "TEST_REFERENCE=${resultfile}"
              -P "${HDF4_RESOURCES_DIR}/runTest.cmake"
      )
    ENDIF (HDF4_ENABLE_USING_MEMCHECKER)
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HEDIT-${testfile} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (HEDIT-${testfile} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "HEDIT-${testfile}")
  ENDMACRO (ADD_H4_TEST_ED)

  MACRO (ADD_H4_TEST testname testfile)
    ADD_TEST (NAME ${testname} COMMAND $<TARGET_FILE:${testfile}> ${ARGN})
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "${testname}")
  ENDMACRO (ADD_H4_TEST)

  MACRO (ADD_CMP_TEST testname reffile testfile)
    ADD_TEST (NAME ${testname} COMMAND ${CMAKE_COMMAND} -E compare_files ${reffile} ${testfile})
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "${testname}")
  ENDMACRO (ADD_CMP_TEST)

  MACRO (ADD_H4Q_TEST testname testfile)
    ADD_TEST (NAME ${testname} COMMAND $<TARGET_FILE:${testfile}> ${ARGN} > /dev/null 2>&1)
    IF (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
    ELSE (NOT "${last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (${testname} PROPERTIES LABELS ${PROJECT_NAME})
    ENDIF (NOT "${last_test}" STREQUAL "")
    SET (last_test "${testname}")
  ENDMACRO (ADD_H4Q_TEST)

##############################################################################
##############################################################################
###           T H E   T E S T S                                            ###
##############################################################################
##############################################################################

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME hdfgif-clear-refs
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          skull.gif
          SunWheel.hdf
          bttrfly.hdf
          head8.hdf
          img001-263.328
          hdfed.input1.tmp
          hdfed.input1.tmp.err
          storm.hdf
          ristosds.input1.tmp
          ristosds.input1.tmp.err
  )
  IF (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfgif-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
  ELSE (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfgif-clear-refs PROPERTIES LABELS ${PROJECT_NAME})
  ENDIF (NOT "${last_test}" STREQUAL "")
  SET (last_test "hdfgif-clear-refs")

  ADD_H4_TEST (testhdf2gif hdf2gif skull.hdf skull.gif)
  ADD_H4_TEST (testgif2hdf-sunwheel gif2hdf SunWheel.gif SunWheel.hdf)
  ADD_H4_TEST (testgif2hdf-butterfly gif2hdf bttrfly.gif bttrfly.hdf)

  ADD_H4_TEST (testhdf24to8 hdf24to8 head.r24 head8.hdf)
  ADD_H4_TEST (testhdftor8 hdftor8 head8.hdf)
  ADD_CMP_TEST (hdfr8comp img001-263.328 head.r8)

  ADD_H4_TEST_ED (hdfed.input1 hdfed.out1 0)

  ADD_H4Q_TEST (testristosds ristosds storm110.hdf storm120.hdf storm130.hdf -o storm.hdf)
  ADD_H4_TEST_ED (ristosds.input1 ristosds.out1 0)

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME hdfpack-clear-refs
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          test.pck
          test.blk
          test.hdf.tmp
          test.hdf.tmp.err
          test.pck.tmp
          test.pck.tmp.err
  )
  IF (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfpack-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
  ELSE (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfpack-clear-refs PROPERTIES LABELS ${PROJECT_NAME})
  ENDIF (NOT "${last_test}" STREQUAL "")
  SET (last_test "hdfpack-clear-refs")

  ADD_H4_TEST (testhdfpack hdfpack test.hdf test.pck)
  ADD_H4_TEST (testhdfpack-block hdfpack -b test.hdf test.blk)
  ADD_LS_TEST_NOL (test.hdf hdfpack.out1.1 0)
  ADD_LS_TEST_NOL (test.pck hdfpack.out1.2 0)

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME hdfpalette-clear-refs
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          pal001
          pal005
          palette.hdf
          palette.raw.new
          storm.hdf
          storm.hdf.tmp
          storm.hdf.tmp.err
          img001-057.057
          img002-057.057
          img003-057.057
          img004-057.057
          img005-057.057
          allstorms.hdf
          allstorms.hdf.tmp
          allstorms.hdf.tmp.err
          allcomp.hdf
          allcomp.hdf.tmp
          allcomp.hdf.tmp.err
  )
  IF (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfpalette-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
  ELSE (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfpalette-clear-refs PROPERTIES LABELS ${PROJECT_NAME})
  ENDIF (NOT "${last_test}" STREQUAL "")
  SET (last_test "hdfpalette-clear-refs")

  ADD_H4_TEST (testpaltohdf paltohdf palette.raw palette.hdf)
  ADD_H4_TEST (testhdftopal hdftopal palette.hdf palette.raw.new)
  ADD_CMP_TEST (palettecomp palette.raw palette.raw.new)

  ADD_H4_TEST (testr8tohdf-storm r8tohdf 57 57 storm.hdf storm110.raw storm120.raw storm130.raw storm140.raw)
  ADD_H4_TEST (testr8tohdf-palette r8tohdf 57 57 storm.hdf -p palette.raw -i storm110.raw)
  ADD_H4_TEST (testhdftor8-storm hdftor8 storm.hdf)
  ADD_LS_TEST (storm.hdf hdftor8.out1 0)

  ADD_CMP_TEST (storm110comp img001-057.057  storm110.raw)
  ADD_CMP_TEST (storm120comp img002-057.057  storm120.raw)
  ADD_CMP_TEST (storm130comp img003-057.057  storm130.raw)
  ADD_CMP_TEST (storm140comp img004-057.057  storm140.raw)

  ADD_H4_TEST (testhdfcomp-storms hdfcomp allstorms.hdf storm110.hdf storm120.hdf storm130.hdf)
  ADD_H4_TEST (testhdfcomp hdfcomp allcomp.hdf -c storm110.hdf storm120.hdf storm130.hdf)
  ADD_LS_TEST (allstorms.hdf hdfcomp.out1.1 0)
  ADD_LS_TEST (allcomp.hdf hdfcomp.out1.2 0)

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME hdfjpeg-clear-refs
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          jpeg.hdf
          jpeg.hdf.tmp
          jpeg.hdf.tmp.err
          jpeg2.jpg
  )
  IF (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfjpeg-clear-refs PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME})
  ELSE (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (hdfjpeg-clear-refs PROPERTIES LABELS ${PROJECT_NAME})
  ENDIF (NOT "${last_test}" STREQUAL "")
  SET (last_test "hdfjpeg-clear-refs")

  ADD_H4_TEST (testjpeg2hdf jpeg2hdf jpeg_img.jpg jpeg.hdf)
  ADD_H4_TEST (testhdf2jpeg hdf2jpeg jpeg.hdf jpeg2.jpg)
  ADD_LS_TEST (jpeg.hdf jpeg2hdf.out1 0)
  ADD_CMP_TEST (jpeg2comp jpeg_img.jpg jpeg2.jpg)

#  ADD_H4_TEST (hdf8to24 hdf8to24)

#  ADD_H4_TEST (hdfunpac hdfunpac)

#  ADD_H4_TEST (vmake vmake)

#  ADD_H4_TEST (vshow vshow)

ENDIF (BUILD_TESTING)

##############################################################################
##############################################################################
###           I N S T A L L A T I O N                                      ###
##############################################################################
##############################################################################

#-----------------------------------------------------------------------------
# Add file(s) to CMake Install
#-----------------------------------------------------------------------------

INSTALL_PROGRAM_PDB (gif2hdf ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdf2gif ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdf2jpeg ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdf24to8 ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdf8to24 ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdfcomp ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdfed ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdfls ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdfpack ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdftopal ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdftor8 ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (hdfunpac ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (jpeg2hdf ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (paltohdf ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (r8tohdf ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (ristosds ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (vmake ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
INSTALL_PROGRAM_PDB (vshow ${HDF4_INSTALL_UTILS_BIN_DIR} utilsapplications)
  
INSTALL (
    TARGETS
        gif2hdf
        hdf2gif
        hdf2jpeg
        hdf24to8
        hdf8to24
        hdfcomp
        hdfed
        hdfls
        hdfpack
        hdftopal
        hdftor8
        hdfunpac
        jpeg2hdf
        paltohdf
        r8tohdf
        ristosds
        vmake
        vshow
    RUNTIME DESTINATION
        ${HDF4_INSTALL_UTILS_BIN_DIR}
    COMPONENT
        utilsapplications
)
