# Make sure the compiler can find include files from our libraries. 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcmisc) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpccurveio) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcmodel) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcsvg) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcimgio) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcimgp) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcmodext) 
include_directories (${CMAKE_SOURCE_DIR}/v1/libtpcidi) 

# Make sure the linker can find the libraries once they are built. 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcmisc) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpccurveio) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcmodel) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcsvg) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcimgio) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcimgp) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcmodext) 
link_directories (${CMAKE_BINARY_DIR}/v1/libtpcidi) 

# Add executable that is built from the source file(s) 
# The extensions are automatically found. 
add_executable (absscal absscal.c) 
add_executable (avgbolus avgbolus.c) 
add_executable (avgfract avgfract.c) 
add_executable (b2plasma pbconv.c b2plasma.c) 
add_executable (p2blood pbconv.c p2blood.c) 
add_executable (p2bfuncs pbconv.c p2bfuncs.c) 
add_executable (disp4dft disp4dft.c) 
add_executable (eabaort eabaort.c) 
add_executable (extrapol extrapol.c) 
add_executable (fit_bpr fit_bpr.c) 
add_executable (fit_feng fit_feng.c) 
add_executable (fit_fexp fit_fexp.c) 
add_executable (fit_ppf fit_ppf.c) 
add_executable (fit_sinf fit_sinf.c)
add_executable (fitdelay fitdelay.c) 
add_executable (fit_o2bl fit_o2bl.c) 
add_executable (sim_o2bl sim_o2bl.c) 
add_executable (o2metab o2metab.c) 
add_executable (imgaafind imgaafind.c) 
add_executable (inpstart inpstart.c) 
add_executable (metabcor metabcor.c) 

# Link the executable to the libraries. 
target_link_libraries (absscal tpcmisc m)
target_link_libraries (avgbolus tpcmodext tpcmodel tpccurveio tpcmisc m)
target_link_libraries (avgfract tpcmodel tpccurveio tpcmisc m)
target_link_libraries (b2plasma tpccurveio tpcmisc m)
target_link_libraries (p2blood tpccurveio tpcmisc m)
target_link_libraries (p2bfuncs tpccurveio tpcmisc m)
target_link_libraries (disp4dft tpccurveio tpcmisc m)
target_link_libraries (eabaort tpcidi tpcmodext tpcimgp tpcimgio tpcmodel tpccurveio tpcmisc m)
target_link_libraries (extrapol tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_bpr tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_feng tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_fexp tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_ppf tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_sinf tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fitdelay tpcmodel tpccurveio tpcmisc m)
target_link_libraries (fit_o2bl tpcmodext tpcsvg tpcmodel tpccurveio tpcmisc m)
target_link_libraries (sim_o2bl tpcmodext tpcmodel tpccurveio tpcmisc m)
target_link_libraries (o2metab tpcmodext tpcmodel tpccurveio tpcmisc m)
target_link_libraries (imgaafind tpcidi tpcmodext tpcimgp tpcimgio tpcmodel tpccurveio tpcmisc m)
target_link_libraries (inpstart tpcmodext tpcmodel tpccurveio tpcmisc m)
target_link_libraries (metabcor tpcmodel tpccurveio tpcmisc m)

