SET(CMAKE_VERBOSE_MAKEFILE ON)
SET(CMAKE_BUILD_TYPE "RelWithDebInfo")
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(TESTS)

# Need some stuff from ../nf_test
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/nf_test ${NC4F_BINARY_DIR}/libsrc
   ${NC4F_BINARY_DIR}/fortran)
# All tests need to link to fortran and C libraries.
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/fortran)
#FIND_LIBRARY(NETCDF_C_LIBRARY NAMES netcdf libnetcdf)
#IF(NOT NETCDF_C_LIBRARY)
#  MESSAGE(FATAL_ERROR "Cannot find netCDF C library, needed for netCDF Fortran tests.")
#ENDIF()
#FIND_PATH(NETCDF_C_INCLUDE_DIR netcdf.h)

# nf03_test is the main test program.
SET(check_PROGRAMS nf03_test)
LIST(APPEND TESTS nf03_test)
SET(nf03_test_SOURCES module_tests.F90 f03lib_f_interfaces.f90 test03_get.F test03_put.F nf03_error.F
  nf03_test.F test03_read.F test03_write.F util03.F f03lib.c)

IF(USE_NETCDF4)
  LIST(APPEND check_PROGRAMS f03tst_vars f03tst_vars2 f03tst_vars3 f03tst_vars4 f03tst_vars5 f03tst_vars6 f03tst_open_mem f03tst_types f03tst_types2 f03tst_types3 f03tst_groups)
  SET(f03tst_types_SOURCES module_tests.F90 f03tst_types.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_types2_SOURCES module_tests.F90 f03tst_types2.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_types3_SOURCES module_tests.F90 f03tst_types3.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars_SOURCES module_tests.F90 f03tst_vars.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars2_SOURCES module_tests.F90 f03tst_vars2.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars3_SOURCES module_tests.F90 f03tst_vars3.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars4_SOURCES module_tests.F90 f03tst_vars4.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars5_SOURCES module_tests.F90 f03tst_vars5.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_vars6_SOURCES module_tests.F90 f03tst_vars6.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_open_mem_SOURCES module_tests.F90 f03tst_open_mem.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  SET(f03tst_groups_SOURCES module_tests.F90 f03tst_groups.F f03lib_f_interfaces.f90 f03lib.c handle_err.F)
  LIST(APPEND TESTS f03tst_vars f03tst_vars2 f03tst_vars3 f03tst_vars4 f03tst_vars5
    f03tst_vars6 f03tst_open_mem f03tst_types f03tst_types2 f03tst_types3 f03tst_groups)
  LIST(APPEND CLEANFILES ftst_vars.nc ftst_vars2.nc ftst_vars3.nc ftst_vars4.nc
    ftst_vars5.nc ftst_vars6.nc ftst_types.nc ftst_types2.nc ftst_types3.nc ftst_groups.nc f03tst_open_mem.nc)

  # This is a netCDF-4 V2 test program.
  IF(BUILD_V2)
    LIST(APPEND check_PROGRAMS f03tst_v2)
    LIST(APPEND TESTS f03tst_v2)
    LIST(APPEND CLEANFILES ftst_v2.nc)
    SET(f03tst_v2_SOURCES f03tst_v2.F)
  ENDIF(BUILD_V2)

  # Test parallel I/O
  IF(TEST_PARALLEL)
    LIST(APPEND check_PROGRAMS f03tst_parallel)
    LIST(APPEND CLEANFILES ftst_parallel.nc)
    SET(f03tst_parallel_SOURCES f03tst_parallel.F)
  ENDIF(TEST_PARALLEL)
ENDIF(USE_NETCDF4)

# This is the fortran v2 test. It depends on the utilities being built
# to generate it's input file.
IF(BUILD_V2)
  LIST(APPEND check_PROGRAMS f03test)
  LIST(APPEND TESTS f03test)
  LIST(APPEND CLEANFILES test.nc)
  SET(f03test_SOURCES module_tests.F90 f03test.F f03lib.c)
ENDIF(BUILD_V2)

LIST(APPEND CLEANFILES tests.mod)

# test03_get.F and test03_put.f need to be distributed, so that the user
# need not have m4.
SET(EXTRA_DIST test03_get.F test03_put.F fills.cdl create_fills.sh run_f77_par_test.sh)

# Did the user build the V2 F77 API? If so, run this test.
IF(BUILD_V2)
  LIST(APPEND check_PROGRAMS tst03_f77_v2)
  LIST(APPEND TESTS tst03_f77_v2)
  LIST(APPEND CLEANFILES tst_f77_v2.nc)
  SET(tst03_f77_v2_SOURCES module_tests.F90 tst03_f77_v2.F)
ENDIF(BUILD_V2)

# Need a copy of ref_fills.nc for ftest
execute_process(COMMAND cp ${CMAKE_SOURCE_DIR}/nf_test/ref_fills.nc ${CMAKE_CURRENT_BINARY_DIR}/fills.nc)

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/fortran ${CMAKE_SOURCE_DIR}/libsrc ${CMAKE_SOURCE_DIR}
  ${CMAKE_CPP_FLAGS} ${NETCDF_C_INCLUDE_DIR})
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/fortran ${CMAKE_SOURCE_DIR}/libsrc)
FOREACH(t ${TESTS})
  ADD_EXECUTABLE(${t} ${${t}_SOURCES})
  TARGET_LINK_LIBRARIES(${t} netcdff)
  ADD_TEST(${t} ${t})
ENDFOREACH()

# FILE(GLOB COPY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.sh ${CMAKE_CURRENT_SOURCE_DIR}/*.cdl)
# FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE)

# FOREACH(F ${CDL_EXAMPLE_TESTS})
# 	add_sh_test(cdl ${F})
# ENDFOREACH()

# SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEANFILES}")
