Hi Steve,
On 29.05.15 19:18, Steve Ellcey wrote:
On Thu, 2015-05-28 at 23:54 +0200, Eric Botcazou wrote:
This patch restores bootstrap on i386-*-freebsd*.
The build was failing after the introduction of -std=c++98
configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD
the libc function atoll is not defined for this.
Solaris (x86 and SPARC) is also broken in various ways: for example, the "sun"
preprocessor macro is no more defined. Why do we need strict ANSI exactly?
Andreas,
This patch (or the earlier one) is also breaking a build of my MIPS
cross compiler. On CentOS 5.11 (yes I know that is old) I can build a
cross compiler where the executables are x86_64 objects but not when
they are i386 objects (i.e. when using -m32 to build GCC). The error
is duplicate atoll definitions (one in read-rtl.c and one in stdlib.h).
I may be mistaken but think when you moved the atoll check from
AC_CHECK_FUNCS to gcc_AC_CHECK_DECLS you needed to change config.in and
read-rtl.c because gcc_AC_CHECK_DECLS sets HAVE_DECL_ATOLL instead of
HAVE_ATOLL.
I'm sorry. I totally forgot about autoheader...
I'm testing this one now. Would you mind giving it a try?
Thanks,
Andreas
Index: config.in
===================================================================
--- config.in (revision 223885)
+++ config.in (working copy)
@@ -624,12 +624,6 @@
#endif
-/* Define to 1 if you have the `atoll' function. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_ATOLL
-#endif
-
-
/* Define to 1 if you have the `atoq' function. */
#ifndef USED_FOR_TARGET
#undef HAVE_ATOQ
@@ -686,9 +680,16 @@
#endif
-/* Define to 1 if we found a declaration for 'basename', otherwise define to
- 0. */
+/* Define to 1 if we found a declaration for 'atoll', otherwise define to 0.
+ */
#ifndef USED_FOR_TARGET
+#undef HAVE_DECL_ATOLL
+#endif
+
+
+/* Define to 1 if you have the declaration of `basename(const char*)', and to
+ 0 if you don't. */
+#ifndef USED_FOR_TARGET
#undef HAVE_DECL_BASENAME
#endif
@@ -963,8 +964,8 @@
#endif
-/* Define to 1 if we found a declaration for 'strstr', otherwise define to 0.
- */
+/* Define to 1 if you have the declaration of `strstr(const char*,const
+ char*)', and to 0 if you don't. */
#ifndef USED_FOR_TARGET
#undef HAVE_DECL_STRSTR
#endif
Index: read-rtl.c
===================================================================
--- read-rtl.c (revision 223885)
+++ read-rtl.c (working copy)
@@ -704,7 +704,7 @@
/* Provide a version of a function to read a long long if the system does
not provide one. */
-#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) &&
!defined(HAVE_ATOQ)
+#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !HAVE_DECL_ATOLL &&
!defined(HAVE_ATOQ)
HOST_WIDE_INT atoll (const char *);
HOST_WIDE_INT
@@ -1328,7 +1328,7 @@
#else
/* Prefer atoll over atoq, since the former is in the ISO C99 standard.
But prefer not to use our hand-rolled function above either. */
-#if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ)
+#if HAVE_DECL_ATOLL || !defined(HAVE_ATOQ)
tmp_wide = atoll (name.string);
#else
tmp_wide = atoq (name.string);