cmake_minimum_required(VERSION 3.2.2)
PROJECT (H4H5_UTILS_H4TOH5 C CXX)

INCLUDE_DIRECTORIES (${H4H5_SRC_DIR})

if (WIN32)
  add_definitions (-DDOS_FS)
endif ()

if (H4H5_TEST_HDFEOS2)
  add_definitions (-DHAVE_LIBHDFEOS)
endif ()

#-- Adding utility h4toh5convert
add_executable (h4toh5convert ${H4H5_UTILS_H4TOH5_SOURCE_DIR}/h4toh5main.c)
TARGET_NAMING (h4toh5convert STATIC)
TARGET_C_PROPERTIES (h4toh5convert STATIC " " " ")
target_link_libraries (h4toh5convert ${H4H5_SRC_LIB_TARGET} ${LINK_LIBS})
SET_GLOBAL_VARIABLE (H4H5_APPS_TO_EXPORT "${H4H5_APPS_TO_EXPORT};h4toh5convert")

#add_test (NAME h4toh5convert COMMAND $<TARGET_FILE:h4toh5convert>)

if (BUILD_TESTING)
  #-- Adding utility h4toh5
  add_executable (testh4toh5 ${H4H5_UTILS_H4TOH5_SOURCE_DIR}/h4toh5test.c)
  TARGET_NAMING (testh4toh5 STATIC)
  TARGET_C_PROPERTIES (testh4toh5 STATIC " " " ")
  target_link_libraries (testh4toh5 ${H4H5_SRC_LIB_TARGET} ${LINK_LIBS})

  add_test (NAME testh4toh5 COMMAND $<TARGET_FILE:testh4toh5>)

  #-- Copy all the data files from the test directory into the source directory
  set (H4H5_TEST_FILES
      gr_typ_test_ds
      sds_attr_test_ds
      sds_dim_test_ds
      sds_dim_test2_ds
      sds_puredim_test_ds
      sds_dim_attr_ds
      sds_mix_dim_ds
      sds_typ_test_ds
      sdsnameclash_test_ds
      vg_all_test_ds
      anno_test
      gr_typ_test
      grnameclash_test
      gr_comp_test
      image_attr_test
#      image_maxsize
      ras24il
      ras_24_test
      ras_8_test
      sds_attr_test
      sds_dim_test
      sds_typ_test
      sdsnameclash_test
      sds_comp_test
      vdata_test
      vdata_1f_test
      vdnameclash_test
      vg_hl_test
      vg_loop_test
      vgnameclash_test
      vg_all_test
  )
  foreach (h4h5_file ${H4H5_TEST_FILES})
    set (desth5 "${PROJECT_BINARY_DIR}/Expected/${h4h5_file}.h5")
    #message (STATUS " Copying ${H4H5_UTILS_SRC_DIR}/testfiles/${h4h5_file} to ${dest} and ${desth5}")
    add_custom_command (
        TARGET     h4toh5convert
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/Expected/${h4h5_file}.h5 ${desth5}
    )
  endforeach ()

  if (H4H5_TEST_HDFEOS2)
    #-- Copy all the data files from the test directory into the source directory
    set (H4H5_EOS_GRID_TEST_FILES
        generic_type_grid
#        grid_sharedname
        grid_badname
        grid_geo_xy
        grid_geo_yx
        grid_geo_timexy
        grid_geo_timeyx
        grid_utm_xy
        grid_utm_yx
        grid_utm_timexy
        grid_utm_timeyx
        grid_geo_xyxy
        grid_geo_yxyx
        grid_geo_xyyx
        grid_geo_xyyx
        grid_geo_nil
        grid_utm_xyxy
        grid_utm_yxyx
        grid_utm_xyyx
        grid_utm_xyyx
        grid_utm_nil
#        grid_multgrids
    )
    foreach (h4h5_grid_file ${H4H5_EOS_GRID_TEST_FILES})
      set (desth5 "${PROJECT_BINARY_DIR}/Expected/grid/${h4h5_grid_file}.h5")
      #message (STATUS " Copying ${H4H5_UTILS_SRC_DIR}/testfiles/grid/${h4h5_file} to ${dest} and ${desth5}")
      add_custom_command (
          TARGET     h4toh5convert
          POST_BUILD
          COMMAND    ${CMAKE_COMMAND}
          ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/Expected/grid/${h4h5_grid_file}.h5 ${desth5}
      )
    endforeach ()

    add_custom_command (
        TARGET     h4toh5convert
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/grid/grid_sharedname.hdf ${PROJECT_BINARY_DIR}/grid/grid_sharedname.hdf
    )

    add_custom_command (
        TARGET     h4toh5convert
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/grid/grid_multgrids.hdf ${PROJECT_BINARY_DIR}/grid/grid_multgrids.hdf
    )

    #-- Copy all the data files from the test directory into the source directory
    set (H4H5_EOS_SWATH_TEST_FILES
        generic_type_swath
        swath_sharedname
        swath_badname
        swath_basic
        swath_0101
        swath_1111
        swath_2121
        swath_n11n11
        swath_n11n11_tight
        swath_n21n21
        swath_0202
        swath_1212
        swath_2222
        swath_n12n12
        swath_n22n22
        swath_0n20n2
        swath_1n21n2
        swath_2n22n2
        swath_n1n2n1n2
        swath_n2n2n2n2
        swath_qdd
        swath_dqd
        swath_ddq
        swath_qgg
        swath_gqg
        swath_ggq
        swath_tll
        swath_tll02
#        swath_multswaths
    )
    foreach (h4h5_swath_file ${H4H5_EOS_SWATH_TEST_FILES})
      set (desth5 "${PROJECT_BINARY_DIR}/Expected/swath/${h4h5_swath_file}.h5")
      #message (STATUS " Copying ${H4H5_UTILS_SRC_DIR}/testfiles/swath/${h4h5_file} to ${dest} and ${desth5}")
      add_custom_command (
          TARGET     h4toh5convert
          POST_BUILD
          COMMAND    ${CMAKE_COMMAND}
          ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/Expected/swath/${h4h5_swath_file}.h5 ${desth5}
      )
    endforeach ()

    add_custom_command (
        TARGET     h4toh5convert
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${H4H5_UTILS_SRC_DIR}/testfiles/swath/swath_multswaths.hdf ${PROJECT_BINARY_DIR}/swath/swath_multswaths.hdf
    )
  endif ()

  # Test script for the h4toh5 tests.
  #
  # Using the h4toh5 convert to convert a pre-created hdf file to an hdf5
  # file (output file), then compare it with a pre-created corresponding
  # hdf5 file (expected file). If the same, that particular test passes.
  # If not the same, the output file and expected file are processed by
  # the h5dump tool to see if they produce the same results. If the same,
  # the test passes. If not, show the difference of the two results and
  # report the test failed.
  #

  set (H5SZIP HDF_ENABLE_SZIP_SUPPORT)
  set (H5SZIP_ENCODE HDF_ENABLE_SZIP_ENCODING)
  set (H5ZLIB HDF_ENABLE_Z_LIB_SUPPORT)
  set (H4SZIP HDF_ENABLE_SZIP_SUPPORT)

  # The converter assumes all hdf4 files has the .hdf suffix as in the form
  # of foo.hdf.  It creates the corresponding hdf5 files with the .h5 suffix
  # as in the form of foo.h5.  One exception is that if exactly two file
  # names are given, it treats the first argument as an hdf4 file and creates
  # the corresponding hdf5 file with the name as the second argument, WITOUT
  # any consideration of the suffix.  (For this test script, in order to
  # match the output hdf5 file with the expected hdf5 file, it expects the
  # second file of the two-files tests has the .h5 suffix too.)
  #

  MACRO (ADD_H4H5_TEST testtype testfile)
    if ("${testtype}" STREQUAL "SKIP")
      add_test (
          NAME H4H5convert-${testfile}
          COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.h5"
      )
    else ()
      add_test (
          NAME H4H5convert_CLEAR-${testfile}
          COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${testfile}.h5
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_CLEAR-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      add_test (
          NAME H4H5convert_COPY-${testfile}
          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_UTILS_SOURCE_DIR}/testfiles/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.hdf
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_COPY-${testfile} PROPERTIES DEPENDS H4H5convert_CLEAR-${testfile})
      endif ()
      add_test (
          NAME H4H5convert-${testfile}
          COMMAND $<TARGET_FILE:h4toh5convert> ${ARGN} ${PROJECT_BINARY_DIR}/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.h5
      )
      set_tests_properties (H4H5convert-${testfile} PROPERTIES DEPENDS H4H5convert_COPY-${testfile})
      add_test (
          NAME H4H5convert-DIFF_${testfile}
          COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/${testfile}.h5
      )
      set_tests_properties (H4H5convert-DIFF_${testfile} PROPERTIES DEPENDS H4H5convert-${testfile})
      set (last_test "H4H5convert-DIFF_${testfile}")
    endif ()
  ENDMACRO ()


  MACRO (ADD_H4H5_VTEST testtype testfile)
    if ("${testtype}" STREQUAL "SKIP")
      add_test (
          NAME H4H5convert_V-${testfile}
          COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.h5"
      )
    else ()
      add_test (
          NAME H4H5convert_V_CLEAR-${testfile}
          COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/${testfile}.h5
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_V_CLEAR-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      add_test (
          NAME H4H5convert_V_COPY-${testfile}
          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_UTILS_SOURCE_DIR}/testfiles/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.hdf
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_V_COPY-${testfile} PROPERTIES DEPENDS H4H5convert_V_CLEAR-${testfile})
      endif ()
      add_test (
          NAME H4H5convert_V-${testfile}
          COMMAND $<TARGET_FILE:h4toh5convert> ${ARGN} ${PROJECT_BINARY_DIR}/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.h5
      )
      set_tests_properties (H4H5convert_V-${testfile} PROPERTIES DEPENDS H4H5convert_V_COPY-${testfile})
      add_test (
          NAME H4H5convert_V-DIFF_${testfile}
          COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/${testfile}.h5
      )
      set_tests_properties (H4H5convert_V-DIFF_${testfile} PROPERTIES DEPENDS H4H5convert_V-${testfile})
      set (last_test "H4H5convert_V-DIFF_${testfile}")
    endif ()
  ENDMACRO ()

  MACRO (ADD_H4H5_GRID_TEST testtype testfile)
    if (${testtype} STREQUAL "SKIP")
      add_test (
          NAME H4H5convert_GRID-${testfile}
          COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/grid/${testfile}.hdf ${PROJECT_BINARY_DIR}/grid/${testfile}.h5"
      )
    else ()
      add_test (
          NAME H4H5convert_GRID_COPY-${testfile}
          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_UTILS_SOURCE_DIR}/testfiles/grid/${testfile}.hdf ${PROJECT_BINARY_DIR}/grid/${testfile}.hdf
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_GRID_COPY-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      add_test (
          NAME H4H5convert_GRID-${testfile}
          COMMAND $<TARGET_FILE:h4toh5convert> ${ARGN} ${PROJECT_BINARY_DIR}/grid/${testfile}.hdf ${PROJECT_BINARY_DIR}/grid/${testfile}.h5
      )
      set_tests_properties (H4H5convert_GRID-${testfile} PROPERTIES DEPENDS H4H5convert_GRID_COPY-${testfile})
      if (${testtype} STREQUAL "FAIL")
        set_property (TEST H4H5convert_GRID-${testfile} PROPERTY WILL_FAIL 1)
      else ()
        add_test (
            NAME H4H5convert_GRID-DIFF_${testfile}
            COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/grid/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/grid/${testfile}.h5
        )
      endif ()
      set_tests_properties (H4H5convert_GRID-DIFF_${testfile} PROPERTIES DEPENDS H4H5convert_GRID-${testfile})
      set (last_test "H4H5convert_GRID-DIFF_${testfile}")
    endif ()
  ENDMACRO ()

  MACRO (ADD_H4H5_GRID_TEST2 testtype testfile)
    if (${testtype} STREQUAL "SKIP")
      add_test (
          NAME H4H5convert_GRID-${testfile}_nonstrict
          COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/grid/${testfile}.hdf ${PROJECT_BINARY_DIR}/grid/${testfile}.h5"
      )
    else ()
      add_test (
          NAME H4H5convert_COPY-${testfile}
          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_UTILS_SOURCE_DIR}/testfiles/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.hdf
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_COPY-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      add_test (
          NAME H4H5convert_GRID-${testfile}_nonstrict
          COMMAND $<TARGET_FILE:h4toh5convert> ${ARGN} ${PROJECT_BINARY_DIR}/grid/${testfile}.hdf ${PROJECT_BINARY_DIR}/grid/${testfile}.h5
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_GRID-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      if (${testtype} STREQUAL "FAIL")
        set_property (TEST H4H5convert_GRID-${testfile}_nonstrict PROPERTY WILL_FAIL 1)
      else ()
        add_test (
            NAME H4H5convert_GRID-DIFF_${testfile}_nonstrict
            COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/grid/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/grid/${testfile}.h5
        )
      endif ()
      set_tests_properties (H4H5convert_GRID-DIFF_${testfile} PROPERTIES DEPENDS H4H5convert_GRID-${testfile})
      set (last_test "H4H5convert_GRID-DIFF_${testfile}")
    endif ()
  ENDMACRO ()

  MACRO (ADD_H4H5_SWATH_TEST testtype testfile)
    if (${testtype} STREQUAL "SKIP")
      add_test (
          NAME H4H5convert_SWATH-${testfile}
          COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/swath/${testfile}.df ${PROJECT_BINARY_DIR}/swath/${testfile}.h5"
      )
    else ()
      add_test (
          NAME H4H5convert_SWATH_COPY-${testfile}
          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_UTILS_SOURCE_DIR}/testfiles/swath/${testfile}.hdf ${PROJECT_BINARY_DIR}/swath/${testfile}.hdf
      )
      if (NOT "${last_test}" STREQUAL "")
        set_tests_properties (H4H5convert_SWATH_COPY-${testfile} PROPERTIES DEPENDS ${last_test})
      endif ()
      add_test (
          NAME H4H5convert_SWATH-${testfile}
          COMMAND $<TARGET_FILE:h4toh5convert> ${ARGN} ${PROJECT_BINARY_DIR}/swath/${testfile}.hdf ${PROJECT_BINARY_DIR}/swath/${testfile}.h5
      )
      set_tests_properties (H4H5convert_SWATH-${testfile} PROPERTIES DEPENDS H4H5convert_SWATH_COPY-${testfile})
      add_test (
          NAME H4H5convert_SWATH-DIFF_${testfile}
          COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/swath/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/swath/${testfile}.h5
      )
      set_tests_properties (H4H5convert_SWATH-DIFF_${testfile} PROPERTIES DEPENDS H4H5convert_SWATH-${testfile})
      set (last_test "H4H5convert_SWATH-DIFF_${testfile}")
    endif ()
  ENDMACRO ()

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

  # Remove any output file left over from previous test run
  add_test (
      NAME H4H5convert-clearall-objects
      COMMAND    ${CMAKE_COMMAND}
          -E remove
          anno_test.h5
          gr_typ_test.h5
          grnameclash_test.h5
          gr_comp_test.h5
          image_attr_test.h5
#          image_maxsize.h5
          ras24il.h5
          ras_24_test.h5
          ras_8_test.h5
          sds_attr_test.h5
          sds_dim_test.h5
          sds_typ_test.h5
          sdsnameclash_test.h5
          sds_comp_test.h5
          vdata_test.h5
          vdnameclash_test.h5
          vg_hl_test.h5
          vg_loop_test.h5
          vgnameclash_test.h5
          vg_all_test.h5
  )
  if (NOT "${last_test}" STREQUAL "")
    set_tests_properties (H4H5convert-clearall-objects PROPERTIES DEPENDS ${last_test})
  endif ()
  set (last_test "H4H5convert-clearall-objects")

