# 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()