From 71f53b2ecf6e8a25ef0838ab342018db8343d8ea Mon Sep 17 00:00:00 2001 From: Hunter Belanger Date: Sun, 11 Oct 2026 19:08:37 +0200 Subject: [PATCH] Use built in cmake features to find NumPy --- CMakeLists.txt | 17 ++------- cmake/FindNumPy.cmake | 89 ------------------------------------------- 2 files changed, 3 insertions(+), 103 deletions(-) delete mode 100644 cmake/FindNumPy.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dba9ac..dfef531 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,6 @@ cmake_minimum_required(VERSION 3.29) project(xtensor-python) -set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) set(XTENSOR_PYTHON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) # Versioning @@ -46,7 +45,7 @@ else() message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor") endif() -find_package(Python COMPONENTS Interpreter REQUIRED) +find_package(Python3 COMPONENTS Interpreter Development.Module NumPy REQUIRED) set(pybind11_REQUIRED_VERSION 3.0.0) if (NOT TARGET pybind11::headers) @@ -60,14 +59,6 @@ else () message(STATUS "Found pybind11 v${pybind11_VERSION}") endif () -# Look for NumPy headers, except if NUMPY_INCLUDE_DIRS is passed, -# which is required under some circumstances (such as wasm, where -# there is no real python executable) -if(NOT NUMPY_INCLUDE_DIRS) - find_package(NumPy REQUIRED) -endif() -message(STATUS "Found numpy: ${NUMPY_INCLUDE_DIRS}") - # Build # ===== @@ -84,10 +75,8 @@ set(XTENSOR_PYTHON_HEADERS ) add_library(xtensor-python INTERFACE) -target_include_directories(xtensor-python INTERFACE - "$" - $) -target_link_libraries(xtensor-python INTERFACE xtensor) +target_include_directories(xtensor-python INTERFACE "$" $) +target_link_libraries(xtensor-python INTERFACE xtensor pybind11::pybind11 Python3::NumPy) get_target_property(inc_dir xtensor-python INTERFACE_INCLUDE_DIRECTORIES) OPTION(BUILD_TESTS "xtensor test suite" OFF) diff --git a/cmake/FindNumPy.cmake b/cmake/FindNumPy.cmake deleted file mode 100644 index 24f3c32..0000000 --- a/cmake/FindNumPy.cmake +++ /dev/null @@ -1,89 +0,0 @@ -# - Find the NumPy libraries -# This module finds if NumPy is installed, and sets the following variables -# indicating where it is. -# -# TODO: Update to provide the libraries and paths for linking npymath lib. -# -# NUMPY_FOUND - was NumPy found -# NUMPY_VERSION - the version of NumPy found as a string -# NUMPY_VERSION_MAJOR - the major version number of NumPy -# NUMPY_VERSION_MINOR - the minor version number of NumPy -# NUMPY_VERSION_PATCH - the patch version number of NumPy -# NUMPY_VERSION_DECIMAL - e.g. version 1.6.1 is 10601 -# NUMPY_INCLUDE_DIRS - path to the NumPy include files - -#============================================================================ -# Copyright 2012 Continuum Analytics, Inc. -# -# MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -#============================================================================ - -# Finding NumPy involves calling the Python interpreter -if(NumPy_FIND_REQUIRED) - find_package(Python COMPONENTS Interpreter REQUIRED) -else() - find_package(Python COMPONENTS Interpreter) -endif() - -if(NOT PYTHONINTERP_FOUND) - set(NUMPY_FOUND FALSE) -endif() - -execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" - "import numpy as n; print(n.__version__); print(n.get_include());" - RESULT_VARIABLE _NUMPY_SEARCH_SUCCESS - OUTPUT_VARIABLE _NUMPY_VALUES - ERROR_VARIABLE _NUMPY_ERROR_VALUE - OUTPUT_STRIP_TRAILING_WHITESPACE) - -if(NOT _NUMPY_SEARCH_SUCCESS MATCHES 0) - if(NumPy_FIND_REQUIRED) - message(FATAL_ERROR - "NumPy import failure:\n${_NUMPY_ERROR_VALUE}") - endif() - set(NUMPY_FOUND FALSE) -endif() - -# Convert the process output into a list -string(REGEX REPLACE ";" "\\\\;" _NUMPY_VALUES ${_NUMPY_VALUES}) -string(REGEX REPLACE "\n" ";" _NUMPY_VALUES ${_NUMPY_VALUES}) -list(GET _NUMPY_VALUES 0 NUMPY_VERSION) -list(GET _NUMPY_VALUES 1 NUMPY_INCLUDE_DIRS) - -# Make sure all directory separators are '/' -string(REGEX REPLACE "\\\\" "/" NUMPY_INCLUDE_DIRS ${NUMPY_INCLUDE_DIRS}) - -# Get the major and minor version numbers -string(REGEX REPLACE "\\." ";" _NUMPY_VERSION_LIST ${NUMPY_VERSION}) -list(GET _NUMPY_VERSION_LIST 0 NUMPY_VERSION_MAJOR) -list(GET _NUMPY_VERSION_LIST 1 NUMPY_VERSION_MINOR) -list(GET _NUMPY_VERSION_LIST 2 NUMPY_VERSION_PATCH) -string(REGEX MATCH "[0-9]*" NUMPY_VERSION_PATCH ${NUMPY_VERSION_PATCH}) -math(EXPR NUMPY_VERSION_DECIMAL - "(${NUMPY_VERSION_MAJOR} * 10000) + (${NUMPY_VERSION_MINOR} * 100) + ${NUMPY_VERSION_PATCH}") - -find_package_message(NUMPY - "Found NumPy: version \"${NUMPY_VERSION}\" ${NUMPY_INCLUDE_DIRS}" - "${NUMPY_INCLUDE_DIRS}${NUMPY_VERSION}") - -set(NUMPY_FOUND TRUE)