include(FindThreads)

function(test_case name command)
    if( WIN32 )
        set(CMD_PATH ${EXECUTABLE_OUTPUT_PATH})
    else( WIN32 )
        set(CMD_PATH ${CMAKE_CURRENT_BINARY_DIR})
    endif( WIN32 )

    #add_executable(${command} ${command}.cc)
    #target_include_directories(${command} ${test_includes})
    #target_link_libraries(${command} ndswrapcxx)
    add_test(
            NAME ${name}
            COMMAND
            "${CMD_PATH}/${command}"
    )
    set_tests_properties( ${name}
            PROPERTIES
            SKIP_RETURN_CODE 77
            TIMEOUT 180
            )
endfunction(test_case)

set(NDS_IMPL_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/socket/socket.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/socket/buffered_reader.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/common/utils.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/common/span_reader.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/common/status_codes.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/nds1/common/basic_io.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/nds1/common/utils.hh
        ${CMAKE_CURRENT_SOURCE_DIR}/nds1/v12_2/channel_listing.hh
)

add_library(nds_impl INTERFACE)
target_include_directories(nds_impl INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_requires_cpp11(nds_impl INTERFACE)
# Post cmake-3.1 use target sources instead
set_target_properties(nds_impl PROPERTIES INTERFACE_SOURCES "${NDS_IMPL_SOURCES}")
if (WIN32)
    target_link_libraries(nds_impl INTERFACE Ws2_32)
endif()

add_library(nds1_test_utilities STATIC
        tests/nds1_test_utilities.cc
        tests/nds1_test_utilities.hh
)
target_include_directories(nds1_test_utilities PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(nds1_test_utilities PUBLIC nds_impl)

add_executable(test_nds_impl_cxx
        tests/test_main.cc tests/test_body.cc)
target_link_libraries(test_nds_impl_cxx PUBLIC nds_impl nds1_test_utilities ${CMAKE_THREAD_LIBS_INIT})
test_case(_cxx_nds_impl_ test_nds_impl_cxx)


add_library(nds::impl ALIAS nds_impl)