cmake_minimum_required(VERSION 3.20) project(obs-webkit-browser VERSION 1.2.1 LANGUAGES C CXX) include(GNUInstallDirs) find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) pkg_check_modules(OBS REQUIRED IMPORTED_TARGET libobs) pkg_check_modules(OBS_FRONTEND REQUIRED IMPORTED_TARGET obs-frontend-api) pkg_check_modules(QT_WIDGETS REQUIRED IMPORTED_TARGET Qt6Widgets) find_path(OBS_HEADER_DIRECTORY obs.h PATH_SUFFIXES obs REQUIRED) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(WEBKIT REQUIRED IMPORTED_TARGET webkit2gtk-4.1) pkg_check_modules(X11_CAPTURE REQUIRED IMPORTED_TARGET x11 xcomposite xdamage xext) pkg_check_modules(PULSE REQUIRED IMPORTED_TARGET libpulse libpulse-simple) add_library(obs-webkit-browser MODULE src/plugin.c src/docks.cpp src/protocol.h src/pulse-capture.c src/pulse-capture.h ) target_compile_features(obs-webkit-browser PRIVATE c_std_11) target_compile_features(obs-webkit-browser PRIVATE cxx_std_17) target_compile_definitions(obs-webkit-browser PRIVATE _GNU_SOURCE) target_compile_options(obs-webkit-browser PRIVATE -Wall -Wextra -Wpedantic) target_include_directories(obs-webkit-browser PRIVATE "${OBS_HEADER_DIRECTORY}") target_link_libraries(obs-webkit-browser PRIVATE obs obs-frontend-api PkgConfig::QT_WIDGETS PkgConfig::PULSE Threads::Threads ) set_target_properties(obs-webkit-browser PROPERTIES PREFIX "") add_executable(obs-webkit-renderer src/renderer.c src/protocol.h ) target_compile_features(obs-webkit-renderer PRIVATE c_std_11) target_compile_definitions(obs-webkit-renderer PRIVATE _GNU_SOURCE) target_compile_options(obs-webkit-renderer PRIVATE -Wall -Wextra -Wpedantic) target_link_libraries(obs-webkit-renderer PRIVATE PkgConfig::GLIB PkgConfig::GTK PkgConfig::WEBKIT PkgConfig::X11_CAPTURE Threads::Threads ) set(OBS_PLUGIN_DIR "${CMAKE_INSTALL_LIBDIR}/obs-plugins" CACHE PATH "Directory for the OBS plugin module") set(OBS_PLUGIN_DATA_DIR "${CMAKE_INSTALL_DATADIR}/obs/obs-plugins/obs-webkit-browser" CACHE PATH "Directory for plugin data and the renderer helper") install(TARGETS obs-webkit-browser LIBRARY DESTINATION "${OBS_PLUGIN_DIR}") install(TARGETS obs-webkit-renderer RUNTIME DESTINATION "${OBS_PLUGIN_DATA_DIR}") install(FILES data/locale/en-US.ini data/locale/ru-RU.ini DESTINATION "${OBS_PLUGIN_DATA_DIR}/locale") include(CTest) if(BUILD_TESTING) add_executable(protocol-test tests/protocol-test.c) target_compile_features(protocol-test PRIVATE c_std_11) target_include_directories(protocol-test PRIVATE src) add_test(NAME protocol-test COMMAND protocol-test) add_executable(renderer-smoke-test tests/renderer-smoke-test.c) target_compile_features(renderer-smoke-test PRIVATE c_std_11) target_compile_definitions(renderer-smoke-test PRIVATE _GNU_SOURCE) target_include_directories(renderer-smoke-test PRIVATE src) add_test(NAME renderer-smoke-test COMMAND renderer-smoke-test $) set_tests_properties(renderer-smoke-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_test(NAME renderer-opaque-smoke-test COMMAND renderer-smoke-test $ opaque) set_tests_properties(renderer-opaque-smoke-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_test(NAME renderer-zoom-smoke-test COMMAND renderer-smoke-test $ zoom) set_tests_properties(renderer-zoom-smoke-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_executable(renderer-fps-test tests/renderer-fps-test.c) target_compile_features(renderer-fps-test PRIVATE c_std_11) target_compile_definitions(renderer-fps-test PRIVATE _GNU_SOURCE) target_include_directories(renderer-fps-test PRIVATE src) add_test(NAME blur-transition-fps-test COMMAND renderer-fps-test $) set_tests_properties(blur-transition-fps-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_executable(shared-profile-test tests/shared-profile-test.c) target_compile_features(shared-profile-test PRIVATE c_std_11) target_compile_definitions(shared-profile-test PRIVATE _GNU_SOURCE) target_include_directories(shared-profile-test PRIVATE src) add_test(NAME shared-profile-test COMMAND shared-profile-test $) set_tests_properties(shared-profile-test PROPERTIES TIMEOUT 30 SKIP_RETURN_CODE 77) add_executable(module-load-test tests/module-load-test.c) target_compile_features(module-load-test PRIVATE c_std_11) target_link_libraries(module-load-test PRIVATE PkgConfig::OBS) add_test(NAME module-load-test COMMAND module-load-test $ "${CMAKE_CURRENT_SOURCE_DIR}/data" $) set_tests_properties(module-load-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_test(NAME module-audio-test COMMAND module-load-test $ "${CMAKE_CURRENT_SOURCE_DIR}/data" $ audio-test) set_tests_properties(module-audio-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) add_test(NAME module-alpha-test COMMAND module-load-test $ "${CMAKE_CURRENT_SOURCE_DIR}/data" $ alpha-test) set_tests_properties(module-alpha-test PROPERTIES TIMEOUT 20 SKIP_RETURN_CODE 77) endif()