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( "distutils has been deprecated since NumPy 1.26.x" "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)