From d42c98fa220f85fb3d971a5dac95a81ba62b5fe1 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 30 Mar 2022 11:10:54 +0200 Subject: [PATCH] win-capture: Fix added resources not properly copied to rundir 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. --- cmake/Modules/ObsHelpers.cmake | 29 +++++++++++-------- cmake/Modules/ObsHelpers_Windows.cmake | 25 ++++++++++++++-- .../get-graphics-offsets/CMakeLists.txt | 9 +++--- .../win-capture/graphics-hook/CMakeLists.txt | 22 +++++--------- .../win-capture/inject-helper/CMakeLists.txt | 8 +++-- 5 files changed, 56 insertions(+), 37 deletions(-) diff --git a/cmake/Modules/ObsHelpers.cmake b/cmake/Modules/ObsHelpers.cmake index d5d156604..71288cab9 100644 --- a/cmake/Modules/ObsHelpers.cmake +++ b/cmake/Modules/ObsHelpers.cmake @@ -157,8 +157,7 @@ function(add_target_resource target resource destination) install( FILES ${resource} - DESTINATION - ${OBS_OUTPUT_DIR}/$/${OBS_DATA_DESTINATION}/${destination} + DESTINATION ${OBS_DATA_DESTINATION}/${destination} COMPONENT obs_${target} EXCLUDE_FROM_ALL) endfunction() @@ -458,20 +457,16 @@ function(_install_obs_datatarget target destination) install( TARGETS ${target} - LIBRARY - DESTINATION - ${OBS_OUTPUT_DIR}/$/${OBS_DATA_DESTINATION}/${destination} - COMPONENT obs_${target} - RUNTIME - DESTINATION - ${OBS_OUTPUT_DIR}/$/${OBS_DATA_DESTINATION}/${destination} - COMPONENT obs_${target} - EXCLUDE_FROM_ALL) + LIBRARY DESTINATION ${OBS_DATA_DESTINATION}/${destination} + COMPONENT obs_${target} + RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination} + COMPONENT obs_${target} + EXCLUDE_FROM_ALL) if(OS_WINDOWS) if(MSVC) add_target_resource(${target} "$" - "${destination}") + "${destination}" OPTIONAL) endif() if(DEFINED ENV{obsInstallerTempDir}) @@ -487,4 +482,14 @@ function(_install_obs_datatarget target destination) EXCLUDE_FROM_ALL) endif() endif() + + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND + "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_${target} > + "$,nul,/dev/null>" + COMMENT "Installing ${target} to OBS rundir" + VERBATIM) endfunction() diff --git a/cmake/Modules/ObsHelpers_Windows.cmake b/cmake/Modules/ObsHelpers_Windows.cmake index 292a37749..0281f3a31 100644 --- a/cmake/Modules/ObsHelpers_Windows.cmake +++ b/cmake/Modules/ObsHelpers_Windows.cmake @@ -152,8 +152,27 @@ function(setup_target_resources target destination) endfunction() # Helper function to set up specific resource files for targets -function(add_target_resource target resource destination) - _add_target_resource(${ARGV}) +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( @@ -161,7 +180,7 @@ function(add_target_resource target resource destination) DESTINATION $ENV{OBS_InstallerTempDir}/${OBS_DATA_DESTINATION}/${destination} COMPONENT obs_${target} - EXCLUDE_FROM_ALL) + ${optional} EXCLUDE_FROM_ALL) endif() endfunction() diff --git a/plugins/win-capture/get-graphics-offsets/CMakeLists.txt b/plugins/win-capture/get-graphics-offsets/CMakeLists.txt index 716526037..94bd92007 100644 --- a/plugins/win-capture/get-graphics-offsets/CMakeLists.txt +++ b/plugins/win-capture/get-graphics-offsets/CMakeLists.txt @@ -20,9 +20,8 @@ target_link_libraries(get-graphics-offsets d3d9.lib dxgi.lib d3d11.lib) if(MSVC) target_compile_options(get-graphics-offsets PRIVATE "$,/MTd,/MT>") - add_target_resource( - get-graphics-offsets "$" - "obs-plugins/win-capture/") + add_target_resource(win-capture "$" + "obs-plugins/win-capture/" OPTIONAL) endif() set_target_properties(get-graphics-offsets PROPERTIES FOLDER @@ -33,5 +32,7 @@ set_target_properties( "get-graphics-offsets$,64,32>" ) -add_target_resource(get-graphics-offsets "$" +add_target_resource(win-capture "$" "obs-plugins/win-capture/") + +add_dependencies(win-capture get-graphics-offsets) diff --git a/plugins/win-capture/graphics-hook/CMakeLists.txt b/plugins/win-capture/graphics-hook/CMakeLists.txt index fbf63637e..f3119b25b 100644 --- a/plugins/win-capture/graphics-hook/CMakeLists.txt +++ b/plugins/win-capture/graphics-hook/CMakeLists.txt @@ -33,8 +33,8 @@ target_link_libraries(graphics-hook PRIVATE OBS::ipc-util Detours::Detours if(MSVC) target_compile_options(graphics-hook PRIVATE "$,/MTd,/MT>") - add_target_resource(graphics-hook "$" - "obs-plugins/win-capture/") + add_target_resource(win-capture "$" + "obs-plugins/win-capture/" OPTIONAL) endif() set_target_properties( @@ -53,22 +53,14 @@ if(TARGET Vulkan::Vulkan) target_compile_definitions(graphics-hook PRIVATE COMPILE_VULKAN_HOOK) add_target_resource( - graphics-hook "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan64.json" + win-capture "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan64.json" "obs-plugins/win-capture/") add_target_resource( - graphics-hook "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan32.json" + win-capture "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan32.json" "obs-plugins/win-capture/") - add_custom_command( - TARGET graphics-hook - POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan64.json" - "${OBS_OUTPUT_DIR}/$/data/obs-plugins/win-capture/obs-vulkan64.json" - COMMAND - "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan32.json" - "${OBS_OUTPUT_DIR}/$/data/obs-plugins/win-capture/obs-vulkan32.json" - VERBATIM) endif() -add_target_resource(graphics-hook "$" +add_target_resource(win-capture "$" "obs-plugins/win-capture/") + +add_dependencies(win-capture graphics-hook) diff --git a/plugins/win-capture/inject-helper/CMakeLists.txt b/plugins/win-capture/inject-helper/CMakeLists.txt index d5d4d25f6..80f8435fc 100644 --- a/plugins/win-capture/inject-helper/CMakeLists.txt +++ b/plugins/win-capture/inject-helper/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(inject-helper PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..) if(MSVC) target_compile_options(inject-helper PRIVATE "$,/MTd,/MT>") - add_target_resource(inject-helper "$" - "obs-plugins/win-capture/") + add_target_resource(win-capture "$" + "obs-plugins/win-capture/" OPTIONAL) endif() set_target_properties( @@ -20,5 +20,7 @@ set_target_properties( OUTPUT_NAME "inject-helper$,64,32>") -add_target_resource(inject-helper "$" +add_target_resource(win-capture "$" "obs-plugins/win-capture/") + +add_dependencies(win-capture inject-helper)