#$RM $OUTDIR/*.hdf $OUTDIR/*.tmp

#
# The HDF5 filenames are created based upon the HDF4 filenames
# without the extension.
#

# test for converting H5 groups to H4 Vgroups.
#CONVERT vg.hdf


#
# The test for conversion are the same as above with the only difference
# being that the HDF5 filenames are given explicitly.
#

#$RM $OUTDIR/*.tmp

  ADD_H4H5_TEST ("TEST" gr_typ_test_ds)
  ADD_H4H5_TEST ("TEST" sds_attr_test_ds)
  ADD_H4H5_TEST ("TEST" sds_dim_test_ds)
  ADD_H4H5_TEST ("TEST" sds_dim_test2_ds)
  ADD_H4H5_TEST ("TEST" sds_puredim_test_ds)
  ADD_H4H5_TEST ("TEST" sds_dim_attr_ds)
  ADD_H4H5_TEST ("TEST" sds_mix_dim_ds)
  ADD_H4H5_TEST ("TEST" sds_typ_test_ds)
  ADD_H4H5_TEST ("TEST" sdsnameclash_test_ds)
  ADD_H4H5_TEST ("TEST" vg_all_test_ds)

# Test the old way that follows the specification rather than HDF5 dim. scales
  ADD_H4H5_TEST ("TEST" anno_test -ospe)
  ADD_H4H5_TEST ("TEST" gr_typ_test -ospe)
  ADD_H4H5_TEST ("TEST" grnameclash_test -ospe)

  set (TESTTYPE "TEST")
  if (NOT H5SZIP OR NOT H5SZIP_ENCODE OR NOT H5ZLIB OR NOT H4SZIP)
    set (TESTTYPE "SKIP")
  endif (NOT H5SZIP OR NOT H5SZIP_ENCODE OR NOT H5ZLIB OR NOT H4SZIP)
  ADD_H4H5_TEST (${TESTTYPE} gr_comp_test -ospe)

  ADD_H4H5_TEST ("TEST" image_attr_test -ospe)
  #ADD_H4H5_TEST ("TEST" image_maxsize)
  ADD_H4H5_TEST ("TEST" ras24il -ospe)
  ADD_H4H5_TEST ("TEST" ras_24_test -ospe)
  ADD_H4H5_TEST ("TEST" ras_8_test -ospe)
  ADD_H4H5_TEST ("TEST" sds_attr_test -ospe)
  ADD_H4H5_TEST ("TEST" sds_dim_test -ospe)
  ADD_H4H5_TEST ("TEST" sds_typ_test -ospe)
  ADD_H4H5_TEST ("TEST" sdsnameclash_test -ospe)

  set (TESTTYPE "TEST")
  if (NOT H5SZIP OR NOT H5SZIP_ENCODE OR NOT H5ZLIB OR NOT H4SZIP)
    set (TESTTYPE "SKIP")
  endif ()
  ADD_H4H5_TEST (${TESTTYPE} sds_comp_test -ospe)

  ADD_H4H5_TEST ("TEST" vdata_test -ospe)
  ADD_H4H5_TEST ("TEST" vdnameclash_test -ospe)
  ADD_H4H5_TEST ("TEST" vg_hl_test -ospe)
  ADD_H4H5_TEST ("TEST" vg_loop_test -ospe)
  ADD_H4H5_TEST ("TEST" vgnameclash_test -ospe)
  ADD_H4H5_TEST ("TEST" vg_all_test -ospe)

