diff options
author | Bastien Montagne <bastien@blender.org> | 2020-12-07 17:28:24 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-12-14 13:00:28 +0300 |
commit | 5d570c875eda8fb9aa3635f7f4edac0dc1eaedc8 (patch) | |
tree | c25cf569dd78fcacab71fc1fea1d1eed11bad276 /build_files/cmake/macros.cmake | |
parent | 53ed96641c60531e2ece17230879088df899f8a5 (diff) |
Fix several issues with handling of numpy in CMake.
Issues were:
* Abusing of `WITH_PYTHON_INSTALL_NUMPY` by both Audaspace and
Mantaflow.
- `PYTHON_INSTALL` options only decide whether we copy python (and
some extra modules) in our Blender installation. On linux it
makes much more sense to use global python installation.
- Now we have instead a proper `WITH_PYTHON_NUMPY`
* Bad assumptions regarding path of headers relative to path of python
module.
- In current Debian testing, modules are under `python3.9`
directory, while headers are under `python3` directory.
- Now we properly `find_path` for headers as well, modifying
`find_python_package` to take an optional argument for headers.
Note that the required changes done to `extern` libraries are in
blender-specific files that do not exist upstream.
Differential Revision: https://developer.blender.org/D9773
Diffstat (limited to 'build_files/cmake/macros.cmake')
-rw-r--r-- | build_files/cmake/macros.cmake | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 202b44f611c..aeedcf30c31 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1139,6 +1139,7 @@ endfunction() function(find_python_package package + relative_include_dir ) string(TOUPPER ${package} _upper_package) @@ -1170,7 +1171,10 @@ function(find_python_package dist-packages vendor-packages NO_DEFAULT_PATH + DOC + "Path to python site-packages or dist-packages containing '${package}' module" ) + mark_as_advanced(PYTHON_${_upper_package}_PATH) if(NOT EXISTS "${PYTHON_${_upper_package}_PATH}") message(WARNING @@ -1188,6 +1192,42 @@ function(find_python_package set(WITH_PYTHON_INSTALL_${_upper_package} OFF PARENT_SCOPE) else() message(STATUS "${package} found at '${PYTHON_${_upper_package}_PATH}'") + + if(NOT "${relative_include_dir}" STREQUAL "") + unset(PYTHON_${_upper_package}_INCLUDE_DIRS CACHE) + find_path(PYTHON_${_upper_package}_INCLUDE_DIRS + NAMES + "${package}/${relative_include_dir}" + HINTS + "${PYTHON_LIBPATH}/" + "${PYTHON_LIBPATH}/python${PYTHON_VERSION}/" + "${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/" + PATH_SUFFIXES + "site-packages/" + "dist-packages/" + "vendor-packages/" + NO_DEFAULT_PATH + DOC + "Path to python site-packages or dist-packages containing '${package}' module header files" + ) + mark_as_advanced(PYTHON_${_upper_package}_INCLUDE_DIRS) + + if(NOT EXISTS "${PYTHON_${_upper_package}_INCLUDE_DIRS}") + message(WARNING + "Python package '${package}' include dir path could not be found in:\n" + "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/site-packages/${package}/${relative_include_dir}', " + "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/site-packages/${package}/${relative_include_dir}', " + "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/dist-packages/${package}/${relative_include_dir}', " + "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/dist-packages/${package}/${relative_include_dir}', " + "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/vendor-packages/${package}/${relative_include_dir}', " + "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/vendor-packages/${package}/${relative_include_dir}', " + "\n" + "The 'WITH_PYTHON_${_upper_package}' option will be disabled.\n" + "The build will be usable, only add-ons that depend on this package won't be functional." + ) + set(WITH_PYTHON_${_upper_package} OFF PARENT_SCOPE) + endif() + endif() endif() endif() endfunction() |