Skip to content

Commit bd233bd

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. Also, sysconfig didn't exist in Python 3.1, so the minimum 3.x version is now 3.2. We should consider back-patching this if it gives no further trouble, as the no-longer-supported versions are old enough to probably not be interesting to anyone. Peter Eisentraut, Tom Lane, Andres Freund Discussion: https://postgr.es/m/[email protected]
1 parent e221770 commit bd233bd

File tree

3 files changed

+31
-45
lines changed

3 files changed

+31
-45
lines changed

config/python.m4

+13-20
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

+15-22
Original file line numberDiff line numberDiff line change
@@ -10345,38 +10345,31 @@ python_majorversion=`echo "$python_fullversion" | sed 's/^\([0-9]*\).*/\1/'`
1034510345
python_minorversion=`echo "$python_fullversion" | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`
1034610346
python_version=`echo "$python_fullversion" | sed 's/^\([0-9]*\.[0-9]*\).*/\1/'`
1034710347
# Reject unsupported Python versions as soon as practical.
10348-
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 6; then
10349-
as_fn_error $? "Python version $python_version is too old (version 2.6 or later is required)" "$LINENO" 5
10348+
if test "$python_majorversion" -lt 3 -a "$python_minorversion" -lt 7; then
10349+
as_fn_error $? "Python version $python_version is too old (version 2.7 or later is required)" "$LINENO" 5
1035010350
fi
1035110351

10352-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python distutils module" >&5
10353-
$as_echo_n "checking for Python distutils module... " >&6; }
10354-
if "${PYTHON}" -c 'import distutils' 2>&5
10352+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python sysconfig module" >&5
10353+
$as_echo_n "checking for Python sysconfig module... " >&6; }
10354+
if "${PYTHON}" -c 'import sysconfig' 2>&5
1035510355
then
1035610356
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1035710357
$as_echo "yes" >&6; }
1035810358
else
1035910359
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1036010360
$as_echo "no" >&6; }
10361-
as_fn_error $? "distutils module not found" "$LINENO" 5
10361+
as_fn_error $? "sysconfig module not found" "$LINENO" 5
1036210362
fi
1036310363

1036410364
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python configuration directory" >&5
1036510365
$as_echo_n "checking Python configuration directory... " >&6; }
10366-
python_configdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBPL'))))"`
10366+
python_configdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBPL'))))"`
1036710367
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_configdir" >&5
1036810368
$as_echo "$python_configdir" >&6; }
1036910369

10370-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directories" >&5
10371-
$as_echo_n "checking Python include directories... " >&6; }
10372-
python_includespec=`${PYTHON} -c "
10373-
import distutils.sysconfig
10374-
a = '-I' + distutils.sysconfig.get_python_inc(False)
10375-
b = '-I' + distutils.sysconfig.get_python_inc(True)
10376-
if a == b:
10377-
print(a)
10378-
else:
10379-
print(a + ' ' + b)"`
10370+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Python include directory" >&5
10371+
$as_echo_n "checking Python include directory... " >&6; }
10372+
python_includespec=`${PYTHON} -c "import sysconfig; print('-I' + sysconfig.get_config_var('INCLUDEPY'))"`
1038010373
if test "$PORTNAME" = win32 ; then
1038110374
python_includespec=`echo $python_includespec | sed 's,[\],/,g'`
1038210375
fi
@@ -10388,8 +10381,8 @@ $as_echo "$python_includespec" >&6; }
1038810381
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link an embedded Python application" >&5
1038910382
$as_echo_n "checking how to link an embedded Python application... " >&6; }
1039010383

10391-
python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBDIR'))))"`
10392-
python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
10384+
python_libdir=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LIBDIR'))))"`
10385+
python_ldlibrary=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDLIBRARY'))))"`
1039310386

1039410387
# If LDLIBRARY exists and has a shlib extension, use it verbatim.
1039510388
ldlibrary=`echo "${python_ldlibrary}" | sed -e 's/\.so$//' -e 's/\.dll$//' -e 's/\.dylib$//' -e 's/\.sl$//'`
@@ -10401,11 +10394,11 @@ else
1040110394
# Otherwise, guess the base name of the shlib.
1040210395
# LDVERSION was added in Python 3.2, before that use VERSION,
1040310396
# or failing that, $python_version from _PGAC_CHECK_PYTHON_DIRS.
10404-
python_ldversion=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDVERSION'))))"`
10397+
python_ldversion=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('LDVERSION'))))"`
1040510398
if test x"${python_ldversion}" != x""; then
1040610399
ldlibrary="python${python_ldversion}"
1040710400
else
10408-
python_version_var=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('VERSION'))))"`
10401+
python_version_var=`${PYTHON} -c "import sysconfig; print(' '.join(filter(None,sysconfig.get_config_vars('VERSION'))))"`
1040910402
if test x"${python_version_var}" != x""; then
1041010403
ldlibrary="python${python_version_var}"
1041110404
else
@@ -10465,7 +10458,7 @@ PL/Python." "$LINENO" 5
1046510458
fi
1046610459
python_libspec="-L${python_libdir} -l${ldlibrary}"
1046710460

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

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

doc/src/sgml/installation.sgml

+3-3
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)