b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | # dnet.m4 serial 1 (libdnet-1.11) |
| 2 | |
| 3 | dnl |
| 4 | dnl Check for 4.4 BSD sa_len member in sockaddr struct |
| 5 | dnl |
| 6 | dnl usage: AC_DNET_SOCKADDR_SA_LEN |
| 7 | dnl results: HAVE_SOCKADDR_SA_LEN (defined) |
| 8 | dnl |
| 9 | AC_DEFUN([AC_DNET_SOCKADDR_SA_LEN], |
| 10 | [AC_MSG_CHECKING(for sa_len in sockaddr struct) |
| 11 | AC_CACHE_VAL(ac_cv_dnet_sockaddr_has_sa_len, |
| 12 | AC_TRY_COMPILE([ |
| 13 | # ifndef _SOCKADDR_LEN |
| 14 | # define _SOCKADDR_LEN 1 |
| 15 | # endif |
| 16 | # include <sys/types.h> |
| 17 | # include <sys/socket.h>], |
| 18 | [u_int i = sizeof(((struct sockaddr *)0)->sa_len)], |
| 19 | ac_cv_dnet_sockaddr_has_sa_len=yes, |
| 20 | ac_cv_dnet_sockaddr_has_sa_len=no)) |
| 21 | AC_MSG_RESULT($ac_cv_dnet_sockaddr_has_sa_len) |
| 22 | if test $ac_cv_dnet_sockaddr_has_sa_len = yes ; then |
| 23 | AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, |
| 24 | [Define if sockaddr struct has sa_len.]) |
| 25 | fi]) |
| 26 | |
| 27 | dnl |
| 28 | dnl Check for sockaddr_in6 struct in <netinet/in.h> |
| 29 | dnl |
| 30 | dnl usage: AC_DNET_SOCKADDR_IN6 |
| 31 | dnl results: HAVE_SOCKADDR_IN6 |
| 32 | dnl |
| 33 | AC_DEFUN([AC_DNET_SOCKADDR_IN6], |
| 34 | [AC_MSG_CHECKING(for sockaddr_in6 struct in <netinet/in.h>) |
| 35 | AC_CACHE_VAL(ac_cv_dnet_netinet_in_h_has_sockaddr_in6, |
| 36 | AC_TRY_COMPILE([ |
| 37 | # include <sys/types.h> |
| 38 | # include <sys/socket.h> |
| 39 | # include <netinet/in.h>], |
| 40 | [struct sockaddr_in6 sin6; sin6.sin6_family = AF_INET6;], |
| 41 | ac_cv_dnet_netinet_in_h_has_sockaddr_in6=yes, |
| 42 | ac_cv_dnet_netinet_in_h_has_sockaddr_in6=no)) |
| 43 | AC_MSG_RESULT($ac_cv_dnet_netinet_in_h_has_sockaddr_in6) |
| 44 | if test $ac_cv_dnet_netinet_in_h_has_sockaddr_in6 = yes ; then |
| 45 | AC_DEFINE(HAVE_SOCKADDR_IN6, 1, |
| 46 | [Define if <netinet/in.h> has sockaddr_in6 struct.]) |
| 47 | fi]) |
| 48 | |
| 49 | dnl |
| 50 | dnl Check for arp_dev member in arpreq struct |
| 51 | dnl |
| 52 | dnl usage: AC_DNET_ARPREQ_ARP_DEV |
| 53 | dnl results: HAVE_ARPREQ_ARP_DEV (defined) |
| 54 | dnl |
| 55 | AC_DEFUN([AC_DNET_ARPREQ_ARP_DEV], |
| 56 | [AC_MSG_CHECKING(for arp_dev in arpreq struct) |
| 57 | AC_CACHE_VAL(ac_cv_dnet_arpreq_has_arp_dev, |
| 58 | AC_TRY_COMPILE([ |
| 59 | # include <sys/types.h> |
| 60 | # include <sys/socket.h> |
| 61 | # include <net/if_arp.h>], |
| 62 | [void *p = ((struct arpreq *)0)->arp_dev], |
| 63 | ac_cv_dnet_arpreq_has_arp_dev=yes, |
| 64 | ac_cv_dnet_arpreq_has_arp_dev=no)) |
| 65 | AC_MSG_RESULT($ac_cv_dnet_arpreq_has_arp_dev) |
| 66 | if test $ac_cv_dnet_arpreq_has_arp_dev = yes ; then |
| 67 | AC_DEFINE(HAVE_ARPREQ_ARP_DEV, 1, |
| 68 | [Define if arpreq struct has arp_dev.]) |
| 69 | fi]) |
| 70 | |
| 71 | dnl |
| 72 | dnl Check for rt_msghdr struct in <net/route.h> |
| 73 | dnl |
| 74 | dnl usage: AC_DNET_ROUTE_RT_MSGHDR |
| 75 | dnl results: HAVE_ROUTE_RT_MSGHDR |
| 76 | dnl |
| 77 | AC_DEFUN([AC_DNET_ROUTE_RT_MSGHDR], |
| 78 | [AC_MSG_CHECKING(for rt_msghdr struct in <net/route.h>) |
| 79 | AC_CACHE_VAL(ac_cv_dnet_route_h_has_rt_msghdr, |
| 80 | AC_TRY_COMPILE([ |
| 81 | # include <sys/types.h> |
| 82 | # include <sys/socket.h> |
| 83 | # include <net/if.h> |
| 84 | # include <net/route.h>], |
| 85 | [struct rt_msghdr rtm; rtm.rtm_msglen = 0;], |
| 86 | ac_cv_dnet_route_h_has_rt_msghdr=yes, |
| 87 | ac_cv_dnet_route_h_has_rt_msghdr=no)) |
| 88 | AC_MSG_RESULT($ac_cv_dnet_route_h_has_rt_msghdr) |
| 89 | if test $ac_cv_dnet_route_h_has_rt_msghdr = yes ; then |
| 90 | AC_DEFINE(HAVE_ROUTE_RT_MSGHDR, 1, |
| 91 | [Define if <net/route.h> has rt_msghdr struct.]) |
| 92 | fi]) |
| 93 | |
| 94 | dnl |
| 95 | dnl Check for the Berkeley Packet Filter |
| 96 | dnl |
| 97 | dnl usage: AC_DNET_BSD_BPF |
| 98 | dnl results: HAVE_BSD_BPF |
| 99 | dnl |
| 100 | AC_DEFUN([AC_DNET_BSD_BPF], |
| 101 | [AC_MSG_CHECKING(for Berkeley Packet Filter) |
| 102 | AC_CACHE_VAL(ac_cv_dnet_bsd_bpf, |
| 103 | if test -c /dev/bpf0 ; then |
| 104 | ac_cv_dnet_bsd_bpf=yes |
| 105 | else |
| 106 | ac_cv_dnet_bsd_bpf=no |
| 107 | fi) |
| 108 | AC_MSG_RESULT($ac_cv_dnet_bsd_bpf) |
| 109 | if test $ac_cv_dnet_bsd_bpf = yes ; then |
| 110 | AC_DEFINE(HAVE_BSD_BPF, 1, |
| 111 | [Define if you have the Berkeley Packet Filter.]) |
| 112 | fi]) |
| 113 | |
| 114 | dnl |
| 115 | dnl Check for the Linux /proc filesystem |
| 116 | dnl |
| 117 | dnl usage: AC_DNET_LINUX_PROCFS |
| 118 | dnl results: HAVE_LINUX_PROCFS |
| 119 | dnl |
| 120 | AC_DEFUN([AC_DNET_LINUX_PROCFS], |
| 121 | [AC_MSG_CHECKING(for Linux proc filesystem) |
| 122 | AC_CACHE_VAL(ac_cv_dnet_linux_procfs, |
| 123 | if test "x`cat /proc/sys/kernel/ostype 2>&-`" = "xLinux" ; then |
| 124 | ac_cv_dnet_linux_procfs=yes |
| 125 | else |
| 126 | ac_cv_dnet_linux_procfs=no |
| 127 | fi) |
| 128 | AC_MSG_RESULT($ac_cv_dnet_linux_procfs) |
| 129 | if test $ac_cv_dnet_linux_procfs = yes ; then |
| 130 | AC_DEFINE(HAVE_LINUX_PROCFS, 1, |
| 131 | [Define if you have the Linux /proc filesystem.]) |
| 132 | fi]) |
| 133 | |
| 134 | dnl |
| 135 | dnl Check for Linux PF_PACKET sockets |
| 136 | dnl |
| 137 | dnl usage: AC_DNET_LINUX_PF_PACKET |
| 138 | dnl results: HAVE_LINUX_PF_PACKET |
| 139 | dnl |
| 140 | AC_DEFUN([AC_DNET_LINUX_PF_PACKET], |
| 141 | [AC_MSG_CHECKING(for Linux PF_PACKET sockets) |
| 142 | AC_CACHE_VAL(ac_cv_dnet_linux_pf_packet, |
| 143 | if test -f /usr/include/netpacket/packet.h ; then |
| 144 | ac_cv_dnet_linux_pf_packet=yes |
| 145 | else |
| 146 | ac_cv_dnet_linux_pf_packet=no |
| 147 | fi) |
| 148 | AC_MSG_RESULT($ac_cv_dnet_linux_pf_packet) |
| 149 | if test $ac_cv_dnet_linux_pf_packet = yes ; then |
| 150 | AC_DEFINE(HAVE_LINUX_PF_PACKET, 1, |
| 151 | [Define if you have Linux PF_PACKET sockets.]) |
| 152 | fi]) |
| 153 | |
| 154 | dnl |
| 155 | dnl Check for SNMP MIB2 STREAMS (Solaris only?) |
| 156 | dnl |
| 157 | dnl usage: AC_DNET_STREAMS_MIB2 |
| 158 | dnl results: HAVE_STREAMS_MIB2 |
| 159 | dnl |
| 160 | AC_DEFUN([AC_DNET_STREAMS_MIB2], |
| 161 | [AC_MSG_CHECKING(for SNMP MIB2 STREAMS) |
| 162 | AC_CACHE_VAL(ac_cv_dnet_streams_mib2, |
| 163 | if test -f /usr/include/inet/mib2.h -a -c /dev/ip ; then |
| 164 | ac_cv_dnet_streams_mib2=yes |
| 165 | else |
| 166 | ac_cv_dnet_streams_mib2=no |
| 167 | fi) |
| 168 | AC_MSG_RESULT($ac_cv_dnet_streams_mib2) |
| 169 | if test $ac_cv_dnet_streams_mib2 = yes ; then |
| 170 | AC_DEFINE(HAVE_STREAMS_MIB2, 1, |
| 171 | [Define if you have SNMP MIB2 STREAMS.]) |
| 172 | fi]) |
| 173 | |
| 174 | dnl |
| 175 | dnl Check for route(7) STREAMS (UnixWare only?) |
| 176 | dnl |
| 177 | dnl usage: AC_DNET_STREAMS_ROUTE |
| 178 | dnl results: HAVE_STREAMS_ROUTE |
| 179 | dnl |
| 180 | AC_DEFUN([AC_DNET_STREAMS_ROUTE], |
| 181 | [AC_MSG_CHECKING(for route(7) STREAMS) |
| 182 | AC_CACHE_VAL(ac_cv_dnet_streams_route, |
| 183 | if grep RTSTR_SEND /usr/include/net/route.h >/dev/null 2>&1 ; then |
| 184 | ac_cv_dnet_streams_route=yes |
| 185 | else |
| 186 | ac_cv_dnet_streams_route=no |
| 187 | fi) |
| 188 | AC_MSG_RESULT($ac_cv_dnet_streams_route) |
| 189 | if test $ac_cv_dnet_streams_route = yes ; then |
| 190 | AC_DEFINE(HAVE_STREAMS_ROUTE, 1, |
| 191 | [Define if you have route(7) STREAMS.]) |
| 192 | fi]) |
| 193 | |
| 194 | dnl |
| 195 | dnl Check for arp(7) ioctls |
| 196 | dnl |
| 197 | dnl usage: AC_DNET_IOCTL_ARP |
| 198 | dnl results: HAVE_IOCTL_ARP |
| 199 | dnl |
| 200 | AC_DEFUN([AC_DNET_IOCTL_ARP], |
| 201 | [AC_MSG_CHECKING(for arp(7) ioctls) |
| 202 | AC_CACHE_VAL(ac_cv_dnet_ioctl_arp, |
| 203 | AC_EGREP_CPP(werd, [ |
| 204 | # include <sys/types.h> |
| 205 | # define BSD_COMP |
| 206 | # include <sys/ioctl.h> |
| 207 | # ifdef SIOCGARP |
| 208 | werd |
| 209 | # endif], |
| 210 | ac_cv_dnet_ioctl_arp=yes, |
| 211 | ac_cv_dnet_ioctl_arp=no)) |
| 212 | case "$host_os" in |
| 213 | irix*) |
| 214 | ac_cv_dnet_ioctl_arp=no ;; |
| 215 | esac |
| 216 | AC_MSG_RESULT($ac_cv_dnet_ioctl_arp) |
| 217 | if test $ac_cv_dnet_ioctl_arp = yes ; then |
| 218 | AC_DEFINE(HAVE_IOCTL_ARP, 1, |
| 219 | [Define if you have arp(7) ioctls.]) |
| 220 | fi]) |
| 221 | |
| 222 | dnl |
| 223 | dnl Check for raw IP sockets ip_{len,off} host byte ordering |
| 224 | dnl |
| 225 | dnl usage: AC_DNET_RAWIP_HOST_OFFLEN |
| 226 | dnl results: HAVE_RAWIP_HOST_OFFLEN |
| 227 | dnl |
| 228 | AC_DEFUN([AC_DNET_RAWIP_HOST_OFFLEN], |
| 229 | [AC_MSG_CHECKING([for raw IP sockets ip_{len,off} host byte ordering]) |
| 230 | AC_CACHE_VAL(ac_cv_dnet_rawip_host_offlen, [ |
| 231 | case "$host_os" in |
| 232 | *openbsd*) |
| 233 | ac_cv_dnet_rawip_host_offlen=no ;; |
| 234 | *bsd*|*osf*|*unixware*) |
| 235 | ac_cv_dnet_rawip_host_offlen=yes ;; |
| 236 | *) |
| 237 | ac_cv_dnet_rawip_host_offlen=no ;; |
| 238 | esac]) |
| 239 | AC_MSG_RESULT($ac_cv_dnet_rawip_host_offlen) |
| 240 | if test $ac_cv_dnet_rawip_host_offlen = yes ; then |
| 241 | AC_DEFINE(HAVE_RAWIP_HOST_OFFLEN, 1, |
| 242 | [Define if raw IP sockets require host byte ordering for ip_off, ip_len.]) |
| 243 | fi]) |
| 244 | |
| 245 | dnl |
| 246 | dnl Check for cooked raw IP sockets |
| 247 | dnl |
| 248 | dnl usage: AC_DNET_RAWIP_COOKED |
| 249 | dnl results: HAVE_RAWIP_COOKED |
| 250 | dnl |
| 251 | AC_DEFUN([AC_DNET_RAWIP_COOKED], |
| 252 | [AC_MSG_CHECKING(for cooked raw IP sockets) |
| 253 | AC_CACHE_VAL(ac_cv_dnet_rawip_cooked, [ |
| 254 | case "$host_os" in |
| 255 | solaris*|irix*) |
| 256 | ac_cv_dnet_rawip_cooked=yes ;; |
| 257 | *) |
| 258 | ac_cv_dnet_rawip_cooked=no ;; |
| 259 | esac]) |
| 260 | AC_MSG_RESULT($ac_cv_dnet_rawip_cooked) |
| 261 | if test $ac_cv_dnet_rawip_cooked = yes ; then |
| 262 | AC_DEFINE(HAVE_RAWIP_COOKED, 1, |
| 263 | [Define if you have cooked raw IP sockets.]) |
| 264 | fi]) |
| 265 | |
| 266 | dnl |
| 267 | dnl AC_LBL_LIBRARY_NET |
| 268 | dnl |
| 269 | dnl This test is for network applications that need socket() and |
| 270 | dnl gethostbyname() -ish functions. Under Solaris, those applications |
| 271 | dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link |
| 272 | dnl with "-lnsl" but should *not* link with "-lsocket" because |
| 273 | dnl libsocket.a breaks a number of things (for instance: |
| 274 | dnl gethostbyname() under IRIX 5.2, and snoop sockets under most |
| 275 | dnl versions of IRIX). |
| 276 | dnl |
| 277 | dnl Unfortunately, many application developers are not aware of this, |
| 278 | dnl and mistakenly write tests that cause -lsocket to be used under |
| 279 | dnl IRIX. It is also easy to write tests that cause -lnsl to be used |
| 280 | dnl under operating systems where neither are necessary (or useful), |
| 281 | dnl such as SunOS 4.1.4, which uses -lnsl for TLI. |
| 282 | dnl |
| 283 | dnl This test exists so that every application developer does not test |
| 284 | dnl this in a different, and subtly broken fashion. |
| 285 | |
| 286 | dnl It has been argued that this test should be broken up into two |
| 287 | dnl seperate tests, one for the resolver libraries, and one for the |
| 288 | dnl libraries necessary for using Sockets API. Unfortunately, the two |
| 289 | dnl are carefully intertwined and allowing the autoconf user to use |
| 290 | dnl them independantly potentially results in unfortunate ordering |
| 291 | dnl dependancies -- as such, such component macros would have to |
| 292 | dnl carefully use indirection and be aware if the other components were |
| 293 | dnl executed. Since other autoconf macros do not go to this trouble, |
| 294 | dnl and almost no applications use sockets without the resolver, this |
| 295 | dnl complexity has not been implemented. |
| 296 | dnl |
| 297 | dnl The check for libresolv is in case you are attempting to link |
| 298 | dnl statically and happen to have a libresolv.a lying around (and no |
| 299 | dnl libnsl.a). |
| 300 | dnl |
| 301 | AC_DEFUN([AC_LBL_LIBRARY_NET], [ |
| 302 | # Most operating systems have gethostbyname() in the default searched |
| 303 | # libraries (i.e. libc): |
| 304 | AC_CHECK_FUNC(gethostbyname, , |
| 305 | # Some OSes (eg. Solaris) place it in libnsl: |
| 306 | AC_CHECK_LIB(nsl, gethostbyname, , |
| 307 | # Some strange OSes (SINIX) have it in libsocket: |
| 308 | AC_CHECK_LIB(socket, gethostbyname, , |
| 309 | # Unfortunately libsocket sometimes depends on libnsl. |
| 310 | # AC_CHECK_LIB's API is essentially broken so the |
| 311 | # following ugliness is necessary: |
| 312 | AC_CHECK_LIB(socket, gethostbyname, |
| 313 | LIBS="-lsocket -lnsl $LIBS", |
| 314 | AC_CHECK_LIB(resolv, gethostbyname), |
| 315 | -lnsl)))) |
| 316 | AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, , |
| 317 | AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , |
| 318 | -lnsl))) |
| 319 | # DLPI needs putmsg under HPUX so test for -lstr while we're at it |
| 320 | AC_CHECK_LIB(str, putmsg) |
| 321 | ]) |
| 322 | |