include_guard(DIRECTORY) include(GNUInstallDirs) function(init_python_plugin) set(_options) set(_one_value_args NAME PLUGIN_NAME) set(_multi_value_args SOURCES) cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN}) set_first_defined(_name _ARGS_NAME PROJECT_NAME) set(_plugin_name ${_ARGS_PLUGIN_NAME}) if (NOT DEFINED _ARGS_PLUGIN_NAME) set(_plugin_name ${_name}_plugins) endif() set(${_plugin_name}_SOURCES ${_ARGS_SOURCES}) if (NOT DEFINED _ARGS_SOURCES) file( GLOB_RECURSE ${_plugin_name}_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_name}/*.py) endif() set(src_outs) foreach(_src ${${_plugin_name}_SOURCES}) set(_src_in ${CMAKE_CURRENT_SOURCE_DIR}/${_src}) set(_src_out ${CMAKE_CURRENT_BINARY_DIR}/${_src}) add_custom_command( OUTPUT ${_src_out} COMMAND ${CMAKE_COMMAND} -E copy ${_src_in} ${_src_out} DEPENDS ${_src_in} COMMENT "Copying ${_plugin_name} plugin ${_src} to ${_src_out}" ) list(APPEND src_outs ${_src_out}) endforeach() add_custom_target(copy_${_plugin_name} ALL DEPENDS ${src_outs}) add_library(${_plugin_name} INTERFACE) add_library(${_name}::${_plugin_name} ALIAS ${_plugin_name}) set_target_properties( ${_plugin_name} PROPERTIES INTERFACE_PYTHON_SCRIPTS_DIR $$ ) set_target_properties( ${_plugin_name} PROPERTIES INTERFACE_PYTHON_SCRIPTS $$ ) install( TARGETS ${_plugin_name} EXPORT ${_plugin_name}Targets DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( EXPORT ${_plugin_name}Targets FILE ${_plugin_name}Targets.cmake NAMESPACE ${_name}:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name} ) install(DIRECTORY ${_plugin_name} DESTINATION ${CMAKE_INSTALL_BINDIR}) endfunction()