From 4c08eb4b1108892f2d9c0e6c7d64ff75d26b9f52 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Sun, 2 Jul 2006 23:09:46 +0000 Subject: [PATCH] Make CURL_CHECK_NI_WITHSCOPEID actually try to compile NI_WITHSCOPEID when cross-compiling. --- acinclude.m4 | 151 ++++++++++++++++++++++------------------------ 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 +#include +#include +#include + ],[ +#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 +#include +#include +#include + ],[ + 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 -#include -#include -#include -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 -#include -#include -#include - -#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 +#include +#include +#include + ],[ +#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 +#include +#include +#include + ],[ + 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