From f7364d5833f700eefd7919326bfa5724da1461c3 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Wed, 7 Aug 2013 08:47:36 +0000 Subject: Add support for linking against a curses library when available and using it to detect whether or not a terminal supports colors. This replaces a particularly egregious hack that merely compared the TERM environment variable to "dumb". That doesn't really translate to a reasonable experience for users that have actually ensured their terminal's capabilities are accurately reflected. This makes testing a terminal for color support somewhat more expensive, but it is called very rarely anyways. The important fast path when the output is being piped somewhere is already in place. The global lock may seem excessive, but the spec for calling into curses is *terrible*. The whole library is terrible, and I spent quite a bit of time looking for a better way of doing this before convincing myself that this was the fundamentally correct way to behave. The damage of the curses library is very narrowly confined, and we continue to use raw escape codes for actually manipulating the colors which is a much sane system than directly using curses here (IMO). If this causes trouble for folks, please let me know. I've tested it on Linux and will watch the bots carefully. I've also worked to account for the variances of curses interfaces that I could finde documentation for, but that may not have been sufficient. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187874 91177308-0d34-0410-b5e6-96231b3b80d8 --- autoconf/configure.ac | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'autoconf') diff --git a/autoconf/configure.ac b/autoconf/configure.ac index 5be25af..30481ea 100644 --- a/autoconf/configure.ac +++ b/autoconf/configure.ac @@ -1072,6 +1072,17 @@ AC_ARG_WITH(bug-report-url, AC_DEFINE_UNQUOTED(BUG_REPORT_URL,"$withval", [Bug report URL.]) +dnl --enable-curses: check whether the user wants to control use of curses: +AC_ARG_ENABLE(curses,AS_HELP_STRING( + [--enable-curses], + [Use curses for querying terminal infomation if available (default is YES)]), + [case "$enableval" in + yes) llvm_cv_enable_curses="yes" ;; + no) llvm_cv_enable_curses="no" ;; + *) AC_MSG_ERROR([Invalid setting for --enable-curses. Use "yes" or "no"]) ;; + esac], + llvm_cv_enable_curses="yes") + dnl --enable-libffi : check whether the user wants to turn off libffi: AC_ARG_ENABLE(libffi,AS_HELP_STRING( --enable-libffi,[Check for the presence of libffi (default is NO)]), @@ -1378,6 +1389,14 @@ dnl macros to detect whether clock_gettime is available, this just finds the dnl right libraries to link with. AC_SEARCH_LIBS(clock_gettime,rt) +dnl The curses library is optional; used for querying terminal info +if test "$llvm_cv_enable_curses" = "yes" ; then + dnl We need the has_color functionality in curses for it to be useful. + AC_SEARCH_LIBS(has_colors,curses ncurses ncursesw, + AC_DEFINE([HAVE_CURSES],[1], + [Define if curses provides the has_color() function on this platform.])) +fi + dnl libffi is optional; used to call external functions from the interpreter if test "$llvm_cv_enable_libffi" = "yes" ; then AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1], @@ -1554,6 +1573,11 @@ else AC_SUBST(HAVE_LIBZ, 0) fi +dnl Try to find a suitable curses header. +if test "$llvm_cv_enable_curses" = "yes" ; then + AC_CHECK_HEADERS([curses.h ncurses.h ncursesw.h ncurses/curses.h ncursesw/curses.h]) +fi + dnl Try to find ffi.h. if test "$llvm_cv_enable_libffi" = "yes" ; then AC_CHECK_HEADERS([ffi.h ffi/ffi.h]) -- cgit v1.1