cmake_minimum_required (VERSION 2.8.10)
project (HLJPSS_EXAMPLES C)

#-----------------------------------------------------------------------------
# Define Sources
#-----------------------------------------------------------------------------
set (examples
#	ex_GMGTO
	ex_bitfield
	ex_lite_copy_region
	ex_lite_read_region
	ex_ref_to_all
	ex_regref_copy_references
	ex_regref_create
	ex_regref_read
)

set (ex_GMGTO_ref
    ex_GMGTO_BE.h5
    ex_GMGTO_LE.h5
)

add_executable (ex_GMGTO ${PROJECT_SOURCE_DIR}/ex_GMGTO.c)
TARGET_NAMING (ex_GMGTO ${LIB_TYPE})
target_link_libraries (ex_GMGTO ${HLJPSS_C_LIB_TARGET} ${LINK_LIBS})

foreach (example ${examples})
  add_executable (${example} ${PROJECT_SOURCE_DIR}/${example}.c)
  TARGET_NAMING (${example} ${LIB_TYPE})
  target_link_libraries (${example} ${HLJPSS_C_LIB_TARGET} ${LINK_LIBS})
endforeach (example ${examples})


# make test dir
file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")

#
# copy test files from source dir to test dir
#
foreach (tst_h5_file ${examples})
  add_custom_command (
      TARGET     ${tst_h5_file}
      POST_BUILD
      COMMAND    ${CMAKE_COMMAND}
      ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${tst_h5_file}.h5 ${PROJECT_BINARY_DIR}/testfiles/${tst_h5_file}.h5
  )
  add_custom_command (
      TARGET     ${tst_h5_file}
      POST_BUILD
      COMMAND    ${CMAKE_COMMAND}
      ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${tst_h5_file}.test ${PROJECT_BINARY_DIR}/testfiles/${tst_h5_file}.test
  )
endforeach (tst_h5_file ${examples})

add_custom_command (
    TARGET     ex_GMGTO
    POST_BUILD
    COMMAND    ${CMAKE_COMMAND}
    ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/ex_GMGTO.test ${PROJECT_BINARY_DIR}/testfiles/ex_GMGTO.test
)
foreach (tst_h5_file ${ex_GMGTO_ref})
  add_custom_command (
      TARGET     ex_GMGTO
      POST_BUILD
      COMMAND    ${CMAKE_COMMAND}
      ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/testfiles/${tst_h5_file} ${PROJECT_BINARY_DIR}/${tst_h5_file}
  )
endforeach (tst_h5_file ${ex_GMGTO_ref})

MACRO (ADD_H5_GMGTO_TEST testname)
    # Don't remove the ex_GMGTO_xx.h5 files since ex_GMGTO reads the .h5
    # files which were generated by ex_gen_GMGTO
  add_test (
      NAME EX_${testname}-clearall
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          ${testname}.out
          ${testname}.out.err
          ${testname}.ddl.out
          ${testname}.ddl.out.err
          testfiles/${testname}.test.ddl.out
          testfiles/${testname}.test.ddl.out.err
          ${testname}.h5
  )

  add_test (
      NAME EX_${testname}
      COMMAND "${CMAKE_COMMAND}"
          -D "TEST_PROGRAM=$<TARGET_FILE:${testname}>"
          -D "TEST_ARGS:STRING="
          -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
          -D "TEST_EXPECT=0"
          -D "TEST_OUTPUT=${testname}.out"
          -D "TEST_REFERENCE=testfiles/${testname}.test"
          -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
  )
  set_tests_properties (EX_${testname} PROPERTIES DEPENDS EX_${testname}-clearall)

  if (HDF5_BUILD_TOOLS)
      # Run h5dump on the reference hdf file and dump the output to a file
    add_test (
        NAME EX_H5DUMP2${testname}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
            -D "TEST_ARGS:STRING=${ARGN};${testname}.h5"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
            -D "TEST_OUTPUT=testfiles/${testname}.test.ddl.out"
            -D "TEST_EXPECT=0"
            -D "TEST_SKIP_COMPARE:BOOL=true"
            -D "TEST_REFERENCE=${testname}.h5"
            -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
    )
    set_tests_properties (EX_H5DUMP2${testname} PROPERTIES DEPENDS EX_${testname}) 

    add_test (
        NAME EX_H5DUMP-${testname}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
            -D "TEST_ARGS:STRING=${ARGN};${testname}.h5"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
            -D "TEST_OUTPUT=${testname}.ddl.out"
            -D "TEST_EXPECT=0"
            -D "TEST_MASK_ERROR:BOOL=true"
            -D "TEST_REFERENCE=testfiles/${testname}.test.ddl.out"
            -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
    )
    set_tests_properties (EX_H5DUMP-${testname} PROPERTIES DEPENDS EX_H5DUMP2${testname})

  endif (HDF5_BUILD_TOOLS)
