| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 | 
							- # Set OS-specific constants in non-deprecated way
 
- include(GNUInstallDirs)
 
- if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
 
-   include(ObsDefaults_macOS)
 
-   set(OS_MACOS ON)
 
-   set(OS_POSIX ON)
 
- elseif(CMAKE_SYSTEM_NAME MATCHES "Linux|FreeBSD|OpenBSD")
 
-   include(ObsDefaults_Linux)
 
-   set(OS_POSIX ON)
 
-   string(TOUPPER "${CMAKE_SYSTEM_NAME}" _SYSTEM_NAME_U)
 
-   set(OS_${_SYSTEM_NAME_U} ON)
 
- elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
 
-   include(ObsDefaults_Windows)
 
-   set(OS_WINDOWS ON)
 
-   set(OS_POSIX OFF)
 
- endif()
 
- # Create global property to hold list of activated modules
 
- set_property(GLOBAL PROPERTY OBS_MODULE_LIST "")
 
- # ##############################################################################
 
- # GLOBAL HELPER FUNCTIONS #
 
- # ##############################################################################
 
- # Helper function to set up runtime or library targets
 
- function(setup_binary_target target)
 
-   # Set up installation paths for program install
 
-   install(
 
-     TARGETS ${target}
 
-     RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION}
 
-             COMPONENT ${target}_Runtime
 
-     LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION}
 
-             COMPONENT ${target}_Runtime
 
-             NAMELINK_COMPONENT ${target}_Development
 
-     ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION}
 
-             COMPONENT ${target}_Development
 
-     PUBLIC_HEADER DESTINATION ${OBS_INCLUDE_DESTINATION})
 
-   # Set up installation paths for development rundir
 
-   install(
 
-     TARGETS ${target}
 
-     RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION} COMPONENT obs_${target}
 
-     LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION} COMPONENT obs_${target}
 
-     PUBLIC_HEADER DESTINATION ${OBS_INCLUDE_DESTINATION} EXCLUDE_FROM_ALL)
 
-   add_custom_command(
 
-     TARGET ${target}
 
-     POST_BUILD
 
-     COMMAND
 
-       "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
 
-       ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
 
-       "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
 
-     COMMENT "Installing OBS rundir"
 
-     VERBATIM)
 
- endfunction()
 
- # Helper function to set up OBS plugin targets
 
- function(setup_plugin_target target)
 
-   set_target_properties(${target} PROPERTIES PREFIX "")
 
-   install(
 
-     TARGETS ${target}
 
-     RUNTIME DESTINATION ${OBS_PLUGIN_DESTINATION} COMPONENT ${target}_Runtime
 
-     LIBRARY DESTINATION ${OBS_PLUGIN_DESTINATION}
 
-             COMPONENT ${target}_Runtime
 
-             NAMELINK_COMPONENT ${target}_Development)
 
-   install(
 
-     TARGETS ${target}
 
-     RUNTIME DESTINATION ${OBS_PLUGIN_DESTINATION} COMPONENT obs_${target}
 
-     LIBRARY DESTINATION ${OBS_PLUGIN_DESTINATION}
 
-             COMPONENT obs_${target}
 
-             EXCLUDE_FROM_ALL)
 
-   setup_target_resources("${target}" "obs-plugins/${target}")
 
-   set_property(GLOBAL APPEND PROPERTY OBS_MODULE_LIST "${target}")
 
-   add_custom_command(
 
-     TARGET ${target}
 
-     POST_BUILD
 
-     COMMAND
 
-       "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
 
-       ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
 
-       "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
 
-     COMMENT "Installing ${target} to OBS rundir"
 
-     VERBATIM)
 
-   message(STATUS "OBS:   ENABLED   ${target}")
 
- endfunction()
 
- # Helper function to set up OBS scripting plugin targets
 
- function(setup_script_plugin_target target)
 
-   set_target_properties(${target} PROPERTIES PREFIX "")
 
-   install(
 
-     TARGETS ${target}
 
-     LIBRARY DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
 
-             COMPONENT ${target}_Runtime
 
-             NAMELINK_COMPONENT ${target}_Development)
 
-   install(
 
-     TARGETS ${target}
 
-     LIBRARY DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
 
-             COMPONENT obs_${target}
 
-             EXCLUDE_FROM_ALL)
 
-   if(${target} STREQUAL "obspython")
 
-     install(
 
-       FILES "$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_BASE_NAME:${target}>.py"
 
-       DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
 
-       COMPONENT ${target}_Runtime)
 
