Sat Jan 13 04:24:29 2024 UTC (155d)
lang/python3*: Fix cross-build by patching out broken readline crud.

Python's setup.py tries to decide whether readline is available by
running readelf on the path it thinks it can find to libreadline.so.
Since we always use a single static readline/curses choice in Pythin
(readline, not editline, with (fake-)ncurses), just patch all that
buggy detection goo away.

No new maintenance burden because this logic has been ripped out of
Python 3.12 anyway.  Python 3.8 skipped for now because it doesn't
cross-build at the moment anyway -- more work needed to make that
happen (and it's not as easy as Python>=3.9 as I recall).


(riastradh)
diff -r1.29 -r1.30 pkgsrc/lang/python310/Makefile
diff -r1.27 -r1.28 pkgsrc/lang/python310/distinfo
diff -r1.7 -r1.8 pkgsrc/lang/python310/patches/patch-setup.py
diff -r1.23 -r1.24 pkgsrc/lang/python311/Makefile
diff -r1.12 -r1.13 pkgsrc/lang/python311/distinfo
diff -r1.2 -r1.3 pkgsrc/lang/python311/patches/patch-setup.py
diff -r1.37 -r1.38 pkgsrc/lang/python39/distinfo
diff -r1.10 -r1.11 pkgsrc/lang/python39/patches/patch-setup.py

cvs diff -r1.29 -r1.30 pkgsrc/lang/python310/Makefile (expand / switch to context diff)
--- pkgsrc/lang/python310/Makefile 2023/11/23 12:43:35 1.29
+++ pkgsrc/lang/python310/Makefile 2024/01/13 04:24:28 1.30
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.29 2023/11/23 12:43:35 jperkin Exp $
+# $NetBSD: Makefile,v 1.30 2024/01/13 04:24:28 riastradh Exp $
 
 .include "dist.mk"
 
@@ -38,6 +38,7 @@
 GNU_CONFIGURE=		yes
 CONFIGURE_ARGS+=	--enable-shared
 CONFIGURE_ARGS+=	--with-openssl=${BUILDLINK_PREFIX.openssl}
+CONFIGURE_ARGS+=	--with-readline=readline # XXX editline?
 CONFIGURE_ARGS+=	--with-system-expat
 CONFIGURE_ARGS+=	--with-system-ffi
 CONFIGURE_ARGS+=	--without-ensurepip

cvs diff -r1.27 -r1.28 pkgsrc/lang/python310/distinfo (expand / switch to context diff)
--- pkgsrc/lang/python310/distinfo 2023/11/10 09:48:40 1.27
+++ pkgsrc/lang/python310/distinfo 2024/01/13 04:24:28 1.28
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.27 2023/11/10 09:48:40 nia Exp $
+$NetBSD: distinfo,v 1.28 2024/01/13 04:24:28 riastradh Exp $
 
 BLAKE2s (Python-3.10.13.tar.xz) = c714daeb2437980ce940e76db70f037d844bcddc06dddb6ac966cef281a2b514
 SHA512 (Python-3.10.13.tar.xz) = 7579772e501486b2b07f78142082dee1e99c7643640098860ac0cf2ca87daf7588b0c00b1db1960146b37f56a6ed98fd08297c25c9a19b612cf6e6a258984da8
@@ -16,4 +16,4 @@
 SHA1 (patch-Python_thread__pthread.h) = b8efa178380fe48da4a0bf2bfa906851a314824e
 SHA1 (patch-configure) = 8ffe98e51407d10e46e7d1531f2e0e0b58e1cfa6
 SHA1 (patch-pyconfig.h.in) = 1ab77914315acbf0352d242ed66200bea54548f6
-SHA1 (patch-setup.py) = 5ab776a53ad361fdea9004817a7157743ab42db7
+SHA1 (patch-setup.py) = 5d1907202ad38286b92f41a553f34cf87c965213

cvs diff -r1.7 -r1.8 pkgsrc/lang/python310/patches/patch-setup.py (expand / switch to context diff)
--- pkgsrc/lang/python310/patches/patch-setup.py 2023/10/23 06:36:00 1.7
+++ pkgsrc/lang/python310/patches/patch-setup.py 2024/01/13 04:24:28 1.8
@@ -1,4 +1,4 @@
-$NetBSD: patch-setup.py,v 1.7 2023/10/23 06:36:00 wiz Exp $
+$NetBSD: patch-setup.py,v 1.8 2024/01/13 04:24:28 riastradh Exp $
 
 Disable certain modules, so they can be built as separate packages.
 Do not look for ncursesw.
@@ -7,8 +7,11 @@
 Don't search for modules in PREFIX. Fixes build failure when py-setuptools
   are installed.
 Enable cross-build by setting sys._home and sys.path to build directory
+Disable circuitous readline detection which tries to outsmart pkgsrc's
+static choice of libreadline and (fake-)ncurses and trips over its elven
+shoelaces when cross-compiling.
 
---- setup.py.orig	2022-03-23 20:12:04.000000000 +0000
+--- setup.py.orig	2023-08-24 12:46:25.000000000 +0000
 +++ setup.py
 @@ -1,5 +1,11 @@
  # Autodetecting setup.py script for building the Python extensions
@@ -64,7 +67,7 @@
  def find_file(filename, std_dirs, paths):
      """Searches for the directory where a given file is located,
      and returns a possibly-empty list of additional directories, or None
-@@ -823,15 +841,15 @@ class PyBuildExt(build_ext):
+@@ -822,15 +840,15 @@ class PyBuildExt(build_ext):
                          add_dir_to_list(dir_list, directory)
  
      def configure_compiler(self):
@@ -89,7 +92,7 @@
          self.add_multiarch_paths()
          self.add_ldflags_cppflags()
  
-@@ -879,6 +897,9 @@ class PyBuildExt(build_ext):
+@@ -878,6 +896,9 @@ class PyBuildExt(build_ext):
              self.lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32']
  
          if MACOS:
@@ -99,16 +102,82 @@
              # This should work on any unixy platform ;-)
              # If the user has bothered specifying additional -I and -L flags
              # in OPT and LDFLAGS we might as well use them here.
-@@ -1106,8 +1127,6 @@ class PyBuildExt(build_ext):
-         # use the same library for the readline and curses modules.
-         if 'curses' in readline_termcap_library:
-             curses_library = readline_termcap_library
+@@ -1067,71 +1088,10 @@ class PyBuildExt(build_ext):
+     def detect_readline_curses(self):
+         # readline
+         readline_termcap_library = ""
+-        curses_library = ""
+-        # Cannot use os.popen here in py3k.
+-        tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib')
+-        if not os.path.exists(self.build_temp):
+-            os.makedirs(self.build_temp)
+-        # Determine if readline is already linked against curses or tinfo.
+-        if sysconfig.get_config_var('HAVE_LIBREADLINE'):
+-            if sysconfig.get_config_var('WITH_EDITLINE'):
+-                readline_lib = 'edit'
+-            else:
+-                readline_lib = 'readline'
+-            do_readline = self.compiler.find_library_file(self.lib_dirs,
+-                readline_lib)
+-            if CROSS_COMPILING:
+-                ret = run_command("%s -d %s | grep '(NEEDED)' > %s"
+-                                % (sysconfig.get_config_var('READELF'),
+-                                   do_readline, tmpfile))
+-            elif find_executable('ldd'):
+-                ret = run_command("ldd %s > %s" % (do_readline, tmpfile))
+-            else:
+-                ret = 1
+-            if ret == 0:
+-                with open(tmpfile) as fp:
+-                    for ln in fp:
+-                        if 'curses' in ln:
+-                            readline_termcap_library = re.sub(
+-                                r'.*lib(n?cursesw?)\.so.*', r'\1', ln
+-                            ).rstrip()
+-                            break
+-                        # termcap interface split out from ncurses
+-                        if 'tinfo' in ln:
+-                            readline_termcap_library = 'tinfo'
+-                            break
+-            if os.path.exists(tmpfile):
+-                os.unlink(tmpfile)
+-        else:
+-            do_readline = False
+-        # Issue 7384: If readline is already linked against curses,
+-        # use the same library for the readline and curses modules.
+-        if 'curses' in readline_termcap_library:
+-            curses_library = readline_termcap_library
 -        elif self.compiler.find_library_file(self.lib_dirs, 'ncursesw'):
 -            curses_library = 'ncursesw'
-         # Issue 36210: OSS provided ncurses does not link on AIX
-         # Use IBM supplied 'curses' for successful build of _curses
-         elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
-@@ -1211,8 +1230,7 @@ class PyBuildExt(build_ext):
+-        # Issue 36210: OSS provided ncurses does not link on AIX
+-        # Use IBM supplied 'curses' for successful build of _curses
+-        elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'ncurses'):
+-            curses_library = 'ncurses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
++        curses_library = "ncurses"
++        do_readline = True
++        readline_lib = 'readline'
+ 
+-        if MACOS:
+-            os_release = int(os.uname()[2].split('.')[0])
+-            dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
+-            if (dep_target and
+-                    (tuple(int(n) for n in dep_target.split('.')[0:2])
+-                        < (10, 5) ) ):
+-                os_release = 8
+-            if os_release < 9:
+-                # MacOSX 10.4 has a broken readline. Don't try to build
+-                # the readline module unless the user has installed a fixed
+-                # readline package
+-                if find_file('readline/rlconf.h', self.inc_dirs, []) is None:
+-                    do_readline = False
+         if do_readline:
+             if MACOS and os_release < 9:
+                 # In every directory on the search path search for a dynamic
+@@ -1213,8 +1173,7 @@ class PyBuildExt(build_ext):
          # If the curses module is enabled, check for the panel module
          # _curses_panel needs some form of ncurses
          skip_curses_panel = True if AIX else False
@@ -118,7 +187,7 @@
              self.add(Extension('_curses_panel', ['_curses_panel.c'],
                             include_dirs=curses_includes,
                             define_macros=curses_defines,
-@@ -1457,6 +1475,31 @@ class PyBuildExt(build_ext):
+@@ -1459,6 +1418,31 @@ class PyBuildExt(build_ext):
          dbm_order = ['gdbm']
          # The standard Unix dbm module:
          if not CYGWIN:
@@ -150,7 +219,7 @@
              config_args = [arg.strip("'")
                             for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
              dbm_args = [arg for arg in config_args
-@@ -1468,7 +1511,7 @@ class PyBuildExt(build_ext):
+@@ -1470,7 +1454,7 @@ class PyBuildExt(build_ext):
              dbmext = None
              for cand in dbm_order:
                  if cand == "ndbm":
@@ -159,7 +228,7 @@
                          # Some systems have -lndbm, others have -lgdbm_compat,
                          # others don't have either
                          if self.compiler.find_library_file(self.lib_dirs,
-@@ -2328,10 +2371,7 @@ class PyBuildExt(build_ext):
+@@ -2333,10 +2317,7 @@ class PyBuildExt(build_ext):
              sources = ['_decimal/_decimal.c']
              depends = ['_decimal/docstrings.h']
          else:
@@ -171,7 +240,7 @@
              libraries = ['m']
              sources = [
                '_decimal/_decimal.c',
-@@ -2747,7 +2787,7 @@ def main():
+@@ -2752,7 +2733,7 @@ def main():
            # If you change the scripts installed here, you also need to
            # check the PyBuildScripts command above, and change the links
            # created by the bininstall target in Makefile.pre.in

cvs diff -r1.23 -r1.24 pkgsrc/lang/python311/Makefile (expand / switch to context diff)
--- pkgsrc/lang/python311/Makefile 2023/12/28 13:12:24 1.23
+++ pkgsrc/lang/python311/Makefile 2024/01/13 04:24:28 1.24
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.23 2023/12/28 13:12:24 thor Exp $
+# $NetBSD: Makefile,v 1.24 2024/01/13 04:24:28 riastradh Exp $
 
 .include "dist.mk"
 
@@ -38,6 +38,7 @@
 GNU_CONFIGURE=		yes
 CONFIGURE_ARGS+=	--enable-shared
 CONFIGURE_ARGS+=	--with-openssl=${BUILDLINK_PREFIX.openssl}
+CONFIGURE_ARGS+=	--with-readline=readline # XXX editline?
 CONFIGURE_ARGS+=	--with-system-expat
 CONFIGURE_ARGS+=	--with-system-ffi
 CONFIGURE_ARGS+=	--without-ensurepip

cvs diff -r1.12 -r1.13 pkgsrc/lang/python311/distinfo (expand / switch to context diff)
--- pkgsrc/lang/python311/distinfo 2023/12/11 10:23:42 1.12
+++ pkgsrc/lang/python311/distinfo 2024/01/13 04:24:28 1.13
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.12 2023/12/11 10:23:42 adam Exp $
+$NetBSD: distinfo,v 1.13 2024/01/13 04:24:28 riastradh Exp $
 
 BLAKE2s (Python-3.11.7.tar.xz) = bd74ee6c5197164ba2646db27f640928e7a445fb1f6723051faa4a0d14c11549
 SHA512 (Python-3.11.7.tar.xz) = 11e06f2ffe1f66888cb5b4e9f607de815294d6863a77eda6ec6d7c724ef158df9f51881f4a956d4a6fa973c2fb6fd031d495e3496e9b0bb53793fb1cc8434c63
@@ -10,4 +10,4 @@
 SHA1 (patch-Lib_sysconfig.py) = bc6d91bf8f7121456b26ea7f080f588c96f2596f
 SHA1 (patch-Makefile.pre.in) = fdb5794d112f422a1f28aa9f8b179dc05520f9e1
 SHA1 (patch-configure) = a6d9a00ff160581245bc30d1b0d2ec0e9da8fb0b
-SHA1 (patch-setup.py) = a601ce207f5e61d15503c8781e925353d1e516b9
+SHA1 (patch-setup.py) = 874b114febf51181509593a272ad5cdd4acaf3b4

cvs diff -r1.2 -r1.3 pkgsrc/lang/python311/patches/patch-setup.py (expand / switch to context diff)
--- pkgsrc/lang/python311/patches/patch-setup.py 2023/10/23 06:36:00 1.2
+++ pkgsrc/lang/python311/patches/patch-setup.py 2024/01/13 04:24:28 1.3
@@ -1,4 +1,4 @@
-$NetBSD: patch-setup.py,v 1.2 2023/10/23 06:36:00 wiz Exp $
+$NetBSD: patch-setup.py,v 1.3 2024/01/13 04:24:28 riastradh Exp $
 
 Disable certain modules, so they can be built as separate packages.
 Do not look for ncursesw.
@@ -8,8 +8,11 @@
   are installed.
 Enable cross-build by setting sys._home and sys.path to build directory
 Module _crypt might need -lcrypt (taken from Python 3.10).
+Disable circuitous readline detection which tries to outsmart pkgsrc's
+static choice of libreadline and (fake-)ncurses and trips over its elven
+shoelaces when cross-compiling.
 
---- setup.py.orig	2022-10-24 17:35:39.000000000 +0000
+--- setup.py.orig	2023-12-04 17:56:29.000000000 +0000
 +++ setup.py
 @@ -1,5 +1,11 @@
  # Autodetecting setup.py script for building the Python extensions
@@ -100,16 +103,82 @@
              # This should work on any unixy platform ;-)
              # If the user has bothered specifying additional -I and -L flags
              # in OPT and LDFLAGS we might as well use them here.
-@@ -1074,8 +1095,6 @@ class PyBuildExt(build_ext):
-         # use the same library for the readline and curses modules.
-         if 'curses' in readline_termcap_library:
-             curses_library = readline_termcap_library
+@@ -1036,71 +1057,10 @@ class PyBuildExt(build_ext):
+     def detect_readline_curses(self):
+         # readline
+         readline_termcap_library = ""
+-        curses_library = ""
+-        # Cannot use os.popen here in py3k.
+-        tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib')
+-        if not os.path.exists(self.build_temp):
+-            os.makedirs(self.build_temp)
+-        # Determine if readline is already linked against curses or tinfo.
+-        if sysconfig.get_config_var('HAVE_LIBREADLINE'):
+-            if sysconfig.get_config_var('WITH_EDITLINE'):
+-                readline_lib = 'edit'
+-            else:
+-                readline_lib = 'readline'
+-            do_readline = self.compiler.find_library_file(self.lib_dirs,
+-                readline_lib)
+-            if CROSS_COMPILING:
+-                ret = run_command("%s -d %s | grep '(NEEDED)' > %s"
+-                                % (sysconfig.get_config_var('READELF'),
+-                                   do_readline, tmpfile))
+-            elif find_executable('ldd'):
+-                ret = run_command("ldd %s > %s" % (do_readline, tmpfile))
+-            else:
+-                ret = 1
+-            if ret == 0:
+-                with open(tmpfile) as fp:
+-                    for ln in fp:
+-                        if 'curses' in ln:
+-                            readline_termcap_library = re.sub(
+-                                r'.*lib(n?cursesw?)\.so.*', r'\1', ln
+-                            ).rstrip()
+-                            break
+-                        # termcap interface split out from ncurses
+-                        if 'tinfo' in ln:
+-                            readline_termcap_library = 'tinfo'
+-                            break
+-            if os.path.exists(tmpfile):
+-                os.unlink(tmpfile)
+-        else:
+-            do_readline = False
+-        # Issue 7384: If readline is already linked against curses,
+-        # use the same library for the readline and curses modules.
+-        if 'curses' in readline_termcap_library:
+-            curses_library = readline_termcap_library
 -        elif self.compiler.find_library_file(self.lib_dirs, 'ncursesw'):
 -            curses_library = 'ncursesw'
-         # Issue 36210: OSS provided ncurses does not link on AIX
-         # Use IBM supplied 'curses' for successful build of _curses
-         elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
-@@ -1166,8 +1185,7 @@ class PyBuildExt(build_ext):
+-        # Issue 36210: OSS provided ncurses does not link on AIX
+-        # Use IBM supplied 'curses' for successful build of _curses
+-        elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'ncurses'):
+-            curses_library = 'ncurses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
++        curses_library = "ncurses"
++        do_readline = True
++        readline_lib = 'readline'
+ 
+-        if MACOS:
+-            os_release = int(os.uname()[2].split('.')[0])
+-            dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
+-            if (dep_target and
+-                    (tuple(int(n) for n in dep_target.split('.')[0:2])
+-                        < (10, 5) ) ):
+-                os_release = 8
+-            if os_release < 9:
+-                # MacOSX 10.4 has a broken readline. Don't try to build
+-                # the readline module unless the user has installed a fixed
+-                # readline package
+-                if find_file('readline/rlconf.h', self.inc_dirs, []) is None:
+-                    do_readline = False
+         if do_readline:
+             readline_libs = [readline_lib]
+             if readline_termcap_library:
+@@ -1169,8 +1129,7 @@ class PyBuildExt(build_ext):
          # If the curses module is enabled, check for the panel module
          # _curses_panel needs some form of ncurses
          skip_curses_panel = True if AIX else False
@@ -119,7 +188,7 @@
              self.add(Extension('_curses_panel', ['_curses_panel.c'],
                             include_dirs=curses_includes,
                             define_macros=curses_defines,
-@@ -1176,7 +1194,11 @@ class PyBuildExt(build_ext):
+@@ -1179,7 +1138,11 @@ class PyBuildExt(build_ext):
              self.missing.append('_curses_panel')
  
      def detect_crypt(self):
@@ -132,7 +201,7 @@
  
      def detect_dbm_gdbm(self):
          # Modules that provide persistent dictionary-like semantics.  You will
-@@ -1199,6 +1221,31 @@ class PyBuildExt(build_ext):
+@@ -1202,6 +1165,31 @@ class PyBuildExt(build_ext):
  
          # The standard Unix dbm module:
          if not CYGWIN:
@@ -164,7 +233,7 @@
              config_args = [arg.strip("'")
                             for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
              dbm_args = [arg for arg in config_args
-@@ -1616,7 +1663,7 @@ def main():
+@@ -1619,7 +1607,7 @@ def main():
            # If you change the scripts installed here, you also need to
            # check the PyBuildScripts command above, and change the links
            # created by the bininstall target in Makefile.pre.in

cvs diff -r1.37 -r1.38 pkgsrc/lang/python39/distinfo (expand / switch to context diff)
--- pkgsrc/lang/python39/distinfo 2023/11/10 09:48:39 1.37
+++ pkgsrc/lang/python39/distinfo 2024/01/13 04:24:28 1.38
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.37 2023/11/10 09:48:39 nia Exp $
+$NetBSD: distinfo,v 1.38 2024/01/13 04:24:28 riastradh Exp $
 
 BLAKE2s (Python-3.9.18.tar.xz) = 429256eb52e94427ae86302633ce8b01ba42d37c44c59e89fa0ae09b721da63f
 SHA512 (Python-3.9.18.tar.xz) = aab155aca757d298394eddb91ff9a8f239665bd46feb495c6b6f735bbcb7489c05c858cc4cd08f1575c24f293b33492d763e9a140d92f0b2b0cc81a165a677c7
@@ -21,4 +21,4 @@
 SHA1 (patch-Python_thread__pthread.h) = 25609f722ac9c17a49023ddc6882545d9d7798ff
 SHA1 (patch-configure) = 944b8bb9601fd064333305778fb57997ce0ac531
 SHA1 (patch-pyconfig.h.in) = 2f06af7358690b46eaff404226b898962b049a0e
-SHA1 (patch-setup.py) = dab93079027f8ac6a259c9e683d35fe7b66c57e5
+SHA1 (patch-setup.py) = 185090e3497763ca271316b5ff4df7f1e72d1c14

cvs diff -r1.10 -r1.11 pkgsrc/lang/python39/patches/patch-setup.py (expand / switch to context diff)
--- pkgsrc/lang/python39/patches/patch-setup.py 2023/10/23 06:36:01 1.10
+++ pkgsrc/lang/python39/patches/patch-setup.py 2024/01/13 04:24:29 1.11
@@ -1,4 +1,4 @@
-$NetBSD: patch-setup.py,v 1.10 2023/10/23 06:36:01 wiz Exp $
+$NetBSD: patch-setup.py,v 1.11 2024/01/13 04:24:29 riastradh Exp $
 
 Disable certain modules, so they can be built as separate packages.
 Do not look for ncursesw.
@@ -7,8 +7,11 @@
 Don't search for modules in PREFIX. Fixes build failure when py-setuptools
   are installed.
 Enable cross-build by setting sys._home and sys.path to build directory
+Disable circuitous readline detection which tries to outsmart pkgsrc's
+static choice of libreadline and (fake-)ncurses and trips over its elven
+shoelaces when cross-compiling.
 
---- setup.py.orig	2022-03-23 21:12:08.000000000 +0000
+--- setup.py.orig	2023-08-24 17:59:28.000000000 +0000
 +++ setup.py
 @@ -1,5 +1,11 @@
  # Autodetecting setup.py script for building the Python extensions
@@ -100,16 +103,75 @@
              # This should work on any unixy platform ;-)
              # If the user has bothered specifying additional -I and -L flags
              # in OPT and LDFLAGS we might as well use them here.
-@@ -1006,8 +1026,6 @@ class PyBuildExt(build_ext):
-         # use the same library for the readline and curses modules.
-         if 'curses' in readline_termcap_library:
-             curses_library = readline_termcap_library
+@@ -971,65 +991,10 @@ class PyBuildExt(build_ext):
+ 
+     def detect_readline_curses(self):
+         # readline
+-        do_readline = self.compiler.find_library_file(self.lib_dirs, 'readline')
++        do_readline = True
+         readline_termcap_library = ""
+-        curses_library = ""
+-        # Cannot use os.popen here in py3k.
+-        tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib')
+-        if not os.path.exists(self.build_temp):
+-            os.makedirs(self.build_temp)
+-        # Determine if readline is already linked against curses or tinfo.
+-        if do_readline:
+-            if CROSS_COMPILING:
+-                ret = run_command("%s -d %s | grep '(NEEDED)' > %s"
+-                                % (sysconfig.get_config_var('READELF'),
+-                                   do_readline, tmpfile))
+-            elif find_executable('ldd'):
+-                ret = run_command("ldd %s > %s" % (do_readline, tmpfile))
+-            else:
+-                ret = 1
+-            if ret == 0:
+-                with open(tmpfile) as fp:
+-                    for ln in fp:
+-                        if 'curses' in ln:
+-                            readline_termcap_library = re.sub(
+-                                r'.*lib(n?cursesw?)\.so.*', r'\1', ln
+-                            ).rstrip()
+-                            break
+-                        # termcap interface split out from ncurses
+-                        if 'tinfo' in ln:
+-                            readline_termcap_library = 'tinfo'
+-                            break
+-            if os.path.exists(tmpfile):
+-                os.unlink(tmpfile)
+-        # Issue 7384: If readline is already linked against curses,
+-        # use the same library for the readline and curses modules.
+-        if 'curses' in readline_termcap_library:
+-            curses_library = readline_termcap_library
 -        elif self.compiler.find_library_file(self.lib_dirs, 'ncursesw'):
 -            curses_library = 'ncursesw'
-         # Issue 36210: OSS provided ncurses does not link on AIX
-         # Use IBM supplied 'curses' for successful build of _curses
-         elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
-@@ -1109,8 +1127,7 @@ class PyBuildExt(build_ext):
+-        # Issue 36210: OSS provided ncurses does not link on AIX
+-        # Use IBM supplied 'curses' for successful build of _curses
+-        elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'ncurses'):
+-            curses_library = 'ncurses'
+-        elif self.compiler.find_library_file(self.lib_dirs, 'curses'):
+-            curses_library = 'curses'
++        curses_library = "ncurses"
+ 
+-        if MACOS:
+-            os_release = int(os.uname()[2].split('.')[0])
+-            dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
+-            if (dep_target and
+-                    (tuple(int(n) for n in dep_target.split('.')[0:2])
+-                        < (10, 5) ) ):
+-                os_release = 8
+-            if os_release < 9:
+-                # MacOSX 10.4 has a broken readline. Don't try to build
+-                # the readline module unless the user has installed a fixed
+-                # readline package
+-                if find_file('readline/rlconf.h', self.inc_dirs, []) is None:
+-                    do_readline = False
+         if do_readline:
+             if MACOS and os_release < 9:
+                 # In every directory on the search path search for a dynamic
+@@ -1109,8 +1074,7 @@ class PyBuildExt(build_ext):
          # If the curses module is enabled, check for the panel module
          # _curses_panel needs some form of ncurses
          skip_curses_panel = True if AIX else False
@@ -119,7 +181,7 @@
              self.add(Extension('_curses_panel', ['_curses_panel.c'],
                             include_dirs=curses_includes,
                             define_macros=curses_defines,
-@@ -1361,6 +1378,31 @@ class PyBuildExt(build_ext):
+@@ -1361,6 +1325,31 @@ class PyBuildExt(build_ext):
          dbm_order = ['gdbm']
          # The standard Unix dbm module:
          if not CYGWIN:
@@ -151,7 +213,7 @@
              config_args = [arg.strip("'")
                             for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
              dbm_args = [arg for arg in config_args
-@@ -1372,7 +1414,7 @@ class PyBuildExt(build_ext):
+@@ -1372,7 +1361,7 @@ class PyBuildExt(build_ext):
              dbmext = None
              for cand in dbm_order:
                  if cand == "ndbm":
@@ -160,7 +222,7 @@
                          # Some systems have -lndbm, others have -lgdbm_compat,
                          # others don't have either
                          if self.compiler.find_library_file(self.lib_dirs,
-@@ -2209,10 +2251,7 @@ class PyBuildExt(build_ext):
+@@ -2209,10 +2198,7 @@ class PyBuildExt(build_ext):
              sources = ['_decimal/_decimal.c']
              depends = ['_decimal/docstrings.h']
          else:
@@ -172,7 +234,7 @@
              libraries = ['m']
              sources = [
                '_decimal/_decimal.c',
-@@ -2597,7 +2636,7 @@ def main():
+@@ -2597,7 +2583,7 @@ def main():
            # If you change the scripts installed here, you also need to
            # check the PyBuildScripts command above, and change the links
            # created by the bininstall target in Makefile.pre.in