Code

d1cb9c20a0293a48e0895203ed4bc8e103573051
[nagiosplug.git] / gl / m4 / sys_socket_h.m4
1 # sys_socket_h.m4 serial 12
2 dnl Copyright (C) 2005-2009 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 dnl From Simon Josefsson.
9 AC_DEFUN([gl_HEADER_SYS_SOCKET],
10 [
11   AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
12   AC_REQUIRE([AC_C_INLINE])
14   AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
15     [gl_cv_header_sys_socket_h_selfcontained],
16     [
17       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])],
18         [gl_cv_header_sys_socket_h_selfcontained=yes],
19         [gl_cv_header_sys_socket_h_selfcontained=no])
20     ])
21   if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
22     SYS_SOCKET_H=''
23     dnl If the shutdown function exists, <sys/socket.h> should define
24     dnl SHUT_RD, SHUT_WR, SHUT_RDWR.
25     AC_CHECK_FUNCS([shutdown])
26     if test $ac_cv_func_shutdown = yes; then
27       AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros],
28         [gl_cv_header_sys_socket_h_shut],
29         [
30           AC_COMPILE_IFELSE(
31             [AC_LANG_PROGRAM([[#include <sys/socket.h>]],
32                [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])],
33             [gl_cv_header_sys_socket_h_shut=yes],
34             [gl_cv_header_sys_socket_h_shut=no])
35         ])
36       if test $gl_cv_header_sys_socket_h_shut = no; then
37         SYS_SOCKET_H='sys/socket.h'
38       fi
39     fi
40   else
41     SYS_SOCKET_H='sys/socket.h'
42   fi
43   # We need to check for ws2tcpip.h now.
44   gl_PREREQ_SYS_H_SOCKET
45   AC_CHECK_TYPES([struct sockaddr_storage],,,[
46   /* sys/types.h is not needed according to POSIX, but the
47      sys/socket.h in i386-unknown-freebsd4.10 and
48      powerpc-apple-darwin5.5 required it. */
49 #include <sys/types.h>
50 #ifdef HAVE_SYS_SOCKET_H
51 #include <sys/socket.h>
52 #endif
53 #ifdef HAVE_WS2TCPIP_H
54 #include <ws2tcpip.h>
55 #endif
56 ])
57   if test $ac_cv_type_struct_sockaddr_storage = no; then
58     HAVE_STRUCT_SOCKADDR_STORAGE=0
59     SYS_SOCKET_H='sys/socket.h'
60   fi
61   if test -n "$SYS_SOCKET_H"; then
62     gl_PREREQ_SYS_H_WINSOCK2
63   fi
64   AC_SUBST([SYS_SOCKET_H])
65 ])
67 AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
68 [
69   dnl Check prerequisites of the <sys/socket.h> replacement.
70   gl_CHECK_NEXT_HEADERS([sys/socket.h])
71   if test $ac_cv_header_sys_socket_h = yes; then
72     HAVE_SYS_SOCKET_H=1
73     HAVE_WS2TCPIP_H=0
74   else
75     HAVE_SYS_SOCKET_H=0
76     dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
77     dnl the check for those headers unconditional; yet cygwin reports
78     dnl that the headers are present but cannot be compiled (since on
79     dnl cygwin, all socket information should come from sys/socket.h).
80     AC_CHECK_HEADERS([ws2tcpip.h])
81     if test $ac_cv_header_ws2tcpip_h = yes; then
82       HAVE_WS2TCPIP_H=1
83     else
84       HAVE_WS2TCPIP_H=0
85     fi
86   fi
87   AC_SUBST([HAVE_SYS_SOCKET_H])
88   AC_SUBST([HAVE_WS2TCPIP_H])
89 ])
91 # Common prerequisites of of the <sys/socket.h> replacement and of the
92 # <sys/select.h> replacement.
93 # Sets and substitutes HAVE_WINSOCK2_H.
94 AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2],
95 [
96   m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
97   m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
98   AC_CHECK_HEADERS_ONCE([sys/socket.h])
99   if test $ac_cv_header_sys_socket_h != yes; then
100     dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
101     dnl the check for those headers unconditional; yet cygwin reports
102     dnl that the headers are present but cannot be compiled (since on
103     dnl cygwin, all socket information should come from sys/socket.h).
104     AC_CHECK_HEADERS([winsock2.h])
105   fi
106   if test "$ac_cv_header_winsock2_h" = yes; then
107     HAVE_WINSOCK2_H=1
108     UNISTD_H_HAVE_WINSOCK2_H=1
109     SYS_IOCTL_H_HAVE_WINSOCK2_H=1
110   else
111     HAVE_WINSOCK2_H=0
112   fi
113   AC_SUBST([HAVE_WINSOCK2_H])
114 ])
116 AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
118   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
119   AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
120   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
121 ])
123 AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
125   GNULIB_SOCKET=0;      AC_SUBST([GNULIB_SOCKET])
126   GNULIB_CONNECT=0;     AC_SUBST([GNULIB_CONNECT])
127   GNULIB_ACCEPT=0;      AC_SUBST([GNULIB_ACCEPT])
128   GNULIB_BIND=0;        AC_SUBST([GNULIB_BIND])
129   GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
130   GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
131   GNULIB_GETSOCKOPT=0;  AC_SUBST([GNULIB_GETSOCKOPT])
132   GNULIB_LISTEN=0;      AC_SUBST([GNULIB_LISTEN])
133   GNULIB_RECV=0;        AC_SUBST([GNULIB_RECV])
134   GNULIB_SEND=0;        AC_SUBST([GNULIB_SEND])
135   GNULIB_RECVFROM=0;    AC_SUBST([GNULIB_RECVFROM])
136   GNULIB_SENDTO=0;      AC_SUBST([GNULIB_SENDTO])
137   GNULIB_SETSOCKOPT=0;  AC_SUBST([GNULIB_SETSOCKOPT])
138   GNULIB_SHUTDOWN=0;    AC_SUBST([GNULIB_SHUTDOWN])
139   HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
140 ])