Skip to content

Commit 4d7d196

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 ff86ee3 commit 4d7d196

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 6; then
41-
AC_MSG_ERROR([Python version $python_version is too old (version 2.6 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
@@ -10038,38 +10038,31 @@ python_majorversion=`echo "$python_fullversion" | sed 's/^\([0-9]*\).*/\1/'`
1003810038
python_minorversion=`echo "$python_fullversion" | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`
1003910039
python_version=`echo "$python_fullversion" | sed 's/^\([0-9]*\.[0-9]*\).*/\1/'`
1004010040
# Reject unsupported Python versions as soon as practical.
10041-
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 6; then
10042-
as_fn_error $? "Python version $python_version is too old (version 2.6 or later is required)" "$LINENO" 5
10041+
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 7; then
10042+
as_fn_error $? "Python version $python_version is too old (version 2.7 or later is required)" "$LINENO" 5
1004310043
fi
1004410044

10045-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python distutils module" >&5
10046-
$as_echo_n "checking for Python distutils module... " >&6; }
10047-
if "${PYTHON}" -c 'import distutils' 2>&5
10045+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python sysconfig module" >&5
10046+
$as_echo_n "checking for Python sysconfig module... " >&6; }
10047+
if "${PYTHON}" -c 'import sysconfig' 2>&5
1004810048
then
1004910049
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1005010050
$as_echo "yes" >&6; }
1005110051
else
1005210052
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1005310053
$as_echo "no" >&6; }
10054-
as_fn_error $? "distutils module not found" "$LINENO" 5
10054+
as_fn_error $? "sysconfig module not found" "$LINENO" 5
1005510055
fi
1005610056

1005710057
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python configuration directory" >&5
1005810058
$as_echo_n "checking Python configuration directory... " >&6; }
10059-
python_configdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBPL'))))"`
10059+
python_configdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBPL'))))"`
1006010060
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_configdir" >&5
1006110061
$as_echo "$python_configdir" >&6; }
1006210062

10063-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directories" >&5
10064-
$as_echo_n "checking Python include directories... " >&6; }
10065-
python_includespec=`${PYTHON} -c "
10066-
import distutils.sysconfig
10067-
a = '-I' + distutils.sysconfig.get_python_inc(False)
10068-
b = '-I' + distutils.sysconfig.get_python_inc(True)
10069-
if a == b:
10070-
print(a)
10071-
else:
10072-
print(a + ' ' + b)"`
10063+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directory" >&5
10064+
$as_echo_n "checking Python include directory... " >&6; }
10065+
python_includespec=`${PYTHON} -c "import sysconfig; print('-I' + sysconfig.get_config_var('INCLUDEPY'))"`
1007310066
if test "$PORTNAME" = win32 ; then
1007410067
python_includespec=`echo $python_includespec | sed 's,[\],/,g'`
1007510068
fi
@@ -10081,8 +10074,8 @@ $as_echo "$python_includespec" >&6; }
1008110074
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link an embedded Python application" >&5
1008210075
$as_echo_n "checking how to link an embedded Python application... " >&6; }
1008310076

10084-
python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBDIR'))))"`
10085-
python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
10077+
python_libdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBDIR'))))"`
10078+
python_ldlibrary=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDLIBRARY'))))"`
1008610079

1008710080
# If LDLIBRARY exists and has a shlib extension, use it verbatim.
1008810081
ldlibrary=`echo "${python_ldlibrary}" | sed -e 's/\.so$//' -e 's/\.dll$//' -e 's/\.dylib$//' -e 's/\.sl$//'`
@@ -10094,11 +10087,11 @@ else
1009410087
# Otherwise, guess the base name of the shlib.
1009510088
# LDVERSION was added in Python 3.2, before that use VERSION,
1009610089
# or failing that, $python_version from _PGAC_CHECK_PYTHON_DIRS.
10097-
python_ldversion=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDVERSION'))))"`
10090+
python_ldversion=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDVERSION'))))"`
1009810091
if test x"${python_ldversion}" != x""; then
1009910092
ldlibrary="python${python_ldversion}"
1010010093
else
10101-
python_version_var=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('VERSION'))))"`
10094+
python_version_var=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('VERSION'))))"`
1010210095
if test x"${python_version_var}" != x""; then
1010310096
ldlibrary="python${python_version_var}"
1010410097
else
@@ -10158,7 +10151,7 @@ PL/Python." "$LINENO" 5
1015810151
fi
1015910152
python_libspec="-L${python_libdir} -l${ldlibrary}"
1016010153

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

1016310156
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${python_libspec} ${python_additional_libs}" >&5
1016410157
$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.6.
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)