From: Janus Weil Date: Sat, 1 Jun 2013 19:12:57 +0000 (+0200) Subject: configure.ac: Add AC_HEADER_TIOCGWINSZ macro. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c68a6e08c5177557d7ecc99a173593f064a15a7d;p=gcc.git configure.ac: Add AC_HEADER_TIOCGWINSZ macro. 2013-06-01 Janus Weil Mikael Morin * configure.ac: Add AC_HEADER_TIOCGWINSZ macro. * config.in: Regenerated. * configure: Regenerated. 2013-06-01 Janus Weil Mikael Morin * error.c (get_terminal_width): Only limit the width if we're outputting to a terminal. Try to determine width via ioctl. Co-Authored-By: Mikael Morin From-SVN: r199585 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3df45d8ad92..d9ab9eac21c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-06-01 Janus Weil + Mikael Morin + + * configure.ac: Add AC_HEADER_TIOCGWINSZ macro. + * config.in: Regenerated. + * configure: Regenerated. + 2013-06-01 Jan Hubicka PR middle-end/57366 diff --git a/gcc/config.in b/gcc/config.in index f122d48579e..288c11f9377 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -199,6 +199,12 @@ #endif +/* Define to 1 if `TIOCGWINSZ' requires . */ +#ifndef USED_FOR_TARGET +#undef GWINSZ_IN_SYS_IOCTL +#endif + + /* mcontext_t fields start with __ */ #ifndef USED_FOR_TARGET #undef HAS_MCONTEXT_T_UNDERSCORES @@ -1247,7 +1253,7 @@ #endif -/* Define if your AIX linker supports a large TOC. */ +/* Define if your PowerPC64 linker supports a large TOC. */ #ifndef USED_FOR_TARGET #undef HAVE_LD_LARGE_TOC #endif diff --git a/gcc/configure b/gcc/configure index 1f03eac6e27..8c221078102 100755 --- a/gcc/configure +++ b/gcc/configure @@ -8293,6 +8293,66 @@ $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } +if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_termios_h=yes +else + ac_cv_sys_tiocgwinsz_in_termios_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } + +if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } +if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes +else + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } + + if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then + +$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h + + fi +fi + for ac_header in limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \ fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \ sys/resource.h sys/param.h sys/times.h sys/stat.h \ @@ -17834,7 +17894,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17837 "configure" +#line 17897 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -17940,7 +18000,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17943 "configure" +#line 18003 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index 855affdf152..41b64c78736 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -939,6 +939,7 @@ AC_HEADER_STDC AC_HEADER_TIME ACX_HEADER_STRING AC_HEADER_SYS_WAIT +AC_HEADER_TIOCGWINSZ AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \ fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \ sys/resource.h sys/param.h sys/times.h sys/stat.h \ diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4d76a444f93..20436913fc4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-06-01 Janus Weil + Mikael Morin + + * error.c (get_terminal_width): Only limit the width if we're + outputting to a terminal. Try to determine width via ioctl. + 2013-06-01 Tobias Burnus * decl.c (add_global_entry): Take locus. diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index ee0dea0c1c7..35fe62706c6 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -30,6 +30,15 @@ along with GCC; see the file COPYING3. If not see #include "flags.h" #include "gfortran.h" +#ifdef HAVE_TERMIOS_H +# include +#endif + +#ifdef GWINSZ_IN_SYS_IOCTL +# include +#endif + + static int suppress_errors = 0; static int warnings_not_errors = 0; @@ -59,9 +68,26 @@ gfc_pop_suppress_errors (void) } +/* Determine terminal width (for trimming source lines in output). */ + static int get_terminal_width (void) { + /* Only limit the width if we're outputting to a terminal. */ +#ifdef HAVE_UNISTD_H + if (!isatty (STDERR_FILENO)) + return INT_MAX; +#endif + + /* Method #1: Use ioctl (not available on all systems). */ +#ifdef TIOCGWINSZ + struct winsize w; + w.ws_col = 0; + if (ioctl (0, TIOCGWINSZ, &w) == 0 && w.ws_col > 0) + return w.ws_col; +#endif + + /* Method #2: Query environment variable $COLUMNS. */ const char *p = getenv ("COLUMNS"); if (p) { @@ -69,7 +95,8 @@ get_terminal_width (void) if (value > 0) return value; } - /* Use a reasonable default. */ + + /* If both fail, use reasonable default. */ return 80; }