Fix Solaris gprof build with --disable-nls

Message ID yddy2ajwub5.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show
Series
  • Fix Solaris gprof build with --disable-nls
Related show

Commit Message

Rainer Orth July 6, 2021, 11:33 a.m.
gprof fails to compile on Solaris 10 and 11.3 with --disable-nls:

In file included from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/gprof.h:33,
                 from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/basic_blocks.c:24:
/usr/include/libintl.h:45:14: error: expected identifier or ‘(’ before ‘const’
   45 | extern char *dcgettext(const char *, const char *, const int);
      |              ^~~~~~~~~
/usr/include/libintl.h:46:14: error: expected identifier or ‘(’ before ‘const’
   46 | extern char *dgettext(const char *, const char *);
      |              ^~~~~~~~
/usr/include/libintl.h:47:14: error: expected identifier or ‘(’ before ‘const’
   47 | extern char *gettext(const char *);
      |              ^~~~~~~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:33: error: expected identifier or ‘(’ before ‘do’
  165 | # define textdomain(Domainname) do {} while (0)
      |                                 ^~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:39: error: expected identifier or ‘(’ before ‘while’
  165 | # define textdomain(Domainname) do {} while (0)
      |                                       ^~~~~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:46: error: expected identifier or ‘(’ before ‘do’
  166 | # define bindtextdomain(Domainname, Dirname) do {} while (0)
      |                                              ^~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:52: error: expected identifier or ‘(’ before ‘while’
  166 | # define bindtextdomain(Domainname, Dirname) do {} while (0)
      |                                                    ^~~~~
/usr/include/libintl.h:55:14: error: expected identifier or ‘(’ before ‘unsigned’
   55 | extern char *dcngettext(const char *, const char *,
      |              ^~~~~~~~~~
/usr/include/libintl.h:57:14: error: expected identifier or ‘(’ before ‘unsigned’
   57 | extern char *dngettext(const char *, const char *,
      |              ^~~~~~~~~
/usr/include/libintl.h:59:14: error: expected identifier or ‘(’ before ‘unsigned’
   59 | extern char *ngettext(const char *, const char *, unsigned long int);
      |              ^~~~~~~~

This is a known issue already partially fixed in binutils/sysdep.h.  For
gprof, the same fix needs to be applied in bfd/sysdep.h, as the
following patch does.  Tested on i386-pc-solaris2.10 and
i386-pc-solaris2.11.

Ok for master and the 2.37 branch?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2021-07-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	bfd:
	* sysdep.h [!ENABLE_NLS]: Prevent inclusion of <libintl.h> on
	Solaris.

Comments

Alan Modra via Binutils July 6, 2021, 1:47 p.m. | #1
Hi Rainer,

> gprof fails to compile on Solaris 10 and 11.3 with --disable-nls:


> This is a known issue already partially fixed in binutils/sysdep.h.  For

> gprof, the same fix needs to be applied in bfd/sysdep.h, as the

> following patch does.  Tested on i386-pc-solaris2.10 and

> i386-pc-solaris2.11.

> 

> Ok for master and the 2.37 branch?


Approved for both - please apply.

Cheers
   Nick

Patch

# HG changeset patch
# Parent  8ebcdacd3b8281c6e891d99f88c950edc3b2ff88
Fix Solaris gprof build with --disable-nls

diff --git a/bfd/sysdep.h b/bfd/sysdep.h
--- a/bfd/sysdep.h
+++ b/bfd/sysdep.h
@@ -126,6 +126,17 @@  extern int fseeko64 (FILE *stream, off64
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
 #endif
 
+#ifndef ENABLE_NLS
+  /* The Solaris version of locale.h always includes libintl.h.  If we have
+     been configured with --disable-nls then ENABLE_NLS will not be defined
+     and the dummy definitions of bindtextdomain (et al) below will conflict
+     with the defintions in libintl.h.  So we define these values to prevent
+     the bogus inclusion of libintl.h.  */
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+#endif
+#include <locale.h>
+
 #ifdef ENABLE_NLS
 # include <libintl.h>
 /* Note the redefinition of gettext and ngettext here to use PACKAGE.