We have several of these (python_core, python_md, python_execution), so the repetative boilerplate code was starting to pile up.
40 lines
1.4 KiB
CMake
40 lines
1.4 KiB
CMake
include_guard(DIRECTORY)
|
|
include(${CMAKE_SOURCE_DIR}/cmake/SymLink.cmake)
|
|
|
|
function(sym_link_python_module)
|
|
set(_options)
|
|
set(_one_value_args LIB_NAME MODULE_NAME PLUGIN_NAME)
|
|
set(_multi_value_args)
|
|
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}"
|
|
"${_multi_value_args}" ${ARGN})
|
|
if(NOT DEFINED _ARGS_LIB_NAME)
|
|
message(
|
|
FATAL_ERROR "LIB_NAME must be specified for sym_link_python_module()")
|
|
endif()
|
|
set(_lib_name ${_ARGS_LIB_NAME})
|
|
set(_module_name ${_ARGS_MODULE_NAME})
|
|
if(NOT DEFINED _ARGS_MODULE_NAME)
|
|
set(_module_name ${_lib_name}_module)
|
|
endif()
|
|
set(_plugin_name ${_ARGS_PLUGIN_NAME})
|
|
set(_deps ${_lib_name} ${_module_name})
|
|
if(DEFINED _ARGS_PLUGIN_NAME)
|
|
list(APPEND _deps ${_plugin_name} copy_${_plugin_name})
|
|
endif()
|
|
add_dependencies(${PROJECT_NAME} ${_deps})
|
|
sym_link_local_lib(${_lib_name})
|
|
set(_module_suffix cpython-310-x86_64-linux-gnu.so)
|
|
sym_link_file(
|
|
SOURCE
|
|
${CMAKE_BINARY_DIR}/src/lib_${_lib_name}/${_module_name}.${_module_suffix}
|
|
DEST
|
|
${CMAKE_CURRENT_BINARY_DIR}/${_module_name}.${_module_suffix}
|
|
INSTALL_DEST
|
|
${CMAKE_INSTALL_BINDIR}/)
|
|
if(DEFINED _ARGS_PLUGIN_NAME)
|
|
get_target_property(plugins ${_plugin_name} INTERFACE_PYTHON_SCRIPTS_DIR)
|
|
sym_link_dir(TARGET_NAME ${PROJECT_NAME}_link_${_plugin_name} SOURCE
|
|
${plugins} DEST ${CMAKE_CURRENT_BINARY_DIR}/${_plugin_name})
|
|
endif()
|
|
endfunction()
|