This repository has been archived on 2026-05-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Nils ebc9013c6e Enhance debugging capabilities and update build configuration
- Introduced a new debug logging mechanism by defining `dbg_log` for conditional logging based on the `DEBUG_BUILD` option.
- Updated `build.ps1` to include a debug flag for CMake configuration.
- Refactored logging calls across multiple source files to utilize the new `dbg_log` function, improving consistency and clarity in debug output.
- Added a new header file `debug-log.h` to centralize debug logging definitions.
2026-05-04 16:30:04 +02:00

171 lines
5.5 KiB
CMake

cmake_minimum_required(VERSION 3.16...3.28)
project(easy-irl-stream VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC OFF)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
# --- Plugin sources ---
add_library(easy-irl-stream MODULE
src/plugin-main.c
src/irl-source.c
src/ingest-thread.c
src/media-decoder.c
src/event-handler.c
src/webhook.c
src/srtla-server.c
src/remote-settings.c
src/watermark.c
src/obfuscation.cpp
src/help-dialog.cpp
src/stats-dialog.cpp
)
if(WIN32)
# ================================================================
# Windows: explicit dependency paths (set by build.ps1 or CI)
# ================================================================
set(OBS_SOURCE_DIR "" CACHE PATH "Path to obs-studio source tree (for headers)")
set(OBS_LIB_DIR "" CACHE PATH "Path to OBS import libraries (.lib)")
set(FFMPEG_DIR "" CACHE PATH "Path to FFmpeg dev package (include + lib)")
set(QT6_DIR "" CACHE PATH "Path to Qt6 dev package (include + lib)")
add_library(obs_lib SHARED IMPORTED)
set_target_properties(obs_lib PROPERTIES
IMPORTED_IMPLIB "${OBS_LIB_DIR}/obs.lib"
)
add_library(obs_frontend SHARED IMPORTED)
set_target_properties(obs_frontend PROPERTIES
IMPORTED_IMPLIB "${OBS_LIB_DIR}/obs-frontend-api.lib"
)
add_library(w32_pthreads SHARED IMPORTED)
set_target_properties(w32_pthreads PROPERTIES
IMPORTED_IMPLIB "${OBS_LIB_DIR}/w32-pthreads.lib"
)
foreach(_qt_mod Core Gui Widgets)
add_library(Qt6::${_qt_mod} SHARED IMPORTED)
set_target_properties(Qt6::${_qt_mod} PROPERTIES
IMPORTED_IMPLIB "${QT6_DIR}/lib/Qt6${_qt_mod}.lib"
)
endforeach()
target_include_directories(easy-irl-stream PRIVATE
"${OBS_SOURCE_DIR}/libobs"
"${OBS_SOURCE_DIR}/frontend/api"
"${OBS_SOURCE_DIR}/deps/w32-pthreads"
"${FFMPEG_DIR}/include"
"${QT6_DIR}/include"
"${QT6_DIR}/include/QtCore"
"${QT6_DIR}/include/QtGui"
"${QT6_DIR}/include/QtWidgets"
)
target_link_libraries(easy-irl-stream
obs_lib
obs_frontend
w32_pthreads
ws2_32
iphlpapi
shell32
Qt6::Core
Qt6::Gui
Qt6::Widgets
"${FFMPEG_DIR}/lib/avformat.lib"
"${FFMPEG_DIR}/lib/avcodec.lib"
"${FFMPEG_DIR}/lib/avutil.lib"
"${FFMPEG_DIR}/lib/swscale.lib"
"${FFMPEG_DIR}/lib/swresample.lib"
"${FFMPEG_DIR}/lib/libcurl_imp.lib"
)
target_compile_definitions(easy-irl-stream PRIVATE _CRT_SECURE_NO_WARNINGS)
target_compile_options(easy-irl-stream PRIVATE /Zc:__cplusplus /permissive- /utf-8)
else()
# ================================================================
# Linux / macOS: find system packages
# ================================================================
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBOBS REQUIRED IMPORTED_TARGET libobs)
pkg_check_modules(AVFORMAT REQUIRED IMPORTED_TARGET libavformat)
pkg_check_modules(AVCODEC REQUIRED IMPORTED_TARGET libavcodec)
pkg_check_modules(AVUTIL REQUIRED IMPORTED_TARGET libavutil)
pkg_check_modules(SWSCALE REQUIRED IMPORTED_TARGET libswscale)
pkg_check_modules(SWRESAMPLE REQUIRED IMPORTED_TARGET libswresample)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
find_package(CURL REQUIRED)
# obs-frontend-api: try pkg-config first, fall back to find_library
pkg_check_modules(OBS_FRONTEND IMPORTED_TARGET obs-frontend-api)
if(OBS_FRONTEND_FOUND)
set(_OBS_FRONTEND_TARGET PkgConfig::OBS_FRONTEND)
else()
find_library(OBS_FRONTEND_LIB obs-frontend-api)
if(OBS_FRONTEND_LIB)
add_library(obs_frontend_imported SHARED IMPORTED)
set_target_properties(obs_frontend_imported PROPERTIES
IMPORTED_LOCATION "${OBS_FRONTEND_LIB}"
)
set(_OBS_FRONTEND_TARGET obs_frontend_imported)
else()
message(WARNING "obs-frontend-api not found, linking by name")
set(_OBS_FRONTEND_TARGET obs-frontend-api)
endif()
endif()
# Optional: extra include dir for obs-frontend-api headers
set(OBS_FRONTEND_INCLUDE_DIR "" CACHE PATH
"Path to obs-frontend-api headers (frontend/api)")
if(OBS_FRONTEND_INCLUDE_DIR)
target_include_directories(easy-irl-stream PRIVATE
"${OBS_FRONTEND_INCLUDE_DIR}")
endif()
target_link_libraries(easy-irl-stream
PkgConfig::LIBOBS
${_OBS_FRONTEND_TARGET}
PkgConfig::AVFORMAT
PkgConfig::AVCODEC
PkgConfig::AVUTIL
PkgConfig::SWSCALE
PkgConfig::SWRESAMPLE
Qt6::Core
Qt6::Gui
Qt6::Widgets
CURL::libcurl
pthread
)
# Install targets
include(GNUInstallDirs)
install(TARGETS easy-irl-stream
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/obs-plugins")
endif()
if(DEFINED PLUGIN_VERSION_OVERRIDE)
set(_PLUGIN_VER "${PLUGIN_VERSION_OVERRIDE}")
else()
set(_PLUGIN_VER "${PROJECT_VERSION}")
endif()
option(DEBUG_BUILD "Debug build: show update dialog but don't stop server" OFF)
target_compile_definitions(easy-irl-stream PRIVATE
PLUGIN_VERSION="${_PLUGIN_VER}"
$<$<BOOL:${DEBUG_BUILD}>:DEBUG_BUILD>
)
set_target_properties(easy-irl-stream PROPERTIES PREFIX "")