summaryrefslogtreecommitdiff
path: root/freeradius-fix-python3-library-suffix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'freeradius-fix-python3-library-suffix.patch')
-rw-r--r--freeradius-fix-python3-library-suffix.patch635
1 files changed, 635 insertions, 0 deletions
diff --git a/freeradius-fix-python3-library-suffix.patch b/freeradius-fix-python3-library-suffix.patch
new file mode 100644
index 0000000..b6d6ab3
--- /dev/null
+++ b/freeradius-fix-python3-library-suffix.patch
@@ -0,0 +1,635 @@
+From: Antonio Torres <antorres@redhat.com>
+Date: Mon, 06 Nov 2023
+Subject: Fix Python3.8+ library name suffix
+
+Python 3.8 has removed the "m" suffix in the library name, add a check for it.
+
+Backport of https://github.com/FreeRADIUS/freeradius-server/commit/fa837465493158257e600f28bca009ba890db863
+
+Resolves: https://issues.redhat.com/browse/RHEL-15503
+Signed-off-by: Antonio Torres <antorres@redhat.com>
+---
+diff --git a/src/modules/rlm_python3/configure b/src/modules/rlm_python3/configure
+index f421558ac0c0..05907f12c359 100755
+--- a/src/modules/rlm_python3/configure
++++ b/src/modules/rlm_python3/configure
+@@ -588,7 +588,17 @@ LIBOBJS
+ targetname
+ mod_cflags
+ mod_ldflags
++AWK
+ PYTHON3_CONFIG_BIN
++pkgpyexecdir
++pyexecdir
++pkgpythondir
++pythondir
++PYTHON_PLATFORM
++PYTHON_EXEC_PREFIX
++PYTHON_PREFIX
++PYTHON_VERSION
++PYTHON
+ CPP
+ OBJEXT
+ EXEEXT
+@@ -648,7 +658,8 @@ CFLAGS
+ LDFLAGS
+ LIBS
+ CPPFLAGS
+-CPP'
++CPP
++PYTHON'
+
+
+ # Initialize some variables set by options.
+@@ -1266,6 +1277,7 @@ Some influential environment variables:
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
++ PYTHON the Python interpreter
+
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+@@ -1421,6 +1433,119 @@ fi
+ as_fn_set_status $ac_retval
+
+ } # ac_fn_c_try_cpp
++
++# ac_fn_c_try_link LINENO
++# -----------------------
++# Try to link conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_link ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ rm -f conftest.$ac_objext conftest$ac_exeext
++ if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext && {
++ test "$cross_compiling" = yes ||
++ test -x conftest$ac_exeext
++ }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_retval=1
++fi
++ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
++ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
++ # interfere with the next link command; also delete a directory that is
++ # left behind by Apple's compiler. We do this before executing the actions.
++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_link
++
++# ac_fn_c_check_func LINENO FUNC VAR
++# ----------------------------------
++# Tests whether FUNC exists, setting the cache variable VAR accordingly
++ac_fn_c_check_func ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if eval \${$3+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
++ For example, HP-UX 11i <limits.h> declares gettimeofday. */
++#define $2 innocuous_$2
++
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char $2 (); below.
++ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ <limits.h> exists even on freestanding compilers. */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $2
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $2 ();
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined __stub_$2 || defined __stub___$2
++choke me
++#endif
++
++int
++main ()
++{
++return $2 ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ eval "$3=yes"
++else
++ eval "$3=no"
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++
++} # ac_fn_c_check_func
+ cat >config.log <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+@@ -2705,6 +2830,267 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
++
++
++
++
++
++ if test -n "$PYTHON"; then
++ # If the user set $PYTHON, use it and don't search something else.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.0" >&5
++$as_echo_n "checking whether $PYTHON version is >= 3.0... " >&6; }
++ prog="import sys
++# split strings by '.' and convert to numeric. Append some zeros
++# because we need at least 4 digits for the hex conversion.
++# map returns an iterator in Python 3.0 and a list in 2.x
++minver = list(map(int, '3.0'.split('.'))) + [0, 0, 0]
++minverhex = 0
++# xrange is not present in Python 3.0 and range returns an iterator
++for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
++sys.exit(sys.hexversion < minverhex)"
++ if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5
++ ($PYTHON -c "$prog") >&5 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++ as_fn_error $? "Python interpreter is too old" "$LINENO" 5
++fi
++ am_display_PYTHON=$PYTHON
++ else
++ # Otherwise, try each interpreter until we find one that satisfies
++ # VERSION.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.0" >&5
++$as_echo_n "checking for a Python interpreter with version >= 3.0... " >&6; }
++if ${am_cv_pathless_PYTHON+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++
++ for am_cv_pathless_PYTHON in python python2 python3 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
++ test "$am_cv_pathless_PYTHON" = none && break
++ prog="import sys
++# split strings by '.' and convert to numeric. Append some zeros
++# because we need at least 4 digits for the hex conversion.
++# map returns an iterator in Python 3.0 and a list in 2.x
++minver = list(map(int, '3.0'.split('.'))) + [0, 0, 0]
++minverhex = 0
++# xrange is not present in Python 3.0 and range returns an iterator
++for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
++sys.exit(sys.hexversion < minverhex)"
++ if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5
++ ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then :
++ break
++fi
++ done
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5
++$as_echo "$am_cv_pathless_PYTHON" >&6; }
++ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
++ if test "$am_cv_pathless_PYTHON" = none; then
++ PYTHON=:
++ else
++ # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args.
++set dummy $am_cv_pathless_PYTHON; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_path_PYTHON+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $PYTHON in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++PYTHON=$ac_cv_path_PYTHON
++if test -n "$PYTHON"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
++$as_echo "$PYTHON" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ fi
++ am_display_PYTHON=$am_cv_pathless_PYTHON
++ fi
++
++
++ if test "$PYTHON" = :; then
++ :
++ else
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
++$as_echo_n "checking for $am_display_PYTHON version... " >&6; }
++if ${am_cv_python_version+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
++$as_echo "$am_cv_python_version" >&6; }
++ PYTHON_VERSION=$am_cv_python_version
++
++
++
++ PYTHON_PREFIX='${prefix}'
++
++ PYTHON_EXEC_PREFIX='${exec_prefix}'
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
++$as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
++if ${am_cv_python_platform+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5
++$as_echo "$am_cv_python_platform" >&6; }
++ PYTHON_PLATFORM=$am_cv_python_platform
++
++
++ # Just factor out some code duplication.
++ am_python_setup_sysconfig="\
++import sys
++# Prefer sysconfig over distutils.sysconfig, for better compatibility
++# with python 3.x. See automake bug#10227.
++try:
++ import sysconfig
++except ImportError:
++ can_use_sysconfig = 0
++else:
++ can_use_sysconfig = 1
++# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
++# <https://github.com/pypa/virtualenv/issues/118>
++try:
++ from platform import python_implementation
++ if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ can_use_sysconfig = 0
++except ImportError:
++ pass"
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
++$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
++if ${am_cv_python_pythondir+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "x$prefix" = xNONE
++ then
++ am_py_prefix=$ac_default_prefix
++ else
++ am_py_prefix=$prefix
++ fi
++ am_cv_python_pythondir=`$PYTHON -c "
++$am_python_setup_sysconfig
++if can_use_sysconfig:
++ sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
++else:
++ from distutils import sysconfig
++ sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
++sys.stdout.write(sitedir)"`
++ case $am_cv_python_pythondir in
++ $am_py_prefix*)
++ am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
++ am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
++ ;;
++ *)
++ case $am_py_prefix in
++ /usr|/System*) ;;
++ *)
++ am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
++ ;;
++ esac
++ ;;
++ esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
++$as_echo "$am_cv_python_pythondir" >&6; }
++ pythondir=$am_cv_python_pythondir
++
++
++
++ pkgpythondir=\${pythondir}/$PACKAGE
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
++$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; }
++if ${am_cv_python_pyexecdir+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "x$exec_prefix" = xNONE
++ then
++ am_py_exec_prefix=$am_py_prefix
++ else
++ am_py_exec_prefix=$exec_prefix
++ fi
++ am_cv_python_pyexecdir=`$PYTHON -c "
++$am_python_setup_sysconfig
++if can_use_sysconfig:
++ sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
++else:
++ from distutils import sysconfig
++ sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
++sys.stdout.write(sitedir)"`
++ case $am_cv_python_pyexecdir in
++ $am_py_exec_prefix*)
++ am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
++ am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
++ ;;
++ *)
++ case $am_py_exec_prefix in
++ /usr|/System*) ;;
++ *)
++ am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
++ ;;
++ esac
++ ;;
++ esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
++$as_echo "$am_cv_python_pyexecdir" >&6; }
++ pyexecdir=$am_cv_python_pyexecdir
++
++
++
++ pkgpyexecdir=\${pyexecdir}/$PACKAGE
++
++
++
++ fi
++
++
++
+ PYTHON3_CONFIG_BIN=
+
+ # Check whether --with-rlm-python3-config-bin was given.
+@@ -2771,8 +3157,6 @@ test -n "$PYTHON3_CONFIG_BIN" || PYTHON3_CONFIG_BIN="not-found"
+ fi
+
+ if test "x$PYTHON3_CONFIG_BIN" = xnot-found; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python3-config not found" >&5
+-$as_echo "$as_me: WARNING: python3-config not found" >&2;}
+ fail="$fail python3-config"
+ else
+ old_CFLAGS="$CFLAGS"
+@@ -2794,7 +3178,85 @@ $as_echo "$as_me: ${PYTHON3_CONFIG_BIN}'s cflags were \"${python3_cflags}\"" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Sanitized cflags were \"${mod_cflags}\"" >&5
+ $as_echo "$as_me: Sanitized cflags were \"${mod_cflags}\"" >&6;}
+
+- python3_ldflags=`${PYTHON3_CONFIG_BIN} --ldflags`
++ for ac_prog in gawk mawk nawk awk
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_AWK+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$AWK"; then
++ ac_cv_prog_AWK="$AWK" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_AWK="$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++AWK=$ac_cv_prog_AWK
++if test -n "$AWK"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
++$as_echo "$AWK" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$AWK" && break
++done
++
++
++
++
++ # Used to indicate true or false condition
++ ax_compare_version=false
++
++ # Convert the two version strings to be compared into a format that
++ # allows a simple string comparison. The end result is that a version
++ # string of the form 1.12.5-r617 will be converted to the form
++ # 0001001200050617. In other words, each number is zero padded to four
++ # digits, and non digits are removed.
++
++ ax_compare_version_A=`echo "${PYTHON_VERSION}" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
++ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
++ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
++ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
++ -e 's/[^0-9]//g'`
++
++
++ ax_compare_version_B=`echo "3.8" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
++ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
++ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
++ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
++ -e 's/[^0-9]//g'`
++
++
++ ax_compare_version=`echo "x$ax_compare_version_A
++x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"`
++
++
++
++ if test "$ax_compare_version" = "true" ; then
++ EMBED="--embed"
++ fi
++
++
++ python3_ldflags=`${PYTHON3_CONFIG_BIN} --ldflags $EMBED`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ${PYTHON3_CONFIG_BIN}'s ldflags were \"$python3_ldflags}\"" >&5
+ $as_echo "$as_me: ${PYTHON3_CONFIG_BIN}'s ldflags were \"$python3_ldflags}\"" >&6;}
+
+@@ -2811,6 +3273,18 @@ $as_echo "$as_me: Sanitized ldflags were \"${mod_ldflags}\"" >&6;}
+
+ targetname="rlm_python3"
+ fi
++
++for ac_func in dl_iterate_phdr
++do :
++ ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr"
++if test "x$ac_cv_func_dl_iterate_phdr" = xyes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_DL_ITERATE_PHDR 1
++_ACEOF
++
++fi
++done
++
+ else
+ targetname=
+ echo \*\*\* module rlm_python3 is disabled.
+@@ -2833,11 +3307,7 @@ ac_config_headers="$ac_config_headers config.h"
+
+
+
+-
+- unset ac_cv_env_LIBS_set
+- unset ac_cv_env_LIBS_value
+-
+- ac_config_files="$ac_config_files all.mk"
++ac_config_files="$ac_config_files all.mk"
+
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+@@ -3417,6 +3887,7 @@ gives unlimited permission to copy, distribute and modify it."
+
+ ac_pwd='$ac_pwd'
+ srcdir='$srcdir'
++AWK='$AWK'
+ test -n "\$AWK" || AWK=awk
+ _ACEOF
+
+@@ -4111,4 +4582,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+
+-
+diff --git a/src/modules/rlm_python3/configure.ac b/src/modules/rlm_python3/configure.ac
+index 295a2486d2ac..698a8c1d1874 100644
+--- a/src/modules/rlm_python3/configure.ac
++++ b/src/modules/rlm_python3/configure.ac
+@@ -7,6 +7,7 @@ if test x$with_[]modname != xno; then
+
+ AC_PROG_CC
+ AC_PROG_CPP
++ AM_PATH_PYTHON([3.0],, [:])
+
+ dnl extra argument: --with-rlm-python3-config-bin
+ PYTHON3_CONFIG_BIN=
+@@ -58,7 +59,11 @@ if test x$with_[]modname != xno; then
+ '`
+ AC_MSG_NOTICE([Sanitized cflags were \"${mod_cflags}\"])
+
+- python3_ldflags=`${PYTHON3_CONFIG_BIN} --ldflags`
++ dnl # From python 3.8, --embed is required
++ dnl # https://bugs.python.org/issue36721
++ AX_COMPARE_VERSION(${PYTHON_VERSION}, [ge], [3.8], [EMBED="--embed"], [])
++
++ python3_ldflags=`${PYTHON3_CONFIG_BIN} --ldflags $EMBED`
+ AC_MSG_NOTICE([${PYTHON3_CONFIG_BIN}'s ldflags were \"$python3_ldflags}\"])
+
+ dnl # Strip -Wl,-O1... Is -O even a valid linker flag??
+@@ -77,6 +82,7 @@ if test x$with_[]modname != xno; then
+
+ targetname="rlm_python3"
+ fi
++ AC_CHECK_FUNCS([dl_iterate_phdr])
+ else
+ targetname=
+ echo \*\*\* module modname is disabled.
+diff --git a/src/modules/rlm_python3/rlm_python3.c b/src/modules/rlm_python3/rlm_python3.c
+index df223f0f401b..5da23f4d7116 100644
+--- a/src/modules/rlm_python3/rlm_python3.c
++++ b/src/modules/rlm_python3/rlm_python3.c
+@@ -41,8 +41,17 @@ RCSID("$Id$")
+ #include <link.h>
+ #endif
+
++/*
++ * Since version 3.8, the "m" suffix is no longer available.
++ * https://bugs.python.org/issue36707
++ */
++#if PY_MINOR_VERSION >= 8
++#define LIBPYTHON_LINKER_NAME \
++ "libpython" STRINGIFY(PY_MAJOR_VERSION) "." STRINGIFY(PY_MINOR_VERSION) LT_SHREXT
++#else
+ #define LIBPYTHON_LINKER_NAME \
+ "libpython" STRINGIFY(PY_MAJOR_VERSION) "." STRINGIFY(PY_MINOR_VERSION) "m" LT_SHREXT
++#endif
+
+ static uint32_t python_instances = 0;
+ static void *python_dlhandle;