--- /dev/null
+dnl Check for socklen_t: historically on BSD it is an int, and in
+dnl POSIX 1g it is a type of its own, but some platforms use different
+dnl types for the argument to getsockopt, getpeername, etc. So we
+dnl have to test to find something that will work.
+AC_DEFUN([TYPE_SOCKLEN_T],
+[
+ AC_CHECK_TYPE([socklen_t], ,[
+ AC_MSG_CHECKING([for socklen_t equivalent])
+ AC_CACHE_VAL([curl_cv_socklen_t_equiv],
+ [
+ # Systems have either "struct sockaddr *" or
+ # "void *" as the second argument to getpeername
+ curl_cv_socklen_t_equiv=
+ for arg2 in "struct sockaddr" void; do
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+
+ int getpeername (int, $arg2 *, $t *);
+ ],[
+ $t len;
+ getpeername(0,0,&len);
+ ],[
+ curl_cv_socklen_t_equiv="$t"
+ break
+ ])
+ done
+ done
+
+ if test "x$curl_cv_socklen_t_equiv" = x; then
+ AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
+ fi
+ ])
+ AC_MSG_RESULT($curl_cv_socklen_t_equiv)
+ AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined])],
+ [#include <sys/types.h>
+#include <sys/socket.h>])
+])
+
+dnl ************************************************************
+dnl check for "localhost", if it doesn't exist, we can't do the
+dnl gethostbyname_r tests!
+dnl
+
+AC_DEFUN(CURL_CHECK_WORKING_RESOLVER,[
+AC_MSG_CHECKING([if "localhost" resolves])
+AC_TRY_RUN([
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+
+int
+main () {
+struct hostent *h;
+h = gethostbyname("localhost");
+exit (h == NULL ? 1 : 0); }],[
+ AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
+
+ ]
+)
+])
+
+dnl ************************************************************
+dnl check for working getaddrinfo()
+dnl
+AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
+ AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
+ AC_TRY_RUN( [
+#include <netdb.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+void main(void) {
+ struct addrinfo hints, *ai;
+ int error;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
+ if (error) {
+ exit(1);
+ }
+ else {
+ exit(0);
+ }
+}
+],[
+ ac_cv_working_getaddrinfo="yes"
+],[
+ ac_cv_working_getaddrinfo="no"
+],[
+ ac_cv_working_getaddrinfo="yes"
+])])
+if test "$ac_cv_working_getaddrinfo" = "yes"; then
+ AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
+ AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
+
+ IPV6_ENABLED=1
+ AC_SUBST(IPV6_ENABLED)
+fi
+])
+
+
+AC_DEFUN(CURL_CHECK_LOCALTIME_R,
+[
+ dnl check for a few thread-safe functions
+ AC_CHECK_FUNCS(localtime_r,[
+ AC_MSG_CHECKING(whether localtime_r is declared)
+ AC_EGREP_CPP(localtime_r,[
+#include <time.h>],[
+ AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
+ AC_EGREP_CPP(localtime_r,[
+#define _REENTRANT
+#include <time.h>],[
+ AC_DEFINE(NEED_REENTRANT)
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))])])
+])
+
+AC_DEFUN(CURL_CHECK_INET_NTOA_R,
+[
+ dnl determine if function definition for inet_ntoa_r exists.
+ AC_CHECK_FUNCS(inet_ntoa_r,[
+ AC_MSG_CHECKING(whether inet_ntoa_r is declared)
+ AC_EGREP_CPP(inet_ntoa_r,[
+#include <arpa/inet.h>],[
+ AC_DEFINE(HAVE_INET_NTOA_R_DECL)
+ AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
+ AC_EGREP_CPP(inet_ntoa_r,[
+#define _REENTRANT
+#include <arpa/inet.h>],[
+ AC_DEFINE(HAVE_INET_NTOA_R_DECL)
+ AC_DEFINE(NEED_REENTRANT)
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))])])
+
+])
+
+AC_DEFUN(CURL_CHECK_GETHOSTBYADDR_R,
+[
+ dnl check for number of arguments to gethostbyaddr_r. it might take
+ dnl either 5, 7, or 8 arguments.
+ AC_CHECK_FUNCS(gethostbyaddr_r,[
+ AC_MSG_CHECKING(if gethostbyaddr_r takes 5 arguments)
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <netdb.h>],[
+char * address;
+int length;
+int type;
+struct hostent h;
+struct hostent_data hdata;
+int rc;
+rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
+ ac_cv_gethostbyaddr_args=5],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
+ AC_TRY_COMPILE([
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>],[
+char * address;
+int length;
+int type;
+struct hostent h;
+struct hostent_data hdata;
+int rc;
+rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
+ AC_DEFINE(NEED_REENTRANT)
+ ac_cv_gethostbyaddr_args=5],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <netdb.h>],[
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+
+hp = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &h_errnop);],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
+ ac_cv_gethostbyaddr_args=7],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <netdb.h>],[
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+int rc;
+
+rc = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &hp, &h_errnop);],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
+ ac_cv_gethostbyaddr_args=8],[
+ AC_MSG_RESULT(no)
+ have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
+
+
+])
+
+AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
+[
+ dnl check for number of arguments to gethostbyname_r. it might take
+ dnl either 3, 5, or 6 arguments.
+ AC_CHECK_FUNCS(gethostbyname_r,[
+ AC_MSG_CHECKING(if gethostbyname_r takes 3 arguments)
+ AC_TRY_RUN([
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+
+int
+main () {
+struct hostent h;
+struct hostent_data hdata;
+char *name = "localhost";
+int rc;
+memset(&h, 0, sizeof(struct hostent));
+memset(&hdata, 0, sizeof(struct hostent_data));
+rc = gethostbyname_r(name, &h, &hdata);
+exit (rc != 0 ? 1 : 0); }],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
+ ac_cv_gethostbyname_args=3],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyname_r with -D_REENTRANT takes 3 arguments)
+ AC_TRY_RUN([
+#define _REENTRANT
+
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+
+int
+main () {
+struct hostent h;
+struct hostent_data hdata;
+char *name = "localhost";
+int rc;
+memset(&h, 0, sizeof(struct hostent));
+memset(&hdata, 0, sizeof(struct hostent_data));
+rc = gethostbyname_r(name, &h, &hdata);
+exit (rc != 0 ? 1 : 0); }],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
+ AC_DEFINE(NEED_REENTRANT)
+ ac_cv_gethostbyname_args=3],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyname_r takes 5 arguments)
+ AC_TRY_RUN([
+#include <sys/types.h>
+#include <netdb.h>
+
+int
+main () {
+struct hostent *hp;
+struct hostent h;
+char *name = "localhost";
+char buffer[8192];
+int h_errno;
+hp = gethostbyname_r(name, &h, buffer, 8192, &h_errno);
+exit (hp == NULL ? 1 : 0); }],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
+ ac_cv_gethostbyname_args=5],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(if gethostbyname_r takes 6 arguments)
+ AC_TRY_RUN([
+#include <sys/types.h>
+#include <netdb.h>
+
+int
+main () {
+struct hostent h;
+struct hostent *hp;
+char *name = "localhost";
+char buf[8192];
+int rc;
+int h_errno;
+rc = gethostbyname_r(name, &h, buf, 8192, &hp, &h_errno);
+exit (rc != 0 ? 1 : 0); }],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
+ ac_cv_gethostbyname_args=6],[
+ AC_MSG_RESULT(no)
+ have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
+ [ac_cv_gethostbyname_args=0])],
+ [ac_cv_gethostbyname_args=0])],
+ [ac_cv_gethostbyname_args=0])],
+ [ac_cv_gethostbyname_args=0])])
+
+if test "$ac_cv_func_gethostbyname_r" = "yes"; then
+ if test "$ac_cv_gethostbyname_args" = "0"; then
+ dnl there's a gethostbyname_r() function, but we don't know how
+ dnl many arguments it wants!
+ AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()])
+ fi
+fi
+])
AC_MSG_RESULT(no)
)
-dnl ************************************************************
-dnl check for "localhost", if it doesn't exist, we can't do the
-dnl gethostbyname_r tests!
-dnl
-
-AC_DEFUN(CURL_CHECK_WORKING_RESOLVER,[
-AC_MSG_CHECKING([if "localhost" resolves])
-AC_TRY_RUN([
-#include <string.h>
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main () {
-struct hostent *h;
-h = gethostbyname("localhost");
-exit (h == NULL ? 1 : 0); }],[
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
-
- ]
-)
-])
-
-dnl ************************************************************
-dnl check for working getaddrinfo()
-dnl
-AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
- AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
- AC_TRY_RUN( [
-#include <netdb.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-void main(void) {
- struct addrinfo hints, *ai;
- int error;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
- if (error) {
- exit(1);
- }
- else {
- exit(0);
- }
-}
-],[
- ac_cv_working_getaddrinfo="yes"
-],[
- ac_cv_working_getaddrinfo="no"
-],[
- ac_cv_working_getaddrinfo="yes"
-])])
-if test "$ac_cv_working_getaddrinfo" = "yes"; then
- AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
- AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
-
- IPV6_ENABLED=1
- AC_SUBST(IPV6_ENABLED)
-fi
-])
-
-
-AC_DEFUN(CURL_CHECK_LOCALTIME_R,
-[
- dnl check for a few thread-safe functions
- AC_CHECK_FUNCS(localtime_r,[
- AC_MSG_CHECKING(whether localtime_r is declared)
- AC_EGREP_CPP(localtime_r,[
-#include <time.h>],[
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(localtime_r,[
-#define _REENTRANT
-#include <time.h>],[
- AC_DEFINE(NEED_REENTRANT)
- AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))])])
-])
-
-AC_DEFUN(CURL_CHECK_INET_NTOA_R,
-[
- dnl determine if function definition for inet_ntoa_r exists.
- AC_CHECK_FUNCS(inet_ntoa_r,[
- AC_MSG_CHECKING(whether inet_ntoa_r is declared)
- AC_EGREP_CPP(inet_ntoa_r,[
-#include <arpa/inet.h>],[
- AC_DEFINE(HAVE_INET_NTOA_R_DECL)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(inet_ntoa_r,[
-#define _REENTRANT
-#include <arpa/inet.h>],[
- AC_DEFINE(HAVE_INET_NTOA_R_DECL)
- AC_DEFINE(NEED_REENTRANT)
- AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))])])
-
-])
-
-AC_DEFUN(CURL_CHECK_GETHOSTBYADDR_R,
-[
- dnl check for number of arguments to gethostbyaddr_r. it might take
- dnl either 5, 7, or 8 arguments.
- AC_CHECK_FUNCS(gethostbyaddr_r,[
- AC_MSG_CHECKING(if gethostbyaddr_r takes 5 arguments)
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <netdb.h>],[
-char * address;
-int length;
-int type;
-struct hostent h;
-struct hostent_data hdata;
-int rc;
-rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
- ac_cv_gethostbyaddr_args=5],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
- AC_TRY_COMPILE([
-#define _REENTRANT
-#include <sys/types.h>
-#include <netdb.h>],[
-char * address;
-int length;
-int type;
-struct hostent h;
-struct hostent_data hdata;
-int rc;
-rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
- AC_DEFINE(NEED_REENTRANT)
- ac_cv_gethostbyaddr_args=5],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <netdb.h>],[
-char * address;
-int length;
-int type;
-struct hostent h;
-char buffer[8192];
-int h_errnop;
-struct hostent * hp;
-
-hp = gethostbyaddr_r(address, length, type, &h,
- buffer, 8192, &h_errnop);],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
- ac_cv_gethostbyaddr_args=7],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <netdb.h>],[
-char * address;
-int length;
-int type;
-struct hostent h;
-char buffer[8192];
-int h_errnop;
-struct hostent * hp;
-int rc;
-
-rc = gethostbyaddr_r(address, length, type, &h,
- buffer, 8192, &hp, &h_errnop);],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
- ac_cv_gethostbyaddr_args=8],[
- AC_MSG_RESULT(no)
- have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
-
-
-])
-
-AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
-[
- dnl check for number of arguments to gethostbyname_r. it might take
- dnl either 3, 5, or 6 arguments.
- AC_CHECK_FUNCS(gethostbyname_r,[
- AC_MSG_CHECKING(if gethostbyname_r takes 3 arguments)
- AC_TRY_RUN([
-#include <string.h>
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main () {
-struct hostent h;
-struct hostent_data hdata;
-char *name = "localhost";
-int rc;
-memset(&h, 0, sizeof(struct hostent));
-memset(&hdata, 0, sizeof(struct hostent_data));
-rc = gethostbyname_r(name, &h, &hdata);
-exit (rc != 0 ? 1 : 0); }],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
- ac_cv_gethostbyname_args=3],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyname_r with -D_REENTRANT takes 3 arguments)
- AC_TRY_RUN([
-#define _REENTRANT
-
-#include <string.h>
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main () {
-struct hostent h;
-struct hostent_data hdata;
-char *name = "localhost";
-int rc;
-memset(&h, 0, sizeof(struct hostent));
-memset(&hdata, 0, sizeof(struct hostent_data));
-rc = gethostbyname_r(name, &h, &hdata);
-exit (rc != 0 ? 1 : 0); }],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
- AC_DEFINE(NEED_REENTRANT)
- ac_cv_gethostbyname_args=3],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyname_r takes 5 arguments)
- AC_TRY_RUN([
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main () {
-struct hostent *hp;
-struct hostent h;
-char *name = "localhost";
-char buffer[8192];
-int h_errno;
-hp = gethostbyname_r(name, &h, buffer, 8192, &h_errno);
-exit (hp == NULL ? 1 : 0); }],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
- ac_cv_gethostbyname_args=5],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if gethostbyname_r takes 6 arguments)
- AC_TRY_RUN([
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main () {
-struct hostent h;
-struct hostent *hp;
-char *name = "localhost";
-char buf[8192];
-int rc;
-int h_errno;
-rc = gethostbyname_r(name, &h, buf, 8192, &hp, &h_errno);
-exit (rc != 0 ? 1 : 0); }],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
- ac_cv_gethostbyname_args=6],[
- AC_MSG_RESULT(no)
- have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
- [ac_cv_gethostbyname_args=0])],
- [ac_cv_gethostbyname_args=0])],
- [ac_cv_gethostbyname_args=0])],
- [ac_cv_gethostbyname_args=0])])
-
-if test "$ac_cv_func_gethostbyname_r" = "yes"; then
- if test "$ac_cv_gethostbyname_args" = "0"; then
- dnl there's a gethostbyname_r() function, but we don't know how
- dnl many arguments it wants!
- AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()])
- fi
-fi
-
-])
-
dnl **********************************************************************
dnl Checks for IPv6
dnl **********************************************************************
# check for ssize_t
AC_CHECK_TYPE(ssize_t, int)
-dnl
-dnl We can't just AC_CHECK_TYPE() for socklen_t since it doesn't appear
-dnl in the standard headers. We egrep for it in the socket headers and
-dnl if it is used there we assume we have the type defined, otherwise
-dnl we search for it with AC_CHECK_TYPE() the "normal" way
-dnl
-
-if test "$ac_cv_header_sys_socket_h" = "yes"; then
- AC_MSG_CHECKING(for socklen_t in sys/socket.h)
- AC_EGREP_HEADER(socklen_t,
- sys/socket.h,
- socklen_t=yes
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no))
-fi
-
-if test "$socklen_t" != "yes"; then
- # check for socklen_t the standard way if it wasn't found before
- AC_CHECK_TYPE(socklen_t, int)
-fi
+TYPE_SOCKLEN_T
dnl Checks for library functions.
dnl AC_PROG_GCC_TRADITIONAL