66 lines
2.1 KiB
CMake
66 lines
2.1 KiB
CMake
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
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${_plugin_name}>$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/${_plugin_name}>
|
|
)
|
|
|
|
set_target_properties(
|
|
${_plugin_name}
|
|
PROPERTIES
|
|
INTERFACE_PYTHON_SCRIPTS $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${${_plugin_name}_SOURCES}>$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/${${_plugin_name}_SOURCES}>
|
|
)
|
|
|
|
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()
|