On Thu, 23 Oct 2014, Richard Sandiford wrote:

> Richard Biener <rguent...@suse.de> writes:
> > This adds a libcpp host module without NLS and ICONV support
> > and properly links genmatch against the build libcpp instead of
> > the host one.
> >
> > Bootstrap running on x86_64-unknown-linux-gnu (stage1 all-gcc
> > finished fine).
> >
> > Ok for trunk?
> >
> > Thanks,
> > Richard.
> >
> > 2014-10-23  Richard Biener  <rguent...@suse.de>
> >
> >     * Makefile.def: Add libcpp build module and dependencies.
> >     * configure.ac: Add libcpp build module.
> >     * Makefile.in: Regenerate.
> >     * configure: Likewise.
> >
> >     gcc/
> >     * Makefile.in (BUILD_CPPLIB): Add.
> >     (build/genmatch$(build_exeext)): Use BUILD_CPPLIB, not CPPLIB.
> >     Drop LIBIBERTY.
> 
> This breaks a -j1 (!) build on x86_64-linux-gnu for me with:
> 
> g++  -I/blah/libcpp -I. -I/blah/libcpp/../include -I/blah/libcpp/include  -g 
> -O2 -W -Wall -Wno-narrowing -Wwrite-strings -Wmissing-format-attribute 
> -pedantic -Wno-long-long  -fno-exceptions -fno-rtti -I/blah/libcpp -I. 
> -I/blah/libcpp/../include -I/blah/libcpp/include   -c -o charset.o -MT 
> charset.o -MMD -MP -MF .deps/charset.Tpo /blah/libcpp/charset.c
> In file included from /blah/libcpp/../include/hashtab.h:40:0,
>                  from /blah/libcpp/../include/filenames.h:29,
>                  from /blah/libcpp/system.h:367,
>                  from /blah/libcpp/charset.c:21:
> /blah/libcpp/../include/ansidecl.h:171:64: error: new declaration ‘char* 
> basename(const char*)’
>  #  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
>                                                                 ^
> /blah/libcpp/../include/libiberty.h:113:64: note: in expansion of macro 
> ‘ATTRIBUTE_NONNULL’
>  extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL 
> ATTRIBUTE_NONNULL(1);
>                                                                 ^
> In file included from /blah/libcpp/system.h:201:0,
>                  from /blah/libcpp/charset.c:21:
> /usr/include/string.h:597:26: error: ambiguates old declaration ‘const char* 
> basename(const char*)’
>  extern "C++" const char *basename (const char *__filename)
>                           ^
> make: *** [charset.o] Error 1
> 
> The build libiberty and libcpp share a config.cache file and both check

Ugh - why do they do this kind of thing?  Btw, I can't decipher
where or how it's doing that.

> for basename.  The problem is that libiberty is built without _GNU_SOURCE
> and doesn't see the declaration while libcpp is built with it and does
> see the declaration.  So if libiberty configures first we assume basename
> isn't available.  If they both configure at the same time we're OK.

Bah.  Where does the _GNU_SOURCE come from?  Is it libcpp being built
with C++ and libiberty build with C?

I think the solution is to force a separate config.cache for libcpp.
But as I didn't yet figure out how it ends up sharing config.cache
I didn't figure out how to disable that sharing...

Thanks,
Richard.

> Thanks,
> Richard
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer

Reply via email to