This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: gcc3.2.1 compilation failure on FreeBSD 5.0
- From: Gerald Pfeifer <pfeifer at dbai dot tuwien dot ac dot at>
- To: GCC Mailing List <gcc at gcc dot gnu dot org>, Karel Gardas <kgardas at objectsecurity dot com>
- Cc: Gabriel Dos Reis <gdr at integrable-solutions dot net>, "Loren J. Rittle" <ljrittle at acm dot org>
- Date: Tue, 28 Jan 2003 02:38:27 +0100 (CET)
- Subject: Re: gcc3.2.1 compilation failure on FreeBSD 5.0
- References: <Pine.LNX.4.43.0301271654130.6420-100000@thinkpad.c0202001.roe.itnq.net>
On Mon, 27 Jan 2003, Karel Gardas wrote:
> While trying to build gcc3.2.1 on FreeBSD 5.0 box, I've found that
> compilation fails with:
> [...]
> In file included from ../../gcc-3.2.1/gcc/tsystem.h:37,
> from ../../gcc-3.2.1/gcc/crtstuff.c:62:
> include/stddef.h:57:26: machine/ansi.h: No such file or directory
> gmake[2]: *** [crtbegin.o] Error 1
> gmake[2]: Leaving directory `/usr/home/kgardas/usr/src/obj/gcc'
> gmake[1]: *** [stage1_build] Error 2
> gmake[1]: Leaving directory `/usr/home/kgardas/usr/src/obj/gcc'
> gmake: *** [bootstrap-lean] Error 2
This is because FSF GCC lacks the patch below on the 3.2 release branch
Gaby, this patch is most critical for 3.2.2 on FreeBSD 5; without it, GCC
won't build at all. Would you mind applying it?
(Karel, would you mind testing this patch? I do not have a FreeBSD 5
system handy.)
Thanks,
Gerald
2002-10-04 Loren J. Rittle <ljrittle@acm.org>
* gcc/ginclude/stddef.h: Support the FreeBSD 5 typedef system.
Index: stddef.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ginclude/stddef.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -p -r1.15 -r1.16
--- stddef.h 2 Aug 2002 06:09:14 -0000 1.15
+++ stddef.h 4 Oct 2002 21:16:05 -0000 1.16
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -53,9 +53,13 @@ Boston, MA 02111-1307, USA. */
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
one less case to deal with in the following. */
-#if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
+#if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__)
#include <machine/ansi.h>
#endif
+/* On FreeBSD 5, machine/ansi.h does not exist anymore... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#include <sys/_types.h>
+#endif
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
defined if the corresponding type is *not* defined.
@@ -176,6 +180,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#ifndef _SIZE_T_DEFINED_
#ifndef _SIZE_T_DEFINED
#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
+#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
#ifndef ___int_size_t_h
#ifndef _GCC_SIZE_T
#ifndef _SIZET_
@@ -192,10 +197,15 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#define _SIZE_T_DEFINED_
#define _SIZE_T_DEFINED
#define _BSD_SIZE_T_DEFINED_ /* Darwin */
+#define _SIZE_T_DECLARED /* FreeBSD 5 */
#define ___int_size_t_h
#define _GCC_SIZE_T
#define _SIZET_
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
+#else
#define __size_t
+#endif
#ifndef __SIZE_TYPE__
#define __SIZE_TYPE__ long unsigned int
#endif
@@ -209,6 +219,7 @@ typedef long ssize_t;
#endif /* _SIZET_ */
#endif /* _GCC_SIZE_T */
#endif /* ___int_size_t_h */
+#endif /* _SIZE_T_DECLARED */
#endif /* _BSD_SIZE_T_DEFINED_ */
#endif /* _SIZE_T_DEFINED */
#endif /* _SIZE_T_DEFINED_ */
@@ -243,6 +254,7 @@ typedef long ssize_t;
#ifndef _BSD_WCHAR_T_
#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
+#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
#ifndef _WCHAR_T_DEFINED_
#ifndef _WCHAR_T_DEFINED
#ifndef _WCHAR_T_H
@@ -263,6 +275,7 @@ typedef long ssize_t;
#define ___int_wchar_t_h
#define __INT_WCHAR_T_H
#define _GCC_WCHAR_T
+#define _WCHAR_T_DECLARED
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
@@ -281,7 +294,7 @@ typedef long ssize_t;
typedef _BSD_RUNE_T_ rune_t;
#define _BSD_WCHAR_T_DEFINED_
#define _BSD_RUNE_T_DEFINED_ /* Darwin */
-#if defined (__FreeBSD__)
+#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
/* Why is this file so hard to maintain properly? In constrast to
the comment above regarding BSD/386 1.1, on FreeBSD for as long
as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
@@ -291,6 +304,19 @@ typedef _BSD_RUNE_T_ rune_t;
#endif
#endif
#endif
+/* FreeBSD 5 can't be handled well using "traditional" logic above
+ since it no longer defines _BSD_RUNE_T_ yet still desires to export
+ rune_t in some cases... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef __rune_t rune_t;
+#define _RUNE_T_DECLARED
+#endif
+#endif
+#endif
+#endif
#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ int
@@ -304,6 +330,7 @@ typedef __WCHAR_TYPE__ wchar_t;
#endif
#endif
#endif
+#endif /* _WCHAR_T_DECLARED */
#endif /* _BSD_RUNE_T_DEFINED_ */
#endif
#endif