diff --git a/.cmake-format.json b/.cmake-format.json index 7e5f2369..20610be2 100644 --- a/.cmake-format.json +++ b/.cmake-format.json @@ -1,13 +1,46 @@ { - "additional_commands": { - "find_qt": { - "flags": [], - "kwargs": { - "COMPONENTS": "+", - "COMPONENTS_WIN": "+", - "COMPONENTS_MACOS": "+", - "COMPONENTS_LINUX": "+" + "format": { + "line_width": 120, + "tab_size": 2, + "enable_sort": true, + "autosort": true + }, + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + }, + "set_target_properties_obs": { + "pargs": 1, + "flags": [], + "kwargs": { + "PROPERTIES": { + "kwargs": { + "PREFIX": 1, + "OUTPUT_NAME": 1, + "FOLDER": 1, + "VERSION": 1, + "SOVERSION": 1, + "FRAMEWORK": 1, + "BUNDLE": 1, + "AUTOMOC": 1, + "AUTOUIC": 1, + "AUTORCC": 1, + "AUTOUIC_SEARCH_PATHS": 1, + "BUILD_RPATH": 1, + "INSTALL_RPATH": 1, + "XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC": 1, + "XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION": 1, + "XCODE_ATTRIBUTE_GCC_WARN_SHADOW":1 , + "LIBRARY_OUTPUT_DIRECTORY": 1 + } } } } + } } diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ca78271..aed836df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,18 @@ -project(obs-websocket VERSION 5.1.0) -set(OBS_WEBSOCKET_RPC_VERSION 1) +cmake_minimum_required(VERSION 3.16...3.25) + +legacy_check() option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON) - -if(NOT ENABLE_WEBSOCKET OR NOT ENABLE_UI) - message(STATUS "OBS: DISABLED obs-websocket") +if(NOT ENABLE_WEBSOCKET) + target_disable(obs-websocket) return() endif() # Submodule deps check -if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/deps/qr/cpp/QrCode.hpp) - obs_status(FATAL_ERROR "obs-websocket submodule deps not available.") +if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/deps/qr/cpp/QrCode.hpp") + message(FATAL_ERROR "obs-websocket submodule deps not available.") endif() -# Plugin tests flag -option(PLUGIN_TESTS "Enable plugin runtime tests" OFF) - # Find Qt find_qt(COMPONENTS Core Widgets Svg Network) @@ -28,27 +25,10 @@ find_package(Websocketpp 0.8 REQUIRED) # Find Asio find_package(Asio 1.12.1 REQUIRED) -# Tell websocketpp not to use system boost -add_definitions(-DASIO_STANDALONE) - -# Configure files -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin-macros.h.in - ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin-macros.generated.h) - -# Setup target add_library(obs-websocket MODULE) add_library(OBS::websocket ALIAS obs-websocket) -set_target_properties( - obs-websocket - PROPERTIES AUTOMOC ON - AUTOUIC ON - AUTORCC ON) - -if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) - set_target_properties(obs-websocket PROPERTIES AUTORCC_OPTIONS - "--format-version;1") -endif() +target_sources(obs-websocket PRIVATE) target_sources( obs-websocket @@ -57,50 +37,59 @@ target_sources( src/Config.cpp src/Config.h lib/obs-websocket-api.h - src/forms/SettingsDialog.cpp - src/forms/SettingsDialog.h src/forms/ConnectInfo.cpp src/forms/ConnectInfo.h src/forms/resources.qrc + src/forms/SettingsDialog.cpp + src/forms/SettingsDialog.h src/WebSocketApi.cpp - src/WebSocketApi.h - src/websocketserver/WebSocketServer.cpp + src/WebSocketApi.h) + +target_sources( + obs-websocket + PRIVATE src/websocketserver/WebSocketServer.cpp src/websocketserver/WebSocketServer_Protocol.cpp src/websocketserver/WebSocketServer.h src/websocketserver/rpc/WebSocketSession.cpp src/websocketserver/rpc/WebSocketSession.h src/websocketserver/types/WebSocketCloseCode.h - src/websocketserver/types/WebSocketOpCode.h - src/eventhandler/EventHandler.cpp - src/eventhandler/EventHandler_General.cpp - src/eventhandler/EventHandler_Config.cpp - src/eventhandler/EventHandler_Scenes.cpp - src/eventhandler/EventHandler_Inputs.cpp - src/eventhandler/EventHandler_Transitions.cpp - src/eventhandler/EventHandler_Filters.cpp - src/eventhandler/EventHandler_Outputs.cpp - src/eventhandler/EventHandler_SceneItems.cpp - src/eventhandler/EventHandler_MediaInputs.cpp - src/eventhandler/EventHandler_Ui.cpp + src/websocketserver/types/WebSocketOpCode.h) + +target_sources( + obs-websocket + PRIVATE src/eventhandler/EventHandler.cpp src/eventhandler/EventHandler.h - src/eventhandler/types/EventSubscription.h - src/requesthandler/RequestHandler.cpp - src/requesthandler/RequestHandler_General.cpp - src/requesthandler/RequestHandler_Config.cpp - src/requesthandler/RequestHandler_Sources.cpp - src/requesthandler/RequestHandler_Scenes.cpp - src/requesthandler/RequestHandler_Inputs.cpp - src/requesthandler/RequestHandler_Transitions.cpp - src/requesthandler/RequestHandler_Filters.cpp - src/requesthandler/RequestHandler_SceneItems.cpp - src/requesthandler/RequestHandler_Outputs.cpp - src/requesthandler/RequestHandler_Stream.cpp - src/requesthandler/RequestHandler_Record.cpp - src/requesthandler/RequestHandler_MediaInputs.cpp - src/requesthandler/RequestHandler_Ui.cpp - src/requesthandler/RequestHandler.h - src/requesthandler/RequestBatchHandler.cpp + src/eventhandler/EventHandler_Config.cpp + src/eventhandler/EventHandler_General.cpp + src/eventhandler/EventHandler_Filters.cpp + src/eventhandler/EventHandler_Inputs.cpp + src/eventhandler/EventHandler_MediaInputs.cpp + src/eventhandler/EventHandler_Outputs.cpp + src/eventhandler/EventHandler_Scenes.cpp + src/eventhandler/EventHandler_SceneItems.cpp + src/eventhandler/EventHandler_Transitions.cpp + src/eventhandler/EventHandler_Ui.cpp + src/eventhandler/types/EventSubscription.h) + +target_sources( + obs-websocket + PRIVATE src/requesthandler/RequestBatchHandler.cpp src/requesthandler/RequestBatchHandler.h + src/requesthandler/RequestHandler.cpp + src/requesthandler/RequestHandler.h + src/requesthandler/RequestHandler_Config.cpp + src/requesthandler/RequestHandler_Filters.cpp + src/requesthandler/RequestHandler_General.cpp + src/requesthandler/RequestHandler_Inputs.cpp + src/requesthandler/RequestHandler_MediaInputs.cpp + src/requesthandler/RequestHandler_Outputs.cpp + src/requesthandler/RequestHandler_Sources.cpp + src/requesthandler/RequestHandler_Record.cpp + src/requesthandler/RequestHandler_Scenes.cpp + src/requesthandler/RequestHandler_SceneItems.cpp + src/requesthandler/RequestHandler_Stream.cpp + src/requesthandler/RequestHandler_Transitions.cpp + src/requesthandler/RequestHandler_Ui.cpp src/requesthandler/rpc/Request.cpp src/requesthandler/rpc/Request.h src/requesthandler/rpc/RequestBatchRequest.cpp @@ -108,29 +97,52 @@ target_sources( src/requesthandler/rpc/RequestResult.cpp src/requesthandler/rpc/RequestResult.h src/requesthandler/types/RequestStatus.h - src/requesthandler/types/RequestBatchExecutionType.h + src/requesthandler/types/RequestBatchExecutionType.h) + +target_sources( + obs-websocket + PRIVATE src/utils/Compat.cpp + src/utils/Compat.h src/utils/Crypto.cpp src/utils/Crypto.h src/utils/Json.cpp src/utils/Json.h src/utils/Obs.cpp - src/utils/Obs_StringHelper.cpp - src/utils/Obs_NumberHelper.cpp - src/utils/Obs_ArrayHelper.cpp - src/utils/Obs_ObjectHelper.cpp - src/utils/Obs_SearchHelper.cpp - src/utils/Obs_ActionHelper.cpp src/utils/Obs.h + src/utils/Obs_ActionHelper.cpp + src/utils/Obs_ArrayHelper.cpp + src/utils/Obs_NumberHelper.cpp + src/utils/Obs_ObjectHelper.cpp + src/utils/Obs_StringHelper.cpp + src/utils/Obs_SearchHelper.cpp src/utils/Obs_VolumeMeter.cpp src/utils/Obs_VolumeMeter.h src/utils/Obs_VolumeMeter_Helpers.h src/utils/Platform.cpp src/utils/Platform.h - src/utils/Compat.cpp - src/utils/Compat.h - src/utils/Utils.h - deps/qr/cpp/QrCode.cpp - deps/qr/cpp/QrCode.hpp) + src/utils/Utils.h) + +target_sources(obs-websocket PRIVATE deps/qr/cpp/QrCode.cpp deps/qr/cpp/QrCode.hpp) + +configure_file(src/plugin-macros.h.in src/plugin-macros.generated.h) +target_sources(obs-websocket PRIVATE src/plugin-macros.generated.h) + +target_compile_definitions( + obs-websocket PRIVATE ASIO_STANDALONE $<$:PLUGIN_TESTS> + $<$:_WEBSOCKETPP_CPP11_STL_> $<$:_WIN32_WINNT=0x0603>) + +target_compile_options( + obs-websocket + PRIVATE + $<$:/wd4267> + $<$:/wd4996> + $<$:-Wall> + $<$:-Wno-error=float-conversion;-Wno-error=shadow> + $<$:-Wno-error=format-overflow;-Wno-error=int-conversion;-Wno-error=comment> + $<$:-Wno-error=null-pointer-subtraction;-Wno-error=deprecated-declarations;-Wno-error=implicit-int-conversion;-Wno-error=shorten-64-to-32> +) + +target_include_directories(obs-websocket PRIVATE deps/asio/asio/include deps/websocketpp) target_link_libraries( obs-websocket @@ -144,31 +156,17 @@ target_link_libraries( Websocketpp::Websocketpp Asio::Asio) -target_compile_features(obs-websocket PRIVATE cxx_std_17) +set_target_properties_obs( + obs-websocket + PROPERTIES FOLDER plugins + PREFIX "" + AUTOMOC ON + AUTOUIC ON + AUTORCC ON) -set_target_properties(obs-websocket PROPERTIES FOLDER "plugins/obs-websocket") - -if(PLUGIN_TESTS) - target_compile_definitions(obs-websocket PRIVATE PLUGIN_TESTS) +if(OS_WINDOWS) + set_property( + TARGET obs-websocket + APPEND + PROPERTY AUTORCC_OPTIONS --format-version 1) endif() - -# Random other things -if(WIN32) - add_definitions(-D_WEBSOCKETPP_CPP11_STL_) -endif() - -if(MSVC) - target_compile_options(obs-websocket PRIVATE /wd4267 /wd4996) -else() - target_compile_options( - obs-websocket - PRIVATE - -Wall - "$<$:-Wno-error=format-overflow>" - "$<$:-Wno-error=null-pointer-subtraction;-Wno-error=deprecated-declarations>" - ) -endif() - -# Final CMake helpers -setup_plugin_target(obs-websocket) -setup_target_resources(obs-websocket "obs-plugins/obs-websocket") diff --git a/cmake/legacy.cmake b/cmake/legacy.cmake new file mode 100644 index 00000000..77978e88 --- /dev/null +++ b/cmake/legacy.cmake @@ -0,0 +1,173 @@ +project(obs-websocket VERSION 5.1.0) +set(OBS_WEBSOCKET_RPC_VERSION 1) + +option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON) + +if(NOT ENABLE_WEBSOCKET OR NOT ENABLE_UI) + message(STATUS "OBS: DISABLED obs-websocket") + return() +endif() + +# Submodule deps check +if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/deps/qr/cpp/QrCode.hpp) + obs_status(FATAL_ERROR "obs-websocket submodule deps not available.") +endif() + +# Plugin tests flag +option(PLUGIN_TESTS "Enable plugin runtime tests" OFF) + +# Find Qt +find_qt(COMPONENTS Core Widgets Svg Network) + +# Find nlohmann JSON +find_package(nlohmann_json 3 REQUIRED) + +# Find WebSocket++ +find_package(Websocketpp 0.8 REQUIRED) + +# Find Asio +find_package(Asio 1.12.1 REQUIRED) + +# Tell websocketpp not to use system boost +add_definitions(-DASIO_STANDALONE) + +# Configure files +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin-macros.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin-macros.generated.h) + +# Setup target +add_library(obs-websocket MODULE) +add_library(OBS::websocket ALIAS obs-websocket) + +set_target_properties( + obs-websocket + PROPERTIES AUTOMOC ON + AUTOUIC ON + AUTORCC ON) + +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(obs-websocket PROPERTIES AUTORCC_OPTIONS "--format-version;1") +endif() + +target_sources( + obs-websocket + PRIVATE src/obs-websocket.cpp + src/obs-websocket.h + src/Config.cpp + src/Config.h + lib/obs-websocket-api.h + src/forms/SettingsDialog.cpp + src/forms/SettingsDialog.h + src/forms/ConnectInfo.cpp + src/forms/ConnectInfo.h + src/forms/resources.qrc + src/WebSocketApi.cpp + src/WebSocketApi.h + src/websocketserver/WebSocketServer.cpp + src/websocketserver/WebSocketServer_Protocol.cpp + src/websocketserver/WebSocketServer.h + src/websocketserver/rpc/WebSocketSession.cpp + src/websocketserver/rpc/WebSocketSession.h + src/websocketserver/types/WebSocketCloseCode.h + src/websocketserver/types/WebSocketOpCode.h + src/eventhandler/EventHandler.cpp + src/eventhandler/EventHandler_General.cpp + src/eventhandler/EventHandler_Config.cpp + src/eventhandler/EventHandler_Scenes.cpp + src/eventhandler/EventHandler_Inputs.cpp + src/eventhandler/EventHandler_Transitions.cpp + src/eventhandler/EventHandler_Filters.cpp + src/eventhandler/EventHandler_Outputs.cpp + src/eventhandler/EventHandler_SceneItems.cpp + src/eventhandler/EventHandler_MediaInputs.cpp + src/eventhandler/EventHandler_Ui.cpp + src/eventhandler/EventHandler.h + src/eventhandler/types/EventSubscription.h + src/requesthandler/RequestHandler.cpp + src/requesthandler/RequestHandler_General.cpp + src/requesthandler/RequestHandler_Config.cpp + src/requesthandler/RequestHandler_Sources.cpp + src/requesthandler/RequestHandler_Scenes.cpp + src/requesthandler/RequestHandler_Inputs.cpp + src/requesthandler/RequestHandler_Transitions.cpp + src/requesthandler/RequestHandler_Filters.cpp + src/requesthandler/RequestHandler_SceneItems.cpp + src/requesthandler/RequestHandler_Outputs.cpp + src/requesthandler/RequestHandler_Stream.cpp + src/requesthandler/RequestHandler_Record.cpp + src/requesthandler/RequestHandler_MediaInputs.cpp + src/requesthandler/RequestHandler_Ui.cpp + src/requesthandler/RequestHandler.h + src/requesthandler/RequestBatchHandler.cpp + src/requesthandler/RequestBatchHandler.h + src/requesthandler/rpc/Request.cpp + src/requesthandler/rpc/Request.h + src/requesthandler/rpc/RequestBatchRequest.cpp + src/requesthandler/rpc/RequestBatchRequest.h + src/requesthandler/rpc/RequestResult.cpp + src/requesthandler/rpc/RequestResult.h + src/requesthandler/types/RequestStatus.h + src/requesthandler/types/RequestBatchExecutionType.h + src/utils/Crypto.cpp + src/utils/Crypto.h + src/utils/Json.cpp + src/utils/Json.h + src/utils/Obs.cpp + src/utils/Obs_StringHelper.cpp + src/utils/Obs_NumberHelper.cpp + src/utils/Obs_ArrayHelper.cpp + src/utils/Obs_ObjectHelper.cpp + src/utils/Obs_SearchHelper.cpp + src/utils/Obs_ActionHelper.cpp + src/utils/Obs.h + src/utils/Obs_VolumeMeter.cpp + src/utils/Obs_VolumeMeter.h + src/utils/Obs_VolumeMeter_Helpers.h + src/utils/Platform.cpp + src/utils/Platform.h + src/utils/Compat.cpp + src/utils/Compat.h + src/utils/Utils.h + deps/qr/cpp/QrCode.cpp + deps/qr/cpp/QrCode.hpp) + +target_link_libraries( + obs-websocket + PRIVATE OBS::libobs + OBS::frontend-api + Qt::Core + Qt::Widgets + Qt::Svg + Qt::Network + nlohmann_json::nlohmann_json + Websocketpp::Websocketpp + Asio::Asio) + +target_compile_features(obs-websocket PRIVATE cxx_std_17) + +set_target_properties(obs-websocket PROPERTIES FOLDER "plugins/obs-websocket") + +if(PLUGIN_TESTS) + target_compile_definitions(obs-websocket PRIVATE PLUGIN_TESTS) +endif() + +# Random other things +if(WIN32) + add_definitions(-D_WEBSOCKETPP_CPP11_STL_) +endif() + +if(MSVC) + target_compile_options(obs-websocket PRIVATE /wd4267 /wd4996) +else() + target_compile_options( + obs-websocket + PRIVATE + -Wall + "$<$:-Wno-error=format-overflow>" + "$<$:-Wno-error=null-pointer-subtraction;-Wno-error=deprecated-declarations>" + ) +endif() + +# Final CMake helpers +setup_plugin_target(obs-websocket) +setup_target_resources(obs-websocket "obs-plugins/obs-websocket") diff --git a/cmake/macos/Info.plist.in b/cmake/macos/Info.plist.in new file mode 100644 index 00000000..398c3d9f --- /dev/null +++ b/cmake/macos/Info.plist.in @@ -0,0 +1,28 @@ + + + + + CFBundleName + obs-websocket + CFBundleIdentifier + com.obsproject.obs-websocket + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleExecutable + obs-websocket + CFBundlePackageType + BNDL + CFBundleSupportedPlatforms + + MacOSX + + LSMinimumSystemVersion + ${CMAKE_OSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + (c) 2016-${CURRENT_YEAR} Stéphane Lepin, Kyle Manning + + diff --git a/src/eventhandler/EventHandler_MediaInputs.cpp b/src/eventhandler/EventHandler_MediaInputs.cpp index 170644b0..96c3a8c7 100644 --- a/src/eventhandler/EventHandler_MediaInputs.cpp +++ b/src/eventhandler/EventHandler_MediaInputs.cpp @@ -198,4 +198,4 @@ void EventHandler::HandleMediaInputActionTriggered(obs_source_t *source, ObsMedi eventData["inputName"] = obs_source_get_name(source); eventData["mediaAction"] = GetMediaInputActionString(action); BroadcastEvent(EventSubscription::MediaInputs, "MediaInputActionTriggered", eventData); -} \ No newline at end of file +}