2000-06-17 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 17 Jun 2000 23:08:19 +0000 (23:08 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 17 Jun 2000 23:08:19 +0000 (23:08 +0000)
* getopt.h: Updated from gcc.
* libiberty.h: Likewise.
* symcat.h: Likewise.

include/ChangeLog
include/getopt.h
include/libiberty.h
include/symcat.h

index 18b974210857991e511e3f0075b37187d66ef6f0..3618044040da0ca568476d29040c024d578e80fc 100644 (file)
@@ -1,3 +1,9 @@
+2000-06-17  H.J. Lu  <hjl@gnu.org>
+
+       * getopt.h: Updated from gcc.
+       * libiberty.h: Likewise.
+       * symcat.h: Likewise.
+
 2000-06-17  H.J. Lu  <hjl@gnu.org>
 
        * ansidecl.h: Updated from gcc.
index fb30719a8602a3b800bc55af73c39ab64ce4c6f6..9620fc70637e6a3566708a8b952b210e242d5805 100644 (file)
@@ -99,13 +99,20 @@ struct option
 #define optional_argument      2
 
 #if defined (__STDC__) && __STDC__
-#ifdef __GNU_LIBRARY__
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT)
 /* Many other libraries have conflicting prototypes for getopt, with
    differences in the consts, in stdlib.h.  To avoid compilation
    errors, only prototype getopt for the GNU C library.  */
 extern int getopt (int argc, char *const *argv, const char *shortopts);
 #else /* not __GNU_LIBRARY__ */
+# if !defined (HAVE_DECL_GETOPT)
 extern int getopt ();
+# endif
 #endif /* __GNU_LIBRARY__ */
 extern int getopt_long (int argc, char *const *argv, const char *shortopts,
                        const struct option *longopts, int *longind);
index 9a536a4a19410ef5544b707d278e2fdda3ca320b..476e0165b3eed5206e7045ee3e1a2b6f5460936b 100644 (file)
@@ -36,10 +36,17 @@ extern char **dupargv PARAMS ((char **)) ATTRIBUTE_MALLOC;
    across different systems, sometimes as "char *" and sometimes as
    "const char *" */
 
-#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__)
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || (defined (HAVE_DECL_BASENAME) && !HAVE_DECL_BASENAME)
 extern char *basename PARAMS ((const char *));
 #else
+# if !defined (HAVE_DECL_BASENAME)
 extern char *basename ();
+# endif
 #endif
 
 /* Concatenate an arbitrary number of strings, up to (char *) NULL.
index 3e27162b26490ea46e72ad225fa667ee394af7c3..61ce1e9b3413244a000045810a9e343f1a99bc96 100644 (file)
 #ifndef SYM_CAT_H
 #define SYM_CAT_H
 
-#if defined (__STDC__) || defined (ALMOST_STDC)
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
 #define CONCAT2(a,b)    a##b
 #define CONCAT3(a,b,c)  a##b##c
 #define CONCAT4(a,b,c,d) a##b##c##d
 #define STRINGX(s) #s
 #else
+/* Note one should never pass extra whitespace to the CONCATn macros,
+   e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
+   the two labels instead of concatenating them.  Instead, make sure to
+   write CONCAT2(foo,bar).  */
 #define CONCAT2(a,b)    a/**/b
 #define CONCAT3(a,b,c)  a/**/b/**/c
 #define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
 #define XCONCAT3(a,b,c)   CONCAT3(a,b,c)
 #define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
 
+/* Note the layer of indirection here is typically used to allow
+   stringification of the expansion of macros.  I.e. "#define foo
+   bar", "XSTRING(foo)", to yield "bar".  Be aware that this only
+   works for __STDC__, not for traditional C which will still resolve
+   to "foo".  */
 #define XSTRING(s) STRINGX(s) 
 
-#endif SYM_CAT_H
+#endif /* SYM_CAT_H */