Commit 08970cb0 authored by Michael Felt's avatar Michael Felt Committed by Nick Coghlan

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
parent d0068000
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
......@@ -43,6 +43,7 @@ HOST_PLATFORM = 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 @@ class PyBuildExt(build_ext):
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 @@ class PyBuildExt(build_ext):
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 @@ class PyBuildExt(build_ext):
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 @@ class PyBuildExt(build_ext):
# 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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment