aae3a6a466
Status output related to OBS configuration is prefixed with the string "OBS" and added padding for enabled and disabled features. This padding was not aligned between platforms. By moving the padding and prefix decoration into its own function, both elements are controlled in a single place. CMake scripts were changed to use this new function `obs_status` instead of using CMake's `message` function directly.
182 lines
5.4 KiB
CMake
182 lines
5.4 KiB
CMake
project(obs-outputs)
|
|
|
|
if(NOT DEFINED ENABLE_RTMPS)
|
|
set(ENABLE_RTMPS
|
|
AUTO
|
|
CACHE STRING "Enable RTMPS support with mbedTLS" FORCE)
|
|
set_property(CACHE ENABLE_RTMPS PROPERTY STRINGS AUTO ON OFF)
|
|
endif()
|
|
|
|
option(ENABLE_STATIC_MBEDTLS "Enable statically linking mbedTLS into binary"
|
|
OFF)
|
|
mark_as_advanced(ENABLE_STATIC_MBEDTLS)
|
|
|
|
add_library(obs-outputs MODULE)
|
|
add_library(OBS::outputs ALIAS obs-outputs)
|
|
|
|
target_sources(
|
|
obs-outputs
|
|
PRIVATE obs-outputs.c
|
|
obs-output-ver.h
|
|
flv-mux.c
|
|
flv-mux.h
|
|
flv-output.c
|
|
net-if.c
|
|
net-if.h
|
|
null-output.c
|
|
rtmp-helpers.h
|
|
rtmp-stream.c
|
|
rtmp-stream.h
|
|
rtmp-windows.c)
|
|
|
|
target_link_libraries(obs-outputs PRIVATE OBS::libobs)
|
|
|
|
set_target_properties(obs-outputs PROPERTIES FOLDER "plugins" PREFIX "")
|
|
|
|
if(OS_WINDOWS)
|
|
set(MODULE_DESCRIPTION "OBS output module")
|
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
|
|
obs-outputs.rc)
|
|
|
|
target_sources(obs-outputs PRIVATE obs-outputs.rc)
|
|
|
|
if(MSVC)
|
|
target_link_libraries(obs-outputs PRIVATE OBS::w32-pthreads)
|
|
endif()
|
|
|
|
target_link_libraries(obs-outputs PRIVATE ws2_32 winmm Iphlpapi)
|
|
endif()
|
|
|
|
if(ENABLE_RTMPS STREQUAL "AUTO" OR ENABLE_RTMPS STREQUAL "ON")
|
|
find_package(MbedTLS)
|
|
find_package(ZLIB)
|
|
if(NOT MBEDTLS_FOUND OR NOT ZLIB_FOUND)
|
|
if(ENABLE_RTMPS STREQUAL "ON")
|
|
obs_status(FATAL_ERROR
|
|
"mbedTLS or zlib not found, but required for RTMPS support.")
|
|
return()
|
|
else()
|
|
obs_status(
|
|
WARNING
|
|
"mbedTLS or zlib was not found, RTMPS will be automatically disabled.")
|
|
target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
|
|
endif()
|
|
else()
|
|
target_sources(
|
|
obs-outputs
|
|
PRIVATE librtmp/amf.c
|
|
librtmp/amf.h
|
|
librtmp/bytes.h
|
|
librtmp/cencode.c
|
|
librtmp/cencode.h
|
|
librtmp/handshake.h
|
|
librtmp/hashswf.c
|
|
librtmp/http.h
|
|
librtmp/log.c
|
|
librtmp/log.h
|
|
librtmp/md5.c
|
|
librtmp/md5.h
|
|
librtmp/parseurl.c
|
|
librtmp/rtmp.c
|
|
librtmp/rtmp.h
|
|
librtmp/rtmp_sys.h)
|
|
|
|
target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO)
|
|
|
|
target_link_libraries(obs-outputs PRIVATE Mbedtls::Mbedtls ZLIB::ZLIB)
|
|
|
|
if(OS_WINDOWS)
|
|
target_link_libraries(obs-outputs PRIVATE crypt32)
|
|
|
|
elseif(OS_MACOS)
|
|
find_library(FOUNDATION_FRAMEWORK Foundation)
|
|
find_library(SECURITY_FRAMEWORK Security)
|
|
mark_as_advanced(FOUNDATION_FRAMEWORK SECURITY_FRAMEWORK)
|
|
|
|
target_link_libraries(obs-outputs PRIVATE ${FOUNDATION_FRAMEWORK}
|
|
${SECURITY_FRAMEWORK})
|
|
set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
|
|
|
elseif(OS_POSIX)
|
|
set_target_properties(obs-outputs PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
|
endif()
|
|
endif()
|
|
else()
|
|
target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO)
|
|
endif()
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_check_modules(FTL QUIET libftl)
|
|
endif()
|
|
|
|
if(FTL_FOUND)
|
|
find_package(CURL REQUIRED)
|
|
obs_status(ENABLED "ftl outputs (system ftl-sdk)")
|
|
|
|
target_sources(obs-outputs PRIVATE ftl-stream.c)
|
|
|
|
target_include_directories(obs-outputs PRIVATE ${FTL_INCLUDE_DIRS})
|
|
|
|
target_link_libraries(obs-outputs PRIVATE ${FTL_LIBRARIES} CURL::libcurl)
|
|
|
|
target_compile_features(obs-outputs PRIVATE c_std_11)
|
|
|
|
target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
|
|
|
|
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
|
|
find_package(CURL REQUIRED)
|
|
obs_status(ENABLED "ftl ouputs (bundled ftl-sdk)")
|
|
|
|
target_compile_definitions(obs-outputs PRIVATE FTL_STATIC_COMPILE)
|
|
|
|
target_compile_features(obs-outputs PRIVATE c_std_11)
|
|
|
|
target_link_libraries(obs-outputs PRIVATE Jansson::Jansson CURL::libcurl)
|
|
|
|
target_sources(
|
|
obs-outputs
|
|
PRIVATE ftl-stream.c
|
|
ftl-sdk/libftl/ftl.h
|
|
ftl-sdk/libftl/ftl_private.h
|
|
ftl-sdk/libftl/hmac/hmac.c
|
|
ftl-sdk/libftl/hmac/hmac.h
|
|
ftl-sdk/libftl/hmac/sha2.c
|
|
ftl-sdk/libftl/hmac/sha2.h
|
|
ftl-sdk/libftl/ftl-sdk.c
|
|
ftl-sdk/libftl/handshake.c
|
|
ftl-sdk/libftl/ingest.c
|
|
ftl-sdk/libftl/ftl_helpers.c
|
|
ftl-sdk/libftl/media.c
|
|
ftl-sdk/libftl/gettimeofday/gettimeofday.c
|
|
ftl-sdk/libftl/logging.c)
|
|
|
|
target_include_directories(obs-outputs
|
|
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl)
|
|
|
|
if(OS_WINDOWS)
|
|
target_sources(
|
|
obs-outputs
|
|
PRIVATE ftl-sdk/libftl/gettimeofday/gettimeofday.c
|
|
ftl-sdk/libftl/gettimeofday/gettimeofday.h
|
|
ftl-sdk/libftl/win32/socket.c
|
|
ftl-sdk/libftl/win32/threads.c
|
|
ftl-sdk/libftl/win32/threads.h)
|
|
|
|
target_include_directories(
|
|
obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/win32)
|
|
elseif(OS_POSIX)
|
|
target_sources(
|
|
obs-outputs
|
|
PRIVATE ftl-sdk/libftl/posix/socket.c ftl-sdk/libftl/posix/threads.c
|
|
ftl-sdk/libftl/posix/threads.h)
|
|
|
|
target_include_directories(
|
|
obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix)
|
|
endif()
|
|
|
|
target_compile_definitions(obs-outputs PRIVATE FTL_FOUND)
|
|
endif()
|
|
|
|
setup_plugin_target(obs-outputs)
|