From f65f5b27b8f299002263a98e9209e5f14c620c37 Mon Sep 17 00:00:00 2001 From: Neel Basu <20411+neel@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:37:58 +0100 Subject: [PATCH 1/3] - added support for adding pure python packages (e.g. wrappers) - added PYTHON_PACKAGE_DIRS --- python-wheel.cmake | 21 ++++++++++++++++++--- setup.py.in | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/python-wheel.cmake b/python-wheel.cmake index dd275de..5628d93 100644 --- a/python-wheel.cmake +++ b/python-wheel.cmake @@ -41,10 +41,9 @@ function (add_wheel WHEEL_TARGET) cmake_parse_arguments(WHEEL "" "NAME;AUTHOR;URL;EMAIL;PYTHON_REQUIRES;VERSION;DESCRIPTION;README_PATH;LICENSE_PATH" - "TARGET_DEPENDENCIES;MODULE_DEPENDENCIES;DEPLOY_FILES;SUBMODULES;SCRIPTS" ${ARGN}) + "TARGET_DEPENDENCIES;MODULE_DEPENDENCIES;DEPLOY_FILES;SUBMODULES;SCRIPTS;PYTHON_PACKAGE_DIRS" ${ARGN}) to_python_list_string(WHEEL_MODULE_DEPENDENCIES WHEEL_MODULE_DEPENDENCIES_PYLIST) - to_python_list_string(WHEEL_SCRIPTS WHEEL_SCRIPTS_PYLIST) if (NOT WHEEL_VERSION) message(FATAL_ERROR "Missing wheel version.") @@ -141,9 +140,25 @@ function (add_wheel WHEEL_TARGET) add_custom_command(TARGET ${WHEEL_TARGET}-copy-files POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Copying script from ${file} to ${WHEEL_PACKAGE_DIR}" - COMMAND ${CMAKE_COMMAND} -E copy "${file}" "${WHEEL_PACKAGE_DIR}/") + COMMAND ${CMAKE_COMMAND} -E copy "${file}" "${WHEEL_PACKAGE_DIR}/" + ) + endforeach() + endif() + to_python_list_string(WHEEL_SCRIPTS WHEEL_SCRIPTS_PYLIST) + + set(WHEEL_PROJECTS "${WHEEL_NAME}") + if (WHEEL_PYTHON_PACKAGE_DIRS) + foreach (path IN LISTS WHEEL_PYTHON_PACKAGE_DIRS) + get_filename_component(path_last_dir ${path} NAME) + add_custom_command(TARGET ${WHEEL_TARGET}-copy-files + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Copying directory from ${path} to ${WHEEL_LIB_DIR}/${path_last_dir}" + COMMAND ${CMAKE_COMMAND} -E copy_directory "${path}" "${WHEEL_LIB_DIR}/${path_last_dir}" + ) + list(APPEND WHEEL_PROJECTS ${path_last_dir}) endforeach() endif() + to_python_list_string(WHEEL_PROJECTS WHEEL_PYTHON_PACKAGE_DIRS_PYLIST) set(SETUP_FILE "${CMAKE_CURRENT_BINARY_DIR}/setup.py") configure_file("${PY_WHEEL_SETUP_FILE}" "${SETUP_FILE}") diff --git a/setup.py.in b/setup.py.in index 18ef1f8..f535ea8 100644 --- a/setup.py.in +++ b/setup.py.in @@ -71,7 +71,7 @@ kwargs = dict( @WHEEL_MODULE_DEPENDENCIES_PYLIST@ ], package_dir = {"": "@WHEEL_NAME@.wheel"}, - packages = ["@WHEEL_NAME@"], + packages = [@WHEEL_PYTHON_PACKAGE_DIRS_PYLIST@], package_data = { "@WHEEL_NAME@": ["*"] }, From dbdbe6367dd0b96c9a39376201de5e46240c905f Mon Sep 17 00:00:00 2001 From: Neel Basu <20411+neel@users.noreply.github.com> Date: Fri, 23 Feb 2024 17:02:05 +0100 Subject: [PATCH 2/3] - Updated README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 90302e2..1025296 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,9 @@ add_library(mylib ...) # Python module dependencies (requirements.txt content) # SCRIPTS # Additional scripts that should be part of the wheel. +# PYTHON_PACKAGE_DIRS +# Additional python projects which could be wrappers around the +# pybind11 module # SUBMODULES # Any pybind11 submodules must be listed here to support imports like # "from mod.sub import x". A nested submodule must be listed like @@ -64,6 +67,9 @@ add_wheel(mylib-python-bindings SCRIPTS /path/to/python/script1 /path/to/python/script2 + PYTHON_PACKAGE_DIRS + /path/to/python/project1 + /path/to/python/project2 ) ``` From 2af376e1948fcd05def774124a1d956659718377 Mon Sep 17 00:00:00 2001 From: Neel Basu <20411+neel@users.noreply.github.com> Date: Mon, 26 Feb 2024 13:03:55 +0100 Subject: [PATCH 3/3] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1025296..04b4bc8 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,9 @@ add_library(mylib ...) # SCRIPTS # Additional scripts that should be part of the wheel. # PYTHON_PACKAGE_DIRS -# Additional python projects which could be wrappers around the -# pybind11 module +# Paths to directories of additional Python packages, which +# are bundled with the wheel. This could for example contain +# pybind11 binding module wrappers. # SUBMODULES # Any pybind11 submodules must be listed here to support imports like # "from mod.sub import x". A nested submodule must be listed like