Patchwork [v3] Use AC_COMPUTE_INT for EOF, SEEK_CUR, etc.

login
register
mail settings
Submitter Paolo Carlini
Date July 27, 2010, 10:38 a.m.
Message ID <4C4EB72D.4040907@oracle.com>
Download mbox | patch
Permalink /patch/59993/
State New
Headers show

Comments

Paolo Carlini - July 27, 2010, 10:38 a.m.
Hi,

fixed the hack we had in place to avoid including <stdio.h>
unnecessarily thanks to Ralf help.

Tested x86_64-linux, committed to mainline.

Paolo.

////////////////////
2010-07-27  Paolo Carlini  <paolo.carlini@oracle.com>
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* acinclude.m4 ([GLIBCXX_CHECK_STDIO_MACROS]): Remove.
	([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS]): Add, actually
	compute the constants via AC_COMPUTE_INT.
	* configure.ac: Call the latter.
	* include/bits/ios_base.h: Adjust.
	* include/bits/char_traits.h: Likewise.
	* testsuite/27_io/ios_base/cons/assign_neg.cc: Adjust dg-error
	line number.
	* testsuite/27_io/ios_base/cons/copy_neg.cc: Likewise.
	* config.h.in: Regenerate.
	* configure: Likewise.

2010-07-27  Paolo Carlini  <paolo.carlini@oracle.com>

	* config/io/c_io_stdio.h: Do not include <cstddef>.
Paolo Carlini - July 27, 2010, 4:55 p.m.
On 07/27/2010 08:54 PM, Paolo Bonzini wrote:
> You can do this with AC_CACHE_CHECK, or simply by adding new
> AC_MSG_CHECKING invocations.
Ok, thanks a lot.

Paolo.
Paolo Bonzini - July 27, 2010, 6:54 p.m.
On 07/27/2010 12:38 PM, Paolo Carlini wrote:
> Hi,
>
> fixed the hack we had in place to avoid including<stdio.h>
> unnecessarily thanks to Ralf help.
>
> Tested x86_64-linux, committed to mainline.

Just a nit:

+  AC_MSG_CHECKING([For some <stdio.h> integer constants.])
...
+  AC_MSG_RESULT($glibcxx_cv_stdio_seek_end)

This will show as

checking For some <stdio.h> integer constants. -1
1
2

Please change it so that it looks like either:

checking for some <stdio.h> integer constants... done

or better

checking for the value of EOF... -1
checking for the value of SEEK_CUR... 1
checking for the value of SEEK_END... 2

You can do this with AC_CACHE_CHECK, or simply by adding new 
AC_MSG_CHECKING invocations.

Paolo

Patch

Index: configure.ac
===================================================================
--- configure.ac	(revision 162556)
+++ configure.ac	(working copy)
@@ -153,8 +153,8 @@ 
 # For C99 support to TR1.
 GLIBCXX_CHECK_C99_TR1
 
-# For common values of EOF, SEEK_CUR, SEEK_END.
-GLIBCXX_CHECK_STDIO_MACROS
+# For the EOF, SEEK_CUR, and SEEK_END integer constants.
+GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS
 
 # For gettimeofday support.
 GLIBCXX_CHECK_GETTIMEOFDAY
Index: include/bits/ios_base.h
===================================================================
--- include/bits/ios_base.h	(revision 162556)
+++ include/bits/ios_base.h	(working copy)
@@ -42,15 +42,6 @@ 
 #include <bits/localefwd.h>
 #include <bits/locale_classes.h>
 
-#ifndef _GLIBCXX_STDIO_MACROS
-# include <cstdio>   // For SEEK_CUR, SEEK_END
-# define _IOS_BASE_SEEK_CUR SEEK_CUR
-# define _IOS_BASE_SEEK_END SEEK_END
-#else
-# define _IOS_BASE_SEEK_CUR 1
-# define _IOS_BASE_SEEK_END 2
-#endif
-
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
   // The following definitions of bitmask types are enums, not ints,
@@ -189,8 +180,8 @@ 
   enum _Ios_Seekdir 
     { 
       _S_beg = 0,
-      _S_cur = _IOS_BASE_SEEK_CUR,
-      _S_end = _IOS_BASE_SEEK_END,
+      _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
+      _S_end = _GLIBCXX_STDIO_SEEK_END,
       _S_ios_seekdir_end = 1L << 16 
     };
 
@@ -970,8 +961,5 @@ 
 
 _GLIBCXX_END_NAMESPACE
 
-#undef _IOS_BASE_SEEK_CUR
-#undef _IOS_BASE_SEEK_END
-
 #endif /* _IOS_BASE_H */
 
Index: include/bits/char_traits.h
===================================================================
--- include/bits/char_traits.h	(revision 162556)
+++ include/bits/char_traits.h	(working copy)
@@ -42,13 +42,6 @@ 
 #include <bits/postypes.h>      // For streampos
 #include <cwchar>               // For WEOF, wmemmove, wmemset, etc.
 
