503 lines
12 KiB
CMake
503 lines
12 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()
|
|
|
|
if(DEFINED ENV{YOUTUBE_CLIENTID} AND NOT DEFINED YOUTUBE_CLIENTID)
|
|
set(YOUTUBE_CLIENTID "$ENV{YOUTUBE_CLIENTID}")
|
|
endif()
|
|
if(DEFINED ENV{YOUTUBE_CLIENTID_HASH} AND NOT DEFINED YOUTUBE_CLIENTID_HASH)
|
|
set(YOUTUBE_CLIENTID_HASH "$ENV{YOUTUBE_CLIENTID_HASH}")
|
|
endif()
|
|
if(DEFINED ENV{YOUTUBE_SECRET} AND NOT DEFINED YOUTUBE_SECRET)
|
|
set(YOUTUBE_SECRET "$ENV{YOUTUBE_SECRET}")
|
|
endif()
|
|
if(DEFINED ENV{YOUTUBE_SECRET_HASH} AND NOT DEFINED YOUTUBE_SECRET_HASH)
|
|
set(YOUTUBE_SECRET_HASH "$ENV{YOUTUBE_SECRET_HASH}")
|
|
endif()
|
|
|
|
if(NOT DEFINED YOUTUBE_CLIENTID OR "${YOUTUBE_CLIENTID}" STREQUAL "" OR
|
|
NOT DEFINED YOUTUBE_SECRET OR "${YOUTUBE_SECRET}" STREQUAL "" OR
|
|
NOT DEFINED YOUTUBE_CLIENTID_HASH OR "${YOUTUBE_CLIENTID_HASH}" STREQUAL "" OR
|
|
NOT DEFINED YOUTUBE_SECRET_HASH OR "${YOUTUBE_SECRET_HASH}" STREQUAL "")
|
|
set(YOUTUBE_ENABLED FALSE)
|
|
else()
|
|
set(YOUTUBE_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(Threads REQUIRED)
|
|
|
|
find_package(Qt5Network ${FIND_MODE})
|
|
find_package(Qt5Widgets ${FIND_MODE})
|
|
find_package(Qt5Svg ${FIND_MODE})
|
|
if(WIN32 AND (Qt5Widgets_VERSION VERSION_LESS 6.0.0))
|
|
find_package(Qt5WinExtras ${FIND_MODE})
|
|
endif()
|
|
find_package(Qt5Xml ${FIND_MODE})
|
|
|
|
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
|
|
|
|
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(${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)
|
|
|
|
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(Qt5Gui REQUIRED)
|
|
find_package(PythonDeps QUIET)
|
|
|
|
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
|
|
|
set(obs_PLATFORM_SOURCES
|
|
platform-x11.cpp)
|
|
|
|
set(obs_PLATFORM_LIBRARIES
|
|
${obs_PLATFORM_LIBRARIES}
|
|
Qt5::Gui
|
|
Qt5::GuiPrivate)
|
|
|
|
|
|
if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
|
list(APPEND obs_PLATFORM_LIBRARIES
|
|
procstat)
|
|
endif()
|
|
endif()
|
|
|
|
if(BROWSER_AVAILABLE_INTERNAL)
|
|
list(APPEND obs_PLATFORM_SOURCES
|
|
window-dock-browser.cpp
|
|
window-extra-browsers.cpp
|
|
)
|
|
list(APPEND obs_PLATFORM_HEADERS
|
|
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()
|
|
|
|
if(YOUTUBE_ENABLED)
|
|
list(APPEND obs_PLATFORM_SOURCES
|
|
auth-youtube.cpp
|
|
youtube-api-wrappers.cpp
|
|
)
|
|
list(APPEND obs_PLATFORM_HEADERS
|
|
auth-youtube.hpp
|
|
youtube-api-wrappers.hpp
|
|
)
|
|
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
|
|
window-missing-files.cpp
|
|
auth-base.cpp
|
|
auth-oauth.cpp
|
|
auth-listener.cpp
|
|
obf.c
|
|
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
|
|
undo-stack-obs.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
|
|
window-missing-files.hpp
|
|
auth-base.hpp
|
|
auth-oauth.hpp
|
|
auth-listener.hpp
|
|
obf.h
|
|
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
|
|
undo-stack-obs.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/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/OBSMissingFiles.ui
|
|
forms/OBSAbout.ui)
|
|
|
|
set(obs_QRC
|
|
forms/obs.qrc)
|
|
|
|
if(YOUTUBE_ENABLED)
|
|
list(APPEND obs_SOURCES
|
|
window-youtube-actions.cpp
|
|
)
|
|
list(APPEND obs_HEADERS
|
|
window-youtube-actions.hpp
|
|
)
|
|
list(APPEND obs_UI
|
|
forms/OBSYoutubeActions.ui
|
|
)
|
|
endif()
|
|
|
|
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}")
|
|
|
|
if(Qt5Widgets_VERSION VERSION_LESS 6.0.0)
|
|
target_link_libraries(obs
|
|
Qt5::WinExtras)
|
|
endif()
|
|
endif()
|
|
|
|
target_link_libraries(obs
|
|
libobs
|
|
Threads::Threads
|
|
Qt5::Network
|
|
Qt5::Widgets
|
|
Qt5::Svg
|
|
Qt5::Xml
|
|
obs-frontend-api
|
|
${FFMPEG_LIBRARIES}
|
|
${LIBCURL_LIBRARIES}
|
|
${obs_PLATFORM_LIBRARIES})
|
|
|
|
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()
|
|
|
|
if (UNIX AND NOT APPLE)
|
|
# python symbols must be in the global symbol table
|
|
# so we link the main executable to python if we expect
|
|
# obs-scripting python support to be enabled.
|
|
# see: https://github.com/obsproject/obs-studio/issues/2222 and https://bugs.python.org/issue36721
|
|
if(NOT DISABLE_PYTHON AND PYTHONLIBS_FOUND)
|
|
target_link_libraries(obs ${PYTHON_LIBRARIES})
|
|
set_target_properties(obs PROPERTIES LINK_FLAGS "-Wl,--no-as-needed")
|
|
# Use this after cmake 3.13 aka we drop ubuntu 18.04.
|
|
# target_link_options(obs PRIVATE "LINKER:-no-as-needed")
|
|
endif()
|
|
endif()
|
|
|
|
add_subdirectory(frontend-plugins)
|
|
if(WIN32)
|
|
add_subdirectory(win-update/updater)
|
|
endif()
|