Browse Source

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.
PatTheMav 3 years ago
parent
commit
d42c98fa22

+ 17 - 12
cmake/Modules/ObsHelpers.cmake

@@ -157,8 +157,7 @@ function(add_target_resource target resource destination)
 
   install(
     FILES ${resource}
-    DESTINATION
-      ${OBS_OUTPUT_DIR}/$<CONFIG>/${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}/$<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
-      COMPONENT obs_${target}
-    RUNTIME
-      DESTINATION
-        ${OBS_OUTPUT_DIR}/$<CONFIG>/${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} "$<TARGET_PDB_FILE:${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 $<CONFIG> --prefix
+      ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
+      "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
+    COMMENT "Installing ${target} to OBS rundir"
+    VERBATIM)
 endfunction()

+ 22 - 3
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()
 

+ 5 - 4
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 "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
-  add_target_resource(
-    get-graphics-offsets "$<TARGET_PDB_FILE:get-graphics-offsets>"
-    "obs-plugins/win-capture/")
+  add_target_resource(win-capture "$<TARGET_PDB_FILE:get-graphics-offsets>"
+                      "obs-plugins/win-capture/" OPTIONAL)
 endif()
 
 set_target_properties(get-graphics-offsets PROPERTIES FOLDER
@@ -33,5 +32,7 @@ set_target_properties(
              "get-graphics-offsets$<IF:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>,64,32>"
 )
 
-add_target_resource(get-graphics-offsets "$<TARGET_FILE:get-graphics-offsets>"
+add_target_resource(win-capture "$<TARGET_FILE:get-graphics-offsets>"
                     "obs-plugins/win-capture/")
+
+add_dependencies(win-capture get-graphics-offsets)

+ 7 - 15
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 "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
-  add_target_resource(graphics-hook "$<TARGET_PDB_FILE:graphics-hook>"
-                      "obs-plugins/win-capture/")
+  add_target_resource(win-capture "$<TARGET_PDB_FILE:graphics-hook>"
+                      "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}/$<CONFIGURATION>/data/obs-plugins/win-capture/obs-vulkan64.json"
-    COMMAND
-      "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan32.json"
-      "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-plugins/win-capture/obs-vulkan32.json"
-    VERBATIM)
 endif()
 
-add_target_resource(graphics-hook "$<TARGET_FILE:graphics-hook>"
+add_target_resource(win-capture "$<TARGET_FILE:graphics-hook>"
                     "obs-plugins/win-capture/")
+
+add_dependencies(win-capture graphics-hook)

+ 5 - 3
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 "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
-  add_target_resource(inject-helper "$<TARGET_PDB_FILE:inject-helper>"
-                      "obs-plugins/win-capture/")
+  add_target_resource(win-capture "$<TARGET_PDB_FILE:inject-helper>"
+                      "obs-plugins/win-capture/" OPTIONAL)
 endif()
 
 set_target_properties(
@@ -20,5 +20,7 @@ set_target_properties(
              OUTPUT_NAME
              "inject-helper$<IF:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>,64,32>")
 
-add_target_resource(inject-helper "$<TARGET_FILE:inject-helper>"
+add_target_resource(win-capture "$<TARGET_FILE:inject-helper>"
                     "obs-plugins/win-capture/")
+
+add_dependencies(win-capture inject-helper)