+2007-02-17 Bruno Haible <bruno@clisp.org>
+
+ * lib/inttypes_.h: Add definition for GL_LINK_WARNING.
+ (imaxabs, imaxdiv, strtoimax, strtoumax): Don't declare the function
+ if the corresponding module is not enabled. Emit link warnings if
+ the function is used nevertheless.
+ * m4/inttypes_h.m4 (gl_INTTYPES_H): Never use the existing <inttypes.h>.
+ Don't AC_SUBST HAVE_DECL_IMAXABS, HAVE_DECL_IMAXDIV,
+ HAVE_DECL_STRTOIMAX, HAVE_DECL_STRTOUMAX.
+ (gl_INTTYPES_MODULE_INDICATOR, gl_INTTYPES_H_DEFAULTS): New macros.
+ * modules/inttypes (Depends-on): Add link-warning.
+ (Makefile.am): Copy the contents of build-aux/link-warning.h into
+ inttypes.h.
+ * modules/imaxabs (configure.ac): Invoke gl_INTTYPES_MODULE_INDICATOR.
+ * modules/imaxdiv (configure.ac): Likewise.
+ * modules/strtoimax (configure.ac): Likewise.
+ * modules/strtoumax (configure.ac): Likewise.
+
2007-02-17 Bruno Haible <bruno@clisp.org>
* m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Include the contents of
-/* Copyright (C) 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Paul Eggert, Bruno Haible, Derek Price.
This file is part of gnulib.
# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
#endif
+/* The definition of GL_LINK_WARNING is copied here. */
+
/* 7.8.1 Macros for format specifiers */
#if ! defined __cplusplus || defined __STDC_FORMAT_MACROS
extern "C" {
#endif
-#if !@HAVE_DECL_IMAXABS@
+#if @GNULIB_IMAXABS@
+# if !@HAVE_DECL_IMAXABS@
extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# define imaxabs(a) \
+ (GL_LINK_WARNING ("imaxabs is unportable - "\
+ "use gnulib module imaxabs for portability"), \
+ imaxabs (a))
#endif
-#if !@HAVE_DECL_IMAXDIV@
+#if @GNULIB_IMAXDIV@
+# if !@HAVE_DECL_IMAXDIV@
typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# define imaxdiv(a,b) \
+ (GL_LINK_WARNING ("imaxdiv is unportable - "\
+ "use gnulib module imaxdiv for portability"), \
+ imaxdiv (a, b))
#endif
-#if !@HAVE_DECL_STRTOIMAX@
+#if @GNULIB_STRTOIMAX@
+# if !@HAVE_DECL_STRTOIMAX@
extern intmax_t strtoimax (const char *, char **, int);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# define strtoimax(p,e,b) \
+ (GL_LINK_WARNING ("strtoimax is unportable - "\
+ "use gnulib module strtoimax for portability"), \
+ strtoimax (p, e, b))
#endif
-#if !@HAVE_DECL_STRTOUMAX@
+
+#if @GNULIB_STRTOUMAX@
+# if !@HAVE_DECL_STRTOUMAX@
extern uintmax_t strtoumax (const char *, char **, int);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# define strtoumax(p,e,b) \
+ (GL_LINK_WARNING ("strtoumax is unportable - "\
+ "use gnulib module strtoumax for portability"), \
+ strtoumax (p, e, b))
#endif
/* Don't bother defining or declaring wcstoimax and wcstoumax, since