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

Reply via email to