aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ares/CHANGES4
-rw-r--r--ares/RELEASE-NOTES1
-rw-r--r--ares/acinclude.m4136
3 files changed, 97 insertions, 44 deletions
diff --git a/ares/CHANGES b/ares/CHANGES
index a937853b6..91430acae 100644
--- a/ares/CHANGES
+++ b/ares/CHANGES
@@ -1,5 +1,9 @@
Changelog for the c-ares project
+* Jul 16 2008 (Yang Tse)
+- Improved configure detection of number of arguments for getservbyport_r.
+ Detection is now based on compilation checks instead of linker ones.
+
* Jul 15 2008 (Yang Tse)
- Introduce definition of _REENTRANT symbol in setup.h to improve library
usability. Previously the configure process only used the AC_SYS_LARGEFILE
diff --git a/ares/RELEASE-NOTES b/ares/RELEASE-NOTES
index 16f73204a..faff00d85 100644
--- a/ares/RELEASE-NOTES
+++ b/ares/RELEASE-NOTES
@@ -7,6 +7,7 @@ This is what's new and changed in the c-ares 1.5.3 release:
o allow --enable-largefile and --disable-largefile configurations
o configure process no longer needs nor checks size of curl_off_t
o library will now be built with _REENTRANT symbol defined
+ o Improved configure detection of number of arguments for getservbyport_r
Thanks go to these friendly people for their efforts and contributions:
diff --git a/ares/acinclude.m4 b/ares/acinclude.m4
index 79da24b18..bd3998563 100644
--- a/ares/acinclude.m4
+++ b/ares/acinclude.m4
@@ -1803,68 +1803,116 @@ dnl Test if the getservbyport_r function is available,
dnl and find out how many parameters it takes.
AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
- AC_MSG_CHECKING([how many arguments getservbyport_r takes])
- ac_func_getservbyport_r="unknown"
-
+ AC_CHECK_HEADERS(sys/types.h netdb.h)
+ #
+ AC_MSG_CHECKING([for getservbyport_r])
AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
-#include <netdb.h>
- ]],[[
- int p1, p5;
- char *p2, p4[4096];
- struct servent *p3, *p6;
- getservbyport_r(p1, p2, p3, p4, p5, &p6);
- ]])
+ AC_LANG_FUNC_LINK_TRY([getservbyport_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ cares_cv_getservbyport_r="yes"
],[
- ac_func_getservbyport_r="6"
+ AC_MSG_RESULT([no])
+ cares_cv_getservbyport_r="no"
])
-
- if test "$ac_func_getservbyport_r" = "unknown"; then
+ #
+ if test "$cares_cv_getservbyport_r" != "yes"; then
+ AC_MSG_CHECKING([deeper for getservbyport_r])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
-#include <netdb.h>
]],[[
- int p1, p5;
- char *p2, p4[4096];
- struct servent *p3;
- getservbyport_r(p1, p2, p3, p4, p5);
+ getservbyport_r();
]])
],[
- ac_func_getservbyport_r="5"
+ AC_MSG_RESULT([yes])
+ cares_cv_getservbyport_r="yes"
+ ],[
+ AC_MSG_RESULT([but still no])
+ cares_cv_getservbyport_r="no"
])
fi
-
- if test "$ac_func_getservbyport_r" = "unknown"; then
- AC_LINK_IFELSE([
+ #
+ if test "$cares_cv_getservbyport_r" = "yes"; then
+ AC_MSG_CHECKING([how many arguments getservbyport_r takes])
+ cares_cv_getservbyport_r_nargs="unknown"
+ #
+ AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
#include <netdb.h>
+#endif
]],[[
- int p1;
- char *p2;
- struct servent *p3;
- struct servent_data p4;
- getservbyport_r(p1, p2, p3, &p4);
+ int p1, p5;
+ char *p2, p4[4096];
+ struct servent *p3, *p6;
+ getservbyport_r(p1, p2, p3, p4, p5, &p6);
]])
],[
- ac_func_getservbyport_r="4"
+ cares_cv_getservbyport_r_nargs="6"
])
- fi
-
- if test "$ac_func_getservbyport_r" = "unknown"; then
- AC_MSG_RESULT([not found])
- else
- AC_MSG_RESULT($ac_func_getservbyport_r)
- AC_DEFINE(HAVE_GETSERVBYPORT_R, 1,
- [Specifies whether getservbyport_r is present])
- AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r,
- [Specifies the number of arguments to getservbyport_r])
- if test "$ac_func_getservbyport_r" = "4" ; then
- AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
- [Specifies the size of the buffer to pass to getservbyport_r])
+ #
+ if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+ ]],[[
+ int p1, p5;
+ char *p2, p4[4096];
+ struct servent *p3;
+ getservbyport_r(p1, p2, p3, p4, p5);
+ ]])
+ ],[
+ cares_cv_getservbyport_r_nargs="5"
+ ])
+ fi
+ #
+ if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+ ]],[[
+ int p1;
+ char *p2;
+ struct servent *p3;
+ struct servent_data p4;
+ getservbyport_r(p1, p2, p3, &p4);
+ ]])
+ ],[
+ cares_cv_getservbyport_r_nargs="4"
+ ])
+ fi
+ #
+ AC_MSG_RESULT([$cares_cv_getservbyport_r_nargs])
+ #
+ if test "$cares_cv_getservbyport_r_nargs" = "unknown"; then
+ AC_MSG_WARN([HAVE_GETSERVBYPORT_R will not be defined])
else
- AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
- [Specifies the size of the buffer to pass to getservbyport_r])
+ AC_DEFINE(HAVE_GETSERVBYPORT_R, 1,
+ [Specifies whether getservbyport_r is present])
+ AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $cares_cv_getservbyport_r_nargs,
+ [Specifies the number of arguments to getservbyport_r])
+ if test "$cares_cv_getservbyport_r_nargs" = "4" ; then
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
+ [Specifies the size of the buffer to pass to getservbyport_r])
+ else
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
+ [Specifies the size of the buffer to pass to getservbyport_r])
+ fi
fi
+ #
fi
])