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" $ "${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" $) 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=$") endif() xtc_gui_test(gui-modern-plugins "XTC_TEST_CLAP=$" "XTC_TEST_VST2=$" "XTC_TEST_VST3=$") xtc_gui_test(gui-instruments "XTC_TEST_SYNTH_CLAP=$" "XTC_TEST_SYNTH_VST2=$" "XTC_TEST_SYNTH_VST3=$") 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=$" "XTC_TEST_CLAP=$" "XTC_TEST_VST2=$" "XTC_TEST_VST3=$") 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" $) 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 $) set_tests_properties(${name} PROPERTIES WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" LABELS live RUN_SERIAL TRUE) endif() endforeach() endif() endif()