92 lines
5.1 KiB
CMake
92 lines
5.1 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/sequencer_commands.cpp
|
|
src/gui/sequencer_track_widget.cpp src/gui/sequencer_clip_widget.cpp
|
|
src/gui/sequencer_velocity_widget.cpp src/gui/sequencer_ruler_widget.cpp
|
|
src/gui/sequencer_instruments.cpp src/gui/sequencer_waveforms.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)
|
|
xtc_gui_test(gui-sequencer "XTC_TEST_SEQUENCER_COMPONENTS_ONLY=1")
|
|
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 playback)
|
|
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()
|