The GL_LINK_WARNING macro will also be needed in all other header file overrides like <string.h>. In order not to duplicate the code, I'm putting it into a separate module 'link-warning'.
The file link-warning.h would go into lib/ if our generated <string.h> could simply #include it. But we want the generated <string.h> to be self-contained. So it goes into build-aux/ and is copied into string.h when string.h is created. (A separate file would not be needed if we could assume AC_SUBST to handle multiline replacements correctly. But the minimum required autoconf version for gnulib is still 2.59.) 2007-02-17 Bruno Haible <[EMAIL PROTECTED]> * modules/link-warning: New file. * build-aux/link-warning.h: New file, extracted from lib/string_.h. * lib/string_.h (GL_LINK_WARNING): Remove definition. * modules/string (Depends-on): Add link-warning. (Makefile.am): Copy the contents of build-aux/link-warning.h into string.h. ============================= modules/link-warning ============================ Description: A C macro for emitting link time warnings. Files: build-aux/link-warning.h Depends-on: configure.ac: Makefile.am: LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h Include: License: LGPL Maintainer: Bruno Haible =========================== build-aux/link-warning.h ========================== /* GL_LINK_WARNING("literal string") arranges to emit the literal string as a linker warning on most glibc systems. We use a linker warning rather than a preprocessor warning, because #warning cannot be used inside macros. */ #ifndef GL_LINK_WARNING /* This works on platforms with GNU ld and ELF object format. Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. Testing __ELF__ guarantees the ELF object format. Testing __GNUC__ is necessary for the compound expression syntax. */ # if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ # define GL_LINK_WARNING(message) \ GL_LINK_WARNING1 (__FILE__, __LINE__, message) # define GL_LINK_WARNING1(file, line, message) \ GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ # define GL_LINK_WARNING2(file, line, message) \ GL_LINK_WARNING3 (file ":" #line ": warning: " message) # define GL_LINK_WARNING3(message) \ ({ static const char warning[sizeof (message)] \ __attribute__ ((__unused__, \ __section__ (".gnu.warning"), \ __aligned__ (1))) \ = message "\n"; \ (void)0; \ }) # else # define GL_LINK_WARNING(message) ((void) 0) # endif #endif =============================================================================== *** lib/string_.h 17 Feb 2007 19:43:30 -0000 1.25 --- lib/string_.h 17 Feb 2007 22:19:41 -0000 *************** *** 22,55 **** #include @ABSOLUTE_STRING_H@ ! /* GL_LINK_WARNING("literal string") arranges to emit the literal string as ! a linker warning on most glibc systems. ! We use a linker warning rather than a preprocessor warning, because ! #warning cannot be used inside macros. */ ! #ifndef GL_LINK_WARNING ! /* This works on platforms with GNU ld and ELF object format. ! Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. ! Testing __ELF__ guarantees the ELF object format. ! Testing __GNUC__ is necessary for the compound expression syntax. */ ! # if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ ! # define GL_LINK_WARNING(message) \ ! GL_LINK_WARNING1 (__FILE__, __LINE__, message) ! # define GL_LINK_WARNING1(file, line, message) \ ! GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ ! # define GL_LINK_WARNING2(file, line, message) \ ! GL_LINK_WARNING3 (file ":" #line ": warning: " message) ! # define GL_LINK_WARNING3(message) \ ! ({ static const char warning[sizeof (message)] \ ! __attribute__ ((__unused__, \ ! __section__ (".gnu.warning"), \ ! __aligned__ (1))) \ ! = message "\n"; \ ! (void)0; \ ! }) ! # else ! # define GL_LINK_WARNING(message) ((void) 0) ! # endif ! #endif #ifdef __cplusplus --- 22,28 ---- #include @ABSOLUTE_STRING_H@ ! /* The definition of GL_LINK_WARNING is copied here. */ #ifdef __cplusplus *** modules/string 15 Feb 2007 03:07:04 -0000 1.19 --- modules/string 17 Feb 2007 22:19:41 -0000 *************** *** 8,13 **** --- 8,14 ---- Depends-on: absolute-header extensions + link-warning configure.ac: gl_HEADER_STRING_H *************** *** 63,68 **** --- 64,70 ---- -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ < $(srcdir)/string_.h; \ } > [EMAIL PROTECTED] mv [EMAIL PROTECTED] $@