_distutils.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from ._backend import Backend
  2. from numpy.distutils.core import setup, Extension
  3. from numpy.distutils.system_info import get_info
  4. from numpy.distutils.misc_util import dict_append
  5. from numpy.exceptions import VisibleDeprecationWarning
  6. import os
  7. import sys
  8. import shutil
  9. import warnings
  10. class DistutilsBackend(Backend):
  11. def __init__(sef, *args, **kwargs):
  12. warnings.warn(
  13. "\ndistutils has been deprecated since NumPy 1.26.x\n"
  14. "Use the Meson backend instead, or generate wrappers"
  15. " without -c and use a custom build script",
  16. VisibleDeprecationWarning,
  17. stacklevel=2,
  18. )
  19. super().__init__(*args, **kwargs)
  20. def compile(self):
  21. num_info = {}
  22. if num_info:
  23. self.include_dirs.extend(num_info.get("include_dirs", []))
  24. ext_args = {
  25. "name": self.modulename,
  26. "sources": self.sources,
  27. "include_dirs": self.include_dirs,
  28. "library_dirs": self.library_dirs,
  29. "libraries": self.libraries,
  30. "define_macros": self.define_macros,
  31. "undef_macros": self.undef_macros,
  32. "extra_objects": self.extra_objects,
  33. "f2py_options": self.f2py_flags,
  34. }
  35. if self.sysinfo_flags:
  36. for n in self.sysinfo_flags:
  37. i = get_info(n)
  38. if not i:
  39. print(
  40. f"No {n!r} resources found"
  41. "in system (try `f2py --help-link`)"
  42. )
  43. dict_append(ext_args, **i)
  44. ext = Extension(**ext_args)
  45. sys.argv = [sys.argv[0]] + self.setup_flags
  46. sys.argv.extend(
  47. [
  48. "build",
  49. "--build-temp",
  50. self.build_dir,
  51. "--build-base",
  52. self.build_dir,
  53. "--build-platlib",
  54. ".",
  55. "--disable-optimization",
  56. ]
  57. )
  58. if self.fc_flags:
  59. sys.argv.extend(["config_fc"] + self.fc_flags)
  60. if self.flib_flags:
  61. sys.argv.extend(["build_ext"] + self.flib_flags)
  62. setup(ext_modules=[ext])
  63. if self.remove_build_dir and os.path.exists(self.build_dir):
  64. print(f"Removing build directory {self.build_dir}")
  65. shutil.rmtree(self.build_dir)