Message ID | CAMsPy2tx79MJnBfEzC+9nTk6j0zMEv5hGp9AEVDGedmP0CqK7g@mail.gmail.com |
---|---|
State | New |
Headers | show |
This is OK if GCC bootstraps. Thanks. Ian On Wed, May 20, 2015 at 11:25 AM, Yunlian Jiang <yunlian@google.com> wrote: > I have the following change to make libiberty compile with _GNU_SOURCE defined > and remove the declaration of asprintf in libiberty.h if > HAVE_DECL_ASPRINTF is not > defined. > > diff --git a/include/libiberty.h b/include/libiberty.h > index b33dd65..8e096a0 100644 > --- a/include/libiberty.h > +++ b/include/libiberty.h > @@ -621,7 +621,7 @@ extern int pexecute (const char *, char * const *, > const char *, > > extern int pwait (int, int *, int); > > -#if !HAVE_DECL_ASPRINTF > +#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF > /* Like sprintf but provides a pointer to malloc'd storage, which must > be freed by the caller. */ > > diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in > index f06cc69..624420d 100644 > --- a/libiberty/Makefile.in > +++ b/libiberty/Makefile.in > @@ -113,7 +113,8 @@ installcheck: installcheck-subdir > > INCDIR=$(srcdir)/$(MULTISRCTOP)../include > > -COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) > $(HDEFINES) @ac_libiberty_warn_cflags@ > +COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \ > + $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE > > # Just to make sure we don't use a built-in rule with VPATH > .c.$(objext): > diff --git a/libiberty/configure b/libiberty/configure > index b06cab2..c6758b0 100755 > --- a/libiberty/configure > +++ b/libiberty/configure > @@ -5130,6 +5130,9 @@ $as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h > fi > > > +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h > + > + > # Determine sizes of some types. > # The cast to long int works around a bug in the HP C Compiler > # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects > diff --git a/libiberty/configure.ac b/libiberty/configure.ac > index 922aa86..9f2d661 100644 > --- a/libiberty/configure.ac > +++ b/libiberty/configure.ac > @@ -272,6 +272,8 @@ AC_HEADER_TIME > > libiberty_AC_DECLARE_ERRNO > > +AC_DEFINE(_GNU_SOURCE) > + > # Determine sizes of some types. > AC_CHECK_SIZEOF([int]) > AC_CHECK_SIZEOF([long]) > diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c > index 789fa05..4e73a2d 100644 > --- a/libiberty/floatformat.c > +++ b/libiberty/floatformat.c > @@ -19,7 +19,9 @@ along with this program; if not, write to the Free Software > Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA > 02110-1301, USA. */ > > /* This is needed to pick up the NAN macro on some systems. */ > +#ifndef _GNU_SOURCE > #define _GNU_SOURCE > +#endif > > #ifdef HAVE_CONFIG_H > #include "config.h" > > On Tue, May 19, 2015 at 11:15 AM, Ian Lance Taylor <iant@google.com> wrote: >> On Tue, May 19, 2015 at 11:08 AM, Yunlian Jiang <yunlian@google.com> wrote: >>> >>> I could do that and it make the compilation of libiberty passes. >>> However, I have some other problem when using clang to build gdb >>> because of libiberty. >>> >>> Some c file from other component may include 'libiberty.h' which contains >>> the following >>> >>> #if !HAVE_DECL_ASPRINTF >>> /* Like sprintf but provides a pointer to malloc'd storage, which must >>> be freed by the caller. */ >>> >>> extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; >>> #endif >>> >>> The HAVE_DECL_ASPRINTF is defined in config.h under libiberty directory. >>> If the other c file only includes libiberty.h and does not include the >>> libiberty/config.h and >>> at the same time, _GNU_SOURCE is defind, the same error happens. >> >> Probably if HAVE_DECL_ASPRINTF is not defined at all, we should not >> declare asprintf in libiberty.h. >> >> Ian
GCC bootstraps with this patch. On Wed, May 20, 2015 at 12:54 PM, Ian Lance Taylor <iant@google.com> wrote: > This is OK if GCC bootstraps. > > Thanks. > > Ian > > On Wed, May 20, 2015 at 11:25 AM, Yunlian Jiang <yunlian@google.com> wrote: >> I have the following change to make libiberty compile with _GNU_SOURCE defined >> and remove the declaration of asprintf in libiberty.h if >> HAVE_DECL_ASPRINTF is not >> defined. >> >> diff --git a/include/libiberty.h b/include/libiberty.h >> index b33dd65..8e096a0 100644 >> --- a/include/libiberty.h >> +++ b/include/libiberty.h >> @@ -621,7 +621,7 @@ extern int pexecute (const char *, char * const *, >> const char *, >> >> extern int pwait (int, int *, int); >> >> -#if !HAVE_DECL_ASPRINTF >> +#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF >> /* Like sprintf but provides a pointer to malloc'd storage, which must >> be freed by the caller. */ >> >> diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in >> index f06cc69..624420d 100644 >> --- a/libiberty/Makefile.in >> +++ b/libiberty/Makefile.in >> @@ -113,7 +113,8 @@ installcheck: installcheck-subdir >> >> INCDIR=$(srcdir)/$(MULTISRCTOP)../include >> >> -COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) >> $(HDEFINES) @ac_libiberty_warn_cflags@ >> +COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \ >> + $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE >> >> # Just to make sure we don't use a built-in rule with VPATH >> .c.$(objext): >> diff --git a/libiberty/configure b/libiberty/configure >> index b06cab2..c6758b0 100755 >> --- a/libiberty/configure >> +++ b/libiberty/configure >> @@ -5130,6 +5130,9 @@ $as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h >> fi >> >> >> +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h >> + >> + >> # Determine sizes of some types. >> # The cast to long int works around a bug in the HP C Compiler >> # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects >> diff --git a/libiberty/configure.ac b/libiberty/configure.ac >> index 922aa86..9f2d661 100644 >> --- a/libiberty/configure.ac >> +++ b/libiberty/configure.ac >> @@ -272,6 +272,8 @@ AC_HEADER_TIME >> >> libiberty_AC_DECLARE_ERRNO >> >> +AC_DEFINE(_GNU_SOURCE) >> + >> # Determine sizes of some types. >> AC_CHECK_SIZEOF([int]) >> AC_CHECK_SIZEOF([long]) >> diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c >> index 789fa05..4e73a2d 100644 >> --- a/libiberty/floatformat.c >> +++ b/libiberty/floatformat.c >> @@ -19,7 +19,9 @@ along with this program; if not, write to the Free Software >> Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA >> 02110-1301, USA. */ >> >> /* This is needed to pick up the NAN macro on some systems. */ >> +#ifndef _GNU_SOURCE >> #define _GNU_SOURCE >> +#endif >> >> #ifdef HAVE_CONFIG_H >> #include "config.h" >> >> On Tue, May 19, 2015 at 11:15 AM, Ian Lance Taylor <iant@google.com> wrote: >>> On Tue, May 19, 2015 at 11:08 AM, Yunlian Jiang <yunlian@google.com> wrote: >>>> >>>> I could do that and it make the compilation of libiberty passes. >>>> However, I have some other problem when using clang to build gdb >>>> because of libiberty. >>>> >>>> Some c file from other component may include 'libiberty.h' which contains >>>> the following >>>> >>>> #if !HAVE_DECL_ASPRINTF >>>> /* Like sprintf but provides a pointer to malloc'd storage, which must >>>> be freed by the caller. */ >>>> >>>> extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; >>>> #endif >>>> >>>> The HAVE_DECL_ASPRINTF is defined in config.h under libiberty directory. >>>> If the other c file only includes libiberty.h and does not include the >>>> libiberty/config.h and >>>> at the same time, _GNU_SOURCE is defind, the same error happens. >>> >>> Probably if HAVE_DECL_ASPRINTF is not defined at all, we should not >>> declare asprintf in libiberty.h. >>> >>> Ian
diff --git a/include/libiberty.h b/include/libiberty.h index b33dd65..8e096a0 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -621,7 +621,7 @@ extern int pexecute (const char *, char * const *, const char *, extern int pwait (int, int *, int); -#if !HAVE_DECL_ASPRINTF +#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF /* Like sprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index f06cc69..624420d 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -113,7 +113,8 @@ installcheck: installcheck-subdir INCDIR=$(srcdir)/$(MULTISRCTOP)../include -COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@ +COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \ + $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE # Just to make sure we don't use a built-in rule with VPATH .c.$(objext): diff --git a/libiberty/configure b/libiberty/configure index b06cab2..c6758b0 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -5130,6 +5130,9 @@ $as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h fi +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + # Determine sizes of some types. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects diff --git a/libiberty/configure.ac b/libiberty/configure.ac index 922aa86..9f2d661 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -272,6 +272,8 @@ AC_HEADER_TIME libiberty_AC_DECLARE_ERRNO +AC_DEFINE(_GNU_SOURCE) + # Determine sizes of some types. AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c index 789fa05..4e73a2d 100644 --- a/libiberty/floatformat.c +++ b/libiberty/floatformat.c @@ -19,7 +19,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This is needed to pick up the NAN macro on some systems. */ +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #ifdef HAVE_CONFIG_H