Skip to content

Commit aa2215d

Browse files
committed
Replace use of deprecated Python module distutils.sysconfig, take 2.
With Python 3.10, configure spits out warnings about the module distutils.sysconfig being deprecated and scheduled for removal in Python 3.12. Change the uses in configure to use the module sysconfig instead. The logic stays largely the same, although we have to rely on INCLUDEPY instead of the deprecated get_python_inc function. Note that sysconfig exists since Python 2.7, so this moves the minimum required version up from Python 2.6 (or 2.4, before v13). Also, sysconfig didn't exist in Python 3.1, so the minimum 3.x version is now 3.2. Back-patch of commit bd233bd into all supported branches. In v10, this also includes back-patching v11's beff4bb, primarily because this opinion is clearly out-of-date: While at it, get rid of the code's assumption that both the major and minor numbers contain exactly one digit. That will foreseeably be broken by Python 3.10 in perhaps four or five years. That's far enough out that we probably don't need to back-patch this. Peter Eisentraut, Tom Lane, Andres Freund Discussion: https://postgr.es/m/c74add3c-09c4-a9dd-1a03-a846e5b2fc52@enterprisedb.com
1 parent a2ff3f6 commit aa2215d

File tree

3 files changed

+31
-45
lines changed

3 files changed

+31
-45
lines changed

config/python.m4

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,25 @@ python_majorversion=`echo "$python_fullversion" | sed '[s/^\([0-9]*\).*/\1/]'`
3737
python_minorversion=`echo "$python_fullversion" | sed '[s/^[0-9]*\.\([0-9]*\).*/\1/]'`
3838
python_version=`echo "$python_fullversion" | sed '[s/^\([0-9]*\.[0-9]*\).*/\1/]'`
3939
# Reject unsupported Python versions as soon as practical.
40-
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 4; then
41-
AC_MSG_ERROR([Python version $python_version is too old (version 2.4 or later is required)])
40+
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 7; then
41+
AC_MSG_ERROR([Python version $python_version is too old (version 2.7 or later is required)])
4242
fi
4343
44-
AC_MSG_CHECKING([for Python distutils module])
45-
if "${PYTHON}" -c 'import distutils' 2>&AS_MESSAGE_LOG_FD
44+
AC_MSG_CHECKING([for Python sysconfig module])
45+
if "${PYTHON}" -c 'import sysconfig' 2>&AS_MESSAGE_LOG_FD
4646
then
4747
AC_MSG_RESULT(yes)
4848
else
4949
AC_MSG_RESULT(no)
50-
AC_MSG_ERROR([distutils module not found])
50+
AC_MSG_ERROR([sysconfig module not found])
5151
fi
5252
5353
AC_MSG_CHECKING([Python configuration directory])
54-
python_configdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBPL'))))"`
54+
python_configdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBPL'))))"`
5555
AC_MSG_RESULT([$python_configdir])
5656
57-
AC_MSG_CHECKING([Python include directories])
58-
python_includespec=`${PYTHON} -c "
59-
import distutils.sysconfig
60-
a = '-I' + distutils.sysconfig.get_python_inc(False)
61-
b = '-I' + distutils.sysconfig.get_python_inc(True)
62-
if a == b:
63-
print(a)
64-
else:
65-
print(a + ' ' + b)"`
57+
AC_MSG_CHECKING([Python include directory])
58+
python_includespec=`${PYTHON} -c "import sysconfig; print('-I' + sysconfig.get_config_var('INCLUDEPY'))"`
6659
if test "$PORTNAME" = win32 ; then
6760
python_includespec=`echo $python_includespec | sed 's,[[\]],/,g'`
6861
fi
@@ -96,8 +89,8 @@ AC_DEFUN([PGAC_CHECK_PYTHON_EMBED_SETUP],
9689
[AC_REQUIRE([_PGAC_CHECK_PYTHON_DIRS])
9790
AC_MSG_CHECKING([how to link an embedded Python application])
9891
99-
python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBDIR'))))"`
100-
python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
92+
python_libdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBDIR'))))"`
93+
python_ldlibrary=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDLIBRARY'))))"`
10194
10295
# If LDLIBRARY exists and has a shlib extension, use it verbatim.
10396
ldlibrary=`echo "${python_ldlibrary}" | sed -e 's/\.so$//' -e 's/\.dll$//' -e 's/\.dylib$//' -e 's/\.sl$//'`
@@ -109,11 +102,11 @@ else
109102
# Otherwise, guess the base name of the shlib.
110103
# LDVERSION was added in Python 3.2, before that use VERSION,
111104
# or failing that, $python_version from _PGAC_CHECK_PYTHON_DIRS.
112-
python_ldversion=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDVERSION'))))"`
105+
python_ldversion=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDVERSION'))))"`
113106
if test x"${python_ldversion}" != x""; then
114107
ldlibrary="python${python_ldversion}"
115108
else
116-
python_version_var=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('VERSION'))))"`
109+
python_version_var=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('VERSION'))))"`
117110
if test x"${python_version_var}" != x""; then
118111
ldlibrary="python${python_version_var}"
119112
else
@@ -173,7 +166,7 @@ PL/Python.])
173166
fi
174167
python_libspec="-L${python_libdir} -l${ldlibrary}"
175168
176-
python_additional_libs=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
169+
python_additional_libs=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
177170
178171
AC_MSG_RESULT([${python_libspec} ${python_additional_libs}])
179172

