# plumb — plan9 plumbing client (9P2000 over the namespace socket).
#
# plumb_lib carries the pure codec + resolver and is unit tested without any
# GUI/9P I/O. The 9P client (ninep) and the Plumber facade add Qt Network and
# a reader thread; they talk to a live plumber and so are exercised by a live
# integration test guarded on $NAMESPACE being present.
find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Core Network REQUIRED)

add_library(plumb_lib STATIC
    plumbmsg.cpp
    plumbmsg.h
    plumbresolve.cpp
    plumbresolve.h
    ninep.cpp
    ninep.h
    plumber.cpp
    plumber.h
)
set_target_properties(plumb_lib PROPERTIES AUTOMOC ON)
target_link_libraries(plumb_lib PUBLIC Qt6::Core Qt6::Network)
target_include_directories(plumb_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Test)
if(Qt6Test_FOUND)
    add_executable(test_plumbmsg test_plumbmsg.cpp)
    target_link_libraries(test_plumbmsg PRIVATE plumb_lib Qt6::Test)
    add_test(NAME plumbmsg COMMAND test_plumbmsg)

    add_executable(test_plumbresolve test_plumbresolve.cpp)
    target_link_libraries(test_plumbresolve PRIVATE plumb_lib Qt6::Test)
    add_test(NAME plumbresolve COMMAND test_plumbresolve)

    # Live round-trip against a running plumber. Skips itself (passing) when no
    # plumb socket is reachable, so it is safe in headless/CI environments.
    add_executable(test_plumb_live test_plumb_live.cpp)
    target_link_libraries(test_plumb_live PRIVATE plumb_lib Qt6::Test)
    add_test(NAME plumb_live COMMAND test_plumb_live)
endif()
