# Make sure the compiler can find include files from our libraries. 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcextensions) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcift) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcfileutil) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcli) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcstatist) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpccsv) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcisotope) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpctac) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcpar) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcfunc) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpccm) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcmodels) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpctacmod) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcrand) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpclinopt) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcnlopt) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcbfm) 

# Make sure the linker can find the libraries once they are built. 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcextensions) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcift) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcfileutil) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcli) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcstatist) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpccsv) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcisotope) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpctac) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcpar) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcfunc) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpccm) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcmodels) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpctacmod) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcrand) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpclinopt) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcnlopt) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcbfm) 

# Add executable that is built from the source file(s) 
# The extensions are automatically found. 
add_executable (b2ptrap b2ptrap.c) 
add_executable (b2rbc b2rbc.c) 
add_executable (bpr2cpr bpr2cpr.c) 
add_executable (fit_av fit_av.c) 
add_executable (fit_disp fit_disp.c) 
add_executable (fit_pbr fit_pbr.c) 
add_executable (fit_wrlv fit_wrlv.c) 
add_executable (liverinp liverinp.c) 
add_executable (liverpv liverpv.c) 
add_executable (injdifft injdifft.c) 
add_executable (o2_p2w o2_p2w.c) 
add_executable (tacmove tacmove.c) 
add_executable (tactime tactime.c) 

# Link the executable to the libraries. 
target_link_libraries (b2ptrap tpcli tpccm tpctacmod tpcfunc tpcmodels tpcrand tpcnlopt tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (b2rbc tpcli tpcift tpctac tpcextensions m)
target_link_libraries (bpr2cpr tpctac tpcextensions m)
target_link_libraries (fit_av tpcli tpccm tpctacmod tpcfunc tpcmodels tpcrand tpcnlopt tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (fit_disp tpcli tpccm tpctacmod tpcfunc tpcmodels tpcrand tpcnlopt tpclinopt tpcbfm tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (fit_pbr tpcli tpccm tpctacmod tpcfunc tpcmodels tpcrand tpcnlopt tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (fit_wrlv tpcli tpccm tpctacmod tpcfunc tpcmodels tpcrand tpcnlopt tpclinopt tpcbfm tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (liverinp tpcli tpcift tpctac tpcextensions m)
target_link_libraries (liverpv tpctacmod tpcli tpccm tpcift tpctac tpcextensions m)
target_link_libraries (injdifft tpcift tpcextensions m)
target_link_libraries (o2_p2w tpcift tpctac tpcextensions m)
target_link_libraries (tacmove tpctacmod tpcli tpcfileutil tpctac tpcpar tpccsv tpcift tpcextensions m)
target_link_libraries (tactime tpctac tpcift tpcfileutil tpcisotope tpcextensions m)

# Install the executable(s)
install (
  PROGRAMS
  ${CMAKE_CURRENT_BINARY_DIR}/b2ptrap${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/b2rbc${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/bpr2cpr${CMAKE_EXECUTABLE_SUFFIX}
#  ${CMAKE_CURRENT_BINARY_DIR}/fit_av${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_disp${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_pbr${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/fit_wrlv${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/liverinp${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/liverpv${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/injdifft${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/o2_p2w${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/tacmove${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/tactime${CMAKE_EXECUTABLE_SUFFIX}
  DESTINATION bin
  COMPONENT applications
)

# Copy test data folder
add_custom_target(v2inputtests 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(b2ptrapUsage b2ptrap "--help")
add_test(b2rbcUsage b2rbc "--help")
add_test(bpr2cprUsage bpr2cpr "--help")
add_test(fit_avUsage fit_av "--help")
add_test(fit_dispUsage fit_disp "--help")
add_test(fit_pbrUsage fit_pbr "--help")
add_test(fit_wrlvUsage fit_wrlv "--help")
add_test(liverinpUsage liverinp "--help")
add_test(liverpvUsage liverpv "--help")
add_test(injdifftUsage injdifft "--help")
add_test(o2_p2wUsage o2_p2w "--help")
add_test(tacmoveUsage tacmove "--help")
add_test(tactimeUsage tactime "--help")
set_tests_properties(
  b2ptrapUsage b2rbcUsage bpr2cprUsage fit_avUsage fit_dispUsage fit_pbrUsage
  fit_wrlvUsage liverinpUsage 
  liverpvUsage injdifftUsage o2_p2wUsage tacmoveUsage tactimeUsage 
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage: *"
)

#
# Run test scripts
# 
add_test (
  NAME b2ptrapTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/b2ptrap
  COMMAND bash "./test_b2ptrap.sh"
)
add_test (
  NAME b2rbcTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/b2rbc
  COMMAND bash "./test_b2rbc.sh"
)
add_test (
  NAME bpr2cprTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/bpr2cpr
  COMMAND bash "./test_bpr2cpr.sh"
)
add_test (
  NAME fit_avTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_av
  COMMAND bash "./test_fit_av.sh"
)
add_test (
  NAME fit_dispTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_disp
  COMMAND bash "./test_fit_disp.sh"
)
add_test (
  NAME fit_pbrTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_pbr
  COMMAND bash "./test_fit_pbr.sh"
)
set_tests_properties(fit_pbrTests PROPERTIES LABELS slow)
add_test (
  NAME fit_wrlvTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/fit_wrlv
  COMMAND bash "./test_fit_wrlv.sh"
)
add_test (
  NAME liverinpTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/liverinp
  COMMAND bash "./test_liverinp.sh"
)
add_test (
  NAME liverpvTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/liverpv
  COMMAND bash "./test_liverpv.sh"
)
add_test (
  NAME injdifftTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/injdifft
  COMMAND bash "./test_injdifft.sh"
)
add_test (
  NAME o2_p2wTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/o2_p2w
  COMMAND bash "./test_o2_p2w.sh"
)
add_test (
  NAME tacmoveTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/tacmove
  COMMAND bash "./test_tacmove.sh"
)
add_test (
  NAME tactimeTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/tactime
  COMMAND bash "./test_tactime.sh"
)
