From a11ef24b13e9a909e7728c7887f7c394b23624a5 Mon Sep 17 00:00:00 2001 From: BORDEU Felipe Date: Mon, 2 Dec 2024 18:01:41 +0100 Subject: [PATCH] Support use of system eigen --- eigency/__init__.py | 8 ++++++-- setup.py | 35 +++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/eigency/__init__.py b/eigency/__init__.py index 64eced0..7d49738 100644 --- a/eigency/__init__.py +++ b/eigency/__init__.py @@ -1,14 +1,18 @@ import os.path -from importlib.resources import as_file, files import numpy as np -__eigen_dir__ = (files(__name__) / "eigen").__str__() + +def get_eigency_eigen_dir(): + from importlib.resources import files + + return (files(__name__) / "eigen").__str__() def get_includes(include_eigen=True): root = os.path.dirname(__file__) path = [root, np.get_include()] if include_eigen: + __eigen_dir__ = get_eigency_eigen_dir() path.append(os.path.join(root, __eigen_dir__)) return path diff --git a/setup.py b/setup.py index 63d8d9f..97a2f61 100644 --- a/setup.py +++ b/setup.py @@ -8,12 +8,18 @@ sys.path.append(".") -import eigency # noqa: E402 - __package_name__ = "eigency" -__eigen_dir__ = eigency.__eigen_dir__ -__eigen_lib_dir__ = join(basename(__eigen_dir__), "Eigen") +include_dirs = [np.get_include()] +if "EIGEN_INC" in os.environ: + useSystemEigen = True + include_dirs.append(os.environ["EIGEN_INC"]) +else: + useSystemEigen = False + import eigency # noqa: E402 + __eigen_dir__ = eigency.get_eigency_eigen_dir() + __eigen_lib_dir__ = join(basename(__eigen_dir__), "Eigen") + include_dirs.append(__eigen_dir__) # Not all users may have cython installed. If they only want this as a means # to access the Eigen header files to compile their own C++ code, then they # may not have cython already installed. Therefore, only require cython @@ -37,14 +43,14 @@ Extension( "eigency.conversions", ["eigency/conversions" + ext], - include_dirs=[np.get_include(), __eigen_dir__], + include_dirs=include_dirs, language="c++", define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")], ), Extension( "eigency.core", ["eigency/core" + ext], - include_dirs=[np.get_include(), __eigen_dir__], + include_dirs=include_dirs, language="c++", define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")], ), @@ -61,10 +67,15 @@ long_description = open("README.md").read() eigen_data_files = [] -for root, dirs, files in os.walk(join(__eigen_dir__, "Eigen")): - for f in files: - if f.endswith(".h"): - eigen_data_files.append(join(root, f)) + +exclude_package_data = {} +if not useSystemEigen: + for root, dirs, files in os.walk(join(__eigen_dir__, "Eigen")): + for f in files: + if f.endswith(".h"): + eigen_data_files.append(join(root, f)) + eigen_data_files.append(join(__eigen_lib_dir__, "*")) + exclude_package_data = {__package_name__: [join(__eigen_lib_dir__, "CMakeLists.txt")]} setup( name=__package_name__, @@ -79,6 +90,6 @@ ], ), include_package_data=True, - package_data={__package_name__: ["*.h", "*.pxd", "*.pyx", join(__eigen_lib_dir__, "*")] + eigen_data_files}, - exclude_package_data={__package_name__: [join(__eigen_lib_dir__, "CMakeLists.txt")]}, + package_data={__package_name__: ["*.h", "*.pxd", "*.pyx"] + eigen_data_files}, + exclude_package_data=exclude_package_data, )