binutils-gdb/gdb/python/python-config.py
Lancelot SIX be2057b902 gdb/python-config: replace deprecated distutils.sysconfig
When running the gdb/configure script on ubuntu 22.04 with
python-3.10.4, I see:

    checking for python... no
    checking for python3... /usr/bin/python3
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    checking for python... yes

The distutils module is deprecated as per the PEP 632[1] and will be
removed in python-3.12.

This patch migrates gdb/python/python-config.py from distutils.sysconfig
to the sysconfig module[2].

The sysconfig module has has been introduced in the standard library in
python 3.2.  Given that support for python < 3.2 has been removed by
edae3fd660: "gdb/python: remove Python 2 support", this patch does not
need to support both implementations for backward compatibility.

Tested on ubuntu-22.04 and ubuntu 20.04.

[1] https://peps.python.org/pep-0632/
[2] https://docs.python.org/3/library/sysconfig.html

Change-Id: Id0df2baf3ee6ce68bd01c236b829ab4c0a4526f6
2022-09-01 04:51:33 -04:00

83 lines
2.5 KiB
Python

# Program to fetch python compilation parameters.
# Copied from python-config of the 2.7 release.
import sys
import os
import getopt
import sysconfig
valid_opts = ["prefix", "exec-prefix", "includes", "libs", "cflags", "ldflags", "help"]
def exit_with_usage(code=1):
sys.stderr.write(
"Usage: %s [%s]\n" % (sys.argv[0], "|".join("--" + opt for opt in valid_opts))
)
sys.exit(code)
try:
opts, args = getopt.getopt(sys.argv[1:], "", valid_opts)
except getopt.error:
exit_with_usage()
if not opts:
exit_with_usage()
pyver = sysconfig.get_config_var("VERSION")
getvar = sysconfig.get_config_var
abiflags = getattr(sys, "abiflags", "")
opt_flags = [flag for (flag, val) in opts]
if "--help" in opt_flags:
exit_with_usage(code=0)
def to_unix_path(path):
"""On Windows, returns the given path with all backslashes
converted into forward slashes. This is to help prevent problems
when using the paths returned by this script with cygwin tools.
In particular, cygwin bash treats backslashes as a special character.
On Unix systems, returns the path unchanged.
"""
if os.name == "nt":
path = path.replace("\\", "/")
return path
for opt in opt_flags:
if opt == "--prefix":
print(to_unix_path(os.path.normpath(sys.prefix)))
elif opt == "--exec-prefix":
print(to_unix_path(os.path.normpath(sys.exec_prefix)))
elif opt in ("--includes", "--cflags"):
flags = [
"-I" + sysconfig.get_path("include"),
"-I" + sysconfig.get_path("platinclude"),
]
if opt == "--cflags":
flags.extend(getvar("CFLAGS").split())
print(to_unix_path(" ".join(flags)))
elif opt in ("--libs", "--ldflags"):
libs = ["-lpython" + pyver + abiflags]
if getvar("LIBS") is not None:
libs.extend(getvar("LIBS").split())
if getvar("SYSLIBS") is not None:
libs.extend(getvar("SYSLIBS").split())
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == "--ldflags":
if not getvar("Py_ENABLE_SHARED"):
if getvar("LIBPL") is not None:
libs.insert(0, "-L" + getvar("LIBPL"))
elif os.name == "nt":
libs.insert(0, "-L" + os.path.normpath(sys.prefix) + "/libs")
if getvar("LINKFORSHARED") is not None:
libs.extend(getvar("LINKFORSHARED").split())
print(to_unix_path(" ".join(libs)))