-     install(
 
-       FILES "$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_BASE_NAME:${target}>.py"
 
-       DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
 
-       COMPONENT obs_${target}
 
-       EXCLUDE_FROM_ALL)
 
-   endif()
 
-   set_property(GLOBAL APPEND PROPERTY OBS_SCRIPTING_MODULE_LIST "${target}")
 
-   add_custom_command(
 
-     TARGET ${target}
 
-     POST_BUILD
 
-     COMMAND
 
-       "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
 
-       ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
 
-       "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
 
-     COMMENT "Installing ${target} to OBS rundir"
 
-     VERBATIM)
 
-   message(STATUS "OBS:   ENABLED   ${target}")
 
- endfunction()
 
- # Helper function to set up target resources (e.g. L10N files)
 
- function(setup_target_resources target destination)
 
-   if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data")
 
-     install(
 
-       DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
 
-       DESTINATION ${OBS_DATA_DESTINATION}/${destination}
 
-       USE_SOURCE_PERMISSIONS
 
-       COMPONENT ${target}_Runtime)
 
-     install(
 
-       DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
 
-       DESTINATION ${OBS_DATA_DESTINATION}/${destination}
 
-       USE_SOURCE_PERMISSIONS
 
-       COMPONENT obs_${target}
 
-       EXCLUDE_FROM_ALL)
 
-   endif()
 
- endfunction()
 
- # Helper function to set up specific resource files for targets
 
- function(add_target_resource target resource destination)
 
-   install(
 
-     FILES ${resource}
 
-     DESTINATION ${OBS_DATA_DESTINATION}/${destination}
 
-     COMPONENT ${target}_Runtime)
 
-   install(
 
-     FILES ${resource}
 
-     DESTINATION
 
-       ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
 
-     COMPONENT obs_${target}
 
-     EXCLUDE_FROM_ALL)
 
- endfunction()
 
- # Helper function to set up OBS app target
 
- function(setup_obs_app target)
 
-   setup_binary_target(${target})
 
-   get_property(OBS_MODULE_LIST GLOBAL PROPERTY OBS_MODULE_LIST)
 
-   list(LENGTH OBS_MODULE_LIST _LEN)
 
-   if(_LEN GREATER 0)
 
-     add_dependencies(${target} ${OBS_MODULE_LIST})
 
-   endif()
 
-   get_property(OBS_SCRIPTING_MODULE_LIST GLOBAL
 
-                PROPERTY OBS_SCRIPTING_MODULE_LIST)
 
-   list(LENGTH OBS_SCRIPTING_MODULE_LIST _LEN)
 
-   if(_LEN GREATER 0)
 
-     add_dependencies(${target} ${OBS_SCRIPTING_MODULE_LIST})
 
-   endif()
 
-   # detect outdated obs-browser submodule
 
-   if(NOT TARGET OBS::browser AND TARGET obs-browser)
 
-     target_compile_features(obs-browser-page PRIVATE cxx_std_17)
 
-     add_library(OBS::browser ALIAS obs-browser)
 
-     if(NOT TARGET OBS::browser-panels AND BROWSER_PANEL_SUPPORT_ENABLED)
 
-       add_library(OBS::browser-panels ALIAS obs-browser)
 
-     endif()
 
-   endif()
 
-   if(TARGET OBS::browser)
 
-     setup_target_browser(${target})
 
-   endif()
 
-   if(TARGET OBS::ffmpeg-mux)
 
-     add_dependencies(${target} OBS::ffmpeg-mux)
 
-   endif()
 
-   add_custom_command(
 
-     TARGET ${target}
 
-     POST_BUILD
 
-     COMMAND
 
-       "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
 
-       ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_rundir >
 
-       "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
 
-     COMMENT "Installing OBS rundir"
 
-     VERBATIM)
 
- endfunction()
 
- # Helper function to do additional setup for browser source plugin
 
- function(setup_target_browser target)
 
-   install(
 
-     DIRECTORY ${CEF_ROOT_DIR}/Resources/
 
-     DESTINATION ${OBS_PLUGIN_DESTINATION}
 
-     COMPONENT ${target}_Runtime)
 
-   install(
 
-     DIRECTORY ${CEF_ROOT_DIR}/Release/
 
-     DESTINATION ${OBS_PLUGIN_DESTINATION}
 
-     COMPONENT ${target}_Runtime)
 
-   install(
 
-     DIRECTORY ${CEF_ROOT_DIR}/Resources/
 
-     DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}
 
-     COMPONENT obs_rundir
 
-     EXCLUDE_FROM_ALL)
 
-   install(
 
-     DIRECTORY ${CEF_ROOT_DIR}/Release/
 
-     DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}
 
