[Python-checkins] bpo-36210: update optional extension handling for AIX (GH-12202)

Nick Coghlan webhook-mailer at python.org
Fri Jun 21 09:58:25 EDT 2019


https://github.com/python/cpython/commit/08970cb03c61f62f4f69e7769d0075fa66bb86aa
commit: 08970cb03c61f62f4f69e7769d0075fa66bb86aa
branch: master
author: Michael Felt <aixtools at users.noreply.github.com>
committer: Nick Coghlan <ncoghlan at gmail.com>
date: 2019-06-21T23:58:00+10:00
summary:

bpo-36210: update optional extension handling for AIX (GH-12202)

* Switch to officially supported curses from 3rd-party ASIS supported ncurses
* stop saying optional modules osaudiodev and spwd are missing on AIX

Patch by M.Felt

files:
A Misc/NEWS.d/next/Build/2019-03-06-18-55-10.bpo-36210.fup9H2.rst
M setup.py

diff --git a/Misc/NEWS.d/next/Build/2019-03-06-18-55-10.bpo-36210.fup9H2.rst b/Misc/NEWS.d/next/Build/2019-03-06-18-55-10.bpo-36210.fup9H2.rst
new file mode 100644
index 000000000000..aa9a56fe57ae
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2019-03-06-18-55-10.bpo-36210.fup9H2.rst
@@ -0,0 +1,9 @@
+Update optional extension module detection for AIX.
+ossaudiodev and spwd are not applicable for AIX, and
+are no longer reported as missing.
+3rd-party packaging of ncurses (with ASIS support)
+conflicts with officially supported AIX curses library,
+so configure AIX to use libcurses.a. However, skip
+trying to build _curses_panel.
+
+patch by M Felt
diff --git a/setup.py b/setup.py
index 598f5819f8f3..86e9816dc7b6 100644
--- a/setup.py
+++ b/setup.py
@@ -43,6 +43,7 @@ def get_platform():
 MS_WINDOWS = (HOST_PLATFORM == 'win32')
 CYGWIN = (HOST_PLATFORM == 'cygwin')
 MACOS = (HOST_PLATFORM == 'darwin')
+AIX = (HOST_PLATFORM.startswith('aix'))
 VXWORKS = ('vxworks' in HOST_PLATFORM)
 
 
@@ -805,7 +806,9 @@ def detect_simple_extensions(self):
         if (self.config_h_vars.get('HAVE_GETSPNAM', False) or
                 self.config_h_vars.get('HAVE_GETSPENT', False)):
             self.add(Extension('spwd', ['spwdmodule.c']))
-        else:
+        # AIX has shadow passwords, but access is not via getspent(), etc.
+        # module support is not expected so it not 'missing'
+        elif not AIX:
             self.missing.append('spwd')
 
         # select(2); not on ancient System V
@@ -909,6 +912,10 @@ def detect_readline_curses(self):
             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'):
+            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'):
@@ -1004,13 +1011,15 @@ def detect_readline_curses(self):
             self.missing.append('_curses')
 
         # If the curses module is enabled, check for the panel module
-        if (curses_enabled and
-            self.compiler.find_library_file(self.lib_dirs, panel_library)):
+        # _curses_panel needs some form of ncurses
+        skip_curses_panel = True if AIX else False
+        if (curses_enabled and not skip_curses_panel and
+                self.compiler.find_library_file(self.lib_dirs, panel_library)):
             self.add(Extension('_curses_panel', ['_curses_panel.c'],
-                               include_dirs=curses_includes,
-                               define_macros=curses_defines,
-                               libraries=[panel_library, *curses_libs]))
-        else:
+                           include_dirs=curses_includes,
+                           define_macros=curses_defines,
+                           libraries=[panel_library, *curses_libs]))
+        elif not skip_curses_panel:
             self.missing.append('_curses_panel')
 
     def detect_crypt(self):
@@ -1463,7 +1472,7 @@ def detect_platform_specific_exts(self):
         # Platform-specific libraries
         if HOST_PLATFORM.startswith(('linux', 'freebsd', 'gnukfreebsd')):
             self.add(Extension('ossaudiodev', ['ossaudiodev.c']))
-        else:
+        elif not AIX:
             self.missing.append('ossaudiodev')
 
         if MACOS:



More information about the Python-checkins mailing list