# SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
# SPDX-License-Identifier: BSD-3-Clause

cmake_minimum_required(VERSION 3.16)
project(demo)
enable_testing()

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set_property(GLOBAL PROPERTY USE_FOLDERS 1)
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER "Autogen Targets")
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "Generated Files")

find_package(YCM 0.11.0 REQUIRED)
find_package(YARP COMPONENTS os sig idl_tools REQUIRED)

include(Catch)
# Test timeout.
set(YARP_TEST_TIMEOUT_DEFAULT 120)
if (APPLE)
  set(YARP_TEST_TIMEOUT_DEFAULT 300)
endif()
set(YARP_TEST_TIMEOUT ${YARP_TEST_TIMEOUT_DEFAULT} CACHE STRING "Timeout for unit tests")
mark_as_advanced(YARP_TEST_TIMEOUT)
function(yarp_catch_discover_tests _target)
  # Workaround to force catch_discover_tests to run tests under valgrind
  if(DEFINED YARP_TEST_LAUNCHER)
    set_property(TARGET ${_target} PROPERTY CROSSCOMPILING_EMULATOR "${YARP_TEST_LAUNCHER}")
  endif()
  catch_discover_tests(
    ${_target}
    EXTRA_ARGS "-s" "--use-colour" "yes"
    PROPERTIES
      TIMEOUT ${YARP_TEST_TIMEOUT}
    ${ARGN}
  )
endfunction()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../extern/catch2)

set(IDL_FILES
  SharedData.msg
  Demo.msg
  Tennis.srv
  Rpc.srv
  HeaderTest.msg
  HeaderTest2.srv
)

# Test using yarp_idl_to_dir
set(generated_libs_dir "${CMAKE_CURRENT_BINARY_DIR}/bits")
yarp_idl_to_dir(
  INPUT_FILES ${IDL_FILES}
  OUTPUT_DIR "${generated_libs_dir}"
  SOURCES_VAR IDL_GEN_SRCS
  HEADERS_VAR IDL_GEN_HDRS
  INCLUDE_DIRS_VAR IDL_INCLUDE_DIRS
  THRIFT_INCLUDE_PREFIX
  THRIFT_NO_NAMESPACE_PREFIX
)

add_executable(demo_yarp_idl_to_dir)

target_include_directories(demo_yarp_idl_to_dir PRIVATE ${generated_libs_dir}/include)
target_sources(demo_yarp_idl_to_dir
  PRIVATE
    main.cpp
    ${IDL_GEN_SRCS}
    ${IDL_GEN_HDRS}
)
target_link_libraries(demo_yarp_idl_to_dir
  PRIVATE
    YARP::YARP_os
    YARP::YARP_init
    YARP::YARP_sig
)

yarp_catch_discover_tests(
  demo_yarp_idl_to_dir
  TEST_PREFIX demo::yarp_idl_to_dir::
)


# Test using yarp_add_idl
yarp_add_idl(IDL_GEN_FILES ${IDL_FILES})

add_executable(demo_yarp_add_idl)
target_sources(demo_yarp_add_idl
  PRIVATE
    main.cpp
    ${IDL_GEN_FILES}
)
target_link_libraries(demo_yarp_add_idl
  PRIVATE
    YARP::YARP_os
    YARP::YARP_init
    YARP::YARP_sig
)

yarp_catch_discover_tests(
  demo_yarp_add_idl
  TEST_PREFIX demo::yarp_add_idl::
)