configure

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10098,38 +10098,31 @@ python_majorversion=`echo "$python_fullversion" | sed 's/^\([0-9]*\).*/\1/'`
1009810098
python_minorversion=`echo "$python_fullversion" | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`
1009910099
python_version=`echo "$python_fullversion" | sed 's/^\([0-9]*\.[0-9]*\).*/\1/'`
1010010100
# Reject unsupported Python versions as soon as practical.
10101-
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 4; then
10102-
as_fn_error $? "Python version $python_version is too old (version 2.4 or later is required)" "$LINENO" 5
10101+
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 7; then
10102+
as_fn_error $? "Python version $python_version is too old (version 2.7 or later is required)" "$LINENO" 5
1010310103
fi
1010410104

10105-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python distutils module" >&5
10106-
$as_echo_n "checking for Python distutils module... " >&6; }
10107-
if "${PYTHON}" -c 'import distutils' 2>&5
10105+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python sysconfig module" >&5
10106+
$as_echo_n "checking for Python sysconfig module... " >&6; }
10107+
if "${PYTHON}" -c 'import sysconfig' 2>&5
1010810108
then
1010910109
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1011010110
$as_echo "yes" >&6; }
1011110111
else
1011210112
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1011310113
$as_echo "no" >&6; }
10114-
as_fn_error $? "distutils module not found" "$LINENO" 5
10114+
as_fn_error $? "sysconfig module not found" "$LINENO" 5
1011510115
fi
1011610116

1011710117
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python configuration directory" >&5
1011810118
$as_echo_n "checking Python configuration directory... " >&6; }
10119-
python_configdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBPL'))))"`
10119+
python_configdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBPL'))))"`
1012010120
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_configdir" >&5
1012110121
$as_echo "$python_configdir" >&6; }
1012210122

10123-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directories" >&5
10124-
$as_echo_n "checking Python include directories... " >&6; }
10125-
python_includespec=`${PYTHON} -c "
10126-
import distutils.sysconfig
10127-
a = '-I' + distutils.sysconfig.get_python_inc(False)
10128-
b = '-I' + distutils.sysconfig.get_python_inc(True)
10129-
if a == b:
10130-
print(a)
10131-
else:
10132-
print(a + ' ' + b)"`
10123+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directory" >&5
10124+
$as_echo_n "checking Python include directory... " >&6; }
10125+
python_includespec=`${PYTHON} -c "import sysconfig; print('-I' + sysconfig.get_config_var('INCLUDEPY'))"`
1013310126
if test "$PORTNAME" = win32 ; then
1013410127
python_includespec=`echo $python_includespec | sed 's,[\],/,g'`
1013510128
fi
@@ -10141,8 +10134,8 @@ $as_echo "$python_includespec" >&6; }
1014110134
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link an embedded Python application" >&5
1014210135
$as_echo_n "checking how to link an embedded Python application... " >&6; }
1014310136

10144-
python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBDIR'))))"`
10145-
python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
10137+
python_libdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBDIR'))))"`
10138+
python_ldlibrary=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDLIBRARY'))))"`
1014610139

1014710140
# If LDLIBRARY exists and has a shlib extension, use it verbatim.
1014810141
ldlibrary=`echo "${python_ldlibrary}" | sed -e 's/\.so$//' -e 's/\.dll$//' -e 's/\.dylib$//' -e 's/\.sl$//'`
@@ -10154,11 +10147,11 @@ else
1015410147
# Otherwise, guess the base name of the shlib.
1015510148
# LDVERSION was added in Python 3.2, before that use VERSION,
1015610149
# or failing that, $python_version from _PGAC_CHECK_PYTHON_DIRS.
10157-
python_ldversion=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDVERSION'))))"`
10150+
python_ldversion=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDVERSION'))))"`
1015810151
if test x"${python_ldversion}" != x""; then
1015910152
ldlibrary="python${python_ldversion}"
1016010153
else
10161-
python_version_var=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('VERSION'))))"`
10154+
python_version_var=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('VERSION'))))"`
1016210155
if test x"${python_version_var}" != x""; then
1016310156
ldlibrary="python${python_version_var}"
1016410157
else
@@ -10218,7 +10211,7 @@ PL/Python." "$LINENO" 5
1021810211
fi
1021910212
python_libspec="-L${python_libdir} -l${ldlibrary}"
1022010213

10221-
python_additional_libs=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
10214+
python_additional_libs=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
1022210215

1022310216
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${python_libspec} ${python_additional_libs}" >&5
1022410217
$as_echo "${python_libspec} ${python_additional_libs}" >&6; }

doc/src/sgml/installation.sgml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,10 @@ su - postgres
195195
To build the <application>PL/Python</application> server programming
196196
language, you need a <productname>Python</productname>
197197
installation with the header files and
198-
the <application>distutils</application> module. The minimum
199-
required version is <productname>Python</productname> 2.4.
198+
the <application>sysconfig</application> module. The minimum
199+
required version is <productname>Python</productname> 2.7.
200200
<productname>Python 3</productname> is supported if it's
201-
version 3.1 or later; but see
201+
version 3.2 or later; but see
202202
<xref linkend="plpython-python23"/>
203203
when using Python 3.
204204
</para>

0 commit comments

Comments
 (0)