Re: [PATCH] autoconf: Add link tests to each AC_CHECK_FUNC() test

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] autoconf: Add link tests to each AC_CHECK_FUNC() test

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:45:34

"David M. Syzdek" [off-list ref] writes:
Update configure.ac to test libraries for getaddrinfo, strcasestr, memmem,
strlcpy, strtoumax, setenv, unsetenv, and mkdtemp.  The default compilers
on FreeBSD 4.9-SECURITY and FreeBSD 6.2-RELEASE-p4 do not generate warnings
for missing prototypes unless `-Wall' is used. This behavior renders the
results of AC_CHECK_FUNC() void on these platforms. The test AC_SEARCH_LIBS()
verifies a function is valid by linking to symbol within the system libraries.
quoted hunk
diff --git a/configure.ac b/configure.ac
index 7c2856e..d3b8bc3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -293,9 +293,11 @@ AC_SUBST(NO_SOCKADDR_STORAGE)
 #
 # Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
 AC_CHECK_TYPE([struct addrinfo],[
- AC_CHECK_FUNC([getaddrinfo],
-  [NO_IPV6=],
-  [NO_IPV6=YesPlease])
+ AC_CHECK_FUNC([getaddrinfo],[
+  AC_SEARCH_LIBS([getaddrinfo],,
+    [NO_IPV6=],
+    [NO_IPV6=YesPlease])
+ ],[NO_IPV6=YesPlease])
It's been a looong time since I did any sizeable autoconf/m4 hacking, but
the repetitititiveness of this patch loudly calls for a convenience macro
of a higher order, perhaps something like:

        AC_DEFUN([GIT_CHECK_FUNC],[
         AC_CHECK_FUNC([$1],[
          AC_SEARCH_LIBS([$1},,
          [$2],[$3])],
          [$3])])

Then we can use it like:

	GIT_CHECK_FUNC([getaddrinfo],[NO_IPV6=],[NO_IPV6=YesPlease])

Hmm?

-- >8 --
[PATCH] autoconf: use AC_CHECK_FUNC() with AC_SEARCH_LIBS() test

Update configure.ac to test libraries for getaddrinfo, strcasestr, memmem,
strlcpy, strtoumax, setenv, unsetenv, and mkdtemp.  The default compilers
on FreeBSD 4.9-SECURITY and FreeBSD 6.2-RELEASE-p4 do not generate warnings
for missing prototypes unless `-Wall' is used. This behavior renders the
results of AC_CHECK_FUNC() void on these platforms. The test AC_SEARCH_LIBS()
verifies a function is valid by linking to symbol within the system libraries.

---
 configure.ac |   28 +++++++++++++++++++---------
 1 files changed, 19 insertions(+), 9 deletions(-)
diff --git c/configure.ac w/configure.ac
index 27bab00..ef544e8 100644
--- c/configure.ac
+++ w/configure.ac
@@ -65,7 +65,17 @@ else \
 fi \
 ])# GIT_PARSE_WITH
 
-
+dnl
+dnl GIT_CHECK_FUNC(FUNCTION, IFTRUE, IFFALSE)
+dnl -----------------------------------------
+dnl Similar to AC_CHECK_FUNC, but on systems that do not generate
+dnl warnings for missing prototypes (e.g. FreeBSD when compiling without
+dnl -Wall), it does not work.  By looking for function definition in
+dnl libraries, this problem can be worked around.
+AC_DEFUN([GIT_CHECK_FUNC],[AC_CHECK_FUNC([$1],[
+  AC_SEARCH_LIBS([$1],,
+  [$2],[$3])
+],[$3])])
 ## Site configuration related to programs (before tests)
 ## --with-PACKAGE[=ARG] and --without-PACKAGE
 #
