summaryrefslogtreecommitdiff
path: root/acinclude.m4
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2006-07-02 23:09:46 +0000
committerYang Tse <yangsita@gmail.com>2006-07-02 23:09:46 +0000
commit4c08eb4b1108892f2d9c0e6c7d64ff75d26b9f52 (patch)
tree9b671f110f084ec8a280ed6f16f206053049f5e2 /acinclude.m4
parent0163730437b7da4edfe31a72b6aec48e5b9ea934 (diff)
downloadcurl-4c08eb4b1108892f2d9c0e6c7d64ff75d26b9f52.tar.gz
Make CURL_CHECK_NI_WITHSCOPEID actually try to compile NI_WITHSCOPEID when cross-compiling.
Diffstat (limited to 'acinclude.m4')
-rw-r--r--acinclude.m4151
1 files changed, 73 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],
[