# Functions for generating external plugins set(EXTERNAL_PLUGIN_OUTPUT_DIR "${CMAKE_BINARY_DIR}/rundir") # Fix XCode includes to ignore warnings on system includes function(target_include_directories_system _target) if(XCODE) foreach(_arg ${ARGN}) if("${_arg}" STREQUAL "PRIVATE" OR "${_arg}" STREQUAL "PUBLIC" OR "${_arg}" STREQUAL "INTERFACE") set(_scope ${_arg}) else() target_compile_options(${_target} ${_scope} -isystem${_arg}) endif() endforeach() else() target_include_directories(${_target} SYSTEM ${_scope} ${ARGN}) endif() endfunction() 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 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 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 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 ${additional_target} LIBRARY DESTINATION "data" RUNTIME DESTINATION "data") add_custom_command(TARGET ${additional_target} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "$" "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${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 ${additional_target} LIBRARY DESTINATION "data${_bit_suffix}" RUNTIME DESTINATION "data${_bit_suffix}") add_custom_command(TARGET ${additional_target} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "$" "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${target}/data${_bit_suffix}/$" VERBATIM) endfunction() # Installs an additional file 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_data_file_to_arch_data target additional_target file_target) if(APPLE) set(_bit_suffix "") elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_bit_suffix "/64bit") else() set(_bit_suffix "/32bit") endif() get_filename_component(file_target_name ${file_target} NAME) install(TARGETS ${additional_target} LIBRARY DESTINATION "data${_bit_suffix}" RUNTIME DESTINATION "data${_bit_suffix}") add_custom_command(TARGET ${additional_target} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${file_target}" "${EXTERNAL_PLUGIN_OUTPUT_DIR}/$/${target}/data${_bit_suffix}/${file_target_name}" VERBATIM) endfunction()