#########
# Tests #
#########

# Link all the executables to cgns and hdf5
link_directories(.)
link_libraries(cgns_static)

if (CGNS_ENABLE_HDF5 AND HDF5_LIBRARY)
  link_libraries(${HDF5_LIBRARY})
  if(HDF5_NEED_ZLIB AND ZLIB_LIBRARY)
    link_libraries(${ZLIB_LIBRARY})
  endif(HDF5_NEED_ZLIB AND ZLIB_LIBRARY)
  if(HDF5_NEED_SZIP AND SZIP_LIBRARY)
    link_libraries(${SZIP_LIBRARY})
  endif(HDF5_NEED_SZIP AND SZIP_LIBRARY)
  if(HDF5_NEED_MPI AND MPI_LIBS)
    link_libraries(${MPI_LIBS})
  endif(HDF5_NEED_MPI AND MPI_LIBS)
endif (CGNS_ENABLE_HDF5 AND HDF5_LIBRARY)

if (NOT WIN32)
  link_libraries(m)
endif (NOT WIN32)

# Set the files needed by each test
set(cgioc_FILES cgioc.c)
set(dbtest_FILES dbtest.c utils.c)
set(elemtest_FILES elemtest.c)
set(open_cgns_FILES open_cgns.c utils.c)
set(test_exts_FILES test_exts.c)
set(test_goto_FILES test_goto.c)
set(test_partial_FILES test_partial.c)
set(test_ver31_FILES test_ver31.c)
set(test_multifam_FILES test_multifam.c)
set(write_array_FILES write_array.c utils.c)
set(write_bcdata_FILES write_bcdata.c utils.c)
set(write_links_FILES write_links.c utils.c)
set(write_rind_FILES write_rind.c)
set(write_test_FILES write_test.c)
set(write_zones_FILES write_zones.c utils.c)
#set(cgiof_FILES cgiof.F)
#set(cgwrite_FILES cgwrite.F)
#set(cgread_FILES cgread.F)
#set(cgzconn_FILES cgzconn.F)
#set(cgsubreg_FILES cgsubreg.F)
set(cgiof_f03_FILES cgiof_f03.F)
set(cgwrite_f03_FILES cgwrite_f03.F)
set(cgread_f03_FILES cgread_f03.F)
set(cgzconn_f03_FILES cgzconn_f03.F)
set(cgsubreg_f03_FILES cgsubreg_f03.F)

# Build each test
add_executable( cgioc         ${cgioc_FILES}         )
add_executable( dbtest        ${dbtest_FILES}        )
add_executable( elemtest      ${elemtest_FILES}      )
add_executable( open_cgns     ${open_cgns_FILES}     )
add_executable( test_exts     ${test_exts_FILES}     )
add_executable( test_goto     ${test_goto_FILES}     )
add_executable( test_partial  ${test_partial_FILES}  )
add_executable( test_ver31    ${test_ver31_FILES}    )
add_executable( test_multifam ${test_multifam_FILES} )
add_executable( write_array   ${write_array_FILES}   )
add_executable( write_bcdata  ${write_bcdata_FILES}  )
add_executable( write_links   ${write_links_FILES}   )
add_executable( write_rind    ${write_rind_FILES}    )
add_executable( write_test    ${write_test_FILES}    )
add_executable( write_zones   ${write_zones_FILES}   )

# Conditionally build the fortran tests
if (CGNS_ENABLE_FORTRAN)
	#add_executable( f2c_test         ${f2c_test_FILES} )
	add_executable( cgiof_f03       ${cgiof_f03_FILES}  )
	add_executable( cgwrite_f03      ${cgwrite_f03_FILES}  )
	add_executable( cgread_f03       ${cgread_f03_FILES}   )
	add_executable( cgzconn_f03      ${cgzconn_f03_FILES}  )
	add_executable( cgsubreg_f03     ${cgsubreg_f03_FILES} )
#	if (NOT CGNS_ENABLE_64BIT)
# Don't build the F77 source because they will fail if ENABLE_64BIT is used
#	  add_executable( cgiof       ${cgiof_FILES}  )
#	  add_executable( cgwrite      ${cgwrite_FILES}  )
#	  add_executable( cgread       ${cgread_FILES}   )
#	  add_executable( cgzconn      ${cgzconn_FILES}  )
#	  add_executable( cgsubreg     ${cgsubreg_FILES}  )
#	endif (NOT CGNS_ENABLE_64BIT)
endif (CGNS_ENABLE_FORTRAN)

# Add the tests so that ctest can find them
if (CGNS_ENABLE_TESTS)
  add_test( cgioc         cgioc                   )
  add_test( elemtest      elemtest                )
  add_test( test_exts     test_exts               )
  add_test( test_goto     test_goto               )
  add_test( test_partial  test_partial            )
  add_test( test_ver31    test_ver31              )
  add_test( test_multifam test_multifam           )
  add_test( write_array   write_array             )
  add_test( write_bcdata  write_bcdata            )
  add_test( write_links   write_links             )
  add_test( write_rind    write_rind              )
  add_test( write_test    write_test              )
  add_test( write_zones   write_zones             )

  # Conditionally add the fortran tests
  if (CGNS_ENABLE_FORTRAN)
	#add_test( f2c_test f2c_test ) # This still needs a regex test
	add_test( cgiof_f03 cgiof_f03)
	add_test( cgwrite_f03  cgwrite_f03  )
	add_test( cgread_f03   cgread_f03   )
	add_test( cgzconn_f03  cgzconn_f03  )
	add_test( cgsubreg_f03 cgsubreg_f03 )
#	if (NOT CGNS_ENABLE_64BIT)
#	  add_test( cgiof cgiof)
#	  add_test( cgwrite   cgwrite  )
#	  add_test( cgread    cgread   )
#	  add_test( cgzconn   cgzconn  )
#	  add_test( cgsubreg  cgsubreg )
#	endif (NOT CGNS_ENABLE_64BIT)
  endif (CGNS_ENABLE_FORTRAN)
endif (CGNS_ENABLE_TESTS)
