cmake_minimum_required (VERSION 2.8.10)
PROJECT (H4H5_LIB_TEST C CXX)

#-----------------------------------------------------------------------------
# Setup include Directories
#-----------------------------------------------------------------------------
INCLUDE_DIRECTORIES (${H4H5_LIB_BINARY_DIR} ${H4H5_SRC_DIR})
LINK_DIRECTORIES (
    ${H4H5_LIB_BINARY_DIR}
    ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
)

SET (H4H5_TESTS
    h4toh5test
    h4h5apitestdefault
    h4h5apitestname
    h4h5apitestadvgroup
    h4h5apitestsds
    h4h5apitestimage
    h4h5apitestvdata
    h4h5apitestbasvgroup
    h4h5apitestimageattr
    h4h5apitestsdsattr
    h4h5apitestlonesds
    h4h5apitestloneimage
    h4h5apitestlonevdata
    h4toh5eostest
)

MACRO (BUILD_H4H5_TEST file)
  ADD_EXECUTABLE (${file} ${H4H5_LIB_TEST_SOURCE_DIR}/${file}.c)
  TARGET_NAMING (${file} ${LIB_TYPE})
  TARGET_C_PROPERTIES (${file} " " " ")
  TARGET_LINK_LIBRARIES (${file} ${H4H5_SRC_LIB_TARGET} ${LINK_LIBS})
ENDMACRO (BUILD_H4H5_TEST file)

FOREACH (test ${H4H5_TESTS})
    BUILD_H4H5_TEST(${test})
ENDFOREACH (test ${H4H5_TESTS})

#-- Copy all the dat files from the test directory into the source directory
SET (H4H5_REFERENCE_TEST_FILES
    image_lib_lonetest
    image_lib_test
    sds_lib_lonetest
    sds_lib_test
    testallvgroup
    vdata_lib_lonetest
    vdata_lib_test
    vg_all_test
    vg_all_testname
    vg_bas_test
)

FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/Expected")
FOREACH (h4h5_file ${H4H5_REFERENCE_TEST_FILES})
   SET (desth5 "${PROJECT_BINARY_DIR}/Expected/${h4h5_file}.h5")
   #MESSAGE(STATUS " Copying ${h4h5_file} to ${dest} and ${desth5}")
   ADD_CUSTOM_COMMAND (
       TARGET     h4toh5test 
       POST_BUILD
       COMMAND    ${CMAKE_COMMAND}
       ARGS       -E copy_if_different ${H4H5_SOURCE_DIR}/lib/testfiles/Expected/${h4h5_file}.h5 ${desth5}
   )
ENDFOREACH (h4h5_file ${H4H5_REFERENCE_TEST_FILES})

IF (H5_USE_HDFEOS2)
  ADD_DEFINITIONS (-DHAVE_LIBHDFEOS)
ENDIF (H5_USE_HDFEOS2)

MACRO (ADD_H4H5_TEST testname testfile)
  ADD_TEST (
      NAME TESTH4TOH5_COPY-${testname}
      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${H4H5_SOURCE_DIR}/lib/testfiles/${testfile}.hdf ${PROJECT_BINARY_DIR}/${testfile}.hdf
  )
  IF (NOT "${last_test}" STREQUAL "")
    SET_TESTS_PROPERTIES (TESTH4TOH5_COPY-${testname} PROPERTIES DEPENDS ${last_test})
  ENDIF (NOT "${last_test}" STREQUAL "")

  ADD_TEST (NAME TESTH4TOH5-${testname} COMMAND $<TARGET_FILE:${testname}> ${testfile}.hdf ${testfile}.h5)
  SET_TESTS_PROPERTIES (TESTH4TOH5-${testname} PROPERTIES DEPENDS TESTH4TOH5_COPY-${testname})

  ADD_TEST (
      NAME TESTH4TOH5-${testname}-DIFF
      COMMAND ${HDF5_DIFF_EXECUTABLE} -v ${PROJECT_BINARY_DIR}/${testfile}.h5 ${PROJECT_BINARY_DIR}/Expected/${testfile}.h5
  )
  SET_TESTS_PROPERTIES (TESTH4TOH5-${testname}-DIFF PROPERTIES DEPENDS TESTH4TOH5-${testname})
  SET (last_test "TESTH4TOH5-${testname}-DIFF")
ENDMACRO (ADD_H4H5_TEST file)

# Remove any output file left over from previous test run
ADD_TEST (
    NAME h4toh5test-clearall-objects
    COMMAND    ${CMAKE_COMMAND}
        -E remove 
        image_lib_lonetest.h5
        image_lib_test.h5
        sds_lib_lonetest.h5
        sds_lib_test.h5
        testallvgroup.h5
        vdata_lib_lonetest.h5
        vdata_lib_test.h5
        vg_all_test.h5
        vg_all_testname.h5
        vg_bas_test.h5
)
IF (NOT "${last_test}" STREQUAL "")
  SET_TESTS_PROPERTIES (h4toh5test-clearall-objects PROPERTIES DEPENDS ${last_test})
ENDIF (NOT "${last_test}" STREQUAL "")
SET (last_test "h4toh5test-clearall-objects")

#ADD_H4H5_TEST (h4toh5test ${h4h5_file})
ADD_H4H5_TEST (h4h5apitestdefault vg_all_test)
ADD_H4H5_TEST (h4h5apitestname vg_all_testname)
ADD_H4H5_TEST (h4h5apitestsds sds_lib_test)
ADD_H4H5_TEST (h4h5apitestimage image_lib_test)
ADD_H4H5_TEST (h4h5apitestvdata vdata_lib_test)
ADD_H4H5_TEST (h4h5apitestimageattr image_lib_test)
ADD_H4H5_TEST (h4h5apitestsdsattr sds_lib_test)
ADD_H4H5_TEST (h4h5apitestbasvgroup vg_bas_test)
ADD_H4H5_TEST (h4h5apitestadvgroup testallvgroup)
ADD_H4H5_TEST (h4h5apitestloneimage image_lib_lonetest)
ADD_H4H5_TEST (h4h5apitestlonesds sds_lib_lonetest)
ADD_H4H5_TEST (h4h5apitestlonevdata vdata_lib_lonetest)
#ADD_H4H5_TEST (h4toh5eostest ${h4h5_file})
