mirror of https://github.com/python/cpython
Issue #7384: If the system readline library is linked against
ncurses, do not link the readline module against ncursesw.
This commit is contained in:
parent
e8a3ce4497
commit
ea568854b0
|
@ -19,12 +19,6 @@ import curses.panel
|
|||
from test.test_support import requires, TestSkipped
|
||||
requires('curses')
|
||||
|
||||
# skip all these tests on FreeBSD: test_curses currently hangs the
|
||||
# FreeBSD buildbots, preventing other tests from running. See issue
|
||||
# #7384.
|
||||
if 'freebsd' in sys.platform:
|
||||
raise TestSkipped('The curses module is broken on FreeBSD. '
|
||||
'See http://bugs.python.org/issue7384.')
|
||||
|
||||
# XXX: if newterm was supported we could use it instead of initscr and not exit
|
||||
term = os.environ.get('TERM')
|
||||
|
|
|
@ -259,6 +259,11 @@ Library
|
|||
Extension Modules
|
||||
-----------------
|
||||
|
||||
- Issue #7384: If the system readline library is linked against
|
||||
ncurses, do not link the readline module against ncursesw. The
|
||||
additional restriction of linking the readline and curses modules
|
||||
against the same curses library is currently not enabled.
|
||||
|
||||
- Issue #2810: Fix cases where the Windows registry API returns
|
||||
ERROR_MORE_DATA, requiring a re-try in order to get the complete result.
|
||||
|
||||
|
|
61
setup.py
61
setup.py
|
@ -15,6 +15,7 @@ from distutils.core import Extension, setup
|
|||
from distutils.command.build_ext import build_ext
|
||||
from distutils.command.install import install
|
||||
from distutils.command.install_lib import install_lib
|
||||
from distutils.spawn import find_executable
|
||||
|
||||
# This global variable is used to hold the list of modules to be disabled.
|
||||
disabled_module_list = []
|
||||
|
@ -601,6 +602,36 @@ class PyBuildExt(build_ext):
|
|||
|
||||
# readline
|
||||
do_readline = self.compiler.find_library_file(lib_dirs, 'readline')
|
||||
readline_termcap_library = ""
|
||||
curses_library = ""
|
||||
# Determine if readline is already linked against curses or tinfo.
|
||||
if do_readline and find_executable('ldd'):
|
||||
fp = os.popen("ldd %s" % do_readline)
|
||||
for ln in fp:
|
||||
if 'curses' in ln:
|
||||
readline_termcap_library = re.sub(
|
||||
r'.*lib(n?cursesw?)\.so.*', r'\1', ln
|
||||
).rstrip()
|
||||
break
|
||||
if 'tinfo' in ln: # termcap interface split out from ncurses
|
||||
readline_termcap_library = 'tinfo'
|
||||
break
|
||||
fp.close()
|
||||
# Issue 7384: If readline is already linked against curses,
|
||||
# use the same library for the readline and curses modules.
|
||||
# Disabled since applications relying on ncursesw might break.
|
||||
#
|
||||
# if 'curses' in readline_termcap_library:
|
||||
# curses_library = readline_termcap_library
|
||||
# elif self.compiler.find_library_file(lib_dirs, 'ncursesw'):
|
||||
# (...)
|
||||
if self.compiler.find_library_file(lib_dirs, 'ncursesw'):
|
||||
curses_library = 'ncursesw'
|
||||
elif self.compiler.find_library_file(lib_dirs, 'ncurses'):
|
||||
curses_library = 'ncurses'
|
||||
elif self.compiler.find_library_file(lib_dirs, 'curses'):
|
||||
curses_library = 'curses'
|
||||
|
||||
if platform == 'darwin':
|
||||
os_release = int(os.uname()[2].split('.')[0])
|
||||
dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
|
||||
|
@ -624,14 +655,10 @@ class PyBuildExt(build_ext):
|
|||
readline_extra_link_args = ()
|
||||
|
||||
readline_libs = ['readline']
|
||||
if self.compiler.find_library_file(lib_dirs,
|
||||
'ncursesw'):
|
||||
readline_libs.append('ncursesw')
|
||||
elif self.compiler.find_library_file(lib_dirs,
|
||||
'ncurses'):
|
||||
readline_libs.append('ncurses')
|
||||
elif self.compiler.find_library_file(lib_dirs, 'curses'):
|
||||
readline_libs.append('curses')
|
||||
if readline_termcap_library:
|
||||
pass # Issue 7384: Already linked against curses or tinfo.
|
||||
elif curses_library:
|
||||
readline_libs.append(curses_library)
|
||||
elif self.compiler.find_library_file(lib_dirs +
|
||||
['/usr/lib/termcap'],
|
||||
'termcap'):
|
||||
|
@ -1162,19 +1189,15 @@ class PyBuildExt(build_ext):
|
|||
# Curses support, requiring the System V version of curses, often
|
||||
# provided by the ncurses library.
|
||||
panel_library = 'panel'
|
||||
if (self.compiler.find_library_file(lib_dirs, 'ncursesw')):
|
||||
curses_libs = ['ncursesw']
|
||||
# Bug 1464056: If _curses.so links with ncursesw,
|
||||
# _curses_panel.so must link with panelw.
|
||||
panel_library = 'panelw'
|
||||
if curses_library.startswith('ncurses'):
|
||||
if curses_library == 'ncursesw':
|
||||
# Bug 1464056: If _curses.so links with ncursesw,
|
||||
# _curses_panel.so must link with panelw.
|
||||
panel_library = 'panelw'
|
||||
curses_libs = [curses_library]
|
||||
exts.append( Extension('_curses', ['_cursesmodule.c'],
|
||||
libraries = curses_libs) )
|
||||
elif (self.compiler.find_library_file(lib_dirs, 'ncurses')):
|
||||
curses_libs = ['ncurses']
|
||||
exts.append( Extension('_curses', ['_cursesmodule.c'],
|
||||
libraries = curses_libs) )
|
||||
elif (self.compiler.find_library_file(lib_dirs, 'curses')
|
||||
and platform != 'darwin'):
|
||||
elif curses_library == 'curses' and platform != 'darwin':
|
||||
# OSX has an old Berkeley curses, not good enough for
|
||||
# the _curses module.
|
||||
if (self.compiler.find_library_file(lib_dirs, 'terminfo')):
|
||||
|
|
Loading…
Reference in New Issue