ENDMACRO (ADD_H5_GMGTO_TEST)  

MACRO (ADD_H5_TEST testname)
  add_test (
      NAME EX_${testname}-clearall
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          ${testname}.out
          ${testname}.out.err
          ${testname}.ddl.out
          ${testname}.ddl.out.err
          testfiles/${testname}.test.ddl.out
          testfiles/${testname}.test.ddl.out.err
          ${testname}.h5
  )

  add_test (
      NAME EX_${testname}
      COMMAND "${CMAKE_COMMAND}"
          -D "TEST_PROGRAM=$<TARGET_FILE:${testname}>"
          -D "TEST_ARGS:STRING="
          -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
          -D "TEST_EXPECT=0"
          -D "TEST_OUTPUT=${testname}.out"
          -D "TEST_REFERENCE=testfiles/${testname}.test"
          -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
  )
  set_tests_properties (EX_${testname} PROPERTIES DEPENDS EX_${testname}-clearall)

  if (HDF5_BUILD_TOOLS)
      # Run h5dump on the reference hdf file and dump the output to a file
    add_test (
        NAME EX_H5DUMP2${testname}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
            -D "TEST_ARGS:STRING=${ARGN};${testname}.h5"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
            -D "TEST_OUTPUT=${testname}.test.ddl.out"
            -D "TEST_EXPECT=0"
            -D "TEST_SKIP_COMPARE:BOOL=true"
            -D "TEST_REFERENCE=${testname}.h5"
            -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
    )
    set_tests_properties (EX_H5DUMP2${testname} PROPERTIES DEPENDS EX_${testname})	

    add_test (
        NAME EX_H5DUMP-${testname}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
            -D "TEST_ARGS:STRING=${ARGN};${testname}.h5"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
            -D "TEST_OUTPUT=${testname}.ddl.out"
            -D "TEST_EXPECT=0"
            -D "TEST_MASK_ERROR:BOOL=true"
            -D "TEST_REFERENCE=testfiles/${testname}.test.ddl.out"
            -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
    )
    set_tests_properties (EX_H5DUMP-${testname} PROPERTIES DEPENDS EX_H5DUMP2${testname})

  endif (HDF5_BUILD_TOOLS)
ENDMACRO (ADD_H5_TEST)	
  
MACRO (ADD_H5_CMP_TEST testname)
  add_test (
      NAME EX_CMP_${testname}-clearall
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          ${testname}.out
          ${testname}.out.err
          ${testname}.h5
  )
  add_test (
      NAME EX_CMP_${testname}
      COMMAND "${CMAKE_COMMAND}"
          -D "TEST_PROGRAM=$<TARGET_FILE:${testname}>"
          -D "TEST_ARGS:STRING=${ARGN}"
          -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
          -D "TEST_EXPECT=0"
          -D "TEST_OUTPUT=${testname}.out"
          -D "TEST_REFERENCE=${testname}.test"
          -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
  )
  set_tests_properties (EX_CMP_${testname} PROPERTIES DEPENDS EX_CMP_${testname}-clearall)
ENDMACRO (ADD_H5_CMP_TEST)

MACRO (ADD_H5_CHECK_TEST testname)
  add_test (
      NAME EX_CHK_${testname}-clearall
      COMMAND    ${CMAKE_COMMAND}
          -E remove 
          ${testname}.out
          ${testname}.out.err
          *.h5
  )

  add_test (
      NAME EX_CHK_${testname}
      COMMAND "${CMAKE_COMMAND}"
          -D "TEST_PROGRAM=$<TARGET_FILE:${testname}>"
          -D "TEST_ARGS:STRING=${ARGN}"
          -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
          -D "TEST_EXPECT=0"
          -D "TEST_OUTPUT=${testname}.out"
          -D "TEST_SKIP_COMPARE:BOOL=true"
          -D "TEST_REFERENCE=${testname}.test"
          -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
  )
  set_tests_properties (EX_CHK_${testname} PROPERTIES DEPENDS EX_CHK_${testname}-clearall)
ENDMACRO (ADD_H5_CHECK_TEST)

ADD_H5_GMGTO_TEST (ex_GMGTO)
foreach (example ${examples})
  ADD_H5_TEST (${example})
endforeach (example ${examples})
