cmake_minimum_required (VERSION 2.8.10)
PROJECT (HDFEOS5_SAMPLES)

#-----------------------------------------------------------------------------
# Define Sources
#-----------------------------------------------------------------------------
SET (samples
    he5_gd_datainfo
    he5_gd_defexternalfld
    he5_gd_definefields
    he5_gd_defunlimfld
    he5_gd_info
    he5_gd_rdexternaldata
    he5_gd_readdata
    he5_gd_writedata
    he5_gd_setup
    he5_gd_subset
    he5_gd_wrexternaldata
    he5_gd_wrunlimfld
    he5_pt_datainfo
    he5_pt_definelevels
    he5_pt_readattrs
    he5_pt_readdata
    he5_pt_setup
    he5_pt_updatelevels
    he5_pt_writeattrs
    he5_pt_writedata
    he5_sw_datainfo
    he5_sw_defexternalfld
    he5_sw_definefields
    he5_sw_defunlimfld
    he5_sw_info
    he5_sw_rdexternaldata
    he5_sw_readdata
    he5_sw_setup
    he5_sw_subset
    he5_sw_wrextendrd
    he5_sw_wrexternaldata
    he5_sw_writedata
    he5_sw_wrunlimfld
    he5_za_datainfo
    he5_za_defexternalfld
    he5_za_definefields
    he5_za_info
    he5_za_rdexternaldata
    he5_za_readdata
    he5_za_setup
    he5_za_wrexternaldata
    he5_za_writedata
)

FOREACH (sample ${samples})
  ADD_EXECUTABLE (${sample} ${PROJECT_SOURCE_DIR}/${sample}.c)
  TARGET_NAMING (${sample} ${LIB_TYPE})
  TARGET_LINK_LIBRARIES (${sample} ${HDFEOS_SRC_LIB_TARGET} ${HDFEOS_GCTP_SRC_LIB_TARGET} ${LINK_LIBS})
ENDFOREACH (sample ${samples})

IF (HDFEOS_BUILD_FORTRAN AND HAVE_F2CFORTRAN_MACRO)
  # make test dir
  FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")

  SET (fort_samples
    he5_gd_definefields
    he5_gd_info
    he5_gd_readdata
    he5_gd_writedata
    he5_gd_setup
    he5_gd_subset
    he5_pt_datainfo
    he5_pt_definelevels
    he5_pt_readattrs
    he5_pt_readdata
    he5_pt_setup
    he5_pt_updatelevels
    he5_pt_writeattrs
    he5_pt_writedata
    he5_sw_defexternalfld
#    he5_sw_definefields
    he5_sw_info
    he5_sw_rdexternaldata
    he5_sw_readdata
    he5_sw_setup
    he5_sw_subset
    he5_sw_wrexternaldata
    he5_sw_writedata
    he5_za_defexternalfld
    he5_za_definefields
    he5_za_info
    he5_za_rdexternaldata
    he5_za_readdata
    he5_za_setup
    he5_za_wrexternaldata
    he5_za_writedata
  )

  FOREACH (sample ${fort_samples})
    IF (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_${sample} ${PROJECT_SOURCE_DIR}/${sample}F_32.f)
    ELSE (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_${sample} ${PROJECT_SOURCE_DIR}/${sample}F_64.f)
    ENDIF (F2CFORTRAN_32PTR)
    TARGET_NAMING (f_${sample} ${LIB_TYPE})
    TARGET_FORTRAN_WIN_PROPERTIES (f_${sample} "")
    SET_TARGET_PROPERTIES (f_${sample} PROPERTIES LINKER_LANGUAGE Fortran)
    TARGET_LINK_LIBRARIES (f_${sample} ${HDFEOS_SRC_LIB_TARGET} ${HDFEOS_GCTP_SRC_LIB_TARGET} ${LINK_LIBS})
  ENDFOREACH (sample ${fort_samples})

  #special test for he5_sw_definefields
  IF (HDF5_ENABLE_SZIP_SUPPORT)
    IF (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_he5_sw_definefields ${PROJECT_SOURCE_DIR}/he5_sw_definefields_szipF_32.f)
    ELSE (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_he5_sw_definefields ${PROJECT_SOURCE_DIR}/he5_sw_definefields_szipF_64.f)
    ENDIF (F2CFORTRAN_32PTR)
  ELSE (HDF5_ENABLE_SZIP_SUPPORT)
    IF (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_he5_sw_definefields ${PROJECT_SOURCE_DIR}/he5_sw_definefieldsF_32.f)
    ELSE (F2CFORTRAN_32PTR)
      ADD_EXECUTABLE (f_he5_sw_definefields ${PROJECT_SOURCE_DIR}/he5_sw_definefieldsF_64.f)
    ENDIF (F2CFORTRAN_32PTR)
  ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
  TARGET_NAMING (f_he5_sw_definefields ${LIB_TYPE})
  TARGET_FORTRAN_WIN_PROPERTIES (f_he5_sw_definefields "")
  SET_TARGET_PROPERTIES (f_he5_sw_definefields PROPERTIES LINKER_LANGUAGE Fortran)
  TARGET_LINK_LIBRARIES (f_he5_sw_definefields ${HDFEOS_SRC_LIB_TARGET} ${HDFEOS_GCTP_SRC_LIB_TARGET} ${LINK_LIBS})