@@ -325,7 +335,7 @@ AC_SUBST(NO_SOCKADDR_STORAGE)
 #
 # Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
 AC_CHECK_TYPE([struct addrinfo],[
- AC_CHECK_FUNC([getaddrinfo],
+ GIT_CHECK_FUNC([getaddrinfo],
   [NO_IPV6=],
   [NO_IPV6=YesPlease])
 ],[NO_IPV6=YesPlease],[
@@ -419,43 +429,43 @@ AC_SUBST(SNPRINTF_RETURNS_BOGUS)
 AC_MSG_NOTICE([CHECKS for library functions])
 #
 # Define NO_STRCASESTR if you don't have strcasestr.
-AC_CHECK_FUNC(strcasestr,
+GIT_CHECK_FUNC(strcasestr,
 [NO_STRCASESTR=],
 [NO_STRCASESTR=YesPlease])
 AC_SUBST(NO_STRCASESTR)
 #
 # Define NO_MEMMEM if you don't have memmem.
-AC_CHECK_FUNC(memmem,
+GIT_CHECK_FUNC(memmem,
 [NO_MEMMEM=],
 [NO_MEMMEM=YesPlease])
 AC_SUBST(NO_MEMMEM)
 #
 # Define NO_STRLCPY if you don't have strlcpy.
-AC_CHECK_FUNC(strlcpy,
+GIT_CHECK_FUNC(strlcpy,
 [NO_STRLCPY=],
 [NO_STRLCPY=YesPlease])
 AC_SUBST(NO_STRLCPY)
 #
 # Define NO_STRTOUMAX if you don't have strtoumax in the C library.
-AC_CHECK_FUNC(strtoumax,
+GIT_CHECK_FUNC(strtoumax,
 [NO_STRTOUMAX=],
 [NO_STRTOUMAX=YesPlease])
 AC_SUBST(NO_STRTOUMAX)
 #
 # Define NO_SETENV if you don't have setenv in the C library.
-AC_CHECK_FUNC(setenv,
+GIT_CHECK_FUNC(setenv,
 [NO_SETENV=],
 [NO_SETENV=YesPlease])
 AC_SUBST(NO_SETENV)
 #
 # Define NO_UNSETENV if you don't have unsetenv in the C library.
-AC_CHECK_FUNC(unsetenv,
+GIT_CHECK_FUNC(unsetenv,
 [NO_UNSETENV=],
 [NO_UNSETENV=YesPlease])
 AC_SUBST(NO_UNSETENV)
 #
 # Define NO_MKDTEMP if you don't have mkdtemp in the C library.
-AC_CHECK_FUNC(mkdtemp,
+GIT_CHECK_FUNC(mkdtemp,
 [NO_MKDTEMP=],
 [NO_MKDTEMP=YesPlease])
 AC_SUBST(NO_MKDTEMP)

Re: [PATCH] autoconf: Add link tests to each AC_CHECK_FUNC() test

From: Ralf Wildenhues <hidden>
Date: 2016-06-15 22:46:55

Hello, and please forgive me for replying to a very old thread,
<http://thread.gmane.org/gmane.comp.version-control.git/99159>.
(BTW, is that frowned upon on this list?)

* Junio C Hamano wrote on Sun, Nov 02, 2008 at 09:04:21AM CET:
"David M. Syzdek" [off-list ref] writes:
quoted
Update configure.ac to test libraries for getaddrinfo, strcasestr, memmem,
strlcpy, strtoumax, setenv, unsetenv, and mkdtemp.  The default compilers
on FreeBSD 4.9-SECURITY and FreeBSD 6.2-RELEASE-p4 do not generate warnings
for missing prototypes unless `-Wall' is used. This behavior renders the
results of AC_CHECK_FUNC() void on these platforms. The test AC_SEARCH_LIBS()
verifies a function is valid by linking to symbol within the system libraries.
This description does not make sense.  AC_CHECK_FUNC does not take into
account prototypes in the test; instead, it tries to link a program that
requires the function symbol.  In that matter, the patch that introduced
It's been a looong time since I did any sizeable autoconf/m4 hacking, but
the repetitititiveness of this patch loudly calls for a convenience macro
of a higher order, perhaps something like:

        AC_DEFUN([GIT_CHECK_FUNC],[
         AC_CHECK_FUNC([$1],[
          AC_SEARCH_LIBS([$1},,
          [$2],[$3])],
          [$3])])

Then we can use it like:

	GIT_CHECK_FUNC([getaddrinfo],[NO_IPV6=],[NO_IPV6=YesPlease])
(which is 1689c5de8730ea334535337a341db3c7a21ad002) is not necessary.
However, there might have been another reason altogether why David was
seeing false configure test results on his system, and it would be
interesting to know about them (both to possibly fix Autoconf, and the
comment introducing GIT_CHECK_FUNC in configure.ac).

Otherwise, I'd propose reverting the commit.

Thanks for any feedback,
Ralf

Re: [PATCH] autoconf: Add link tests to each AC_CHECK_FUNC() test

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:55

Ralf Wildenhues [off-list ref] writes:
Hello, and please forgive me for replying to a very old thread,
<http://thread.gmane.org/gmane.comp.version-control.git/99159>.
(BTW, is that frowned upon on this list?)
Not at all.
* Junio C Hamano wrote on Sun, Nov 02, 2008 at 09:04:21AM CET:
quoted
"David M. Syzdek" [off-list ref] writes:
quoted
Update configure.ac to test libraries for getaddrinfo, strcasestr, memmem,
strlcpy, strtoumax, setenv, unsetenv, and mkdtemp.  The default compilers
on FreeBSD 4.9-SECURITY and FreeBSD 6.2-RELEASE-p4 do not generate warnings
for missing prototypes unless `-Wall' is used. This behavior renders the
results of AC_CHECK_FUNC() void on these platforms. The test AC_SEARCH_LIBS()
verifies a function is valid by linking to symbol within the system libraries.
This description does not make sense.  AC_CHECK_FUNC does not take into
account prototypes in the test; instead, it tries to link a program that
requires the function symbol.
Yeah, I just looked at output from AC_CHECK_FUNC(); it creates main() that
calls the function being checked and tries to see if the program links.

And SEARCH_LIBS() won't catch missing prototypes either.
However, there might have been another reason altogether why David was
seeing false configure test results on his system, and it would be
interesting to know about them (both to possibly fix Autoconf, and the
comment introducing GIT_CHECK_FUNC in configure.ac).
Yeah, I am interested, too.  The closest BSD variant I happen to have
access to is FreeBSD 7.2, and reverting the commit there does not seem to
have any ill effects, so I'd like to know what breakage the patch fixed
(or covered up).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help