diff options
| -rw-r--r-- | acinclude.m4 | 151 | ||||
| -rw-r--r-- | ares/acinclude.m4 | 73 | 
2 files changed, 146 insertions, 78 deletions
| diff --git a/acinclude.m4 b/acinclude.m4 index bc6a343e4..b621d6afb 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -422,6 +422,79 @@ AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [  ]) # AC_DEFUN +dnl CURL_CHECK_NI_WITHSCOPEID +dnl ------------------------------------------------- +dnl Check for working NI_WITHSCOPEID in getnameinfo() + +AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ +  AC_CACHE_CHECK([for working NI_WITHSCOPEID],  +    [ac_cv_working_ni_withscopeid], [ +    AC_RUN_IFELSE([ +      AC_LANG_PROGRAM([ +#include <stdio.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +      ],[ +#ifdef NI_WITHSCOPEID +        struct sockaddr_storage ss; +        int sslen = sizeof(ss); +        int rc; +        char hbuf[NI_MAXHOST]; +        int fd = socket(AF_INET6, SOCK_STREAM, 0); +        if(fd < 0) { +          perror("socket()"); +          return 1; /* Error creating socket */ +        } +        rc = getsockname(fd, (struct sockaddr *)&ss, &sslen); +        if(rc) { +          perror("getsockname()"); +          return 2; /* Error retrieving socket name */ +        } +        rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf), +               NULL, 0, +               NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID); +        if(rc) { +          printf("rc = %s\n", gai_strerror(rc)); +          return 3; /* Error translating socket address */ +        } +        return 0; /* Ok, NI_WITHSCOPEID works */ +#else +        return 4; /* Error, NI_WITHSCOPEID not defined */ +#endif +      ]) # AC_LANG_PROGRAM +    ],[ +      # Exit code == 0. Program worked. +      ac_cv_working_ni_withscopeid="yes" +    ],[ +      # Exit code != 0. Program failed. +      ac_cv_working_ni_withscopeid="no" +    ],[ +      # Program is not run when cross-compiling. So we assume +      # NI_WITHSCOPEID will work if we are able to compile it. +      AC_COMPILE_IFELSE([ +        AC_LANG_PROGRAM([ +#include <stdio.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +        ],[ +          unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; +        ]) +      ],[ +        ac_cv_working_ni_withscopeid="yes" +      ],[ +        ac_cv_working_ni_withscopeid="no" +      ]) # AC_COMPILE_IFELSE +    ]) # AC_RUN_IFELSE +  ]) # AC_CACHE_CHECK +  if test "x$ac_cv_working_ni_withscopeid" = "xyes"; then +    AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, +      [Define to 1 if NI_WITHSCOPEID exists and works.]) +  fi +]) # AC_DEFUN + +  dnl CURL_CHECK_NONBLOCKING_SOCKET  dnl -------------------------------------------------  dnl Check for how to set a socket to non-blocking state. There seems to exist @@ -753,84 +826,6 @@ if test "$ac_cv_working_getaddrinfo" = "yes"; then  fi  ]) -dnl ************************************************************ -dnl check for working NI_WITHSCOPEID in getnameinfo() -dnl -AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID],[ -  AC_CACHE_CHECK(for working NI_WITHSCOPEID, ac_cv_working_ni_withscopeid,[ - - AC_RUN_IFELSE([[ -#include <stdio.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netdb.h> -int main() -{ -#ifdef NI_WITHSCOPEID -   struct sockaddr_storage ss; -   int sslen = sizeof(ss); -   int rc; -   char hbuf[NI_MAXHOST]; -   int fd = socket(AF_INET6, SOCK_STREAM, 0); -   if(fd < 0) { -     perror("socket()"); -     return 1; /* couldn't create socket of either kind */ -   } - -   rc = getsockname(fd, (struct sockaddr *)&ss, &sslen); -   if(rc) { -     perror("getsockname()"); -     return 2; -   } - -   rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf), -                     NULL, 0, -                     NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID); - -   if(rc) { -     printf("rc = %s\n", gai_strerror(rc)); -     return 3; -   } - -   return 0; /* everything works fine, use NI_WITHSCOPEID! */ -#else -   return 4; /* we don't seem to have the definition, don't use it */ -#endif -} -]], -dnl program worked: -[ ac_cv_working_ni_withscopeid="yes" ], -dnl program failed: -[ ac_cv_working_ni_withscopeid="no" ], -dnl we cross-compile, check the headers using the preprocessor -[ - - AC_EGREP_CPP(WORKS, -[ -#include <stdio.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netdb.h> - -#ifdef NI_WITHSCOPEID -WORKS -#endif -], -  ac_cv_working_ni_withscopeid="yes", -  ac_cv_working_ni_withscopeid="no" ) - - ] -) dnl end of AC_RUN_IFELSE - -]) dnl end of AC_CACHE_CHECK - -if test "$ac_cv_working_ni_withscopeid" = "yes"; then -  AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, -            [Define if NI_WITHSCOPEID exists and works]) -fi - -]) dnl end of AC_DEFUN -  AC_DEFUN([CURL_CHECK_LOCALTIME_R],  [ diff --git a/ares/acinclude.m4 b/ares/acinclude.m4 index 96e0a1740..dba89de68 100644 --- a/ares/acinclude.m4 +++ b/ares/acinclude.m4 @@ -401,6 +401,79 @@ AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [  ]) # AC_DEFUN +dnl CURL_CHECK_NI_WITHSCOPEID +dnl ------------------------------------------------- +dnl Check for working NI_WITHSCOPEID in getnameinfo() + +AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ +  AC_CACHE_CHECK([for working NI_WITHSCOPEID],  +    [ac_cv_working_ni_withscopeid], [ +    AC_RUN_IFELSE([ +      AC_LANG_PROGRAM([ +#include <stdio.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +      ],[ +#ifdef NI_WITHSCOPEID +        struct sockaddr_storage ss; +        int sslen = sizeof(ss); +        int rc; +        char hbuf[NI_MAXHOST]; +        int fd = socket(AF_INET6, SOCK_STREAM, 0); +        if(fd < 0) { +          perror("socket()"); +          return 1; /* Error creating socket */ +        } +        rc = getsockname(fd, (struct sockaddr *)&ss, &sslen); +        if(rc) { +          perror("getsockname()"); +          return 2; /* Error retrieving socket name */ +        } +        rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf), +               NULL, 0, +               NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID); +        if(rc) { +          printf("rc = %s\n", gai_strerror(rc)); +          return 3; /* Error translating socket address */ +        } +        return 0; /* Ok, NI_WITHSCOPEID works */ +#else +        return 4; /* Error, NI_WITHSCOPEID not defined */ +#endif +      ]) # AC_LANG_PROGRAM +    ],[ +      # Exit code == 0. Program worked. +      ac_cv_working_ni_withscopeid="yes" +    ],[ +      # Exit code != 0. Program failed. +      ac_cv_working_ni_withscopeid="no" +    ],[ +      # Program is not run when cross-compiling. So we assume +      # NI_WITHSCOPEID will work if we are able to compile it. +      AC_COMPILE_IFELSE([ +        AC_LANG_PROGRAM([ +#include <stdio.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +        ],[ +          unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; +        ]) +      ],[ +        ac_cv_working_ni_withscopeid="yes" +      ],[ +        ac_cv_working_ni_withscopeid="no" +      ]) # AC_COMPILE_IFELSE +    ]) # AC_RUN_IFELSE +  ]) # AC_CACHE_CHECK +  if test "x$ac_cv_working_ni_withscopeid" = "xyes"; then +    AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, +      [Define to 1 if NI_WITHSCOPEID exists and works.]) +  fi +]) # AC_DEFUN + +  dnl CURL_CHECK_NONBLOCKING_SOCKET  dnl -------------------------------------------------  dnl Check for how to set a socket to non-blocking state. There seems to exist | 
