[Top][All Lists]

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

questions and doc patch on AC_TRY_LINK_FUNC

From: Eric Blake
Subject: questions and doc patch on AC_TRY_LINK_FUNC
Date: Wed, 08 Mar 2006 07:02:16 -0700
User-agent: Thunderbird 1.5 (Windows/20051201)

Hash: SHA1

I have noticed that gcc 3.4.4 (the current version on cygwin) issues a
warning even though no -W options were specified, when a declaration
conflicts with a gcc builtin.  This behavior is currently tickled by the
implementation of AC_LANG_CALL, and it inhibits autoconf's ability to test
function linkage when the user happens to add -Werror to their CFLAGS:

$ cat conftest.c
/* confdefs.h.  */
#define PACKAGE_NAME ""
/* end confdefs.h.  */

/* Override any GCC internal prototype to avoid an error.
   Use char because int might match the return type of a GCC
   builtin and then its argument prototype would still apply.  */
#ifdef __cplusplus
extern "C"
char printf ();
main ()
return printf ();
  return 0;
$ gcc -o conftest conftest.c
conftest.c:15: warning: conflicting types for built-in function 'printf'

This also gives a false negative in the testsuite: './testsuite -k
AC_TRY_LINK_FUNC CFLAGS=-Werror' fails because it generated the above
conftest.c, and the warning was turned into an error by my choice of
CFLAGS, in spite of the comment issued by AC_LANG_CALL that the char
return type works around gcc builtins.  There are other failures triggered
by running ./testsuite with CFLAGS=-Werror, and I am slowly seeing whether
they are worth tackling.  Meanwhile, it pointed out a doc bug related to
AC_TRY_LINK_FUNC; patch attached.

Currently, to force a package to have a warning-free compile, I like to do
'./configure; make CFLAGS=-Werror', but I have to remember to set CFLAGS
for every subsequent make rerun.  But it would be nicer if I could do
'./configure CFLAGS=-Werror; make', and have make pick up the configured
flags.  At this point, I wonder whether it would be worth teaching
autoconf about gcc's -w flag (and comparable flags for other compilers, if
they are known), then using that flag during configuration to override the
user's CFLAGS warning settings to avoid the false negatives triggered by
various tests when warnings are present, while still allowing the user to
specify their desired level of warnings during compilation.

2006-03-08  Eric Blake  <address@hidden>

        * doc/autoconf.texi (Obsolete Macros): Fix wording of

- --
Life is short - so eat dessert first!

Eric Blake             address@hidden
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Public key at
Comment: Using GnuPG with Mozilla -

Index: doc/autoconf.texi
RCS file: /sources/autoconf/autoconf/doc/autoconf.texi,v
retrieving revision 1.957
diff -u -p -r1.957 autoconf.texi
--- doc/autoconf.texi   6 Mar 2006 22:34:34 -0000       1.957
+++ doc/autoconf.texi   8 Mar 2006 13:31:11 -0000
@@ -15405,9 +15405,8 @@ and compilation flags are determined by 
 @defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, 
 This macro is equivalent to
address@hidden)], address@hidden,
address@hidden([AC_LANG_CALL([], address@hidden)],
address@hidden, address@hidden)}.
 @end defmac
 @defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, 
@ovar{action-if-false}, @ovar{action-if-cross-compiling})

reply via email to

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