On Tue, 30 Oct 2007, Bruno Haible wrote:
> Tim Rice wrote:
> > > The build fails on Caldera OpenLinux 3.1.1
> > > Here is a snipet of the build log
> > > ....
> > > make all-am
> > > make[2]: Entering directory `/usr/local/src/gnu/m4-1.3.10/lib'
> > > source='/opt/src/gnu/m4-1.4.10/lib/gl_array_list.c'
> > > object='gl_array_list.o' libtool=no \
> > > DEPDIR=.deps depmode=none /bin/ksh /opt/src/gnu/m4-1.4.10/depcomp \
> > > cc -I. -I/opt/src/gnu/m4-1.4.10/lib -g -c
> > > /opt/src/gnu/m4-1.4.10/lib/gl_array_list.c
> > > In file included from /opt/src/gnu/m4-1.4.10/lib/gl_array_list.h:22,
> > > from /opt/src/gnu/m4-1.4.10/lib/gl_array_list.c:22:
> > > /opt/src/gnu/m4-1.4.10/lib/gl_list.h:99: parse error before `*'
> > > /opt/src/gnu/m4-1.4.10/lib/gl_list.h:99: `_Bool' declared as function
> > > returning a function
> > > /opt/src/gnu/m4-1.4.10/lib/gl_list.h:133: parse error before
> > > `gl_listelement_equals_fn'
>
> Can you please show
> - the contents of lib/stdbool.h ?
Attached.
> - "grep -i bool config.status" ?
$ grep -i bool config.status
s,@STDBOOL_H@,|#_!!_#|stdbool.h,g
s,@HAVE__BOOL@,|#_!!_#|1,g
s,^\([ #]*\)[^ ]*\([ ]*HAVE__BOOL\)[ (].*,\1define\2 1 ,
> - the brand and version of cc ?
$ gcc --version
2.95.2
> - the result of compiling
> ====================== snippet1.c ========================
> #include <stdbool.h>
> typedef bool (*a) (const void *b);
> ==========================================================
sh-2.05$ cat > x.c
#include <stdbool.h>
typedef bool (*a) (const void *b);
^D
sh-2.05$ gcc -c x.c
> - the result of compiling
> ====================== snippet2.c ========================
> typedef _Bool (*a) (const void *b);
> ==========================================================
sh-2.05$ cat > x.c
typedef _Bool (*a) (const void *b);
^D
sh-2.05$ gcc -c x.c
x.c:1: parse error before `*'
x.c:1: `_Bool' declared as function returning a function
sh-2.05$
> Bruno
>
>
>
--
Tim Rice Multitalents (707) 887-1469
[EMAIL PROTECTED]
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
/* Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
Written by Bruno Haible <[EMAIL PROTECTED]>, 2001.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _GL_STDBOOL_H
#define _GL_STDBOOL_H
/* ISO C 99 <stdbool.h> for platforms that lack it. */
/* Usage suggestions:
Programs that use <stdbool.h> should be aware of some limitations
and standards compliance issues.
Standards compliance:
- <stdbool.h> must be #included before 'bool', 'false', 'true'
can be used.
- You cannot assume that sizeof (bool) == 1.
- Programs should not undefine the macros bool, true, and false,
as C99 lists that as an "obsolescent feature".
Limitations of this substitute, when used in a C89 environment:
- <stdbool.h> must be #included before the '_Bool' type can be used.
- You cannot assume that _Bool is a typedef; it might be a macro.
- Bit-fields of type 'bool' are not supported. Portable code
should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
- In C99, casts and automatic conversions to '_Bool' or 'bool' are
performed in such a way that every nonzero value gets converted
to 'true', and zero gets converted to 'false'. This doesn't work
with this substitute. With this substitute, only the values 0 and 1
give the expected result when converted to _Bool' or 'bool'.
Also, it is suggested that programs use 'bool' rather than '_Bool';
this isn't required, but 'bool' is more common. */
/* 7.16. Boolean type and values */
/* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same
definitions below, but temporarily we have to #undef them. */
#ifdef __BEOS__
# include <OS.h> /* defines bool but not _Bool */
# undef false
# undef true
#endif
/* For the sake of symbolic names in gdb, we define true and false as
enum constants, not only as macros.
It is tempting to write
typedef enum { false = 0, true = 1 } _Bool;
so that gdb prints values of type 'bool' symbolically. But if we do
this, values of type '_Bool' may promote to 'int' or 'unsigned int'
(see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
(see ISO C 99 6.3.1.1.(2)). So we add a negative value to the
enum; this ensures that '_Bool' promotes to 'int'. */
#if defined __cplusplus || defined __BEOS__
/* A compiler known to have 'bool'. */
/* If the compiler already has both 'bool' and '_Bool', we can assume they
are the same types. */
# if !1
typedef bool _Bool;
# endif
#else
# if !defined __GNUC__
/* If 1:
Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
the built-in _Bool type is used. See
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
Similar bugs are likely with other compilers as well; this file
wouldn't be used if <stdbool.h> was working.
So we override the _Bool type.
If !1:
Need to define _Bool ourselves. As 'signed char' or as an enum type?
Use of a typedef, with SunPRO C, leads to a stupid
"warning: _Bool is a keyword in ISO C99".
Use of an enum type, with IRIX cc, leads to a stupid
"warning(1185): enumerated type mixed with another type".
The only benefit of the enum type, debuggability, is not important
with these compilers. So use 'signed char' and no typedef. */
# define _Bool signed char
enum { false = 0, true = 1 };
# else
/* With this compiler, trust the _Bool type if the compiler has it. */
# if !1
typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
# endif
# endif
#endif
#define bool _Bool
/* The other macros must be usable in preprocessor directives. */
#define false 0
#define true 1
#define __bool_true_false_are_defined 1
#endif /* _GL_STDBOOL_H */