#One field vdata conversion. Should be like default option of conversion, except one field vdata to HDF5 atomic dataset
  ADD_H4H5_VTEST ("TEST" vg_all_test_ds -sv)
  ADD_H4H5_VTEST ("TEST" vdata_1f_test -sv)

#
#

  # test HDF-EOS2 conversion
  if (H4H5_TEST_HDFEOS2)

    # Remove any output file left over from previous test run
    add_test (
        NAME H4H5convert_GRID-clearall-objects
        COMMAND    ${CMAKE_COMMAND}
            -E remove
            generic_type_grid.h5
#            grid_sharedname.h5
            grid_badname.h5
            grid_geo_xy.h5
            grid_geo_yx.h5
            grid_geo_timexy.h5
            grid_geo_timeyx.h5
            grid_utm_xy.h5
            grid_utm_yx.h5
            grid_utm_timexy.h5
            grid_utm_timeyx.h5
            grid_geo_xyxy.h5
            grid_geo_yxyx.h5
            grid_geo_xyyx.h5
            grid_geo_xyyx.h5
            grid_geo_nil.h5
            grid_utm_xyxy.h5
            grid_utm_yxyx.h5
            grid_utm_xyyx.h5
            grid_utm_xyyx.h5
            grid_utm_nil.h5
#            grid_multgrids.h5
    )
    if (NOT "${last_test}" STREQUAL "")
      set_tests_properties (H4H5convert_GRID-clearall-objects PROPERTIES DEPENDS ${last_test})
    endif ()
    set (last_test "H4H5convert_GRID-clearall-objects")

    # Remove any output file left over from previous test run
    add_test (
        NAME H4H5convert_SWATH-clearall-objects
        COMMAND    ${CMAKE_COMMAND}
            -E remove
            generic_type_swath.h5
            swath_sharedname.h5
            swath_badname.h5
            swath_basic.h5
            swath_0101.h5
            swath_1111.h5
            swath_2121.h5
            swath_n11n11.h5
            swath_n11n11_tight.h5
            swath_n21n21.h5
            swath_0202.h5
            swath_1212.h5
            swath_2222.h5
            swath_n12n12.h5
            swath_n22n22.h5
            swath_0n20n2.h5
            swath_1n21n2.h5
            swath_2n22n2.h5
            swath_n1n2n1n2.h5
            swath_n2n2n2n2.h5
            swath_qdd.h5
            swath_dqd.h5
            swath_ddq.h5
            swath_qgg.h5
            swath_gqg.h5
            swath_ggq.h5
            swath_tll.h5
            swath_tll02.h5
#            swath_multswaths.h5
    )
    if (NOT "${last_test}" STREQUAL "")
      set_tests_properties (H4H5convert_SWATH-clearall-objects PROPERTIES DEPENDS ${last_test})
    endif ()
    set (last_test "H4H5convert_SWATH-clearall-objects")

    ADD_H4H5_GRID_TEST ("TEST" generic_type_grid -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("FAIL" grid_sharedname -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" generic_type_swath -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_sharedname -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_badname -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_badname -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_xy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_yx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_timexy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_timeyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_xy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_yx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_timexy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_timeyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_xyxy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_geo_yxyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("FAIL" grid_geo_xyyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST2 ("TEST" grid_geo_xyyx -eos -nc4)
    ADD_H4H5_GRID_TEST ("FAIL" grid_geo_nil -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_xyxy -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("TEST" grid_utm_yxyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("FAIL" grid_utm_xyyx -eos -nc4strict)
    ADD_H4H5_GRID_TEST2 ("TEST" grid_utm_xyyx -eos -nc4)
    ADD_H4H5_GRID_TEST ("FAIL" grid_utm_nil -eos -nc4strict)
    ADD_H4H5_GRID_TEST ("SKIP" grid_multgrids)
    ADD_H4H5_SWATH_TEST ("TEST" swath_basic -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_0101 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_1111 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_2121 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n11n11 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n11n11_tight -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n21n21 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_0202 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_1212 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_2222 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n12n12 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n22n22 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_0n20n2 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_1n21n2 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_2n22n2 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n1n2n1n2 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_n2n2n2n2 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_qdd -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_dqd -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_ddq -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_qgg -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_gqg -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_ggq -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_tll -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("TEST" swath_tll02 -eos -nc4strict)
    ADD_H4H5_SWATH_TEST ("SKIP" swath_multswaths)
  endif ()

endif ()

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

#-----------------------------------------------------------------------------
# Rules for Installation of tools using make Install target
#-----------------------------------------------------------------------------

INSTALL_PROGRAM_PDB (h4toh5convert ${H4H5_INSTALL_BIN_DIR} toolsapplications)

install (
    TARGETS
        h4toh5convert
    EXPORT
        ${H4H5_EXPORTED_TARGETS}
    RUNTIME DESTINATION ${H4H5_INSTALL_BIN_DIR} COMPONENT toolsapplications
)
