| import os |
| import shutil |
| import sys |
| import warnings |
|
|
| from numpy.distutils.core import Extension, setup |
| from numpy.distutils.misc_util import dict_append |
| from numpy.distutils.system_info import get_info |
| from numpy.exceptions import VisibleDeprecationWarning |
|
|
| from ._backend import Backend |
|
|
|
|
| class DistutilsBackend(Backend): |
| def __init__(sef, *args, **kwargs): |
| warnings.warn( |
| "\ndistutils has been deprecated since NumPy 1.26.x\n" |
| "Use the Meson backend instead, or generate wrappers" |
| " without -c and use a custom build script", |
| VisibleDeprecationWarning, |
| stacklevel=2, |
| ) |
| super().__init__(*args, **kwargs) |
|
|
| def compile(self): |
| num_info = {} |
| if num_info: |
| self.include_dirs.extend(num_info.get("include_dirs", [])) |
| ext_args = { |
| "name": self.modulename, |
| "sources": self.sources, |
| "include_dirs": self.include_dirs, |
| "library_dirs": self.library_dirs, |
| "libraries": self.libraries, |
| "define_macros": self.define_macros, |
| "undef_macros": self.undef_macros, |
| "extra_objects": self.extra_objects, |
| "f2py_options": self.f2py_flags, |
| } |
|
|
| if self.sysinfo_flags: |
| for n in self.sysinfo_flags: |
| i = get_info(n) |
| if not i: |
| print( |
| f"No {n!r} resources found" |
| "in system (try `f2py --help-link`)" |
| ) |
| dict_append(ext_args, **i) |
|
|
| ext = Extension(**ext_args) |
|
|
| sys.argv = [sys.argv[0]] + self.setup_flags |
| sys.argv.extend( |
| [ |
| "build", |
| "--build-temp", |
| self.build_dir, |
| "--build-base", |
| self.build_dir, |
| "--build-platlib", |
| ".", |
| "--disable-optimization", |
| ] |
| ) |
|
|
| if self.fc_flags: |
| sys.argv.extend(["config_fc"] + self.fc_flags) |
| if self.flib_flags: |
| sys.argv.extend(["build_ext"] + self.flib_flags) |
|
|
| setup(ext_modules=[ext]) |
|
|
| if self.remove_build_dir and os.path.exists(self.build_dir): |
| print(f"Removing build directory {self.build_dir}") |
| shutil.rmtree(self.build_dir) |
|
|