# Install the executable(s)
install (
  PROGRAMS
  ${CMAKE_CURRENT_BINARY_DIR}/absscal${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/avgbolus${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/avgfract${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/b2plasma${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/p2blood${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/p2bfuncs${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/disp4dft${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/eabaort${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/extrapol${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_bpr${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_feng${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_fexp${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_ppf${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_sinf${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fitdelay${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_o2bl${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/sim_o2bl${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/o2metab${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/imgaafind${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/inpstart${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/metabcor${CMAKE_EXECUTABLE_SUFFIX}
  DESTINATION bin
  COMPONENT applications
)


# Copy test data folder
add_custom_target(inputtests ALL
  COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test
  COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/test ${CMAKE_CURRENT_BINARY_DIR}/test/
)
# And delete test data folder with clean
set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/test")


#
# Simple tests
#

# Does does the usage message work
add_test(absscalUsage absscal "--help")
add_test(avgbolusUsage avgbolus "--help")
add_test(avgfractUsage avgfract "--help")
add_test(b2plasmaUsage b2plasma "--help")
add_test(p2bloodUsage p2blood "--help")
add_test(p2bfuncsUsage p2blood "--help")
add_test(disp4dftUsage disp4dft "--help")
add_test(eabaortUsage eabaort "--help")
add_test(extrapolUsage extrapol "--help")
add_test(fit_bprUsage fit_bpr "--help")
add_test(fit_fengUsage fit_feng "--help")
add_test(fit_fexpUsage fit_fexp "--help")
add_test(fit_ppfUsage fit_ppf "--help")
add_test(fit_sinfUsage fit_sinf "--help")
add_test(fitdelayUsage fitdelay "--help")
add_test(fit_o2blUsage fit_o2bl "--help")
add_test(sim_o2blUsage sim_o2bl "--help")
add_test(o2metabUsage o2metab "--help")
add_test(imgaafindUsage imgaafind "--help")
add_test(inpstartUsage inpstart "--help")
add_test(metabcorUsage metabcor "--help")
set_tests_properties(
  absscalUsage avgbolusUsage avgfractUsage
  b2plasmaUsage p2bloodUsage p2bfuncsUsage
  disp4dftUsage eabaortUsage extrapolUsage
  fit_bprUsage fit_fengUsage fit_fexpUsage fit_ppfUsage fit_sinfUsage fitdelayUsage
  fit_o2blUsage sim_o2blUsage o2metabUsage
  imgaafindUsage inpstartUsage metabcorUsage
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage: *"
)


#
# Run test scripts
# 
add_test (
  NAME absscalTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/absscal
  COMMAND bash "./test_absscal.sh"
)
add_test (
  NAME avgfractTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/avgfract
  COMMAND bash "./test_avgfract.sh"
)
add_test (
  NAME pbconvTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/pbconv
  COMMAND bash "./test_pbconv.sh"
)
add_test (
  NAME disp4dftTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/disp4dft
  COMMAND bash "./test_disp4dft.sh"
)
add_test (
  NAME eabaortTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/eabaort
  COMMAND bash "./test_eabaort.sh"
)
set_tests_properties(eabaortTests PROPERTIES LABELS slow)
add_test (
  NAME extrapolTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/extrapol
  COMMAND bash "./test_extrapol.sh"
)
add_test (
  NAME fit_bprTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_bpr
  COMMAND bash "./test_fit_bpr.sh"
)
add_test (
  NAME fit_fengTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_feng
  COMMAND bash "./test_fit_feng.sh"
)
set_tests_properties(fit_fengTests PROPERTIES LABELS slow)
add_test (
  NAME fit_fexpTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_fexp
  COMMAND bash "./test_fit_fexp.sh"
)
add_test (
  NAME fit_ppfTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_ppf
  COMMAND bash "./test_fit_ppf.sh"
)
set_tests_properties(fit_ppfTests PROPERTIES LABELS slow)
add_test (
  NAME fit_sinfTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_sinf
  COMMAND bash "./test_fit_sinf.sh"
)
set_tests_properties(fit_sinfTests PROPERTIES LABELS slow)
add_test (
  NAME fitdelayTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fitdelay
  COMMAND bash "./test_fitdelay.sh"
)
add_test (
  NAME fit_o2blTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_o2bl
  COMMAND bash "./test_fit_o2bl.sh"
)
add_test (
  NAME sim_o2blTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/sim_o2bl
  COMMAND bash "./test_sim_o2bl.sh"
)
add_test (
  NAME o2metabTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/o2metab
  COMMAND bash "./test_o2metab.sh"
)
add_test (
  NAME imgaafindTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/imgaafind
  COMMAND bash "./test_imgaafind.sh"
)
add_test (
  NAME inpstartTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/inpstart
  COMMAND bash "./test_inpstart.sh"
)
add_test (
  NAME metabcorTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/metabcor
  COMMAND bash "./test_metabcor.sh"
)
