bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new module 'link-warning'


From: Bruno Haible
Subject: new module 'link-warning'
Date: Sat, 17 Feb 2007 23:35:20 +0100
User-agent: KMail/1.5.4

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  <address@hidden>

        * 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; \
        } > address@hidden
        mv address@hidden $@





reply via email to

[Prev in Thread] Current Thread [Next in Thread]