obs-studio/plugins/obs-outputs/CMakeLists.txt
Michael Goulet e67e2e12e6 obs-outputs: Add support for and use mbedTLS for SSL
This diff adds mbedTLS support to the obs-outputs plugin.  PolarSSL and
mbedTLS have grown so different between 2015-or-so when libRTMP was
written, and now it's no longer feasible to just use the USE_POLARSSL
flag.

This commit adds a WITH_RTMPS tri-state CMake variable (auto/on/off),
set to "Auto" by default.  "Auto" will use RTMPS if mbedTLS is found,
otherwise will disable RTMPS.  "On" will make it require mbedTLS,
otherwise fails configuration, and "Off" disables RTMPS support
altogether.

Closes obsproject/obs-studio#1360
2018-08-05 18:40:49 -07:00

173 lines
3.9 KiB
CMake

project(obs-outputs)
set(WITH_RTMPS AUTO CACHE STRING "Enable RTMPS support with mbedTLS")
set_property(CACHE WITH_RTMPS PROPERTY STRINGS AUTO ON OFF)
option(STATIC_MBEDTLS "Statically link mbedTLS into binary" OFF)
if (WITH_RTMPS OR (WITH_RTMPS STREQUAL "AUTO"))
find_package(MbedTLS QUIET)
find_package(ZLIB QUIET)
endif()
if (LIBMBEDTLS_FOUND AND ZLIB_FOUND)
add_definitions(-DCRYPTO -DUSE_MBEDTLS)
include_directories(${LIBMBEDTLS_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS})
else()
if(WITH_RTMPS STREQUAL "AUTO")
message(WARNING "mbedTLS was not found, RTMPS will be auto-disabled")
elseif (WITH_RTMPS)
message(FATAL_ERROR "RTMPS enabled by user, but mbedTLS was not found")
endif()
unset(LIBMBEDTLS_LIBRARIES)
unset(ZLIB_LIBRARIES)
add_definitions(-DNO_CRYPTO)
endif()
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
find_package(Libcurl REQUIRED)
add_definitions(-DFTL_STATIC_COMPILE)
include_directories(${LIBCURL_INCLUDE_DIRS})
set(ftl_SOURCES
ftl-stream.c
ftl-sdk/libftl/hmac/hmac.c
ftl-sdk/libftl/hmac/sha2.c
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)
set(ftl_HEADERS
ftl-sdk/libftl/hmac/hmac.h
ftl-sdk/libftl/hmac/sha2.h
ftl-sdk/libftl/ftl.h
ftl-sdk/libftl/ftl_private.h)
set(ftl_IMPORTS
${OBS_JANSSON_IMPORT}
${LIBCURL_LIBRARIES})
if (WIN32)
list(APPEND ftl_SOURCES
ftl-sdk/libftl/win32/socket.c
ftl-sdk/libftl/gettimeofday/gettimeofday.c
ftl-sdk/libftl/win32/threads.c)
list(APPEND ftl_HEADERS
ftl-sdk/libftl/gettimeofday/gettimeofday.h
ftl-sdk/libftl/win32/threads.h)
include_directories(ftl-sdk/libftl/win32)
else()
list(APPEND ftl_SOURCES
ftl-sdk/libftl/posix/socket.c
ftl-sdk/libftl/posix/threads.c)
list(APPEND ftl_HEADERS
ftl-sdk/libftl/posix/threads.h)
include_directories(ftl-sdk/libftl/posix)
endif()
include_directories(ftl-sdk/libftl)
set(COMPILE_FTL TRUE)
else()
set(COMPILE_FTL FALSE)
endif()
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/obs-outputs-config.h.in"
"${CMAKE_BINARY_DIR}/plugins/obs-outputs/config/obs-outputs-config.h")
include_directories("${CMAKE_BINARY_DIR}/plugins/obs-outputs/config")
if(WIN32)
set(obs-outputs_PLATFORM_DEPS
ws2_32
winmm
Iphlpapi)
if (WITH_RTMPS OR (WITH_RTMPS STREQUAL "AUTO"))
SET(obs-outputs_PLATFORM_DEPS
${obs-outputs_PLATFORM_DEPS}
crypt32)
endif()
endif()
if(MSVC)
set(obs-outputs_PLATFORM_DEPS
${obs-outputs_PLATFORM_DEPS}
w32-pthreads)
endif()
if(APPLE AND (WITH_RTMPS OR (WITH_RTMPS STREQUAL "AUTO")))
find_library(FOUNDATION_FRAMEWORK Foundation)
find_library(SECURITY_FRAMEWORK Security)
set(obs-outputs_PLATFORM_DEPS
${obs-outputs_PLATFORM_DEPS}
${FOUNDATION_FRAMEWORK}
${SECURITY_FRAMEWORK})
endif()
set(obs-outputs_librtmp_HEADERS
librtmp/amf.h
librtmp/bytes.h
librtmp/cencode.h
librtmp/dh.h
librtmp/dhgroups.h
librtmp/handshake.h
librtmp/http.h
librtmp/log.h
librtmp/md5.h
librtmp/rtmp.h
librtmp/rtmp_sys.h)
set(obs-outputs_librtmp_SOURCES
librtmp/amf.c
librtmp/cencode.c
librtmp/hashswf.c
librtmp/log.c
librtmp/md5.c
librtmp/parseurl.c
librtmp/rtmp.c)
if(NOT WIN32)
set_source_files_properties(${obs-outputs_librtmp_SOURCES} PROPERTIES
COMPILE_FLAGS "-fvisibility=hidden")
endif()
set(obs-outputs_HEADERS
"${CMAKE_BINARY_DIR}/plugins/obs-outputs/config/obs-outputs-config.h"
obs-output-ver.h
rtmp-helpers.h
rtmp-stream.h
net-if.h
flv-mux.h)
set(obs-outputs_SOURCES
obs-outputs.c
null-output.c
rtmp-stream.c
rtmp-windows.c
flv-output.c
flv-mux.c
net-if.c)
add_library(obs-outputs MODULE
${ftl_SOURCES}
${ftl_HEADERS}
${obs-outputs_SOURCES}
${obs-outputs_HEADERS}
${obs-outputs_librtmp_SOURCES}
${obs-outputs_librtmp_HEADERS})
target_link_libraries(obs-outputs
libobs
${LIBMBEDTLS_LIBRARIES}
${ZLIB_LIBRARIES}
${ftl_IMPORTS}
${obs-outputs_PLATFORM_DEPS})
install_obs_plugin_with_data(obs-outputs data)