[Patch, Fortran] Detecting the terminal width

2013-06-01 Thread Janus Weil
>> Index: gcc/fortran/error.c
>> ===
>> --- gcc/fortran/error.c   (revision 199530)
>> +++ gcc/fortran/error.c   (working copy)
>> @@ -30,6 +30,13 @@ along with GCC; see the file COPYING3.  If not see
>>  #include "flags.h"
>>  #include "gfortran.h"
>>
>> +#if !(defined (_WIN32) || defined (VMS) || defined (__vxworks) || \
>> +  defined (__Lynx__) || defined (__ANDROID__))
> We should better use autoconf rather than hard-coding platforms here.

Ok. Unfortunately I'm not much of a autoconf hero (better to say: not
at all). Is the new patch in the attachment sufficient (probably not
...)? I can not test it on my system with --enable-maintainer-mode
because I get:

configure.ac:2: error: Please use exactly Autoconf 2.64 instead of 2.69.

Why on earth does GCC require an old autoconf version?


>> +/* 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.  */
>> +  if (!isatty (STDERR_FILENO))
>> +return INT_MAX;
> Guard it with HAVE_UNISTD_H or HAVE_ISATTY ?

Done.


>> +  /* Method #1: Use ioctl (not available on all systems).  */
>> +#ifdef TIOCGWINSZ
>> +  struct winsize w;
>> +  ioctl (0, TIOCGWINSZ, &w);
> You should check the ioctl result.  I bet it returns non-zero in
> Manfred's (pathological) case...

Also done.


> The rest looks good.

Thanks for the feedback, Mikael. New patch attached ...

Cheers,
Janus


terminal_width_v3.diff
Description: Binary data


Re: [Patch, Fortran] Detecting the terminal width

2013-06-01 Thread Mikael Morin
Le 01/06/2013 10:42, Janus Weil a écrit :
> Ok. Unfortunately I'm not much of a autoconf hero (better to say: not
> at all).
Any person using autoconf is some of a hero. ;-)

> I can not test it on my system with --enable-maintainer-mode
> because I get:
> 
> configure.ac:2: error: Please use exactly Autoconf 2.64 instead of 2.69.
> 
> Why on earth does GCC require an old autoconf version?
There is an answer here:
http://gcc.gnu.org/ml/gcc-help/2011-01/msg00248.html

The bottom line is:
GCC versions the generated files, so require exactly one autoconf.
And I suppose it just hasn't been updated to require the latest one.


> New patch attached ...
Tobias doesn't seem to argue (too much) against it, so OK.

Attached is what I get with autoconf-2.64/automake-1.11.1


Thanks
Mikael







Index: config.in
===
--- config.in   (révision 199575)
+++ config.in   (copie de travail)
@@ -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
Index: configure
===
--- configure   (révision 199575)
+++ configure   (copie de travail)
@@ -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
Index: configure.ac
===
--- configure.ac(révision 199575)
+++ configure.ac(copie de travail)
@@ -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 \
Index: fortran/error.c
===
--- fortran/error.c (révision 199575)
+++ fortran/error.c (copie de travail)
@@ -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_error

Re: [Patch, Fortran] Detecting the terminal width

2013-06-01 Thread Janus Weil
>> Ok. Unfortunately I'm not much of a autoconf hero (better to say: not
>> at all).
> Any person using autoconf is some of a hero. ;-)

Totally ...


>> I can not test it on my system with --enable-maintainer-mode
>> because I get:
>>
>> configure.ac:2: error: Please use exactly Autoconf 2.64 instead of 2.69.
>>
>> Why on earth does GCC require an old autoconf version?
> There is an answer here:
> http://gcc.gnu.org/ml/gcc-help/2011-01/msg00248.html

Yes, I also found this in the meantime.


> The bottom line is:
> GCC versions the generated files, so require exactly one autoconf.
> And I suppose it just hasn't been updated to require the latest one.

Makes sense somehow, although it is pretty inconvenient.


>> New patch attached ...
> Tobias doesn't seem to argue (too much) against it, so OK.

Thanks. Committed as r199585:

http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=199585

Cheers,
Janus