ENDIF (HDFEOS_BUILD_FORTRAN AND HAVE_F2CFORTRAN_MACRO)
  
##############################################################################
##############################################################################
###           T H E   T E S T S                                            ###
##############################################################################
##############################################################################
IF (BUILD_TESTING)
  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME gd_write_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  Grid.h5
  )
  SET (gdwt_last_test "gd_write_test-clearall-objects")

  SET (gd_write_test
    he5_gd_setup
    he5_gd_definefields
    he5_gd_writedata
    he5_gd_readdata
    he5_gd_info
    he5_gd_datainfo
    he5_gd_subset
  )
  FOREACH (sample ${gd_write_test})
    ADD_TEST (NAME gd_write_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    IF (NOT "${gdwt_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (gd_write_test_${sample} PROPERTIES DEPENDS ${gdwt_last_test})
    ENDIF (NOT "${gdwt_last_test}" STREQUAL "")
    SET (gdwt_last_test "gd_write_test_${sample}")
  ENDFOREACH (sample ${gd_write_test})
  
  # make test dir
  FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME gd_unlim_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  Grid.h5
  )
  SET_TESTS_PROPERTIES (gd_unlim_test-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")
  SET (gdut_last_test "gd_unlim_test-clearall-objects")

  SET (gd_unlim_test
    he5_gd_setup
    he5_gd_defunlimfld
    he5_gd_wrunlimfld
  )
  FOREACH (sample ${gd_unlim_test})
    ADD_TEST (NAME gd_unlim_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    SET_TESTS_PROPERTIES (gd_unlim_test_${sample} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")
    IF (NOT "${gdut_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (gd_unlim_test_${sample} PROPERTIES DEPENDS ${gdut_last_test})
    ENDIF (NOT "${gdut_last_test}" STREQUAL "")
    SET (gdut_last_test "gd_unlim_test_${sample}")
  ENDFOREACH (sample ${gd_unlim_test})

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME pt_write_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove Point.h5
  )
  SET (ptwt_last_test "pt_write_test-clearall-objects")

  SET (pt_write_test
    he5_pt_setup
    he5_pt_definelevels
    he5_pt_writedata
    he5_pt_writeattrs
    he5_pt_readdata
    he5_pt_readattrs
    he5_pt_updatelevels
    he5_pt_datainfo
  )
 
  FOREACH (sample ${pt_write_test})
    ADD_TEST (NAME pt_write_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    SET_TESTS_PROPERTIES (pt_write_test_${sample} PROPERTIES ENVIRONMENT "srcdir=${PROJECT_SOURCE_DIR}")
    IF (NOT "${ptwt_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (pt_write_test_${sample} PROPERTIES DEPENDS ${ptwt_last_test})
    ENDIF (NOT "${ptwt_last_test}" STREQUAL "")
    SET (ptwt_last_test "pt_write_test_${sample}")
  ENDFOREACH (sample ${pt_write_test})

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME sw_write_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  Swath.h5
  )
  SET (swwt_last_test "sw_write_test-clearall-objects")

  SET (sw_write_test
    he5_sw_setup
    he5_sw_definefields
    he5_sw_writedata
    he5_sw_readdata
    he5_sw_info
    he5_sw_datainfo
    he5_sw_subset
  )
  FOREACH (sample ${sw_write_test})
    ADD_TEST (NAME sw_write_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    IF (NOT "${swwt_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (sw_write_test_${sample} PROPERTIES DEPENDS ${swwt_last_test})
    ENDIF (NOT "${swwt_last_test}" STREQUAL "")
    SET (swwt_last_test "sw_write_test_${sample}")
  ENDFOREACH (sample ${sw_write_test})
  
  # make test dir
#  FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME sw_unlim_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  Swath.h5
  )
  SET_TESTS_PROPERTIES (sw_unlim_test-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")
  SET (swut_last_test "sw_unlim_test-clearall-objects")

  SET (sw_unlim_test
    he5_sw_setup
    he5_sw_defunlimfld
    he5_sw_wrunlimfld
    he5_sw_subset
  )
  FOREACH (sample ${sw_unlim_test})
    ADD_TEST (NAME sw_unlim_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    SET_TESTS_PROPERTIES (sw_unlim_test_${sample} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/unlim")
    IF (NOT "${swut_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (sw_unlim_test_${sample} PROPERTIES DEPENDS ${swut_last_test})
    ENDIF (NOT "${swut_last_test}" STREQUAL "")
    SET (swut_last_test "sw_unlim_test_${sample}")
  ENDFOREACH (sample ${sw_unlim_test})
  
  # make test dir
  FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/extend")

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME sw_extend_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  Swath.h5
  )
  SET_TESTS_PROPERTIES (sw_extend_test-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/extend")
  SET (swxt_last_test "sw_extend_test-clearall-objects")

  SET (sw_extend_test
    he5_gd_setup
    he5_gd_defunlimfld
    he5_gd_wrunlimfld
  )
  FOREACH (sample ${sw_extend_test})
    ADD_TEST (NAME sw_extend_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    SET_TESTS_PROPERTIES (sw_extend_test_${sample} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/extend")
    IF (NOT "${swxt_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (sw_extend_test_${sample} PROPERTIES DEPENDS ${swxt_last_test})
    ENDIF (NOT "${swxt_last_test}" STREQUAL "")
    SET (swxt_last_test "sw_extend_test_${sample}")
  ENDFOREACH (sample ${sw_extend_test})

  # Remove any output file left over from previous test run
  ADD_TEST (
      NAME za_write_test-clearall-objects
      COMMAND    ${CMAKE_COMMAND} -E remove  ZA.h5
  )
  SET (zawt_last_test "za_write_test-clearall-objects")

  SET (za_write_test
    he5_za_setup
    he5_za_definefields
    he5_za_writedata
    he5_za_readdata
    he5_za_info
    he5_za_datainfo
  )
  FOREACH (sample ${za_write_test})
    ADD_TEST (NAME za_write_test_${sample} COMMAND $<TARGET_FILE:${sample}>)
    IF (NOT "${zawt_last_test}" STREQUAL "")
      SET_TESTS_PROPERTIES (za_write_test_${sample} PROPERTIES DEPENDS ${zawt_last_test})
    ENDIF (NOT "${zawt_last_test}" STREQUAL "")
    SET (zawt_last_test "za_write_test_${sample}")
  ENDFOREACH (sample ${za_write_test})

  IF (HDFEOS_BUILD_FORTRAN AND HAVE_F2CFORTRAN_MACRO)
    # Remove any output file left over from previous test run
    ADD_TEST (
        NAME gd_write_test_fortran-clearall-objects
        COMMAND    ${CMAKE_COMMAND} -E remove Grid.h5
    )
    SET_TESTS_PROPERTIES (gd_write_test_fortran-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")
    SET (gdwtf_last_test "gd_write_test_fortran-clearall-objects")

    SET (gd_write_test_fortran
      he5_gd_setup
      he5_gd_definefields
      he5_gd_writedata
      he5_gd_readdata
      he5_gd_info
      he5_gd_subset
    )
    FOREACH (sample ${gd_write_test_fortran})
      ADD_TEST (NAME gd_write_test_fortran_${sample} COMMAND $<TARGET_FILE:f_${sample}>)
      SET_TESTS_PROPERTIES (gd_write_test_fortran_${sample} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")
      IF (NOT "${gdwtf_last_test}" STREQUAL "")
        SET_TESTS_PROPERTIES (gd_write_test_fortran_${sample} PROPERTIES DEPENDS ${gdwtf_last_test})
      ENDIF (NOT "${gdwtf_last_test}" STREQUAL "")
      SET (gdwtf_last_test "gd_write_test_fortran_${sample}")
    ENDFOREACH (sample ${gd_write_test_fortran})

    # Remove any output file left over from previous test run
    ADD_TEST (
        NAME pt_write_test_fortran-clearall-objects
        COMMAND    ${CMAKE_COMMAND} -E remove Point.h5
    )
    SET_TESTS_PROPERTIES (pt_write_test_fortran-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")
    SET (ptwtf_last_test "pt_write_test_fortran-clearall-objects")

    SET (pt_write_test_fortran
      he5_pt_setup
      he5_pt_definelevels
      he5_pt_writedata
      he5_pt_writeattrs
      he5_pt_readdata
      he5_pt_readattrs
      he5_pt_updatelevels
      he5_pt_datainfo
    )
    FOREACH (sample ${pt_write_test_fortran})
      ADD_TEST (NAME pt_write_test_fortran_${sample} COMMAND $<TARGET_FILE:f_${sample}>)
      IF (NOT "${ptwtf_last_test}" STREQUAL "")
        SET_TESTS_PROPERTIES (pt_write_test_fortran_${sample} PROPERTIES DEPENDS ${ptwtf_last_test})
      ENDIF (NOT "${ptwtf_last_test}" STREQUAL "")
      SET (ptwtf_last_test "pt_write_test_fortran_${sample}")
    ENDFOREACH (sample ${pt_write_test_fortran})

    # Remove any output file left over from previous test run
    ADD_TEST (
        NAME sw_write_test_fortran-clearall-objects
        COMMAND    ${CMAKE_COMMAND} -E remove  Swath.h5
    )
    SET_TESTS_PROPERTIES (sw_write_test_fortran-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")
    SET (swwtf_last_test "sw_write_test_fortran-clearall-objects")

    SET (sw_write_test_fortran
      he5_sw_setup
      he5_sw_definefields
      he5_sw_writedata
      he5_sw_readdata
      he5_sw_info
      he5_sw_subset
    )
    FOREACH (sample ${sw_write_test_fortran})
      ADD_TEST (NAME sw_write_test_fortran_${sample} COMMAND $<TARGET_FILE:f_${sample}>)
      IF (NOT "${swwtf_last_test}" STREQUAL "")
        SET_TESTS_PROPERTIES (sw_write_test_fortran_${sample} PROPERTIES DEPENDS ${swwtf_last_test})
      ENDIF (NOT "${swwtf_last_test}" STREQUAL "")
      SET (swwtf_last_test "sw_write_test_fortran_${sample}")
    ENDFOREACH (sample ${sw_write_test_fortran})

    # Remove any output file left over from previous test run
    ADD_TEST (
        NAME za_write_test_fortran-clearall-objects
        COMMAND    ${CMAKE_COMMAND} -E remove  Za.h5
    )
    SET_TESTS_PROPERTIES (za_write_test_fortran-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/fortran")
    SET (zawtf_last_test "za_write_test_fortran-clearall-objects")

    SET (za_write_test_fortran
      he5_za_setup
      he5_za_definefields
      he5_za_writedata
      he5_za_readdata
      he5_za_info
    )
    FOREACH (sample ${za_write_test_fortran})
      ADD_TEST (NAME za_write_test_fortran_${sample} COMMAND $<TARGET_FILE:f_${sample}>)
      IF (NOT "${zawtf_last_test}" STREQUAL "")
        SET_TESTS_PROPERTIES (za_write_test_fortran_${sample} PROPERTIES DEPENDS ${zawtf_last_test})
      ENDIF (NOT "${zawtf_last_test}" STREQUAL "")
      SET (zawtf_last_test "za_write_test_fortran_${sample}")
    ENDFOREACH (sample ${za_write_test_fortran})

  ENDIF (HDFEOS_BUILD_FORTRAN AND HAVE_F2CFORTRAN_MACRO)

ENDIF (BUILD_TESTING)
