Skip to content

bpo-36210: correct logic in setup.py for optional extensions with regard to AIX #12202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jun 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
25 changes: 17 additions & 8 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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'):
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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:
Expand Down