[Top][All Lists]
[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 $@
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- new module 'link-warning',
Bruno Haible <=