# # Copyright (c) 2019, New York University and Max Planck Gesellschaft. # # License BSD-3 clause #
include(${CMAKE_CURRENT_LIST_DIR}/get_python_install_dir.cmake)
# cmake-format: off #.rst: # .. cmake:command:: GET_DYNAMIC_GRAPH_PLUGIN_INSTALL_PATH(INSTALL_DYNAMIC_GRAPH_PLUGIN_PATH) # # Get the install dir for the plugin to install them in the correct place. # # :param INSTALL_DYNAMIC_GRAPH_PLUGIN_PATH: path to the dynamic graph plugin # cmake-format: on macro(GET_DYNAMIC_GRAPH_PLUGIN_INSTALL_PATH INSTALL_DYNAMIC_GRAPH_PLUGIN_PATH)
- set(${INSTALL_DYNAMIC_GRAPH_PLUGIN_PATH}
lib/dynamic-graph-plugins)
- endmacro(GET_DYNAMIC_GRAPH_PLUGIN_INSTALL_PATH
INSTALL_DYNAMIC_GRAPH_PLUGIN_PATH)
# cmake-format: off #.rst: # .. cmake:command:: INSTALL_DYNAMIC_GRAPH_PLUGIN_PYTHON_BINDINGS(PLUGIN_TARGET) # # This file allows us to install the Python bindings of the dynamic graph at # the correct place. # # Add a python submodule to dynamic_graph # # :param plugin_target: target (library) name of the dynamic graph plugin, # cmake-format: on macro(INSTALL_DYNAMIC_GRAPH_PLUGIN_PYTHON_BINDINGS PLUGIN_TARGET)
# Parse arguments set(options) set(oneValueArgs) set(multiValueArgs) cmake_parse_arguments(ARG “${options}” “${oneValueArgs}” “${multiValueArgs}”
${ARGN})
message(STATUS “Creating the python binding of: ${PLUGIN_TARGET}”)
# Look for the python install directory. get_python_install_dir(python_install_dir) set(python_module_install_dir
${python_install_dir}/${PROJECT_NAME}/dynamic_graph)
# Find Python. find_package(Python REQUIRED)
# Suffix to all python objects. set(PYTHON_SUFFIX dg_python_module)
# Python module name. set(PYTHON_MODULE “${PLUGIN_TARGET}_${PYTHON_SUFFIX}”)
# Get the source files. set(PYTHON_MODULE_SOURCE_FILE) set(PYTHON_MODULE_HEADER_FILE) set(PYTHON_MODULE_USER_SOURCE_FILE
“${PROJECT_SOURCE_DIR}/srcpy/${PLUGIN_TARGET}_${PYTHON_SUFFIX}.cpp”)
- set(PYTHON_MODULE_USER_HEADER_FILE
“${PROJECT_SOURCE_DIR}/srcpy/${PLUGIN_TARGET}_${PYTHON_SUFFIX}.hpp”)
- if(EXISTS ${PYTHON_MODULE_USER_SOURCE_FILE})
set(PYTHON_MODULE_SOURCE_FILE ${PYTHON_MODULE_USER_SOURCE_FILE})
- elseif(EXISTS ${PYTHON_MODULE_USER_HEADER_FILE})
# Export the python module name using configure_file. set(DYNAMIC_GRAPH_PLUGIN_CPP_BINDINGS ${PLUGIN_TARGET}) # Export the header name using configure_file. set(PYTHON_MODULE_HEADER_FILE ${PYTHON_MODULE_USER_HEADER_FILE}) configure_file(${MPI_CMAKE_MODULES_RESOURCES_DIR}/${PYTHON_SUFFIX}.cc.in
${PROJECT_BINARY_DIR}/${PYTHON_MODULE}.cc @ONLY IMMEDIATE)
set(PYTHON_MODULE_SOURCE_FILE ${PROJECT_BINARY_DIR}/${PYTHON_MODULE}.cc)
- else()
- message(
- FATAL_ERROR
“INSTALL_DYNAMIC_GRAPH_PLUGIN_PYTHON_BINDINGS: No source found.n” “Cannot find ${PYTHON_MODULE_USER_SOURCE_FILE} nor ” “${PYTHON_MODULE_USER_HEADER_FILE}.n” “Cannot build the dynamic-graph plugin python bindings.”)
endif()
# Create the python bindings add_library(${PYTHON_MODULE} MODULE ${PYTHON_MODULE_SOURCE_FILE}) target_include_directories(
- ${PYTHON_MODULE} PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/srcpy>
${Python_INCLUDE_DIR} ${PYTHON_INCLUDE_DIR})
- target_link_libraries(${PYTHON_MODULE} ${PLUGIN_TARGET} ${PYTHON_LIBRARY}
${python_LIBRARY})
- set_target_properties(${PYTHON_MODULE} PROPERTIES PREFIX “” OUTPUT_NAME
${PLUGIN_TARGET})
get_dynamic_graph_plugin_install_path(plugin_install_path) set_target_properties(
${PYTHON_MODULE} PROPERTIES
INSTALL_RPATH “${CMAKE_INSTALL_RPATH}:${CMAKE_INSTALL_PREFIX}/${plugin_install_path}”)
install(TARGETS ${PYTHON_MODULE} DESTINATION ${python_module_install_dir})
endmacro()