-     COMPONENT obs_rundir
 
-     EXCLUDE_FROM_ALL)
 
- endfunction()
 
- # Helper function to export target to build and install tree. Allows usage of
 
- # `find_package(libobs)` by other build trees
 
- function(export_target target)
 
-   set(CMAKE_EXPORT_PACKAGE_REGISTRY OFF)
 
-   install(
 
-     TARGETS ${target}
 
-     EXPORT ${target}Targets
 
-     RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION} COMPONENT obs_libraries
 
-     LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION} COMPONENT obs_libraries
 
-     ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION} COMPONENT obs_libraries
 
-     INCLUDES
 
-     DESTINATION ${OBS_INCLUDE_DESTINATION}
 
-     PUBLIC_HEADER
 
-       DESTINATION ${OBS_INCLUDE_DESTINATION}
 
-       COMPONENT obs_libraries
 
-       EXCLUDE_FROM_ALL)
 
-   include(GenerateExportHeader)
 
-   generate_export_header(${target} EXPORT_FILE_NAME
 
-                          ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h)
 
-   target_sources(${target}
 
-                  PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h)
 
-   set(TARGETS_EXPORT_NAME "${target}Targets")
 
-   include(CMakePackageConfigHelpers)
 
-   configure_package_config_file(
 
-     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${target}Config.cmake.in
 
-     ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake
 
-     INSTALL_DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
 
-     PATH_VARS OBS_PLUGIN_DESTINATION OBS_DATA_DESTINATION)
 
-   write_basic_package_version_file(
 
-     ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake
 
-     VERSION ${OBS_VERSION_CANONICAL}
 
-     COMPATIBILITY SameMajorVersion)
 
-   export(
 
-     EXPORT ${target}Targets
 
-     FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGETS_EXPORT_NAME}.cmake
 
-     NAMESPACE OBS::)
 
-   export(PACKAGE "${target}")
 
-   install(
 
-     EXPORT ${TARGETS_EXPORT_NAME}
 
-     FILE ${TARGETS_EXPORT_NAME}.cmake
 
-     NAMESPACE OBS::
 
-     DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
 
-     COMPONENT obs_libraries
 
-     EXCLUDE_FROM_ALL)
 
-   install(
 
-     FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake
 
-           ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake
 
-     DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
 
-     COMPONENT obs_libraries
 
-     EXCLUDE_FROM_ALL)
 
- endfunction()
 
- # Helper function to install header files
 
- function(install_headers target)
 
-   install(
 
-     DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
 
-     DESTINATION ${OBS_INCLUDE_DESTINATION}
 
-     COMPONENT obs_libraries
 
-     EXCLUDE_FROM_ALL FILES_MATCHING
 
-     PATTERN "*.h"
 
-     PATTERN "*.hpp"
 
-     PATTERN "cmake" EXCLUDE
 
-     PATTERN "pkgconfig" EXCLUDE
 
-     PATTERN "data" EXCLUDE)
 
-   if(NOT EXISTS "${OBS_INCLUDE_DESTINATION}/obsconfig.h")
 
-     install(
 
-       FILES "${CMAKE_BINARY_DIR}/config/obsconfig.h"
 
-       DESTINATION "${OBS_INCLUDE_DESTINATION}"
 
-       COMPONENT obs_libraries
 
-       EXCLUDE_FROM_ALL)
 
-   endif()
 
- endfunction()
 
- # Helper function to define available graphics modules for targets
 
- function(define_graphic_modules target)
 
-   foreach(_GRAPHICS_API metal d3d11 opengl d3d9)
 
-     string(TOUPPER ${_GRAPHICS_API} _GRAPHICS_API_u)
 
-     if(TARGET OBS::libobs-${_GRAPHICS_API})
 
-       if(OS_POSIX AND NOT LINUX_PORTABLE)
 
-         target_compile_definitions(
 
-           ${target}
 
-           PRIVATE
 
-             DL_${_GRAPHICS_API_u}="$<TARGET_SONAME_FILE_NAME:libobs-${_GRAPHICS_API}>"
 
-         )
 
-       else()
 
-         target_compile_definitions(
 
-           ${target}
 
-           PRIVATE
 
-             DL_${_GRAPHICS_API_u}="$<TARGET_FILE_NAME:libobs-${_GRAPHICS_API}>")
 
-       endif()
 
-       add_dependencies(${target} OBS::libobs-${_GRAPHICS_API})
 
-     else()
 
-       target_compile_definitions(${target} PRIVATE DL_${_GRAPHICS_API_u}="")
 
-     endif()
 
-   endforeach()
 
- endfunction()
 
