helpers.cmake 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # CMake Linux helper functions module
  2. include_guard(GLOBAL)
  3. include(helpers_common)
  4. # set_target_properties_plugin: Set target properties for use in obs-studio
  5. function(set_target_properties_plugin target)
  6. set(options "")
  7. set(oneValueArgs "")
  8. set(multiValueArgs PROPERTIES)
  9. cmake_parse_arguments(PARSE_ARGV 0 _STPO "${options}" "${oneValueArgs}" "${multiValueArgs}")
  10. message(DEBUG "Setting additional properties for target ${target}...")
  11. while(_STPO_PROPERTIES)
  12. list(POP_FRONT _STPO_PROPERTIES key value)
  13. set_property(TARGET ${target} PROPERTY ${key} "${value}")
  14. endwhile()
  15. set_target_properties(
  16. ${target}
  17. PROPERTIES VERSION 0
  18. SOVERSION ${PLUGIN_VERSION}
  19. PREFIX "")
  20. install(
  21. TARGETS ${target}
  22. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  23. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/obs-plugins)
  24. if(TARGET plugin-support)
  25. target_link_libraries(${target} PRIVATE plugin-support)
  26. endif()
  27. target_install_resources(${target})
  28. get_target_property(target_sources ${target} SOURCES)
  29. set(target_ui_files ${target_sources})
  30. list(FILTER target_ui_files INCLUDE REGEX ".+\\.(ui|qrc)")
  31. source_group(
  32. TREE "${CMAKE_CURRENT_SOURCE_DIR}"
  33. PREFIX "UI Files"
  34. FILES ${target_ui_files})
  35. endfunction()
  36. # Helper function to add resources into bundle
  37. function(target_install_resources target)
  38. message(DEBUG "Installing resources for target ${target}...")
  39. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data")
  40. file(GLOB_RECURSE data_files "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
  41. foreach(data_file IN LISTS data_files)
  42. cmake_path(RELATIVE_PATH data_file BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/" OUTPUT_VARIABLE
  43. relative_path)
  44. cmake_path(GET relative_path PARENT_PATH relative_path)
  45. target_sources(${target} PRIVATE "${data_file}")
  46. source_group("Resources/${relative_path}" FILES "${data_file}")
  47. endforeach()
  48. install(
  49. DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/"
  50. DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/obs/obs-plugins/${target}
  51. USE_SOURCE_PERMISSIONS)
  52. endif()
  53. endfunction()
  54. # Helper function to add a specific resource to a bundle
  55. function(target_add_resource target resource)
  56. message(DEBUG "Add resource '${resource}' to target ${target} at destination '${target_destination}'...")
  57. install(FILES "${resource}" DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/obs/obs-plugins/${target})
  58. source_group("Resources" FILES "${resource}")
  59. endfunction()