xtc/cmake/Gui.cmake
2026-11-06 19:05:14 +01:00

87 lines
4.7 KiB
CMake

if(NOT XTC_BUILD_GUI)
return()
endif()
if(PkgConfig_FOUND)
pkg_check_modules(FLTK QUIET IMPORTED_TARGET fltk)
endif()
if(FLTK_FOUND)
set(xtc_fltk PkgConfig::FLTK)
else()
find_program(XTC_FLTK_CONFIG fltk-config)
if(NOT XTC_FLTK_CONFIG)
message(STATUS "FLTK unavailable: building core and offline tests only")
return()
endif()
execute_process(COMMAND ${XTC_FLTK_CONFIG} --cxxflags OUTPUT_VARIABLE fltk_flags OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY)
execute_process(COMMAND ${XTC_FLTK_CONFIG} --ldflags OUTPUT_VARIABLE fltk_libs OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY)
separate_arguments(fltk_flags UNIX_COMMAND "${fltk_flags}")
separate_arguments(fltk_libs UNIX_COMMAND "${fltk_libs}")
# Distribution flags must not override this project's debug/release settings.
list(FILTER fltk_flags INCLUDE REGEX "^(-I|-D|-pthread)")
add_library(xtc-fltk INTERFACE)
target_compile_options(xtc-fltk INTERFACE ${fltk_flags})
target_link_libraries(xtc-fltk INTERFACE ${fltk_libs})
set(xtc_fltk xtc-fltk)
endif()
enable_language(CXX)
set(XTC_GUI_AVAILABLE TRUE)
add_library(xtc-gui STATIC src/gui/main_window.cpp src/gui/graph_widget.cpp
src/gui/sequencer_widget.cpp src/gui/piano_roll.cpp src/gui/mixer_widget.cpp
src/gui/plugin_dialog.cpp src/gui/sample_editor.cpp)
xtc_warnings(xtc-gui)
target_link_libraries(xtc-gui PUBLIC xtc-core ${xtc_fltk})
add_executable(xtc src/gui/main.cpp)
xtc_warnings(xtc)
target_link_libraries(xtc PRIVATE xtc-gui)
add_custom_target(gui DEPENDS xtc)
find_program(XTC_XVFB_RUN xvfb-run)
add_executable(capture_screenshots EXCLUDE_FROM_ALL tools/capture_screenshots.cpp)
xtc_warnings(capture_screenshots)
target_link_libraries(capture_screenshots PRIVATE xtc-gui)
if(XTC_XVFB_RUN AND BUILD_TESTING)
if(XTC_LADSPA_AVAILABLE)
add_custom_target(screenshots COMMAND ${XTC_XVFB_RUN} -a -s "-screen 0 1440x960x24"
$<TARGET_FILE:capture_screenshots> "${PROJECT_SOURCE_DIR}/screenshots"
DEPENDS capture_screenshots plugin-fixture clap-synth-fixture vst2-synth-fixture vst3-synth-fixture
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" VERBATIM)
endif()
add_executable(test_gui tests/integration/test_gui.cpp)
xtc_warnings(test_gui)
target_link_libraries(test_gui PRIVATE xtc-gui)
xtc_wrap(test_gui xtc_history_reserve)
function(xtc_gui_test name)
add_test(NAME ${name} COMMAND ${XTC_XVFB_RUN} -a -s "-screen 0 1440x960x24" $<TARGET_FILE:test_gui>)
set_tests_properties(${name} PROPERTIES WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" LABELS gui ENVIRONMENT "${ARGN}")
endfunction()
xtc_gui_test(gui)
if(XTC_LADSPA_AVAILABLE)
xtc_gui_test(gui-plugins "XTC_TEST_PLUGIN=$<TARGET_FILE:plugin-fixture>")
endif()
xtc_gui_test(gui-modern-plugins "XTC_TEST_CLAP=$<TARGET_FILE:clap-fixture>" "XTC_TEST_VST2=$<TARGET_FILE:vst2-fixture>" "XTC_TEST_VST3=$<TARGET_FILE:vst3-fixture>")
xtc_gui_test(gui-instruments "XTC_TEST_SYNTH_CLAP=$<TARGET_FILE:clap-synth-fixture>" "XTC_TEST_SYNTH_VST2=$<TARGET_FILE:vst2-synth-fixture>" "XTC_TEST_SYNTH_VST3=$<TARGET_FILE:vst3-synth-fixture>")
foreach(pair "modern-editing|MODERN_EDITING" "next-daw|NEXT_DAW" "sample|SAMPLE_EDITOR" "creative|CREATIVE" "midi-workflows|MIDI_WORKFLOWS" "midi-labels|MIDI_LABELS")
string(REPLACE "|" ";" pair "${pair}")
list(GET pair 0 name)
list(GET pair 1 env)
xtc_gui_test(gui-${name} "XTC_TEST_${env}_ONLY=1")
endforeach()
set_property(TEST gui-next-daw APPEND PROPERTY ENVIRONMENT XTC_TEST_MODERN_EDITING_ONLY=1)
if(XTC_LADSPA_AVAILABLE)
xtc_gui_test(gui-track-fx "XTC_TEST_TRACK_FX_ONLY=1" "XTC_TEST_PLUGIN=$<TARGET_FILE:plugin-fixture>" "XTC_TEST_CLAP=$<TARGET_FILE:clap-fixture>" "XTC_TEST_VST2=$<TARGET_FILE:vst2-fixture>" "XTC_TEST_VST3=$<TARGET_FILE:vst3-fixture>")
endif()
add_test(NAME configuration-startup COMMAND ${XTC_XVFB_RUN} -a -s "-screen 0 1440x960x24" ${Python3_EXECUTABLE}
"${PROJECT_SOURCE_DIR}/tests/integration/test_configuration_startup.py" $<TARGET_FILE:xtc>)
set_tests_properties(configuration-startup PROPERTIES LABELS gui)
if(JACK_FOUND AND XTC_WITH_JACK)
foreach(kind gui_jack workflow)
add_executable(test_${kind} tests/integration/test_${kind}.cpp)
xtc_warnings(test_${kind})
target_link_libraries(test_${kind} PRIVATE xtc-gui)
if(XTC_ENABLE_LIVE_TESTS)
string(REPLACE "_" "-" name "${kind}")
add_test(NAME ${name} COMMAND ${XTC_XVFB_RUN} -a $<TARGET_FILE:test_${kind}>)
set_tests_properties(${name} PROPERTIES WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" LABELS live RUN_SERIAL TRUE)
endif()
endforeach()
endif()
endif()