diff --git a/cmake/external/ObsPluginHelpers.cmake b/cmake/external/ObsPluginHelpers.cmake new file mode 100644 index 000000000..82b00f086 --- /dev/null +++ b/cmake/external/ObsPluginHelpers.cmake @@ -0,0 +1,124 @@ +# Functions for generating external plugins + +set(EXTERNAL_PLUGIN_OUTPUT_DIR "${CMAKE_BINARY_DIR}/rundir") + +function(install_external_plugin_data_internal target source_dir target_dir) + install(DIRECTORY ${source_dir}/ + DESTINATION "${target}/${target_dir}" + USE_SOURCE_PERMISSIONS) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_directory + "${CMAKE_CURRENT_SOURCE_DIR}/${source_dir}" "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${target}/${target_dir}" + VERBATIM) +endfunction() + +# Installs data +# 'target' is the destination target project being installed to +# 'data_loc' specifies the directory of the source of the data +function(install_external_plugin_data target data_loc) + install_external_plugin_data_internal(${target} ${data_loc} "data") +endfunction() + +# Installs data in an architecture-specific data directory on windows/linux (data/32bit or data/64bit). Does not apply for mac. +# 'target' is the destination target project being installed to +# 'data_loc' specifies the directory of the source of the data being installed +function(install_external_plugin_arch_data target data_loc) + if(APPLE) + set(_bit_suffix "") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_bit_suffix "/64bit") + else() + set(_bit_suffix "/32bit") + endif() + + install_external_plugin_data_internal(${target} ${data_loc} "data${_bit_suffix}") +endfunction() + +# Installs data in the target's bin directory +# 'target' is the destination target project being installed to +# 'data_loc' specifies the directory of the source of the data being installed +function(install_external_plugin_data_to_bin target data_loc) + if(APPLE) + set(_bit_suffix "") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_bit_suffix "/64bit") + else() + set(_bit_suffix "/32bit") + endif() + + install_external_plugin_data_internal(${target} ${data_loc} "bin${_bit_suffix}") +endfunction() + +# Installs an additional binary to a target +# 'target' is the destination target project being installed to +# 'additional_target' specifies the additional binary +function(install_external_plugin_additional target additional_target) + if(APPLE) + set(_bit_suffix "") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_bit_suffix "64bit/") + else() + set(_bit_suffix "32bit/") + endif() + + set_target_properties(${additional_target} PROPERTIES + PREFIX "") + + install(TARGETS ${additional_target} + LIBRARY DESTINATION "bin" + RUNTIME DESTINATION "bin") + add_custom_command(TARGET ${additional_target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy + "$" + "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${target}/bin/${_bit_suffix}$" + VERBATIM) +endfunction() + +# Installs the binary of the target +# 'target' is the target project being installed +function(install_external_plugin target) + install_external_plugin_additional(${target} ${target}) +endfunction() + +# Installs the binary and data of the target +# 'target' is the destination target project being installed to +function(install_external_plugin_with_data target data_loc) + install_external_plugin(${target}) + install_external_plugin_data(${target} ${data_loc}) +endfunction() + +# Installs an additional binary to the data of a target +# 'target' is the destination target project being installed to +# 'additional_target' specifies the additional binary +function(install_external_plugin_bin_to_data target additional_target) + install(TARGETS ${target} + LIBRARY DESTINATION "data" + RUNTIME DESTINATION "data") + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy + "$" + "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${plugin_target}/data/$" + VERBATIM) +endfunction() + +# Installs an additional binary in an architecture-specific data directory on windows/linux (data/32bit or data/64bit). Does not apply for mac. +# 'target' is the destination target project being installed to +# 'additional_target' specifies the additional binary +function(install_external_plugin_bin_to_arch_data target additional_target) + if(APPLE) + set(_bit_suffix "") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_bit_suffix "/64bit") + else() + set(_bit_suffix "/32bit") + endif() + + install(TARGETS ${target} + LIBRARY DESTINATION "data${_bit_suffix}" + RUNTIME DESTINATION "data${_bit_suffix}") + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy + "$" + "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${plugin_target}/data${_bit_suffix}/$" + VERBATIM) +endfunction()