[Toybox] [PATCH] Shut up GCC 3.4 on musl
ibid.ag at gmail.com
ibid.ag at gmail.com
Sat Jan 25 22:18:18 PST 2014
On Sat, Jan 25, 2014 at 08:20:58PM -0600, Rob Landley wrote:
> On 01/25/2014 07:52 PM, Isaac Dunham wrote:
> >Two changes to shut up GCC:
> >* __GLIBC__ was checked unconditionally;
> >this made for a very messy build on musl.
>
> According to my C99 draft section 6.10.1.3:
>
> After all replacements due to macro expansion and the defined unary
> operator have been performed, all remaining identifiers are replaced
> with the pp-number 0, and then each preprocessing token is converted
> into a token.
>
> That seems like a broken compiler? Still, portability.h is the place
> to workaround that kind of breakage. But I'd prefer to isolate it to
> its own stanza that blames the right thing so when we no longer care
> about gcc 3.4 know to remove it instead of having Magic Thing.
>
I don't know if it's standards-conformant or not, but GCC 4.4 does the
same when I use musl-gcc. I haven't checked a more recent GCC.
Sample (CC=/opt/musl/bin/musl-gcc scripts/single.sh cat):
scripts/make.sh
Make generated/config.h from .singleconfig.
Extract configuration information from toys/*.c files...
Generate headers from toys/*/*.c...
generated/newtoys.h generated/flags.h generated/globals.h generated/help.h
Library probe...
Compile toybox...
In file included from toys.h:8,
from main.c:6:
lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/args.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/bunzip.c:12:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/dirtree.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/getmountlist.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/help.c:3:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/lib.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/llist.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/net.c:1:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/password.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/pending.c:6:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/portability.c:7:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/xregcomp.c:9:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from lib/xwrap.c:10:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
In file included from ./toys.h:8,
from toys/posix/cat.c:20:
./lib/portability.h:148:52: warning: "__GLIBC__" is not defined
(IIRC, uclibc defined __GLIBC__ for "compatability" reasons...)
> I'll do some variant of:
>
> #ifdef gcc 3.4
> #ifndef _GLIBC_
> #define _GLIBC_ 0
> #endif
> #endif
>
>
> >* int fd in chvt is always initialized; GCC 3.4 does not recognize this.
>
> That's also a broken compiler, but I'm already doing the "int x =
> x;" trick in several places to shut gcc's brain damage up, so that's
> not new evil...
Appears to be GCC 3.x but not 4.x (at least for x !< 1).
> Rob
Thanks,
Isaac Dunham
More information about the Toybox
mailing list