- macro(find_qt)
 
-   set(oneValueArgs VERSION)
 
-   set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX)
 
-   cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}"
 
-                         ${ARGN})
 
-   if(OS_WINDOWS)
 
-     find_package(
 
-       Qt${FIND_QT_VERSION}
 
-       COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_WIN}
 
-       REQUIRED)
 
-   elseif(OS_MACOS)
 
-     find_package(
 
-       Qt${FIND_QT_VERSION}
 
-       COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_MAC}
 
-       REQUIRED)
 
-   else()
 
-     find_package(
 
-       Qt${FIND_QT_VERSION}
 
-       COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_LINUX}
 
-       REQUIRED)
 
-   endif()
 
-   foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN
 
-                               FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX)
 
-     if(NOT TARGET Qt::${_COMPONENT} AND TARGET
 
-                                         Qt${FIND_QT_VERSION}::${_COMPONENT})
 
-       add_library(Qt::${_COMPONENT} INTERFACE IMPORTED)
 
-       set_target_properties(
 
-         Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES
 
-                                      "Qt${FIND_QT_VERSION}::${_COMPONENT}")
 
-     endif()
 
-   endforeach()
 
- endmacro()
 
- # Idea adapted from: https://github.com/edsiper/cmake-options
 
- macro(set_option option value)
 
-   set(${option}
 
-       ${value}
 
-       CACHE INTERNAL "")
 
- endmacro()
 
- if(OS_WINDOWS)
 
-   include(ObsHelpers_Windows)
 
- elseif(OS_MACOS)
 
-   include(ObsHelpers_macOS)
 
- elseif(OS_POSIX)
 
-   include(ObsHelpers_Linux)
 
- endif()
 
- # ##############################################################################
 
- # LEGACY FALLBACKS     #
 
- # ##############################################################################
 
- # Helper function to install OBS plugin with associated resource directory
 
- function(_install_obs_plugin_with_data target source)
 
-   setup_plugin_target(${target})
 
-   if(NOT ${source} STREQUAL "data"
 
-      AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${source}"
 
-      AND NOT OS_MACOS)
 
-     install(
 
-       DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
 
-       DESTINATION ${OBS_DATA_DESTINATION}/obs-plugins/${target}
 
-       USE_SOURCE_PERMISSIONS
 
-       COMPONENT ${target}_Runtime)
 
-     install(
 
-       DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
 
-       DESTINATION
 
-         ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_DATA_DESTINATION}/obs-plugins/${target}
 
-       COMPONENT obs_${target}
 
-       EXCLUDE_FROM_ALL)
 
-     if(OS_WINDOWS AND DEFINED ENV{obsInstallerTempDir})
 
-       install(
 
-         DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
 
-         DESTINATION
 
-           $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/obs-plugins/${target}
 
-         COMPONENT obs_${target}
 
-         EXCLUDE_FROM_ALL)
 
-     endif()
 
-   endif()
 
- endfunction()
 
- # Helper function to install OBS plugin
 
- function(_install_obs_plugin target)
 
-   setup_plugin_target(${target})
 
- endfunction()
 
- # Helper function to install data for a target only
 
- function(_install_obs_datatarget target destination)
 
-   install(
 
-     TARGETS ${target}
 
-     LIBRARY DESTINATION ${OBS_DATA_DESTINATION}/${destination}
 
-             COMPONENT ${target}_Runtime
 
-             NAMELINK_COMPONENT ${target}_Development
 
-     RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination}
 
-             COMPONENT ${target}_Runtime)
 
-   install(
 
-     TARGETS ${target}
 
-     LIBRARY
 
-       DESTINATION
 
-         ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
 
-       COMPONENT obs_${target}
 
-     RUNTIME
 
-       DESTINATION
 
-         ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
 
-       COMPONENT obs_${target}
 
-       EXCLUDE_FROM_ALL)
 
-   if(OS_WINDOWS)
 
-     if(MSVC)
 
-       add_target_resource(${target} "$<TARGET_PDB_FILE:${target}>"
 
-                           "${destination}")
 
-     endif()
 
-     if(DEFINED ENV{obsInstallerTempDir})
 
-       install(
 
-         TARGETS ${target}
 
-         RUNTIME
 
-           DESTINATION
 
-             $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$<TARGET_FILE_NAME:${target}>
 
-         LIBRARY
 
-           DESTINATION
 
-             $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$<TARGET_FILE_NAME:${target}>
 
-           COMPONENT obs_${target}
 
-           EXCLUDE_FROM_ALL)
 
-     endif()
 
-   endif()
 
- endfunction()
 
 
  |