missing.
"""
- # TODO (PEP 632): alternate check without using distutils
- from distutils import ccompiler, sysconfig, spawn, errors
+ from setuptools._distutils import ccompiler, sysconfig, spawn
+ from setuptools import errors
+
compiler = ccompiler.new_compiler()
sysconfig.customize_compiler(compiler)
if compiler.compiler_type == "msvc":
# MSVC has no executables, so check whether initialization succeeds
try:
compiler.initialize()
- except errors.DistutilsPlatformError:
+ except errors.PlatformError:
return "msvc"
for name in compiler.executables:
if cmd_names and name not in cmd_names:
+import contextlib
+import subprocess
import sysconfig
import textwrap
import unittest
from test import test_tools
from test import support
-from test.support import os_helper
+from test.support import os_helper, import_helper
from test.support.script_helper import assert_python_ok
_py_cflags_nodist = sysconfig.get_config_var("PY_CFLAGS_NODIST")
cls.library_dir = tempfile.mkdtemp(dir=cls.tmp_base)
cls.addClassCleanup(shutil.rmtree, cls.library_dir)
+ with contextlib.ExitStack() as stack:
+ python_exe = stack.enter_context(support.setup_venv_with_pip_setuptools_wheel("venv"))
+ sitepackages = subprocess.check_output(
+ [python_exe, "-c", "import sysconfig; print(sysconfig.get_path('platlib'))"],
+ text=True,
+ ).strip()
+ stack.enter_context(import_helper.DirsOnSysPath(sitepackages))
+ cls.addClassCleanup(stack.pop_all().close)
+
+ @support.requires_venv_with_pip()
def setUp(self):
self._backup_config_vars = dict(sysconfig._CONFIG_VARS)
cmd = support.missing_compiler_executable()
import itertools
+import os
import pathlib
import sys
import sysconfig
return f"{flags} {py_flags_nodist}".split()
+def fixup_build_ext(cmd):
+ """Function needed to make build_ext tests pass.
+
+ When Python was built with --enable-shared on Unix, -L. is not enough to
+ find libpython<blah>.so, because regrtest runs in a tempdir, not in the
+ source directory where the .so lives.
+
+ When Python was built with in debug mode on Windows, build_ext commands
+ need their debug attribute set, and it is not done automatically for
+ some reason.
+
+ This function handles both of these things. Example use:
+
+ cmd = build_ext(dist)
+ support.fixup_build_ext(cmd)
+ cmd.ensure_finalized()
+
+ Unlike most other Unix platforms, Mac OS X embeds absolute paths
+ to shared libraries into executables, so the fixup is not needed there.
+
+ Taken from distutils (was part of the CPython stdlib until Python 3.11)
+ """
+ if os.name == 'nt':
+ cmd.debug = sys.executable.endswith('_d.exe')
+ elif sysconfig.get_config_var('Py_ENABLE_SHARED'):
+ # To further add to the shared builds fun on Unix, we can't just add
+ # library_dirs to the Extension() instance because that doesn't get
+ # plumbed through to the final compiler command.
+ runshared = sysconfig.get_config_var('RUNSHARED')
+ if runshared is None:
+ cmd.library_dirs = ['.']
+ else:
+ if sys.platform == 'darwin':
+ cmd.library_dirs = []
+ else:
+ name, equals, value = runshared.partition('=')
+ cmd.library_dirs = [d for d in value.split(os.pathsep) if d]
+
+
+
def compile_c_extension(
generated_source_path: str,
build_dir: Optional[str] = None,
static library of the common parser sources (this is useful in case you are
creating multiple extensions).
"""
- import distutils.log
- from distutils.core import Distribution, Extension
- from distutils.tests.support import fixup_build_ext # type: ignore
+ import setuptools.logging
- from distutils.ccompiler import new_compiler
- from distutils.dep_util import newer_group
- from distutils.sysconfig import customize_compiler
+ from setuptools import Extension, Distribution
+ from setuptools._distutils.dep_util import newer_group
+ from setuptools._distutils.ccompiler import new_compiler
+ from setuptools._distutils.sysconfig import customize_compiler
if verbose:
- distutils.log.set_threshold(distutils.log.DEBUG)
+ setuptools.logging.set_threshold(setuptools.logging.logging.DEBUG)
source_file_path = pathlib.Path(generated_source_path)
extension_name = source_file_path.stem