The `add_target_resource` function uses unnecessary path components when copying files to the rundir, resulting in files added that way not to end up where OBS expects them to. The generated binaries created by sub-targets also need to be copied as part of `win-capture`'s data files, which was easy to fix as the target exists before CMake switches into the subdirectories.
420 lines
12 KiB
CMake
420 lines
12 KiB
CMake
# Helper function to set up runtime or library targets
|
|
function(setup_binary_target target)
|
|
_setup_binary_target(${ARGV})
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
TARGETS ${target}
|
|
RUNTIME
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_EXECUTABLE_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
LIBRARY DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_LIBRARY_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
PUBLIC_HEADER
|
|
DESTINATION ${OBS_INCLUDE_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION
|
|
$ENV{OBS_InstallerTempDir}/$<IF:$<STREQUAL:$<TARGET_PROPERTY:${target},TYPE>,EXECUTABLE>,${OBS_EXECUTABLE_DESTINATION},${OBS_LIBRARY_DESTINATION}>
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION
|
|
$<IF:$<STREQUAL:$<TARGET_PROPERTY:${target},TYPE>,EXECUTABLE>,${OBS_EXECUTABLE_DESTINATION},${OBS_LIBRARY_DESTINATION}>
|
|
COMPONENT ${target}_Runtime
|
|
OPTIONAL)
|
|
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION
|
|
$<IF:$<STREQUAL:$<TARGET_PROPERTY:${target},TYPE>,EXECUTABLE>,${OBS_EXECUTABLE_DESTINATION},${OBS_LIBRARY_DESTINATION}>
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(${target} STREQUAL "libobs")
|
|
setup_libobs_target(${target})
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to set up OBS plugin targets
|
|
function(setup_plugin_target target)
|
|
_setup_plugin_target(${ARGV})
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION ${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT ${target}_Runtime
|
|
OPTIONAL)
|
|
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION ${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
TARGETS ${target}
|
|
RUNTIME DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
LIBRARY DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to set up OBS scripting plugin targets
|
|
function(setup_script_plugin_target target)
|
|
_setup_script_plugin_target(${ARGV})
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
TARGETS ${target}
|
|
RUNTIME
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_SCRIPT_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
LIBRARY
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_SCRIPT_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_SCRIPT_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(${target} STREQUAL "obspython" AND ${_ARCH_SUFFIX} EQUAL 64)
|
|
install(
|
|
FILES
|
|
"$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_BASE_NAME:${target}>.py"
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_SCRIPT_PLUGIN_DESTINATION}
|
|
COMPONENT obs_${target}
|
|
EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to set up target resources (e.g. L10N files)
|
|
function(setup_target_resources target destination)
|
|
_setup_target_resources(${ARGV})
|
|
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data")
|
|
if(${_ARCH_SUFFIX} EQUAL 64 AND DEFINED ENV{OBS_InstallerTempDir})
|
|
|
|
install(
|
|
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
|
|
DESTINATION
|
|
$ENV{OBS_InstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT obs_${target}
|
|
EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to set up specific resource files for targets
|
|
function(add_target_resource)
|
|
set(target ${ARGV0})
|
|
set(resource ${ARGV1})
|
|
set(destination ${ARGV2})
|
|
if(${ARGC} EQUAL 4)
|
|
set(optional ${ARGV3})
|
|
else()
|
|
set(optional "")
|
|
endif()
|
|
|
|
install(
|
|
FILES ${resource}
|
|
DESTINATION ${OBS_DATA_DESTINATION}/${destination}
|
|
COMPONENT ${target}_Runtime
|
|
${optional})
|
|
|
|
install(
|
|
FILES ${resource}
|
|
DESTINATION ${OBS_DATA_DESTINATION}/${destination}
|
|
COMPONENT obs_${target}
|
|
${optional} EXCLUDE_FROM_ALL)
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
FILES ${resource}
|
|
DESTINATION
|
|
$ENV{OBS_InstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}
|
|
COMPONENT obs_${target}
|
|
${optional} EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to set up OBS app target
|
|
function(setup_obs_app target)
|
|
# detect outdated obs-browser submodule
|
|
if(NOT TARGET OBS::browser AND TARGET obs-browser)
|
|
if(MSVC)
|
|
target_compile_options(obs-browser PRIVATE $<IF:$<CONFIG:DEBUG>,/MTd,/MT>)
|
|
|
|
target_compile_options(obs-browser-page
|
|
PRIVATE $<IF:$<CONFIG:DEBUG>,/MTd,/MT>)
|
|
endif()
|
|
|
|
target_link_options(obs-browser PRIVATE "LINKER:/IGNORE:4099")
|
|
|
|
target_link_options(obs-browser-page PRIVATE "LINKER:/IGNORE:4099"
|
|
"LINKER:/SUBSYSTEM:WINDOWS")
|
|
endif()
|
|
|
|
_setup_obs_app(${ARGV})
|
|
|
|
if(MSVC)
|
|
include(CopyMSVCBins)
|
|
endif()
|
|
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_EXPORT_DESTINATION}"
|
|
COMPONENT obs_libraries
|
|
LIBRARY DESTINATION "${OBS_LIBRARY_EXPORT_DESTINATION}"
|
|
COMPONENT obs_libraries
|
|
ARCHIVE DESTINATION "${OBS_LIBRARY_EXPORT_DESTINATION}"
|
|
COMPONENT obs_libraries
|
|
INCLUDES
|
|
DESTINATION "${OBS_INCLUDE_DESTINATION}"
|
|
PUBLIC_HEADER DESTINATION "${OBS_INCLUDE_DESTINATION}"
|
|
COMPONENT obs_libraries)
|
|
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${target}>
|
|
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
DESTINATION "${OBS_EXECUTABLE_EXPORT_DESTINATION}"
|
|
COMPONENT obs_libraries
|
|
OPTIONAL EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
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}
|
|
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}
|
|
COMPONENT obs_libraries)
|
|
|
|
install(
|
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake
|
|
DESTINATION ${OBS_CMAKE_DESTINATION}
|
|
COMPONENT obs_libraries)
|
|
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}/Resources/
|
|
DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
DIRECTORY ${CEF_ROOT_DIR}/Resources/
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_PLUGIN_DESTINATION}
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
set(_ADDITIONAL_BROWSER_FILES
|
|
"libcef.dll"
|
|
"libEGL.dll"
|
|
"libGLESv2.dll"
|
|
"snapshot_blob.bin"
|
|
"v8_context_snapshot.bin"
|
|
"natives_blob.bin"
|
|
"chrome_elf.dll")
|
|
|
|
foreach(_ADDITIONAL_BROWSER_FILE IN LISTS _ADDITIONAL_BROWSER_FILES)
|
|
list(REMOVE_ITEM _ADDITIONAL_BROWSER_FILES "${_ADDITIONAL_BROWSER_FILE}")
|
|
if(EXISTS "${CEF_ROOT_DIR}/Release/${_ADDITIONAL_BROWSER_FILE}")
|
|
list(APPEND _ADDITIONAL_BROWSER_FILES
|
|
"${CEF_ROOT_DIR}/Release/${_ADDITIONAL_BROWSER_FILE}")
|
|
endif()
|
|
endforeach()
|
|
|
|
install(
|
|
FILES ${_ADDITIONAL_BROWSER_FILES}
|
|
DESTINATION ${OBS_PLUGIN_DESTINATION}/
|
|
COMPONENT ${target}_Runtime)
|
|
|
|
install(
|
|
FILES ${_ADDITIONAL_BROWSER_FILES}
|
|
DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}/
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
if(DEFINED ENV{OBS_InstallerTempDir})
|
|
install(
|
|
FILES ${_ADDITIONAL_BROWSER_FILES}
|
|
DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_PLUGIN_DESTINATION}/
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Helper function to gather external libraries depended-on by libobs
|
|
function(setup_libobs_target target)
|
|
set(_ADDITIONAL_FILES "${CMAKE_SOURCE_DIR}/additional_install_files")
|
|
|
|
if(DEFINED ENV{OBS_AdditionalInstallFiles})
|
|
set(_ADDITIONAL_FILES "$ENV{OBS_AdditionalInstallFiles}")
|
|
endif()
|
|
|
|
if(NOT INSTALLER_RUN)
|
|
list(APPEND _LIBOBS_FIXUPS "misc:." "data:${OBS_DATA_DESTINATION}"
|
|
"libs${_ARCH_SUFFIX}:${OBS_LIBRARY_DESTINATION}"
|
|
"exec${_ARCH_SUFFIX}:${OBS_EXECUTABLE_DESTINATION}")
|
|
else()
|
|
list(
|
|
APPEND
|
|
_LIBOBS_FIXUPS
|
|
"misc:."
|
|
"data:${OBS_DATA_DESTINATION}"
|
|
"libs32:${OBS_LIBRARY32_DESTINATION}"
|
|
"libs64:${OBS_LIBRARY64_DESTINATION}"
|
|
"exec32:${OBS_EXECUTABLE32_DESTINATION}"
|
|
"exec64:${OBS_EXECUTABLE64_DESTINATION}")
|
|
endif()
|
|
|
|
foreach(_FIXUP IN LISTS _LIBOBS_FIXUPS)
|
|
string(REPLACE ":" ";" _FIXUP ${_FIXUP})
|
|
list(GET _FIXUP 0 _SOURCE)
|
|
list(GET _FIXUP 1 _DESTINATION)
|
|
|
|
install(
|
|
DIRECTORY ${_ADDITIONAL_FILES}/${_SOURCE}/
|
|
DESTINATION ${_DESTINATION}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT ${target}_Runtime
|
|
PATTERN ".gitignore" EXCLUDE)
|
|
|
|
install(
|
|
DIRECTORY ${_ADDITIONAL_FILES}/${_SOURCE}/
|
|
DESTINATION ${_DESTINATION}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL
|
|
PATTERN ".gitignore" EXCLUDE)
|
|
|
|
if(_SOURCE MATCHES "(libs|exec)(32|64)?")
|
|
install(
|
|
DIRECTORY ${_ADDITIONAL_FILES}/${_SOURCE}$<IF:$<CONFIG:Debug>,d,r>/
|
|
DESTINATION ${_DESTINATION}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT ${target}_Runtime
|
|
PATTERN ".gitignore" EXCLUDE)
|
|
|
|
install(
|
|
DIRECTORY ${_ADDITIONAL_FILES}/${_SOURCE}$<IF:$<CONFIG:Debug>,d,r>/
|
|
DESTINATION ${_DESTINATION}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT obs_rundir
|
|
EXCLUDE_FROM_ALL
|
|
PATTERN ".gitignore" EXCLUDE)
|
|
endif()
|
|
endforeach()
|
|
endfunction()
|
|
|
|
# Helper function to compile artifacts for multi-architecture installer
|
|
function(generate_multiarch_installer)
|
|
if(NOT DEFINED ENV{OBS_InstallerTempDir} AND NOT DEFINED
|
|
ENV{obsInstallerTempDir})
|
|
obs_status(
|
|
FATAL_ERROR
|
|
"Function generate_multiarch_installer requires environment variable 'OBS_InstallerTempDir' to be set"
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(installer_files ALL)
|
|
|
|
setup_libobs_target(installer_files)
|
|
|
|
install(
|
|
DIRECTORY "$ENV{OBS_InstallerTempDir}/"
|
|
DESTINATION "."
|
|
USE_SOURCE_PERMISSIONS)
|
|
endfunction()
|