50d3130b64
The old version of the device toolbar was a complex situation. Because of the fact that device properties can take significant time to query, this put an unpleasant burden on the UI thread; so to fix this problem, the device toolbar was made to be threaded. However, threading is a complex and dangerous thing, and there is a fear that this could cause complications down the line whenever users are simply selecting devices. So for the time being, as a safety precaution, simplify the device toolbar down to just the "activate" button, and make it so that if users really need to query and change the devices, that they need to explicitly open the properties. That way the devices aren't being queried constantly every time a device source is selected. Alternatively in the future, device enumeration could be cached, but seeing as that's a significant amount of work and needs to take in to account whether a user adds/removes a device while the process is active, that's not going to happen any time soon.
425 lines
9.7 KiB
CMake
425 lines
9.7 KiB
CMake
if(DISABLE_UI)
|
|
message(STATUS "UI disabled")
|
|
return()
|
|
elseif(ENABLE_UI)
|
|
set(FIND_MODE REQUIRED)
|
|
else()
|
|
set(FIND_MODE QUIET)
|
|
endif()
|
|
|
|
if(BROWSER_AVAILABLE_INTERNAL)
|
|
add_definitions(-DBROWSER_AVAILABLE)
|
|
endif()
|
|
|
|
add_subdirectory(obs-frontend-api)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
|
|
project(obs)
|
|
|
|
set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
|
|
|
|
if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR
|
|
NOT DEFINED TWITCH_HASH OR "${TWITCH_HASH}" STREQUAL "" OR
|
|
NOT BROWSER_AVAILABLE_INTERNAL)
|
|
set(TWITCH_ENABLED FALSE)
|
|
set(TWITCH_CLIENTID "")
|
|
set(TWITCH_HASH "0")
|
|
else()
|
|
set(TWITCH_ENABLED TRUE)
|
|
endif()
|
|
|
|
if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR
|
|
NOT DEFINED RESTREAM_HASH OR "${RESTREAM_HASH}" STREQUAL "" OR
|
|
NOT BROWSER_AVAILABLE_INTERNAL)
|
|
set(RESTREAM_ENABLED FALSE)
|
|
set(RESTREAM_CLIENTID "")
|
|
set(RESTREAM_HASH "0")
|
|
else()
|
|
set(RESTREAM_ENABLED TRUE)
|
|
endif()
|
|
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
|
set(CMAKE_AUTOMOC TRUE)
|
|
|
|
find_package(Qt5Widgets ${FIND_MODE})
|
|
find_package(Qt5Svg ${FIND_MODE})
|
|
find_package(Qt5Xml ${FIND_MODE})
|
|
|
|
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
|
|
|
|
if(APPLE)
|
|
find_package(Qt5MacExtras REQUIRED)
|
|
endif(APPLE)
|
|
|
|
if(NOT Qt5Widgets_FOUND)
|
|
if (ENABLE_UI)
|
|
message(FATAL_ERROR "Failed to find Qt5")
|
|
else()
|
|
message(STATUS "Qt5 not found - UI disabled")
|
|
return()
|
|
endif()
|
|
endif()
|
|
|
|
|
|
include_directories(${FFMPEG_INCLUDE_DIRS})
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
include_directories(SYSTEM "obs-frontend-api")
|
|
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
|
|
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
|
|
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
|
|
if(BROWSER_AVAILABLE_INTERNAL)
|
|
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
|
|
endif()
|
|
|
|
find_package(Libcurl REQUIRED)
|
|
include_directories(${LIBCURL_INCLUDE_DIRS})
|
|
add_definitions(${LIBCURL_DEFINITIONS})
|
|
|
|
if(WIN32)
|
|
include_directories(${OBS_JANSSON_INCLUDE_DIRS})
|
|
include_directories(${BLAKE2_INCLUDE_DIR})
|
|
|
|
set(obs_PLATFORM_SOURCES
|
|
platform-windows.cpp
|
|
win-update/update-window.cpp
|
|
win-update/win-update.cpp
|
|
win-update/win-update-helpers.cpp
|
|
${obs-studio_BINARY_DIR}/obs.rc)
|
|
set(obs_PLATFORM_HEADERS
|
|
win-update/update-window.hpp
|
|
win-update/win-update.hpp
|
|
win-update/win-update-helpers.hpp)
|
|
set(obs_PLATFORM_LIBRARIES
|
|
crypt32
|
|
blake2
|
|
${OBS_JANSSON_IMPORT})
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
|
endif()
|
|
elseif(APPLE)
|
|
set(obs_PLATFORM_SOURCES
|
|
platform-osx.mm)
|
|
|
|
find_package(AppKit REQUIRED)
|
|
set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
|
|
|
|
add_definitions(-fobjc-arc)
|
|
|
|
option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
|
|
if(ENABLE_SPARKLE_UPDATER)
|
|
find_library(SPARKLE Sparkle)
|
|
include_directories(${SPARKLE})
|
|
set(obs_PLATFORM_SOURCES
|
|
${obs_PLATFORM_SOURCES}
|
|
sparkle-updater.mm)
|
|
set(obs_PLATFORM_LIBRARIES
|
|
${obs_PLATFORM_LIBRARIES}
|
|
${SPARKLE})
|
|
add_definitions(-DUPDATE_SPARKLE=1)
|
|
endif()
|
|
|
|
elseif(UNIX)
|
|
find_package(Qt5X11Extras REQUIRED)
|
|
|
|
set(obs_PLATFORM_SOURCES
|
|
platform-x11.cpp)
|
|
|
|
set(obs_PLATFORM_LIBRARIES
|
|
Qt5::X11Extras)
|
|
endif()
|
|
|
|
if(BROWSER_AVAILABLE_INTERNAL)
|
|
list(APPEND obs_PLATFORM_SOURCES
|
|
obf.c
|
|
auth-oauth.cpp
|
|
window-dock-browser.cpp
|
|
window-extra-browsers.cpp
|
|
)
|
|
list(APPEND obs_PLATFORM_HEADERS
|
|
obf.h
|
|
auth-oauth.hpp
|
|
window-dock-browser.hpp
|
|
window-extra-browsers.hpp
|
|
)
|
|
|
|
if(TWITCH_ENABLED)
|
|
list(APPEND obs_PLATFORM_SOURCES
|
|
auth-twitch.cpp
|
|
)
|
|
list(APPEND obs_PLATFORM_HEADERS
|
|
auth-twitch.hpp
|
|
)
|
|
endif()
|
|
|
|
if(RESTREAM_ENABLED)
|
|
list(APPEND obs_PLATFORM_SOURCES
|
|
auth-restream.cpp
|
|
)
|
|
list(APPEND obs_PLATFORM_HEADERS
|
|
auth-restream.hpp
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
set(obs_libffutil_SOURCES
|
|
../deps/libff/libff/ff-util.c
|
|
)
|
|
set(obs_libffutil_HEADERS
|
|
../deps/libff/libff/ff-util.h
|
|
)
|
|
|
|
if(MSVC)
|
|
set_source_files_properties(
|
|
../deps/libff/libff/ff-util.c
|
|
PROPERTIES COMPILE_FLAGS -Dinline=__inline
|
|
)
|
|
set(obs_PLATFORM_LIBRARIES
|
|
${obs_PLATFORM_LIBRARIES}
|
|
w32-pthreads)
|
|
endif()
|
|
|
|
set(obs_SOURCES
|
|
${obs_PLATFORM_SOURCES}
|
|
${obs_libffutil_SOURCES}
|
|
../deps/json11/json11.cpp
|
|
obs-app.cpp
|
|
window-dock.cpp
|
|
api-interface.cpp
|
|
window-basic-main.cpp
|
|
window-basic-stats.cpp
|
|
window-basic-filters.cpp
|
|
window-basic-settings.cpp
|
|
window-basic-interaction.cpp
|
|
window-basic-properties.cpp
|
|
window-basic-auto-config.cpp
|
|
window-basic-main-outputs.cpp
|
|
window-basic-source-select.cpp
|
|
window-basic-settings-stream.cpp
|
|
window-basic-main-screenshot.cpp
|
|
window-basic-auto-config-test.cpp
|
|
window-basic-main-scene-collections.cpp
|
|
window-basic-main-transitions.cpp
|
|
window-basic-main-dropfiles.cpp
|
|
window-basic-main-profiles.cpp
|
|
window-basic-main-browser.cpp
|
|
window-basic-main-icons.cpp
|
|
window-basic-status-bar.cpp
|
|
window-basic-adv-audio.cpp
|
|
window-basic-transform.cpp
|
|
window-basic-preview.cpp
|
|
window-basic-about.cpp
|
|
window-importer.cpp
|
|
media-controls.cpp
|
|
window-namedialog.cpp
|
|
window-log-reply.cpp
|
|
window-projector.cpp
|
|
window-remux.cpp
|
|
auth-base.cpp
|
|
source-tree.cpp
|
|
scene-tree.cpp
|
|
properties-view.cpp
|
|
focus-list.cpp
|
|
menu-button.cpp
|
|
double-slider.cpp
|
|
slider-ignorewheel.cpp
|
|
combobox-ignorewheel.cpp
|
|
spinbox-ignorewheel.cpp
|
|
record-button.cpp
|
|
ui-validation.cpp
|
|
url-push-button.cpp
|
|
volume-control.cpp
|
|
adv-audio-control.cpp
|
|
item-widget-helpers.cpp
|
|
context-bar-controls.cpp
|
|
horizontal-scroll-area.cpp
|
|
vertical-scroll-area.cpp
|
|
visibility-item-widget.cpp
|
|
slider-absoluteset-style.cpp
|
|
qt-display.cpp
|
|
crash-report.cpp
|
|
hotkey-edit.cpp
|
|
source-label.cpp
|
|
remote-text.cpp
|
|
audio-encoders.cpp
|
|
qt-wrappers.cpp
|
|
log-viewer.cpp
|
|
obs-proxy-style.cpp
|
|
locked-checkbox.cpp
|
|
visibility-checkbox.cpp
|
|
media-slider.cpp)
|
|
|
|
set(obs_HEADERS
|
|
${obs_PLATFORM_HEADERS}
|
|
${obs_libffutil_HEADERS}
|
|
../deps/json11/json11.hpp
|
|
obs-app.hpp
|
|
platform.hpp
|
|
window-dock.hpp
|
|
window-main.hpp
|
|
window-basic-main.hpp
|
|
window-basic-stats.hpp
|
|
window-basic-filters.hpp
|
|
window-basic-settings.hpp
|
|
window-basic-interaction.hpp
|
|
window-basic-properties.hpp
|
|
window-basic-auto-config.hpp
|
|
window-basic-main-outputs.hpp
|
|
window-basic-source-select.hpp
|
|
window-basic-about.hpp
|
|
window-basic-status-bar.hpp
|
|
window-basic-adv-audio.hpp
|
|
window-basic-transform.hpp
|
|
window-basic-preview.hpp
|
|
window-importer.hpp
|
|
media-controls.hpp
|
|
window-namedialog.hpp
|
|
window-log-reply.hpp
|
|
window-projector.hpp
|
|
window-remux.hpp
|
|
auth-base.hpp
|
|
source-tree.hpp
|
|
scene-tree.hpp
|
|
properties-view.hpp
|
|
properties-view.moc.hpp
|
|
display-helpers.hpp
|
|
balance-slider.hpp
|
|
double-slider.hpp
|
|
slider-ignorewheel.hpp
|
|
combobox-ignorewheel.hpp
|
|
spinbox-ignorewheel.hpp
|
|
focus-list.hpp
|
|
menu-button.hpp
|
|
mute-checkbox.hpp
|
|
record-button.hpp
|
|
ui-validation.hpp
|
|
screenshot-obj.hpp
|
|
url-push-button.hpp
|
|
volume-control.hpp
|
|
adv-audio-control.hpp
|
|
item-widget-helpers.hpp
|
|
visibility-checkbox.hpp
|
|
context-bar-controls.hpp
|
|
locked-checkbox.hpp
|
|
horizontal-scroll-area.hpp
|
|
expand-checkbox.hpp
|
|
vertical-scroll-area.hpp
|
|
visibility-item-widget.hpp
|
|
slider-absoluteset-style.hpp
|
|
qt-display.hpp
|
|
crash-report.hpp
|
|
hotkey-edit.hpp
|
|
source-label.hpp
|
|
remote-text.hpp
|
|
audio-encoders.hpp
|
|
qt-wrappers.hpp
|
|
clickable-label.hpp
|
|
log-viewer.hpp
|
|
obs-proxy-style.hpp
|
|
obs-proxy-style.hpp
|
|
media-slider.hpp)
|
|
|
|
set(obs_importers_HEADERS
|
|
importers/importers.hpp)
|
|
|
|
set(obs_importers_SOURCES
|
|
importers/importers.cpp
|
|
importers/classic.cpp
|
|
importers/sl.cpp
|
|
importers/studio.cpp
|
|
importers/xsplit.cpp)
|
|
|
|
source_group("importers\\Source Files" FILES ${obs_importers_SOURCES})
|
|
source_group("importers\\Header Files" FILES ${obs_importers_HEADERS})
|
|
|
|
set(obs_UI
|
|
forms/source-toolbar/browser-source-toolbar.ui
|
|
forms/source-toolbar/device-select-toolbar.ui
|
|
forms/source-toolbar/game-capture-toolbar.ui
|
|
forms/source-toolbar/image-source-toolbar.ui
|
|
forms/source-toolbar/color-source-toolbar.ui
|
|
forms/source-toolbar/text-source-toolbar.ui
|
|
forms/source-toolbar/media-controls.ui
|
|
forms/NameDialog.ui
|
|
forms/AutoConfigStartPage.ui
|
|
forms/AutoConfigVideoPage.ui
|
|
forms/AutoConfigStreamPage.ui
|
|
forms/AutoConfigTestPage.ui
|
|
forms/ColorSelect.ui
|
|
forms/OBSLogReply.ui
|
|
forms/OBSBasic.ui
|
|
forms/OBSBasicTransform.ui
|
|
forms/OBSBasicFilters.ui
|
|
forms/OBSBasicSettings.ui
|
|
forms/OBSBasicSourceSelect.ui
|
|
forms/OBSBasicInteraction.ui
|
|
forms/OBSExtraBrowsers.ui
|
|
forms/OBSUpdate.ui
|
|
forms/OBSRemux.ui
|
|
forms/OBSImporter.ui
|
|
forms/OBSAbout.ui)
|
|
|
|
set(obs_QRC
|
|
forms/obs.qrc)
|
|
|
|
qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
|
|
qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
|
|
|
|
add_executable(obs WIN32
|
|
obs.manifest
|
|
${obs_SOURCES}
|
|
${obs_HEADERS}
|
|
${obs_importers_SOURCES}
|
|
${obs_importers_HEADERS}
|
|
${obs_UI_HEADERS}
|
|
${obs_QRC_SOURCES})
|
|
|
|
if(WIN32)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(_output_suffix "64")
|
|
else()
|
|
set(_output_suffix "32")
|
|
endif()
|
|
|
|
set_target_properties(obs
|
|
PROPERTIES
|
|
OUTPUT_NAME "obs${_output_suffix}")
|
|
endif()
|
|
|
|
target_link_libraries(obs
|
|
libobs
|
|
Qt5::Widgets
|
|
Qt5::Svg
|
|
Qt5::Xml
|
|
obs-frontend-api
|
|
${FFMPEG_LIBRARIES}
|
|
${LIBCURL_LIBRARIES}
|
|
${obs_PLATFORM_LIBRARIES})
|
|
|
|
if (APPLE)
|
|
target_link_libraries(obs
|
|
Qt5::MacExtras)
|
|
set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
|
|
endif()
|
|
set_target_properties(obs PROPERTIES FOLDER "frontend")
|
|
|
|
define_graphic_modules(obs)
|
|
|
|
install_obs_core(obs)
|
|
install_obs_data(obs data obs-studio)
|
|
install_obs_data_file(obs ../AUTHORS obs-studio/authors)
|
|
|
|
if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
|
|
add_subdirectory(xdg-data)
|
|
endif()
|
|
|
|
add_subdirectory(frontend-plugins)
|
|
if(WIN32)
|
|
add_subdirectory(win-update/updater)
|
|
endif()
|