Author: Armin Rigo <[email protected]>
Branch:
Changeset: r64661:f732ef3e187a
Date: 2013-05-29 11:34 +0200
http://bitbucket.org/pypy/pypy/changeset/f732ef3e187a/
Log: Go to some lengths to try to guess the correct paths for ncurses.
Should fix issue667 and issue1497.
diff --git a/pypy/module/_minimal_curses/fficurses.py
b/pypy/module/_minimal_curses/fficurses.py
--- a/pypy/module/_minimal_curses/fficurses.py
+++ b/pypy/module/_minimal_curses/fficurses.py
@@ -11,21 +11,44 @@
from sys import platform
import os.path
-_CYGWIN = platform == 'cygwin'
-_NCURSES_CURSES = os.path.isfile("/usr/include/ncurses/curses.h")
+# We cannot trust ncurses5-config, it's broken in various ways in
+# various versions. For example it might not list -ltinfo even though
+# it's needed, or --cflags might be completely empty. On Ubuntu 10.04
+# it gives -I/usr/include/ncurses, which doesn't exist at all. Crap.
-if _CYGWIN or _NCURSES_CURSES:
- eci = ExternalCompilationInfo(
- includes = ['ncurses/curses.h', 'ncurses/term.h'],
- libraries = ['curses'],
- )
-else:
- eci = ExternalCompilationInfo(
- includes = ['curses.h', 'term.h'],
- libraries = ['curses'],
- )
+def try_cflags():
+ yield ExternalCompilationInfo(includes=['curses.h', 'term.h'])
+ yield ExternalCompilationInfo(includes=['curses.h', 'term.h'],
+ include_dirs=['/usr/include/ncurses'])
+ yield ExternalCompilationInfo(includes=['ncurses/curses.h',
+ 'ncurses/term.h'])
-rffi_platform.verify_eci(eci)
+def try_ldflags():
+ yield ExternalCompilationInfo(libraries=['curses'])
+ yield ExternalCompilationInfo(libraries=['curses', 'tinfo'])
+
+def try_eci():
+ try:
+ eci = ExternalCompilationInfo.from_config_tool("ncurses5-configx")
+ except Exception:
+ pass
+ else:
+ yield eci.merge(ExternalCompilationInfo(includes=['curses.h',
+ 'term.h']))
+ for eci1 in try_cflags():
+ for eci2 in try_ldflags():
+ yield eci1.merge(eci2)
+
+def guess_eci():
+ for eci in try_eci():
+ class CConfig:
+ _compilation_info_ = eci
+ HAS = rffi_platform.Has("setupterm")
+ if rffi_platform.configure(CConfig)['HAS']:
+ return eci
+ raise ImportError("failed to guess where ncurses is installed")
+
+eci = guess_eci()
INT = rffi.INT
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit