about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gpgme
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2024-02-26 16:20:28 +0100
committerAlyssa Ross <hi@alyssa.is>2024-02-26 16:20:28 +0100
commit647438344bfc1f77791391e2b4f98eef865c63dc (patch)
treeef580867fc6cc413940e4330d939cf1afda082cb /nixpkgs/pkgs/development/libraries/gpgme
parentb084c6a0fab7f32c904c5c8e8db8dddcefbe507f (diff)
parente3474e1d1e53b70e2b2af73ea26d6340e82f6b8b (diff)
downloadnixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar.gz
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar.bz2
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar.lz
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar.xz
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.tar.zst
nixlib-647438344bfc1f77791391e2b4f98eef865c63dc.zip
Merge commit 'e3474e1d1e53'
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gpgme')
-rw-r--r--nixpkgs/pkgs/development/libraries/gpgme/default.nix29
-rw-r--r--nixpkgs/pkgs/development/libraries/gpgme/python-310-312-remove-distutils.patch647
-rw-r--r--nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch273
3 files changed, 665 insertions, 284 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gpgme/default.nix b/nixpkgs/pkgs/development/libraries/gpgme/default.nix
index ca359fcc912b..c712b5195dc5 100644
--- a/nixpkgs/pkgs/development/libraries/gpgme/default.nix
+++ b/nixpkgs/pkgs/development/libraries/gpgme/default.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , fetchurl
-, fetchpatch
 , autoreconfHook
 , libgpg-error
 , gnupg
@@ -9,7 +8,6 @@
 , glib
 , pth
 , libassuan
-, file
 , which
 , ncurses
 , texinfo
@@ -22,28 +20,34 @@
 , qt6Packages
 , python3
 }:
