obs-studio/plugins/obs-outputs/CMakeLists.txt
PatTheMav aae3a6a466 cmake: Fix diverging prefix padding for OBS status outputs
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.
2022-03-26 09:44:23 -04:00

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)