find_package(Qt6 6.2 REQUIRED COMPONENTS Widgets)
find_package(X11 REQUIRED)
if(NOT X11_XTest_FOUND)
    message(FATAL_ERROR "Linux keyboard output needs libxtst-dev")
endif()
foreach(application configurator controller)
    string(TOUPPER "${application}" application_option)
    if(MIG_BUILD_${application_option})
        set(app_sources main.cpp canvas.cpp capture.cpp keyboard.cpp theme.cpp)
        if(application STREQUAL "controller")
            list(APPEND app_sources controller_window.cpp controller_profiles.cpp controller_runtime.cpp
                controller_diagnostics.cpp)
        else()
            list(APPEND app_sources window.cpp)
        endif()
        add_executable(mig-${application} ${app_sources})
        if(application STREQUAL "controller")
            target_compile_definitions(mig-${application} PRIVATE MIG_CONTROLLER)
            target_link_libraries(mig-${application} PRIVATE mig-controller-profiles)
        endif()
        target_compile_definitions(mig-${application} PRIVATE MIG_APP_NAME="${application}")
        target_link_libraries(mig-${application} PRIVATE Qt6::Widgets mig-native mig-format
            X11::X11 X11::Xtst)
        set_target_properties(mig-${application} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
        if(MIG_INSTALL)
            install(TARGETS mig-${application} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
        endif()
        if(MIG_BUILD_TESTS)
            add_test(NAME linux-${application}-ui COMMAND mig-${application} --ui-test)
            set_tests_properties(linux-${application}-ui PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
        endif()
    endif()
endforeach()
if(MIG_BUILD_TESTS)
    add_executable(mig-qt-theme-tests ../../tests/qt_theme_tests.cpp theme.cpp)
    target_link_libraries(mig-qt-theme-tests PRIVATE Qt6::Widgets)
    add_test(NAME qt-theme COMMAND mig-qt-theme-tests)
    set_tests_properties(qt-theme PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
endif()
