| from ._backend import Backend | |
| from numpy.distutils.core import setup, Extension | |
| from numpy.distutils.system_info import get_info | |
| from numpy.distutils.misc_util import dict_append | |
| from numpy.exceptions import VisibleDeprecationWarning | |
| import os | |
| import sys | |
| import shutil | |
| import warnings | |
| 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 {repr(n)} 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) | |