add_library(daqd_stream_core INTERFACE)
target_include_directories(daqd_stream_core INTERFACE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)

add_library(daqd_stream_client STATIC

        data_plan.cc
        daq_client.cc
        load_data.cc
        endian_utility.cc
        include/daqd_stream/daqd_stream.hh
        )
target_include_directories(daqd_stream_client PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/private)
target_include_directories(daqd_stream_client PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_include_directories(daqd_stream_client PRIVATE
        ${RAPIDJSON_INCLUDE_DIRS}
        )
target_link_libraries(daqd_stream_client PUBLIC
        daqd_stream_core
        Boost::boost
        Boost::system
        rt)
target_link_libraries(daqd_stream_client PRIVATE
        vendor
        daqd_stream_common
        )
target_compile_options(daqd_stream_client PRIVATE -fPIC)

install(TARGETS daqd_stream_client
        EXPORT daqd_stream_install
        DESTINATION lib)
install(TARGETS daqd_stream_core
        EXPORT daqd_stream_install)
install(FILES
        include/daqd_stream/basic_types.hh
        include/daqd_stream/daqd_stream.hh
        include/daqd_stream/dcu_identifier.hh
        include/daqd_stream/fixed_string.hh
        include/daqd_stream/online_channel.hh
        include/daqd_stream/time_point.hh
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/daqd_stream)

add_library(test_helpers STATIC
        tests/test_helpers.cc)
target_include_directories(test_helpers PUBLIC
        "${CMAKE_CURRENT_SOURCE_DIR}/tests")
target_link_libraries(test_helpers PUBLIC
        Threads::Threads)


add_executable(test_daqd_dcu_status_progressions tests/test_daqd_dcu_status_progressions.cc)
target_link_libraries(test_daqd_dcu_status_progressions PUBLIC
        daqd_stream_client)

add_executable(test_load tests/test_load.cc)
target_link_libraries(test_load PUBLIC
        daqd_stream_client
        Threads::Threads)

add_executable(daqd_stream_unit_tests
        tests/sample_channel_lists.cc
        tests/test_main.cc
        tests/test_dcu_identifier.cc
        tests/test_client_api.cc
        tests/test_internal.cc
        tests/test_avail_info.cc
        tests/test_multi_source_methods.cc
        tests/test_load_data.cc
        tests/test_endian_utilities.cc)
target_link_libraries(daqd_stream_unit_tests
        PRIVATE
        vendor
        daqd_stream_common
        daqd_stream_client
        catch2)
target_include_directories(daqd_stream_unit_tests
        PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/private)



add_executable( test_consuming_multi_streams
        tests/test_main.cc
        tests/test_consuming_multi_streams.cc
        tests/simple_data.cc)
target_include_directories( test_consuming_multi_streams PUBLIC
        "${CMAKE_CURRENT_SOURCE_DIR}/private")
target_link_libraries(test_consuming_multi_streams
        catch2
        vendor
        cds::pub_sub
        daqd_stream_client
        daqd_stream_plugins
        daqd_stream_common
        daqd_stream_server
        frame_utils
        test_helpers)

integration_test( NAME test_missing_data_is_0xbad
        SCRIPT tests/test_missing_data_is_0xbad.py )

integration_test( NAME test_reconfigured_data_is_0x2000
        SCRIPT tests/test_reconfigured_data_is_0x2000.py )

integration_test( NAME test_remove_then_readd_channel
        SCRIPT tests/test_remove_then_readd_channel.py )

integration_test( NAME test_multi_source_channel_listing
        SCRIPT tests/test_multi_source_channel_listing.py )



add_test(NAME test_consuming_multi_streams
        COMMAND test_consuming_multi_streams
        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")

add_test(NAME test_daqd_stream_unit_tests
        COMMAND daqd_stream_unit_tests
        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")