# Make sure the compiler can find include files from our libraries. 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcextensions) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcisotope) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcift) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcstatist) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpccsv) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpctac) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcmodels) 
include_directories (${CMAKE_SOURCE_DIR}/v2/libtpcpar) 

# 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/libtpcisotope) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcift) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcstatist) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpccsv) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpctac) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcmodels) 
link_directories (${CMAKE_BINARY_DIR}/v2/libtpcpar) 

# Add executable that is built from the source file(s) 
# The extensions are automatically found. 
add_executable (models models.c) 
add_executable (paradd paradd.c) 
add_executable (parai parai.c) 
add_executable (parcoll parcoll.c) 
add_executable (pardiff pardiff.c) 
add_executable (parformat parformat.c) 
add_executable (parget parget.c) 
add_executable (parmatch parmatch.c) 
add_executable (parmean parmean.c) 
add_executable (parrenp parrenp.c) 
add_executable (parsort parsort.c) 

# Link the executable to the libraries. 
target_link_libraries (models tpcpar tpcmodels tpcextensions m)
target_link_libraries (paradd tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parai tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parcoll tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (pardiff tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parformat tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parget tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parmatch tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parmean tpcstatist tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parrenp tpcift tpctac tpcpar tpcmodels tpcextensions m)
target_link_libraries (parsort tpcift tpctac tpcpar tpcmodels tpcextensions m)

# Install the executable(s)
install (
  PROGRAMS
  ${CMAKE_CURRENT_BINARY_DIR}/models${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/paradd${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parai${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parcoll${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/pardiff${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parformat${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parget${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parmatch${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parmean${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parrenp${CMAKE_EXECUTABLE_SUFFIX}
  ${CMAKE_CURRENT_BINARY_DIR}/parsort${CMAKE_EXECUTABLE_SUFFIX}
  DESTINATION bin
  COMPONENT applications
)

# Copy test data folder
add_custom_target(parutilstests 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
#
add_test(modelsUsage models "--help")
add_test(paraddUsage paradd "--help")
add_test(paraiUsage parai "--help")
add_test(parcollUsage parcoll "--help")
add_test(pardiffUsage pardiff "--help")
add_test(parformatUsage parformat "--help")
add_test(pargetUsage parget "--help")
add_test(parmatchUsage parmatch "--help")
add_test(parmeanUsage parmean "--help")
add_test(parrenpUsage parrenp "--help")
add_test(parsortUsage parsort "--help")
set_tests_properties(
  modelsUsage paraddUsage paraiUsage parcollUsage pardiffUsage parformatUsage pargetUsage 
  parmatchUsage parmeanUsage parrenpUsage parsortUsage 
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage: *"
)

#
# Run test scripts
# 
add_test (
  NAME paraddTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/paradd
  COMMAND bash "./test_paradd.sh"
)
add_test (
  NAME paraiTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parai
  COMMAND bash "./test_parai.sh"
)
add_test (
  NAME parcollTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parcoll
  COMMAND bash "./test_parcoll.sh"
)
add_test (
  NAME pardiffTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/pardiff
  COMMAND bash "./test_pardiff.sh"
)
add_test (
  NAME parformatTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parformat
  COMMAND bash "./test_parformat.sh"
)
add_test (
  NAME pargetTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parget
  COMMAND bash "./test_parget.sh"
)
add_test (
  NAME parmatchTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parmatch
  COMMAND bash "./test_parmatch.sh"
)
add_test (
  NAME parmeanTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parmean
  COMMAND bash "./test_parmean.sh"
)
add_test (
  NAME parsortTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parsort
  COMMAND bash "./test_parsort.sh"
)
add_test (
  NAME parrenpTests
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test/parrenp
  COMMAND bash "./test_parrenp.sh"
)