-let
-  inherit (stdenv.hostPlatform) system;
-in
+
 stdenv.mkDerivation rec {
   pname = "gpgme";
   version = "1.23.2";
+  pyproject = true;
+
+  outputs = [ "out" "dev" "info" ];
+
+  outputBin = "dev"; # gpgme-config; not so sure about gpgme-tool
 
   src = fetchurl {
-    url = "mirror://gnupg/gpgme/${pname}-${version}.tar.bz2";
+    url = "mirror://gnupg/gpgme/gpgme-${version}.tar.bz2";
     hash = "sha256-lJnosfM8zLaBVSehvBYEnTWmGYpsX64BhfK9VhvOUiQ=";
   };
 
   patches = [
-    # Support Python 3.10 version detection without distutils, https://dev.gnupg.org/D545
-    ./python-310-detection-without-distutils.patch
+    # Support Python 3.10-3.12, remove distutils, https://dev.gnupg.org/D545
+    ./python-310-312-remove-distutils.patch
     # Fix a test after disallowing compressed signatures in gpg (PR #180336)
     ./test_t-verify_double-plaintext.patch
   ];
 
-  outputs = [ "out" "dev" "info" ];
-
-  outputBin = "dev"; # gpgme-config; not so sure about gpgme-tool
+  postPatch = ''
+    # autoconf's beta detection requires a git repo to work
+    # and otherwise appends -unknown to the version number used in the python package which pip stumbles upon
+    substituteInPlace autogen.sh \
+      --replace-fail 'tmp="-unknown"' 'tmp=""'
+  '';
 
   nativeBuildInputs = [
     autoreconfHook
@@ -52,6 +56,9 @@ stdenv.mkDerivation rec {
     texinfo
   ] ++ lib.optionals pythonSupport [
     python3.pythonOnBuildForHost
+    python3.pkgs.pip
+    python3.pkgs.setuptools
+    python3.pkgs.wheel
     ncurses
     swig2
     which
diff --git a/nixpkgs/pkgs/development/libraries/gpgme/python-310-312-remove-distutils.patch b/nixpkgs/pkgs/development/libraries/gpgme/python-310-312-remove-distutils.patch
new file mode 100644
index 000000000000..774188aee89c
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gpgme/python-310-312-remove-distutils.patch
@@ -0,0 +1,647 @@
+diff --git a/lang/python/Makefile.am b/lang/python/Makefile.am
+--- a/lang/python/Makefile.am
++++ b/lang/python/Makefile.am
+@@ -34,8 +34,8 @@
+ .PHONY: prepare
+ prepare: copystamp
+ 
+-# For VPATH builds we need to copy some files because Python's
+-# distutils are not VPATH-aware.
++# For VPATH builds we need to copy some files because Python
++# is not VPATH-aware.
+ copystamp:
+ 	ln -sf "$(top_srcdir)/src/data.h" .
+ 	ln -sf "$(top_builddir)/conf/config.h" .
+@@ -48,7 +48,7 @@
+ 	  CFLAGS="$(CFLAGS)" \
+ 	  srcdir="$(srcdir)" \
+ 	  top_builddir="$(top_builddir)" \
+-	    $$PYTHON setup.py build --verbose --build-base="$$(basename "$${PYTHON}")-gpg" ; \
++	    $$PYTHON -m pip --verbose install --no-index --no-build-isolation --root="$$(basename "$${PYTHON}")-gpg" ${srcdir} ; \
+ 	done
+ 
+ python$(PYTHON_VERSION)-gpg/dist/gpg-$(VERSION).tar.gz.asc: copystamp
+@@ -57,8 +57,7 @@
+ 	CFLAGS="$(CFLAGS)" \
+ 	srcdir="$(srcdir)" \
+ 	top_builddir="$(top_builddir)" \
+-	  $(PYTHON) setup.py sdist --verbose --dist-dir=python$(PYTHON_VERSION)-gpg-dist \
+-		--manifest=python$(PYTHON_VERSION)-gpg-dist/MANIFEST
++	  $(PYTHON) -m build --sdist --outdir=python$(PYTHON_VERSION)-gpg-dist
+ 	gpgbin=gpgconf --list-components | grep OpenPGP | sed -e 's/gpg:OpenPGP://g'
+ 	$(gpgbin) --detach-sign --armor python$(PYTHON_VERSION)-gpg-dist/gpg-$(VERSION).tar.gz
+ 
+@@ -92,17 +91,16 @@
+ 	  CFLAGS="$(CFLAGS)" \
+ 	  srcdir="$(srcdir)" \
+ 	  top_builddir="$(top_builddir)" \
+-	  $$PYTHON setup.py \
+-	  build \
+-	  --build-base="$$(basename "$${PYTHON}")-gpg" \
++	  $$PYTHON -m pip --verbose \
+ 	  install \
++	  --no-index --no-build-isolation \
+ 	  --prefix "$(DESTDIR)$(prefix)" \
+-	  --verbose ; \
++	  ${srcdir} ; \
+ 	done
+ 
+ uninstall-local:
+ 	set -x; GV=$$(echo $(VERSION) | tr - _); for PYTHON in $(PYTHONS); do \
+ 	  PLATLIB="$(prefix)/$$("$${PYTHON}" -c 'import sysconfig, os; print(os.path.relpath(sysconfig.get_path("platlib", scheme="posix_prefix"), sysconfig.get_config_var("prefix")))')" ; \
+ 	  rm -rf -- "$(DESTDIR)$${PLATLIB}/gpg" \
+-		"$(DESTDIR)$${PLATLIB}"/gpg-$$GV-py*.egg-info ; \
++		"$(DESTDIR)$${PLATLIB}"/gpg-$$GV.dist-info ; \
+ 	done
+diff --git a/lang/python/doc/src/gpgme-python-howto.org b/lang/python/doc/src/gpgme-python-howto.org
+--- a/lang/python/doc/src/gpgme-python-howto.org
++++ b/lang/python/doc/src/gpgme-python-howto.org
+@@ -2945,7 +2945,7 @@
+ =setup.py= file which contains this:
+ 
+ #+BEGIN_SRC python -i
+-from distutils.core import setup
++from setuptools import setup
+ from Cython.Build import cythonize
+ 
+ setup(
+diff --git a/lang/python/examples/howto/advanced/cython/setup.py b/lang/python/examples/howto/advanced/cython/setup.py
+--- a/lang/python/examples/howto/advanced/cython/setup.py
++++ b/lang/python/examples/howto/advanced/cython/setup.py
+@@ -1,4 +1,4 @@
+-from distutils.core import setup
++from setuptools import setup
+ from Cython.Build import cythonize
+ 
+ setup(
+diff --git a/lang/python/setup.py.in b/lang/python/setup.py.in
+--- a/lang/python/setup.py.in
++++ b/lang/python/setup.py.in
+@@ -18,8 +18,8 @@
+ #    License along with this library; if not, write to the Free Software
+ #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ 
+-from distutils.core import setup, Extension
+-from distutils.command.build import build
++from setuptools import setup, Extension
++from setuptools.command.build import build
+ 
+ import glob
+ import os
+@@ -225,9 +225,8 @@
+         build.run(self)
+ 
+ 
+-py3 = [] if sys.version_info.major < 3 else ['-py3']
+ swig_sources = []
+-swig_opts = ['-threads'] + py3 + extra_swig_opts
++swig_opts = ['-threads'] + extra_swig_opts
+ swige = Extension(
+     'gpg._gpgme',
+     sources=swig_sources,
+diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
+--- a/m4/ax_python_devel.m4
++++ b/m4/ax_python_devel.m4
+@@ -1,10 +1,10 @@
+ # ===========================================================================
+-#      https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
++#     https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
+ # ===========================================================================
+ #
+ # SYNOPSIS
+ #
+-#   AX_PYTHON_DEVEL([version])
++#   AX_PYTHON_DEVEL([version[,optional]])
+ #
+ # DESCRIPTION
+ #
+@@ -12,8 +12,8 @@
+ #   in your configure.ac.
+ #
+ #   This macro checks for Python and tries to get the include path to
+-#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
+-#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
++#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
++#   variables. It also exports $(PYTHON_EXTRA_LIBS) and
+ #   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
+ #
+ #   You can search for some particular version of Python by passing a
+@@ -23,6 +23,11 @@
+ #   version number. Don't use "PYTHON_VERSION" for this: that environment
+ #   variable is declared as precious and thus reserved for the end-user.
+ #
++#   By default this will fail if it does not detect a development version of
++#   python.  If you want it to continue, set optional to true, like
++#   AX_PYTHON_DEVEL([], [true]).  The ax_python_devel_found variable will be
++#   "no" if it fails.
++#
+ #   This macro should work for all versions of Python >= 2.1.0. As an end
+ #   user, you can disable the check for the python version by setting the
+ #   PYTHON_NOVERSIONCHECK environment variable to something else than the
+@@ -67,10 +72,18 @@
+ #   modified version of the Autoconf Macro, you may extend this special
+ #   exception to the GPL to apply to your modified version as well.
+ 
+-#serial 17
++#serial 36
+ 
+ AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
+ AC_DEFUN([AX_PYTHON_DEVEL],[
++	# Get whether it's optional
++	if test -z "$2"; then
++	   ax_python_devel_optional=false
++	else
++	   ax_python_devel_optional=$2
++	fi
++	ax_python_devel_found=yes
++
+ 	#
+ 	# Allow the use of a (user set) custom python version
+ 	#
+@@ -81,81 +94,147 @@
+ 
+ 	AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
+ 	if test -z "$PYTHON"; then
+-	   AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
++	   AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path])
++	   if ! $ax_python_devel_optional; then
++	      AC_MSG_ERROR([Giving up, python development not available])
++	   fi
++	   ax_python_devel_found=no
+ 	   PYTHON_VERSION=""
+ 	fi
+ 
+-	#
+-	# Check for a version of Python >= 2.1.0
+-	#
+-	AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
+-	ac_supports_python_ver=`$PYTHON -c "import sys; \
++	if test $ax_python_devel_found = yes; then
++	   #
++	   # Check for a version of Python >= 2.1.0
++	   #
++	   AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
++	   ac_supports_python_ver=`$PYTHON -c "import sys; \
+ 		ver = sys.version.split ()[[0]]; \
+ 		print (ver >= '2.1.0')"`
+-	if test "$ac_supports_python_ver" != "True"; then
++	   if test "$ac_supports_python_ver" != "True"; then
+ 		if test -z "$PYTHON_NOVERSIONCHECK"; then
+ 			AC_MSG_RESULT([no])
+-			AC_MSG_FAILURE([
++			AC_MSG_WARN([
+ This version of the AC@&t@_PYTHON_DEVEL macro
+ doesn't work properly with versions of Python before
+ 2.1.0. You may need to re-run configure, setting the
+-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
++variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
+ PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+ Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+ to something else than an empty string.
+ ])
++			if ! $ax_python_devel_optional; then
++			   AC_MSG_FAILURE([Giving up])
++			fi
++			ax_python_devel_found=no
++			PYTHON_VERSION=""
+ 		else
+ 			AC_MSG_RESULT([skip at user request])
+ 		fi
+-	else
++	   else
+ 		AC_MSG_RESULT([yes])
++	   fi
+ 	fi
+ 
+-	#
+-	# if the macro parameter ``version'' is set, honour it
+-	#
+-	if test -n "$1"; then
++	if test $ax_python_devel_found = yes; then
++	   #
++	   # If the macro parameter ``version'' is set, honour it.
++	   # A Python shim class, VPy, is used to implement correct version comparisons via
++	   # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
++	   # Python 2.7.10 (the ".1" being evaluated as less than ".3").
++	   #
++	   if test -n "$1"; then
+ 		AC_MSG_CHECKING([for a version of Python $1])
+-		ac_supports_python_ver=`$PYTHON -c "import sys; \
+-			ver = sys.version.split ()[[0]]; \
++                cat << EOF > ax_python_devel_vpy.py
++class VPy:
++    def vtup(self, s):
++        return tuple(map(int, s.strip().replace("rc", ".").split(".")))
++    def __init__(self):
++        import sys
++        self.vpy = tuple(sys.version_info)[[:3]]
++    def __eq__(self, s):
++        return self.vpy == self.vtup(s)
++    def __ne__(self, s):
++        return self.vpy != self.vtup(s)
++    def __lt__(self, s):
++        return self.vpy < self.vtup(s)
++    def __gt__(self, s):
++        return self.vpy > self.vtup(s)
++    def __le__(self, s):
++        return self.vpy <= self.vtup(s)
++    def __ge__(self, s):
++        return self.vpy >= self.vtup(s)
++EOF
++		ac_supports_python_ver=`$PYTHON -c "import ax_python_devel_vpy; \
++                        ver = ax_python_devel_vpy.VPy(); \
+ 			print (ver $1)"`
++                rm -rf ax_python_devel_vpy*.py* __pycache__/ax_python_devel_vpy*.py*
+ 		if test "$ac_supports_python_ver" = "True"; then
+-		   AC_MSG_RESULT([yes])
++			AC_MSG_RESULT([yes])
+ 		else
+ 			AC_MSG_RESULT([no])
+-			AC_MSG_ERROR([this package requires Python $1.
++			AC_MSG_WARN([this package requires Python $1.
+ If you have it installed, but it isn't the default Python
+ interpreter in your system path, please pass the PYTHON_VERSION
+ variable to configure. See ``configure --help'' for reference.
+ ])
++			if ! $ax_python_devel_optional; then
++			   AC_MSG_ERROR([Giving up])
++			fi
++			ax_python_devel_found=no
+ 			PYTHON_VERSION=""
+ 		fi
++	   fi
+ 	fi
+ 
+-	#
+-	# Check if you have distutils, else fail
+-	#
+-	AC_MSG_CHECKING([for the distutils Python package])
+-	ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+-	if test -z "$ac_distutils_result"; then
++	if test $ax_python_devel_found = yes; then
++	   #
++	   # Check if you have distutils, else fail
++	   #
++	   AC_MSG_CHECKING([for the sysconfig Python package])
++	   ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
++	   if test $? -eq 0; then
+ 		AC_MSG_RESULT([yes])
+-	else
++		IMPORT_SYSCONFIG="import sysconfig"
++	   else
+ 		AC_MSG_RESULT([no])
+-		AC_MSG_ERROR([cannot import Python module "distutils".
++
++		AC_MSG_CHECKING([for the distutils Python package])
++		ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1`
++		if test $? -eq 0; then
++			AC_MSG_RESULT([yes])
++			IMPORT_SYSCONFIG="from distutils import sysconfig"
++		else
++			AC_MSG_WARN([cannot import Python module "distutils".
+ Please check your Python installation. The error was:
+-$ac_distutils_result])
+-		PYTHON_VERSION=""
++$ac_sysconfig_result])
++			if ! $ax_python_devel_optional; then
++			   AC_MSG_ERROR([Giving up])
++			fi
++			ax_python_devel_found=no
++			PYTHON_VERSION=""
++		fi
++	   fi
+ 	fi
+ 
+-	#
+-	# Check for Python include path
+-	#
+-	AC_MSG_CHECKING([for Python include path])
+-	if test -z "$PYTHON_CPPFLAGS"; then
+-		python_path=`$PYTHON -c "import distutils.sysconfig; \
+-			print (distutils.sysconfig.get_python_inc ());"`
+-		plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
+-			print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
++	if test $ax_python_devel_found = yes; then
++	   #
++	   # Check for Python include path
++	   #
++	   AC_MSG_CHECKING([for Python include path])
++	   if test -z "$PYTHON_CPPFLAGS"; then
++		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
++			# sysconfig module has different functions
++			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_path ('include'));"`
++			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_path ('platinclude'));"`
++		else
++			# old distutils way
++			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_python_inc ());"`
++			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_python_inc (plat_specific=1));"`
++		fi
+ 		if test -n "${python_path}"; then
+ 			if test "${plat_python_path}" != "${python_path}"; then
+ 				python_path="-I$python_path -I$plat_python_path"
+@@ -164,22 +243,22 @@
+ 			fi
+ 		fi
+ 		PYTHON_CPPFLAGS=$python_path
+-	fi
+-	AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+-	AC_SUBST([PYTHON_CPPFLAGS])
++	   fi
++	   AC_MSG_RESULT([$PYTHON_CPPFLAGS])
++	   AC_SUBST([PYTHON_CPPFLAGS])
+ 
+-	#
+-	# Check for Python library path
+-	#
+-	AC_MSG_CHECKING([for Python library path])
+-	if test -z "$PYTHON_LDFLAGS"; then
++	   #
++	   # Check for Python library path
++	   #
++	   AC_MSG_CHECKING([for Python library path])
++	   if test -z "$PYTHON_LIBS"; then
+ 		# (makes two attempts to ensure we've got a version number
+ 		# from the interpreter)
+ 		ac_python_version=`cat<<EOD | $PYTHON -
+ 
+ # join all versioning strings, on some systems
+ # major/minor numbers could be in different list elements
+-from distutils.sysconfig import *
++from sysconfig import *
+ e = get_config_var('VERSION')
+ if e is not None:
+ 	print(e)
+@@ -190,7 +269,7 @@
+ 				ac_python_version=$PYTHON_VERSION
+ 			else
+ 				ac_python_version=`$PYTHON -c "import sys; \
+-					print (sys.version[[:3]])"`
++					print ("%d.%d" % sys.version_info[[:2]])"`
+ 			fi
+ 		fi
+ 
+@@ -205,8 +284,8 @@
+ 		ac_python_libdir=`cat<<EOD | $PYTHON -
+ 
+ # There should be only one
+-import distutils.sysconfig
+-e = distutils.sysconfig.get_config_var('LIBDIR')
++$IMPORT_SYSCONFIG
++e = sysconfig.get_config_var('LIBDIR')
+ if e is not None:
+ 	print (e)
+ EOD`
+@@ -214,8 +293,8 @@
+ 		# Now, for the library:
+ 		ac_python_library=`cat<<EOD | $PYTHON -
+ 
+-import distutils.sysconfig
+-c = distutils.sysconfig.get_config_vars()
++$IMPORT_SYSCONFIG
++c = sysconfig.get_config_vars()
+ if 'LDVERSION' in c:
+ 	print ('python'+c[['LDVERSION']])
+ else:
+@@ -230,97 +309,163 @@
+ 		then
+ 			# use the official shared library
+ 			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
+-			PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
++			PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
+ 		else
+ 			# old way: use libpython from python_configdir
+ 			ac_python_libdir=`$PYTHON -c \
+-			  "from distutils.sysconfig import get_python_lib as f; \
++			  "from sysconfig import get_python_lib as f; \
+ 			  import os; \
+ 			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+-			PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
++			PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
+ 		fi
+ 
+-		if test -z "PYTHON_LDFLAGS"; then
+-			AC_MSG_ERROR([
++		if test -z "PYTHON_LIBS"; then
++			AC_MSG_WARN([
+   Cannot determine location of your Python DSO. Please check it was installed with
+-  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
++  dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
+ 			])
++			if ! $ax_python_devel_optional; then
++			   AC_MSG_ERROR([Giving up])
++			fi
++			ax_python_devel_found=no
++			PYTHON_VERSION=""
+ 		fi
++	   fi
+ 	fi
+-	AC_MSG_RESULT([$PYTHON_LDFLAGS])
+-	AC_SUBST([PYTHON_LDFLAGS])
+ 
+-	#
+-	# Check for site packages
+-	#
+-	AC_MSG_CHECKING([for Python site-packages path])
+-	if test -z "$PYTHON_SITE_PKG"; then
+-		PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+-			print (distutils.sysconfig.get_python_lib(0,0));"`
+-	fi
+-	AC_MSG_RESULT([$PYTHON_SITE_PKG])
+-	AC_SUBST([PYTHON_SITE_PKG])
++	if test $ax_python_devel_found = yes; then
++	   AC_MSG_RESULT([$PYTHON_LIBS])
++	   AC_SUBST([PYTHON_LIBS])
+ 
+-	#
+-	# libraries which must be linked in when embedding
+-	#
+-	AC_MSG_CHECKING(python extra libraries)
+-	if test -z "$PYTHON_EXTRA_LIBS"; then
+-	   PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+-                conf = distutils.sysconfig.get_config_var; \
++	   #
++	   # Check for site packages
++	   #
++	   AC_MSG_CHECKING([for Python site-packages path])
++	   if test -z "$PYTHON_SITE_PKG"; then
++		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
++			PYTHON_SITE_PKG=`$PYTHON -c "
++$IMPORT_SYSCONFIG;
++if hasattr(sysconfig, 'get_default_scheme'):
++    scheme = sysconfig.get_default_scheme()
++else:
++    scheme = sysconfig._get_default_scheme()
++if scheme == 'posix_local':
++    # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
++    scheme = 'posix_prefix'
++prefix = '$prefix'
++if prefix == 'NONE':
++    prefix = '$ac_default_prefix'
++sitedir = sysconfig.get_path('purelib', scheme, vars={'base': prefix})
++print(sitedir)"`
++		else
++			# distutils.sysconfig way
++			PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_python_lib(0,0));"`
++		fi
++	   fi
++	   AC_MSG_RESULT([$PYTHON_SITE_PKG])
++	   AC_SUBST([PYTHON_SITE_PKG])
++
++	   #
++	   # Check for platform-specific site packages
++	   #
++	   AC_MSG_CHECKING([for Python platform specific site-packages path])
++	   if test -z "$PYTHON_PLATFORM_SITE_PKG"; then
++		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
++			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "
++$IMPORT_SYSCONFIG;
++if hasattr(sysconfig, 'get_default_scheme'):
++    scheme = sysconfig.get_default_scheme()
++else:
++    scheme = sysconfig._get_default_scheme()
++if scheme == 'posix_local':
++    # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
++    scheme = 'posix_prefix'
++prefix = '$prefix'
++if prefix == 'NONE':
++    prefix = '$ac_default_prefix'
++sitedir = sysconfig.get_path('platlib', scheme, vars={'platbase': prefix})
++print(sitedir)"`
++		else
++			# distutils.sysconfig way
++			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++				print (sysconfig.get_python_lib(1,0));"`
++		fi
++	   fi
++	   AC_MSG_RESULT([$PYTHON_PLATFORM_SITE_PKG])
++	   AC_SUBST([PYTHON_PLATFORM_SITE_PKG])
++
++	   #
++	   # libraries which must be linked in when embedding
++	   #
++	   AC_MSG_CHECKING(python extra libraries)
++	   if test -z "$PYTHON_EXTRA_LIBS"; then
++	      PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++                conf = sysconfig.get_config_var; \
+                 print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
+-	fi
+-	AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+-	AC_SUBST(PYTHON_EXTRA_LIBS)
++	   fi
++	   AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
++	   AC_SUBST(PYTHON_EXTRA_LIBS)
+ 
+-	#
+-	# linking flags needed when embedding
+-	#
+-	AC_MSG_CHECKING(python extra linking flags)
+-	if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+-		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+-			conf = distutils.sysconfig.get_config_var; \
++	   #
++	   # linking flags needed when embedding
++	   #
++	   AC_MSG_CHECKING(python extra linking flags)
++	   if test -z "$PYTHON_EXTRA_LDFLAGS"; then
++		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
++			conf = sysconfig.get_config_var; \
+ 			print (conf('LINKFORSHARED'))"`
+-	fi
+-	AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+-	AC_SUBST(PYTHON_EXTRA_LDFLAGS)
++		# Hack for macos, it sticks this in here.
++		PYTHON_EXTRA_LDFLAGS=`echo $PYTHON_EXTRA_LDFLAGS | sed 's/CoreFoundation.*$/CoreFoundation/'`
++	   fi
++	   AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
++	   AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+ 
+-	#
+-	# final check to see if everything compiles alright
+-	#
+-	AC_MSG_CHECKING([consistency of all components of python development environment])
+-	# save current global flags
+-	ac_save_LIBS="$LIBS"
+-	ac_save_CPPFLAGS="$CPPFLAGS"
+-	LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+-	CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+-	AC_LANG_PUSH([C])
+-	AC_LINK_IFELSE([
++	   #
++	   # final check to see if everything compiles alright
++	   #
++	   AC_MSG_CHECKING([consistency of all components of python development environment])
++	   # save current global flags
++	   ac_save_LIBS="$LIBS"
++	   ac_save_LDFLAGS="$LDFLAGS"
++	   ac_save_CPPFLAGS="$CPPFLAGS"
++	   LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS"
++	   LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
++	   CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
++	   AC_LANG_PUSH([C])
++	   AC_LINK_IFELSE([
+ 		AC_LANG_PROGRAM([[#include <Python.h>]],
+ 				[[Py_Initialize();]])
+ 		],[pythonexists=yes],[pythonexists=no])
+-	AC_LANG_POP([C])
+-	# turn back to default flags
+-	CPPFLAGS="$ac_save_CPPFLAGS"
+-	LIBS="$ac_save_LIBS"
++	   AC_LANG_POP([C])
++	   # turn back to default flags
++	   CPPFLAGS="$ac_save_CPPFLAGS"
++	   LIBS="$ac_save_LIBS"
++	   LDFLAGS="$ac_save_LDFLAGS"
+ 
+-	AC_MSG_RESULT([$pythonexists])
++	   AC_MSG_RESULT([$pythonexists])
+ 
+-        if test ! "x$pythonexists" = "xyes"; then
+-	   AC_MSG_WARN([
++	   if test ! "x$pythonexists" = "xyes"; then
++	      AC_MSG_WARN([
+   Could not link test program to Python. Maybe the main Python library has been
+   installed in some non-standard library path. If so, pass it to configure,
+-  via the LDFLAGS environment variable.
+-  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
++  via the LIBS environment variable.
++  Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
+   ============================================================================
++   ERROR!
+    You probably have to install the development version of the Python package
+    for your distribution.  The exact name of this package varies among them.
+   ============================================================================
+-	   ])
+-	  PYTHON_VERSION=""
++	      ])
++	      if ! $ax_python_devel_optional; then
++		 AC_MSG_ERROR([Giving up])
++	      fi
++	      ax_python_devel_found=no
++	      PYTHON_VERSION=""
++	   fi
+ 	fi
+ 
+ 	#
+ 	# all done!
+ 	#
+-])
++])
+\ No newline at end of file
+diff --git a/m4/python.m4 b/m4/python.m4
+--- a/m4/python.m4
++++ b/m4/python.m4
+@@ -41,7 +41,7 @@
+   m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+ [python2 python2.7 dnl
+  python dnl
+- python3 python3.10 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4
++ python3 python3.12 python3.11 python3.10 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4
+  ])
+ 
+   AC_ARG_VAR([PYTHON], [the Python interpreter])
+
diff --git a/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch b/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch
deleted file mode 100644
index e0eea9ff0429..000000000000
--- a/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch
+++ /dev/null
@@ -1,273 +0,0 @@
-diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
---- a/m4/ax_python_devel.m4
-+++ b/m4/ax_python_devel.m4
-@@ -1,5 +1,5 @@
- # ===========================================================================
--#      https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
-+#     https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
- # ===========================================================================
- #
- # SYNOPSIS
-@@ -12,8 +12,8 @@
- #   in your configure.ac.
- #
- #   This macro checks for Python and tries to get the include path to
--#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
--#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
-+#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
-+#   variables. It also exports $(PYTHON_EXTRA_LIBS) and
- #   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
- #
- #   You can search for some particular version of Python by passing a
-@@ -67,7 +67,7 @@
- #   modified version of the Autoconf Macro, you may extend this special
- #   exception to the GPL to apply to your modified version as well.
- 
--#serial 17
-+#serial 23
- 
- AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
- AC_DEFUN([AX_PYTHON_DEVEL],[
-@@ -99,7 +99,7 @@
- This version of the AC@&t@_PYTHON_DEVEL macro
- doesn't work properly with versions of Python before
- 2.1.0. You may need to re-run configure, setting the
--variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
-+variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
- PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
- Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
- to something else than an empty string.
-@@ -135,16 +135,25 @@
- 	#
- 	# Check if you have distutils, else fail
- 	#
--	AC_MSG_CHECKING([for the distutils Python package])
--	ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
--	if test -z "$ac_distutils_result"; then
-+	AC_MSG_CHECKING([for the sysconfig Python package])
-+	ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
-+	if test $? -eq 0; then
- 		AC_MSG_RESULT([yes])
-+		IMPORT_SYSCONFIG="import sysconfig"
- 	else
- 		AC_MSG_RESULT([no])
--		AC_MSG_ERROR([cannot import Python module "distutils".
-+
-+		AC_MSG_CHECKING([for the distutils Python package])
-+		ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1`
-+		if test $? -eq 0; then
-+			AC_MSG_RESULT([yes])
-+			IMPORT_SYSCONFIG="from distutils import sysconfig"
-+		else
-+			AC_MSG_ERROR([cannot import Python module "distutils".
- Please check your Python installation. The error was:
--$ac_distutils_result])
--		PYTHON_VERSION=""
-+$ac_sysconfig_result])
-+			PYTHON_VERSION=""
-+		fi
- 	fi
- 
- 	#
-@@ -152,10 +161,19 @@
- 	#
- 	AC_MSG_CHECKING([for Python include path])
- 	if test -z "$PYTHON_CPPFLAGS"; then
--		python_path=`$PYTHON -c "import distutils.sysconfig; \
--			print (distutils.sysconfig.get_python_inc ());"`
--		plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
--			print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
-+		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
-+			# sysconfig module has different functions
-+			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_path ('include'));"`
-+			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_path ('platinclude'));"`
-+		else
-+			# old distutils way
-+			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_python_inc ());"`
-+			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_python_inc (plat_specific=1));"`
-+		fi
- 		if test -n "${python_path}"; then
- 			if test "${plat_python_path}" != "${python_path}"; then
- 				python_path="-I$python_path -I$plat_python_path"
-@@ -172,14 +190,14 @@
- 	# Check for Python library path
- 	#
- 	AC_MSG_CHECKING([for Python library path])
--	if test -z "$PYTHON_LDFLAGS"; then
-+	if test -z "$PYTHON_LIBS"; then
- 		# (makes two attempts to ensure we've got a version number
- 		# from the interpreter)
- 		ac_python_version=`cat<<EOD | $PYTHON -
- 
- # join all versioning strings, on some systems
- # major/minor numbers could be in different list elements
--from distutils.sysconfig import *
-+from sysconfig import *
- e = get_config_var('VERSION')
- if e is not None:
- 	print(e)
-@@ -197,7 +215,7 @@
- 		# Make the versioning information available to the compiler
- 
- 		# JW: We don't need it and it interferes with the hack
--		# to detect multiple Pyhton versions
-+		# to detect multiple Python versions
- 		#AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
-                 #                  [If available, contains the Python version number currently in use.])
- 
-@@ -205,8 +223,8 @@
- 		ac_python_libdir=`cat<<EOD | $PYTHON -
- 
- # There should be only one
--import distutils.sysconfig
--e = distutils.sysconfig.get_config_var('LIBDIR')
-+$IMPORT_SYSCONFIG
-+e = sysconfig.get_config_var('LIBDIR')
- if e is not None:
- 	print (e)
- EOD`
-@@ -214,8 +232,8 @@
- 		# Now, for the library:
- 		ac_python_library=`cat<<EOD | $PYTHON -
- 
--import distutils.sysconfig
--c = distutils.sysconfig.get_config_vars()
-+$IMPORT_SYSCONFIG
-+c = sysconfig.get_config_vars()
- if 'LDVERSION' in c:
- 	print ('python'+c[['LDVERSION']])
- else:
-@@ -230,44 +248,67 @@
- 		then
- 			# use the official shared library
- 			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
--			PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
-+			PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
- 		else
- 			# old way: use libpython from python_configdir
- 			ac_python_libdir=`$PYTHON -c \
--			  "from distutils.sysconfig import get_python_lib as f; \
-+			  "from sysconfig import get_python_lib as f; \
- 			  import os; \
- 			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
--			PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
-+			PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
- 		fi
- 
--		if test -z "PYTHON_LDFLAGS"; then
-+		if test -z "PYTHON_LIBS"; then
- 			AC_MSG_ERROR([
-   Cannot determine location of your Python DSO. Please check it was installed with
--  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
-+  dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
- 			])
- 		fi
- 	fi
--	AC_MSG_RESULT([$PYTHON_LDFLAGS])
--	AC_SUBST([PYTHON_LDFLAGS])
-+	AC_MSG_RESULT([$PYTHON_LIBS])
-+	AC_SUBST([PYTHON_LIBS])
- 
- 	#
- 	# Check for site packages
- 	#
- 	AC_MSG_CHECKING([for Python site-packages path])
- 	if test -z "$PYTHON_SITE_PKG"; then
--		PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
--			print (distutils.sysconfig.get_python_lib(0,0));"`
-+		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
-+			PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_path('purelib'));"`
-+		else
-+			# distutils.sysconfig way
-+			PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_python_lib(0,0));"`
-+		fi
- 	fi
- 	AC_MSG_RESULT([$PYTHON_SITE_PKG])
- 	AC_SUBST([PYTHON_SITE_PKG])
- 
-+	#
-+	# Check for platform-specific site packages
-+	#
-+	AC_MSG_CHECKING([for Python platform specific site-packages path])
-+	if test -z "$PYTHON_SITE_PKG"; then
-+		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
-+			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_path('platlib'));"`
-+		else
-+			# distutils.sysconfig way
-+			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+				print (sysconfig.get_python_lib(1,0));"`
-+		fi
-+	fi
-+	AC_MSG_RESULT([$PYTHON_PLATFORM_SITE_PKG])
-+	AC_SUBST([PYTHON_PLATFORM_SITE_PKG])
-+
- 	#
- 	# libraries which must be linked in when embedding
- 	#
- 	AC_MSG_CHECKING(python extra libraries)
- 	if test -z "$PYTHON_EXTRA_LIBS"; then
--	   PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
--                conf = distutils.sysconfig.get_config_var; \
-+	   PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+                conf = sysconfig.get_config_var; \
-                 print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
- 	fi
- 	AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
-@@ -278,8 +319,8 @@
- 	#
- 	AC_MSG_CHECKING(python extra linking flags)
- 	if test -z "$PYTHON_EXTRA_LDFLAGS"; then
--		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
--			conf = distutils.sysconfig.get_config_var; \
-+		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-+			conf = sysconfig.get_config_var; \
- 			print (conf('LINKFORSHARED'))"`
- 	fi
- 	AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
-@@ -291,8 +332,10 @@
- 	AC_MSG_CHECKING([consistency of all components of python development environment])
- 	# save current global flags
- 	ac_save_LIBS="$LIBS"
-+	ac_save_LDFLAGS="$LDFLAGS"
- 	ac_save_CPPFLAGS="$CPPFLAGS"
--	LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
-+	LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
-+	LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
- 	CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
- 	AC_LANG_PUSH([C])
- 	AC_LINK_IFELSE([
-@@ -303,15 +346,17 @@
- 	# turn back to default flags
- 	CPPFLAGS="$ac_save_CPPFLAGS"
- 	LIBS="$ac_save_LIBS"
-+	LDFLAGS="$ac_save_LDFLAGS"
- 
- 	AC_MSG_RESULT([$pythonexists])
- 
-         if test ! "x$pythonexists" = "xyes"; then
-+        # gpgme: only warn here, no error, as we are looking for multiple versions
- 	   AC_MSG_WARN([
-   Could not link test program to Python. Maybe the main Python library has been
-   installed in some non-standard library path. If so, pass it to configure,
--  via the LDFLAGS environment variable.
--  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
-+  via the LIBS environment variable.
-+  Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
-   ============================================================================
-    You probably have to install the development version of the Python package
-    for your distribution.  The exact name of this package varies among them.
-@@ -323,4 +368,4 @@
- 	#
- 	# all done!
- 	#
--])
-+])
-\ No newline at end of file
-