-#ifndef _GLIBCXX_STDIO_MACROS
-# include <cstdio>              // For EOF
-# define _CHAR_TRAITS_EOF EOF
-#else
-# define _CHAR_TRAITS_EOF (-1)
-#endif
-
 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
 
   /**
@@ -139,7 +132,7 @@ 
 
       static int_type
       eof()
-      { return static_cast<int_type>(_CHAR_TRAITS_EOF); }
+      { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
 
       static int_type
       not_eof(const int_type& __c)
@@ -294,7 +287,7 @@ 
 
       static int_type
       eof()
-      { return static_cast<int_type>(_CHAR_TRAITS_EOF); }
+      { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
 
       static int_type
       not_eof(const int_type& __c)
@@ -570,6 +563,4 @@ 
 
 #endif 
 
-#undef _CHAR_TRAITS_EOF
-
 #endif // _CHAR_TRAITS_H
Index: testsuite/27_io/ios_base/cons/assign_neg.cc
===================================================================
--- testsuite/27_io/ios_base/cons/assign_neg.cc	(revision 162556)
+++ testsuite/27_io/ios_base/cons/assign_neg.cc	(working copy)
@@ -34,5 +34,5 @@ 
 }
 // { dg-error "synthesized" "" { target *-*-* } 33 } 
 // { dg-error "within this context" "" { target *-*-* } 26 } 
-// { dg-error "is private" "" { target *-*-* } 788 } 
+// { dg-error "is private" "" { target *-*-* } 779 }
 // { dg-error "operator=" "" { target *-*-* } 0 } 
Index: testsuite/27_io/ios_base/cons/copy_neg.cc
===================================================================
--- testsuite/27_io/ios_base/cons/copy_neg.cc	(revision 162556)
+++ testsuite/27_io/ios_base/cons/copy_neg.cc	(working copy)
@@ -1,6 +1,6 @@ 
 // { dg-do compile }
 
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
 // Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -34,5 +34,5 @@ 
 }
 // { dg-error "within this context" "" { target *-*-* } 26 }
 // { dg-error "synthesized" "" { target *-*-* } 33 } 
-// { dg-error "is private" "" { target *-*-* } 785 } 
+// { dg-error "is private" "" { target *-*-* } 776 } 
 // { dg-error "copy constructor" "" { target *-*-* } 0 } 
Index: config/io/c_io_stdio.h
===================================================================
--- config/io/c_io_stdio.h	(revision 162556)
+++ config/io/c_io_stdio.h	(working copy)
@@ -1,6 +1,6 @@ 
 // Underlying io library details -*- C++ -*-
 
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -34,7 +34,6 @@ 
 #define _GLIBCXX_CXX_IO_H 1
 
 #include <cstdio>
-#include <cstddef>
 #include <bits/gthr.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
Index: acinclude.m4
===================================================================
--- acinclude.m4	(revision 162556)
+++ acinclude.m4	(working copy)
@@ -1619,26 +1619,38 @@ 
 ])
 
 dnl
-dnl Check whether EOF, SEEK_CUR, and SEEK_END have the most common values:
-dnl in that case including <cstdio> in some C++ headers can be avoided.
+dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
 dnl
-AC_DEFUN([GLIBCXX_CHECK_STDIO_MACROS], [
+AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
 
-  AC_MSG_CHECKING([for EOF == -1, SEEK_CUR == 1, SEEK_END == 2])
-  AC_CACHE_VAL(glibcxx_cv_stdio_macros, [
-  AC_TRY_COMPILE([#include <stdio.h>],
-                 [#if ((EOF != -1) || (SEEK_CUR != 1) || (SEEK_END != 2))
-	            unusual values...
-	          #endif
-	         ], [glibcxx_cv_stdio_macros=yes],
-		    [glibcxx_cv_stdio_macros=no])
+  AC_MSG_CHECKING([For some <stdio.h> integer constants.])
+
+  AC_CACHE_VAL(glibcxx_cv_stdio_eof, [
+  AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
+                 [#include <stdio.h>],
+                 [AC_MSG_ERROR([computing EOF failed])])
   ])
-  AC_MSG_RESULT($glibcxx_cv_stdio_macros)
-  if test x"$glibcxx_cv_stdio_macros" = x"yes"; then
-    AC_DEFINE(_GLIBCXX_STDIO_MACROS, 1,
-              [Define if EOF == -1, SEEK_CUR == 1, SEEK_END == 2.])
-  fi
+  AC_MSG_RESULT($glibcxx_cv_stdio_eof)
+  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
+                     [Define to the value of the EOF integer constant.])
 
+  AC_CACHE_VAL(glibcxx_cv_stdio_seek_cur, [
+  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
+                 [#include <stdio.h>],
+                 [AC_MSG_ERROR([computing SEEK_CUR failed])])
+  ])
+  AC_MSG_RESULT($glibcxx_cv_stdio_seek_cur)
+  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
+                     [Define to the value of the SEEK_CUR integer constant.])
+
+  AC_CACHE_VAL(glibcxx_cv_stdio_seek_end, [
+  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
+                 [#include <stdio.h>],
+                 [AC_MSG_ERROR([computing SEEK_END failed])])
+  ])
+  AC_MSG_RESULT($glibcxx_cv_stdio_seek_end)
+  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
+                     [Define to the value of the SEEK_END integer constant.])
 ])
 
 dnl