]> The Tcpdump Group git mirrors - tcpdump/blob - configure.ac
autoconf: Use AS_HELP_STRING macro instead of AC_HELP_STRING
[tcpdump] / configure.ac
1 dnl Copyright (c) 1994, 1995, 1996, 1997
2 dnl The Regents of the University of California. All rights reserved.
3 dnl
4 dnl Process this file with autoconf to produce a configure script.
5 dnl
6
7 #
8 # See
9 #
10 # https://ftp.gnu.org/gnu/config/README
11 #
12 # for the URLs to use to fetch new versions of config.guess and
13 # config.sub.
14 #
15
16 AC_PREREQ(2.64)
17 AC_INIT(tcpdump, m4_esyscmd_s([cat VERSION]))
18 AC_CONFIG_SRCDIR(tcpdump.c)
19
20 AC_CANONICAL_HOST
21
22 AC_LBL_C_INIT_BEFORE_CC(V_INCLS)
23 #
24 # Try to enable as many C99 features as we can.
25 # At minimum, we want C++/C99-style // comments.
26 #
27 AC_PROG_CC_C99
28 if test "$ac_cv_prog_cc_c99" = "no"; then
29 AC_MSG_WARN([The C compiler does not support C99; there may be compiler errors])
30 fi
31 AC_LBL_C_INIT(V_CCOPT, V_INCLS)
32 AC_LBL_C_INLINE
33
34 AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h)
35 AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
36 #include <sys/socket.h>
37 #include <net/if.h>])
38 if test "$ac_cv_header_net_pfvar_h" = yes; then
39 AC_CHECK_HEADERS(net/if_pflog.h, , , [#include <sys/types.h>
40 #include <sys/socket.h>
41 #include <net/if.h>
42 #include <net/pfvar.h>])
43 if test "$ac_cv_header_net_if_pflog_h" = yes; then
44 LOCALSRC="print-pflog.c $LOCALSRC"
45 fi
46 fi
47
48 case "$host_os" in
49
50 darwin*)
51 AC_ARG_ENABLE(universal,
52 AS_HELP_STRING([--disable-universal],[don't build universal on macOS]))
53 if test "$enable_universal" != "no"; then
54 case "$host_os" in
55
56 darwin9.*)
57 #
58 # Leopard. Build for x86 and 32-bit PowerPC, with
59 # x86 first. (That's what Apple does.)
60 #
61 V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
62 LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
63 ;;
64
65 darwin10.*)
66 #
67 # Snow Leopard. Build for x86-64 and x86, with
68 # x86-64 first. (That's what Apple does.)
69 #
70 V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
71 LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
72 ;;
73 esac
74 fi
75 ;;
76 esac
77
78
79 AC_ARG_WITH([smi],
80 [AS_HELP_STRING([--with-smi],
81 [link with libsmi (allows to load MIBs on the fly to decode SNMP packets) [default=yes, if available]])],
82 [],
83 [with_smi=yes])
84
85 if test "x$with_smi" != "xno" ; then
86 AC_CHECK_HEADER(smi.h,
87 [
88 #
89 # OK, we found smi.h. Do we have libsmi with smiInit?
90 #
91 AC_CHECK_LIB(smi, smiInit,
92 [
93 #
94 # OK, we have libsmi with smiInit. Can we use it?
95 #
96 AC_MSG_CHECKING([whether to enable libsmi])
97 savedlibs="$LIBS"
98 LIBS="-lsmi $LIBS"
99 AC_TRY_RUN(
100 [
101 /* libsmi available check */
102 #include <smi.h>
103 main()
104 {
105 int current, revision, age, n;
106 const int required = 2;
107 if (smiInit(""))
108 exit(1);
109 if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
110 exit(2);
111 n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
112 if (n != 3)
113 exit(3);
114 if (required < current - age || required > current)
115 exit(4);
116 exit(0);
117 }
118 ],
119 [
120 AC_MSG_RESULT(yes)
121 AC_DEFINE(USE_LIBSMI, 1,
122 [Define if you enable support for libsmi])
123 ],
124 [
125 dnl autoconf documentation says that
126 dnl $? contains the exit value.
127 dnl reality is that it does not.
128 dnl We leave this in just in case
129 dnl autoconf ever comes back to
130 dnl match the documentation.
131 case $? in
132 1) AC_MSG_RESULT(no - smiInit failed) ;;
133 2) AC_MSG_RESULT(no - header/library version mismatch) ;;
134 3) AC_MSG_RESULT(no - can't determine library version) ;;
135 4) AC_MSG_RESULT(no - too old) ;;
136 *) AC_MSG_RESULT(no) ;;
137 esac
138 LIBS="$savedlibs"
139 ],
140 [
141 AC_MSG_RESULT(not when cross-compiling)
142 LIBS="$savedlibs"
143 ]
144 )
145 ])
146 ])
147 fi
148
149 AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
150 AC_ARG_ENABLE([smb],
151 [AS_HELP_STRING([--enable-smb],
152 [enable possibly-buggy SMB printer [default=no]])],
153 [],
154 [enableval=no])
155 case "$enableval" in
156 yes) AC_MSG_RESULT(yes)
157 AC_DEFINE(ENABLE_SMB, 1,
158 [define if you want to build the possibly-buggy SMB printer])
159 LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
160 ;;
161 *) AC_MSG_RESULT(no)
162 ;;
163 esac
164
165 AC_ARG_WITH(user, [ --with-user=USERNAME drop privileges by default to USERNAME])
166 AC_MSG_CHECKING([whether to drop root privileges by default])
167 if test ! -z "$with_user" ; then
168 AC_DEFINE_UNQUOTED(WITH_USER, "$withval",
169 [define if should drop privileges by default])
170 AC_MSG_RESULT(to \"$withval\")
171 else
172 AC_MSG_RESULT(no)
173 fi
174
175 AC_ARG_WITH(chroot, [ --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY])
176 AC_MSG_CHECKING([whether to chroot])
177 if test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then
178 AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval",
179 [define if should chroot when dropping privileges])
180 AC_MSG_RESULT(to \"$withval\")
181 else
182 AC_MSG_RESULT(no)
183 fi
184
185 AC_ARG_WITH(sandbox-capsicum,
186 AS_HELP_STRING([--with-sandbox-capsicum],
187 [use Capsicum security functions @<:@default=yes, if available@:>@]))
188 #
189 # Check whether various functions are available. If any are, set
190 # ac_lbl_capsicum_function_seen to yes; if any are not, set
191 # ac_lbl_capsicum_function_not_seen to yes.
192 #
193 # We don't check cap_rights_init(), as it's a macro, wrapping another
194 # function, in at least some versions of FreeBSD, and AC_CHECK_FUNCS()
195 # doesn't handle that.
196 #
197 # All of the ones we check for must be available in order to enable
198 # capsicum sandboxing.
199 #
200 # XXX - do we need to check for all of them, or are there some that, if
201 # present, imply others are present?
202 #
203 if test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; then
204 #
205 # First, make sure we have the required header.
206 #
207 AC_CHECK_HEADER(sys/capsicum.h,
208 [
209 #
210 # We do; now make sure we have the required functions.
211 #
212 AC_CHECK_FUNCS(cap_enter cap_rights_limit cap_ioctls_limit openat,
213 ac_lbl_capsicum_function_seen=yes,
214 ac_lbl_capsicum_function_not_seen=yes)
215 ])
216 AC_CHECK_LIB(casper, cap_init, LIBS="$LIBS -lcasper")
217 AC_CHECK_LIB(cap_dns, cap_gethostbyaddr, LIBS="$LIBS -lcap_dns")
218 fi
219 AC_MSG_CHECKING([whether to sandbox using capsicum])
220 if test "x$ac_lbl_capsicum_function_seen" = "xyes" -a "x$ac_lbl_capsicum_function_not_seen" != "xyes"; then
221 AC_DEFINE(HAVE_CAPSICUM, 1, [capsicum support available])
222 AC_MSG_RESULT(yes)
223 else
224 AC_MSG_RESULT(no)
225 fi
226 AC_MSG_CHECKING([whether to sandbox using Casper library])
227 if test "x$ac_cv_lib_casper_cap_init" = "xyes" -a "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = "xyes"; then
228 AC_DEFINE(HAVE_CASPER, 1, [Casper support available])
229 AC_MSG_RESULT(yes)
230 else
231 AC_MSG_RESULT(no)
232 fi
233
234 #
235 # We must check this before checking whether to check the OS's IPv6,
236 # support because, on some platforms (such as SunOS 5.x), the test
237 # program requires the extra networking libraries.
238 #
239 AC_LBL_LIBRARY_NET
240
241 #
242 # Check whether AF_INET6 and struct in6_addr are defined.
243 # If they aren't both defined, we don't have sufficient OS
244 # support for IPv6, so we don't look for IPv6 support libraries,
245 # and we define AF_INET6 and struct in6_addr ourselves.
246 #
247 AC_MSG_CHECKING([whether the operating system supports IPv6])
248 AC_COMPILE_IFELSE(
249 [
250 AC_LANG_SOURCE(
251 [[
252 /* AF_INET6 available check */
253 #include <sys/types.h>
254 #ifdef _WIN32
255 #include <ws2tcpip.h>
256 #else
257 #include <sys/socket.h>
258 #include <netinet/in.h>
259 #endif
260 #ifdef AF_INET6
261 void
262 foo(struct in6_addr *addr)
263 {
264 memset(addr, 0, sizeof (struct in6_addr));
265 }
266 #else
267 #error "AF_INET6 not defined"
268 #endif
269 ]])
270 ],
271 [
272 AC_MSG_RESULT(yes)
273 AC_DEFINE(HAVE_OS_IPV6_SUPPORT, 1,
274 [define if the OS provides AF_INET6 and struct in6_addr])
275 ipv6=yes
276 ],
277 [
278 AC_MSG_RESULT(no)
279 ipv6=no
280 ]
281 )
282
283 ipv6type=unknown
284 ipv6lib=none
285 ipv6trylibc=no
286
287 if test "$ipv6" = "yes"; then
288 AC_MSG_CHECKING([ipv6 stack type])
289 for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
290 case $i in
291 inria)
292 dnl http://www.kame.net/
293 AC_EGREP_CPP(yes,
294 [#include <netinet/in.h>
295 #ifdef IPV6_INRIA_VERSION
296 yes
297 #endif],
298 [ipv6type=$i])
299 ;;
300 kame)
301 dnl http://www.kame.net/
302 AC_EGREP_CPP(yes,
303 [#include <netinet/in.h>
304 #ifdef __KAME__
305 yes
306 #endif],
307 [ipv6type=$i;
308 ipv6lib=inet6;
309 ipv6libdir=/usr/local/v6/lib;
310 ipv6trylibc=yes])
311 ;;
312 linux-glibc)
313 dnl http://www.v6.linux.or.jp/
314 AC_EGREP_CPP(yes,
315 [#include <features.h>
316 #if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
317 yes
318 #endif],
319 [ipv6type=$i])
320 ;;
321 linux-libinet6)
322 dnl http://www.v6.linux.or.jp/
323 dnl
324 dnl This also matches Solaris 8 and Tru64 UNIX 5.1,
325 dnl and possibly other versions of those OSes
326 dnl
327 if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
328 ipv6type=$i
329 ipv6lib=inet6
330 ipv6libdir=/usr/inet6/lib
331 ipv6trylibc=yes;
332 CFLAGS="-I/usr/inet6/include $CFLAGS"
333 fi
334 ;;
335 toshiba)
336 AC_EGREP_CPP(yes,
337 [#include <sys/param.h>
338 #ifdef _TOSHIBA_INET6
339 yes
340 #endif],
341 [ipv6type=$i;
342 ipv6lib=inet6;
343 ipv6libdir=/usr/local/v6/lib])
344 ;;
345 v6d)
346 AC_EGREP_CPP(yes,
347 [#include </usr/local/v6/include/sys/v6config.h>
348 #ifdef __V6D__
349 yes
350 #endif],
351 [ipv6type=$i;
352 ipv6lib=v6;
353 ipv6libdir=/usr/local/v6/lib;
354 CFLAGS="-I/usr/local/v6/include $CFLAGS"])
355 ;;
356 zeta)
357 AC_EGREP_CPP(yes,
358 [#include <sys/param.h>
359 #ifdef _ZETA_MINAMI_INET6
360 yes
361 #endif],
362 [ipv6type=$i;
363 ipv6lib=inet6;
364 ipv6libdir=/usr/local/v6/lib])
365 ;;
366 esac
367 if test "$ipv6type" != "unknown"; then
368 break
369 fi
370 done
371 AC_MSG_RESULT($ipv6type)
372 fi
373
374 if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
375 if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
376 LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
377 echo "You have $ipv6lib library, using it"
378 else
379 if test "$ipv6trylibc" = "yes"; then
380 echo "You do not have $ipv6lib library, using libc"
381 else
382 echo 'Fatal: no $ipv6lib library found. cannot continue.'
383 echo "You need to fetch lib$ipv6lib.a from appropriate"
384 echo 'ipv6 kit and compile beforehand.'
385 exit 1
386 fi
387 fi
388 fi
389
390 AC_REPLACE_FUNCS(strlcat strlcpy strdup strsep getservent getopt_long)
391 AC_CHECK_FUNCS(fork vfork strftime)
392 AC_CHECK_FUNCS(setlinebuf)
393
394 #
395 # Make sure we have vsnprintf() and snprintf(); we require them.
396 #
397 AC_CHECK_FUNC(vsnprintf,,
398 AC_MSG_ERROR([vsnprintf() is required but wasn't found]))
399 AC_CHECK_FUNC(snprintf,,
400 AC_MSG_ERROR([snprintf() is required but wasn't found]))
401
402 #
403 # Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that
404 # depend on %zu.
405 #
406 AC_MSG_CHECKING([whether printf(3) supports the z length modifier])
407 AC_RUN_IFELSE(
408 [
409 AC_LANG_SOURCE([[
410 #include <stdio.h>
411 #include <string.h>
412
413 int main()
414 {
415 char buf[100];
416 snprintf(buf, sizeof(buf), "%zu", sizeof(buf));
417 return strncmp(buf, "100", sizeof(buf)) ? 1 : 0;
418 }
419 ]])
420 ],
421 [
422 AC_MSG_RESULT(yes)
423 ],
424 [
425 AC_MSG_RESULT(no)
426 AC_DEFINE(HAVE_NO_PRINTF_Z, 1,
427 [Define to 1 if printf(3) does not support the z length modifier.])
428 ],
429 [
430 AC_MSG_RESULT(not while cross-compiling)
431 ]
432 )
433
434 AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
435
436 dnl Some platforms may need -lnsl for getrpcbynumber.
437 AC_SEARCH_LIBS(getrpcbynumber, nsl,
438 AC_DEFINE(HAVE_GETRPCBYNUMBER, 1, [define if you have getrpcbynumber()]))
439
440 AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
441
442 #
443 # Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
444 # libraries (e.g., "-lsocket -lnsl" on Solaris).
445 #
446 # You are in a twisty little maze of UN*Xes, all different.
447 # Some might not have ether_ntohost().
448 # Some might have it and declare it in <net/ethernet.h>.
449 # Some might have it and declare it in <netinet/ether.h>
450 # Some might have it and declare it in <sys/ethernet.h>.
451 # Some might have it and declare it in <arpa/inet.h>.
452 # Some might have it and declare it in <netinet/if_ether.h>.
453 # Some might have it and not declare it in any header file.
454 #
455 # Before you is a C compiler.
456 #
457 AC_CHECK_FUNCS(ether_ntohost, [
458 AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
459 AC_TRY_RUN([
460 #include <netdb.h>
461 #include <sys/types.h>
462 #include <sys/param.h>
463 #include <sys/socket.h>
464
465 int
466 main(int argc, char **argv)
467 {
468 u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
469 char name[MAXHOSTNAMELEN];
470
471 ether_ntohost(name, (struct ether_addr *)ea);
472 exit(0);
473 }
474 ], [ac_cv_buggy_ether_ntohost=no],
475 [ac_cv_buggy_ether_ntohost=yes],
476 [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
477 if test "$ac_cv_buggy_ether_ntohost" = "no"; then
478 AC_DEFINE(USE_ETHER_NTOHOST, 1,
479 [define if you have ether_ntohost() and it works])
480 fi
481 ])
482 if test "$ac_cv_func_ether_ntohost" = yes -a \
483 "$ac_cv_buggy_ether_ntohost" = "no"; then
484 #
485 # OK, we have ether_ntohost(). Is it declared in <net/ethernet.h>?
486 #
487 # This test fails if we don't have <net/ethernet.h> or if we do
488 # but it doesn't declare ether_ntohost().
489 #
490 AC_CHECK_DECL(ether_ntohost,
491 [
492 AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
493 [Define to 1 if net/ethernet.h declares `ether_ntohost'])
494 ],,
495 [
496 #include <net/ethernet.h>
497 ])
498 #
499 # Did that succeed?
500 #
501 if test "$ac_cv_have_decl_ether_ntohost" != yes; then
502 #
503 # No, how about <netinet/ether.h>, as on Linux?
504 #
505 # This test fails if we don't have <netinet/ether.h>
506 # or if we do but it doesn't declare ether_ntohost().
507 #
508 # Unset ac_cv_have_decl_ether_ntohost so we don't
509 # treat the previous failure as a cached value and
510 # suppress the next test.
511 #
512 unset ac_cv_have_decl_ether_ntohost
513 AC_CHECK_DECL(ether_ntohost,
514 [
515 AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,,
516 [Define to 1 if netinet/ether.h declares `ether_ntohost'])
517 ],,
518 [
519 #include <netinet/ether.h>
520 ])
521 fi
522 #
523 # Did that succeed?
524 #
525 if test "$ac_cv_have_decl_ether_ntohost" != yes; then
526 #
527 # No, how about <sys/ethernet.h>, as on Solaris 10
528 # and later?
529 #
530 # This test fails if we don't have <sys/ethernet.h>
531 # or if we do but it doesn't declare ether_ntohost().
532 #
533 # Unset ac_cv_have_decl_ether_ntohost so we don't
534 # treat the previous failure as a cached value and
535 # suppress the next test.
536 #
537 unset ac_cv_have_decl_ether_ntohost
538 AC_CHECK_DECL(ether_ntohost,
539 [
540 AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
541 [Define to 1 if sys/ethernet.h declares `ether_ntohost'])
542 ],,
543 [
544 #include <sys/ethernet.h>
545 ])
546 fi
547 #
548 # Did that succeed?
549 #
550 if test "$ac_cv_have_decl_ether_ntohost" != yes; then
551 #
552 # No, how about <arpa/inet.h>, as in AIX?
553 #
554 # This test fails if we don't have <arpa/inet.h>
555 # (if we have ether_ntohost(), we should have
556 # networking, and if we have networking, we should
557 # have <arpa/inet.h>) or if we do but it doesn't
558 # declare ether_ntohost().
559 #
560 # Unset ac_cv_have_decl_ether_ntohost so we don't
561 # treat the previous failure as a cached value and
562 # suppress the next test.
563 #
564 unset ac_cv_have_decl_ether_ntohost
565 AC_CHECK_DECL(ether_ntohost,
566 [
567 AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_NTOHOST,,
568 [Define to 1 if arpa/inet.h declares `ether_ntohost'])
569 ],,
570 [
571 #include <arpa/inet.h>
572 ])
573 fi
574 #
575 # Did that succeed?
576 #
577 if test "$ac_cv_have_decl_ether_ntohost" != yes; then
578 #
579 # No, how about <netinet/if_ether.h>?
580 # On some platforms, it requires <net/if.h> and
581 # <netinet/in.h>, and we always include it with
582 # both of them, so test it with both of them.
583 #
584 # This test fails if we don't have <netinet/if_ether.h>
585 # and the headers we include before it, or if we do but
586 # <netinet/if_ether.h> doesn't declare ether_hostton().
587 #
588 # Unset ac_cv_have_decl_ether_ntohost so we don't
589 # treat the previous failure as a cached value and
590 # suppress the next test.
591 #
592 unset ac_cv_have_decl_ether_ntohost
593 AC_CHECK_DECL(ether_ntohost,
594 [
595 AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST,,
596 [Define to 1 if netinet/if_ether.h declares `ether_ntohost'])
597 ],,
598 [
599 #include <sys/types.h>
600 #include <sys/socket.h>
601 #include <net/if.h>
602 #include <netinet/in.h>
603 #include <netinet/if_ether.h>
604 ])
605 fi
606 #
607 # After all that, is ether_ntohost() declared?
608 #
609 if test "$ac_cv_have_decl_ether_ntohost" = yes; then
610 #
611 # Yes.
612 #
613 AC_DEFINE(HAVE_DECL_ETHER_NTOHOST, 1,
614 [Define to 1 if you have the declaration of `ether_ntohost'])
615 else
616 #
617 # No, we'll have to declare it ourselves.
618 # Do we have "struct ether_addr" if we include
619 # <netinet/if_ether.h>?
620 #
621 AC_CHECK_TYPES(struct ether_addr,,,
622 [
623 #include <sys/types.h>
624 #include <sys/socket.h>
625 #include <net/if.h>
626 #include <netinet/in.h>
627 #include <netinet/if_ether.h>
628 ])
629 fi
630 fi
631
632 dnl
633 dnl Check for "pcap_list_datalinks()" and use a substitute version if
634 dnl it's not present. If it is present, check for "pcap_free_datalinks()";
635 dnl if it's not present, we don't replace it for now. (We could do so
636 dnl on UN*X, but not on Windows, where hilarity ensues if a program
637 dnl built with one version of the MSVC support library tries to free
638 dnl something allocated by a library built with another version of
639 dnl the MSVC support library.)
640 dnl
641 AC_CHECK_FUNC(pcap_list_datalinks,
642 [
643 AC_DEFINE(HAVE_PCAP_LIST_DATALINKS, 1,
644 [define if libpcap has pcap_list_datalinks()])
645 AC_CHECK_FUNCS(pcap_free_datalinks)
646 ],
647 [
648 AC_LIBOBJ(datalinks)
649 ])
650
651 dnl
652 dnl Check for "pcap_datalink_name_to_val()", and use a substitute
653 dnl version if it's not present. If it is present, check for
654 dnl "pcap_datalink_val_to_description()", and if we don't have it,
655 dnl use a substitute version.
656 dnl
657 AC_CHECK_FUNC(pcap_datalink_name_to_val,
658 [
659 AC_DEFINE(HAVE_PCAP_DATALINK_NAME_TO_VAL, 1,
660 [define if libpcap has pcap_datalink_name_to_val()])
661 AC_CHECK_FUNC(pcap_datalink_val_to_description,
662 AC_DEFINE(HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION, 1,
663 [define if libpcap has pcap_datalink_val_to_description()]),
664 [
665 AC_LIBOBJ(dlnames)
666 ])
667 ],
668 [
669 AC_LIBOBJ(dlnames)
670 ])
671
672 dnl
673 dnl Check for "pcap_set_datalink()"; you can't substitute for it if
674 dnl it's absent (it has hooks into libpcap), so just define the
675 dnl HAVE_ value if it's there.
676 dnl
677 AC_CHECK_FUNCS(pcap_set_datalink)
678
679 dnl
680 dnl Check for "pcap_breakloop()"; you can't substitute for it if
681 dnl it's absent (it has hooks into the live capture routines),
682 dnl so just define the HAVE_ value if it's there.
683 dnl
684 AC_CHECK_FUNCS(pcap_breakloop)
685
686 #
687 # Do we have the new open API? Check for pcap_create, and assume that,
688 # if we do, we also have pcap_activate() and the other new routines
689 # introduced in libpcap 1.0.0.
690 #
691 AC_CHECK_FUNCS(pcap_create)
692 if test $ac_cv_func_pcap_create = "yes" ; then
693 #
694 # OK, do we have pcap_set_tstamp_type? If so, assume we have
695 # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
696 #
697 AC_CHECK_FUNCS(pcap_set_tstamp_type)
698 #
699 # And do we have pcap_set_tstamp_precision? If so, we assume
700 # we also have pcap_open_offline_with_tstamp_precision.
701 #
702 AC_CHECK_FUNCS(pcap_set_tstamp_precision)
703 fi
704
705 #
706 # Check for a miscellaneous collection of functions which we use
707 # if we have them.
708 #
709 AC_CHECK_FUNCS(pcap_findalldevs)
710 if test $ac_cv_func_pcap_findalldevs = "yes" ; then
711 dnl Check for libpcap having pcap_findalldevs() but the pcap.h header
712 dnl not having pcap_if_t; some versions of Mac OS X shipped with pcap.h
713 dnl from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but
714 dnl pcap.h didn't have pcap_if_t.
715 savedcppflags="$CPPFLAGS"
716 CPPFLAGS="$CPPFLAGS $V_INCLS"
717 AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
718 CPPFLAGS="$savedcppflags"
719 fi
720 AC_CHECK_FUNCS(pcap_dump_flush pcap_lib_version)
721 if test $ac_cv_func_pcap_lib_version = "no" ; then
722 AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
723 AC_TRY_LINK([],
724 [
725 extern char pcap_version[];
726
727 return (int)pcap_version;
728 ],
729 ac_lbl_cv_pcap_version_defined=yes,
730 ac_lbl_cv_pcap_version_defined=no)
731 if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
732 AC_MSG_RESULT(yes)
733 AC_DEFINE(HAVE_PCAP_VERSION, 1, [define if libpcap has pcap_version])
734 else
735 AC_MSG_RESULT(no)
736 fi
737 fi
738 AC_CHECK_FUNCS(pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64)
739 AC_CHECK_FUNCS(pcap_open pcap_findalldevs_ex)
740 AC_REPLACE_FUNCS(pcap_dump_ftell)
741
742 #
743 # Check for special debugging functions
744 #
745 AC_CHECK_FUNCS(pcap_set_parser_debug)
746 if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then
747 #
748 # OK, we don't have pcap_set_parser_debug() to set the libpcap
749 # filter expression parser debug flag; can we directly set the
750 # flag?
751 AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
752 AC_TRY_LINK([],
753 [
754 extern int pcap_debug;
755
756 return pcap_debug;
757 ],
758 ac_lbl_cv_pcap_debug_defined=yes,
759 ac_lbl_cv_pcap_debug_defined=no)
760 if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
761 AC_MSG_RESULT(yes)
762 AC_DEFINE(HAVE_PCAP_DEBUG, 1, [define if libpcap has pcap_debug])
763 else
764 AC_MSG_RESULT(no)
765 #
766 # OK, what about "yydebug"?
767 #
768 AC_MSG_CHECKING(whether yydebug is defined by libpcap)
769 AC_TRY_LINK([],
770 [
771 extern int yydebug;
772
773 return yydebug;
774 ],
775 ac_lbl_cv_yydebug_defined=yes,
776 ac_lbl_cv_yydebug_defined=no)
777 if test "$ac_lbl_cv_yydebug_defined" = yes ; then
778 AC_MSG_RESULT(yes)
779 AC_DEFINE(HAVE_YYDEBUG, 1, [define if libpcap has yydebug])
780 else
781 AC_MSG_RESULT(no)
782 fi
783 fi
784 fi
785 AC_CHECK_FUNCS(pcap_set_optimizer_debug)
786 AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
787
788 V_GROUP=0
789 if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
790 V_GROUP=wheel
791 fi
792 #
793 # Assume V7/BSD convention for man pages (file formats in section 5,
794 # miscellaneous info in section 7).
795 #
796 MAN_FILE_FORMATS=5
797 MAN_MISC_INFO=7
798 case "$host_os" in
799
800 aix*)
801 dnl Workaround to enable certain features
802 AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
803 ;;
804
805 hpux*)
806 #
807 # Use System V conventions for man pages.
808 #
809 MAN_FILE_FORMATS=4
810 MAN_MISC_INFO=5
811 ;;
812
813 irix*)
814 V_GROUP=sys
815
816 #
817 # Use System V conventions for man pages.
818 #
819 MAN_FILE_FORMATS=4
820 MAN_MISC_INFO=5
821 ;;
822
823 osf*)
824 V_GROUP=system
825
826 #
827 # Use System V conventions for man pages.
828 #
829 MAN_FILE_FORMATS=4
830 MAN_MISC_INFO=5
831 ;;
832
833 solaris*)
834 V_GROUP=sys
835
836 #
837 # Use System V conventions for man pages.
838 #
839 MAN_FILE_FORMATS=4
840 MAN_MISC_INFO=5
841 ;;
842 esac
843
844 if test -f /dev/bpf0 ; then
845 V_GROUP=bpf
846 fi
847
848 #
849 # Make sure we have a definition for C99's uintptr_t (regardless of
850 # whether the environment is a C99 environment or not).
851 #
852 AC_TYPE_UINTPTR_T
853
854 #
855 # Check whether we have pcap/pcap-inttypes.h.
856 # If we do, we use that to get the C99 types defined.
857 #
858 savedcppflags="$CPPFLAGS"
859 CPPFLAGS="$CPPFLAGS $V_INCLS"
860 AC_CHECK_HEADERS(pcap/pcap-inttypes.h)
861 CPPFLAGS="$savedcppflags"
862
863 #
864 # Define the old BSD specified-width types in terms of the C99 types;
865 # we may need them with libpcap include files.
866 #
867 AC_CHECK_TYPE([u_int8_t], ,
868 [AC_DEFINE([u_int8_t], [uint8_t],
869 [Define to `uint8_t' if u_int8_t not defined.])],
870 [AC_INCLUDES_DEFAULT
871 #include <sys/types.h>
872 ])
873 AC_CHECK_TYPE([u_int16_t], ,
874 [AC_DEFINE([u_int16_t], [uint16_t],
875 [Define to `uint16_t' if u_int16_t not defined.])],
876 [AC_INCLUDES_DEFAULT
877 #include <sys/types.h>
878 ])
879 AC_CHECK_TYPE([u_int32_t], ,
880 [AC_DEFINE([u_int32_t], [uint32_t],
881 [Define to `uint32_t' if u_int32_t not defined.])],
882 [AC_INCLUDES_DEFAULT
883 #include <sys/types.h>
884 ])
885 AC_CHECK_TYPE([u_int64_t], ,
886 [AC_DEFINE([u_int64_t], [uint64_t],
887 [Define to `uint64_t' if u_int64_t not defined.])],
888 [AC_INCLUDES_DEFAULT
889 #include <sys/types.h>
890 ])
891
892 AC_PROG_RANLIB
893 AC_CHECK_TOOL([AR], [ar])
894
895 AC_LBL_DEVEL(V_CCOPT)
896
897 # Check for OpenSSL/libressl libcrypto
898 AC_MSG_CHECKING(whether to use OpenSSL/libressl libcrypto)
899 # Specify location for both includes and libraries.
900 want_libcrypto=ifavailable
901 AC_ARG_WITH(crypto,
902 AS_HELP_STRING([--with-crypto]@<:@=DIR@:>@,
903 [use OpenSSL/libressl libcrypto (located in directory DIR, if specified) @<:@default=yes, if available@:>@]),
904 [
905 if test $withval = no
906 then
907 # User doesn't want to link with libcrypto.
908 want_libcrypto=no
909 AC_MSG_RESULT(no)
910 elif test $withval = yes
911 then
912 # User wants to link with libcrypto but hasn't specified
913 # a directory.
914 want_libcrypto=yes
915 AC_MSG_RESULT(yes)
916 else
917 # User wants to link with libcrypto and has specified
918 # a directory, so use the provided value.
919 want_libcrypto=yes
920 libcrypto_root=$withval
921 AC_MSG_RESULT([yes, using the version installed in $withval])
922
923 #
924 # Put the subdirectories of the libcrypto root directory
925 # at the front of the header and library search path.
926 #
927 CFLAGS="-I$withval/include $CFLAGS"
928 LIBS="-L$withval/lib $LIBS"
929 fi
930 ],[
931 #
932 # Use libcrypto if it's present, otherwise don't; no directory
933 # was specified.
934 #
935 want_libcrypto=ifavailable
936 AC_MSG_RESULT([yes, if available])
937 ])
938 if test "$want_libcrypto" != "no"; then
939 #
940 # Don't check for libcrypto unless we have its headers;
941 # Apple, bless their pointy little heads, apparently ship
942 # libcrypto as a library, but not the header files, in
943 # El Capitan, probably because they don't want you writing
944 # nasty portable code that could run on other UN*Xes, they
945 # want you writing code that uses their Shiny New Crypto
946 # Library and that only runs on macOS.
947 #
948 AC_CHECK_HEADER(openssl/crypto.h,
949 [
950 AC_CHECK_LIB(crypto, DES_cbc_encrypt)
951 if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then
952 AC_CHECK_HEADERS(openssl/evp.h)
953 #
954 # OK, then:
955 #
956 # 1) do we have EVP_CIPHER_CTX_new?
957 # If so, we use it to allocate an
958 # EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be
959 # opaque; otherwise, we allocate it ourselves.
960 #
961 # 2) do we have EVP_DecryptInit_ex()?
962 # If so, we use it, because we need to be
963 # able to make two "initialize the cipher"
964 # calls, one with the cipher and key, and
965 # one with the IV, and, as of OpenSSL 1.1,
966 # You Can't Do That with EVP_DecryptInit(),
967 # because a call to EVP_DecryptInit() will
968 # unconditionally clear the context, and
969 # if you don't supply a cipher, it'll
970 # clear the cipher, rendering the context
971 # unusable and causing a crash.
972 #
973 AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex)
974 fi
975 ])
976 fi
977
978 # Check for libcap-ng
979 AC_MSG_CHECKING(whether to use libcap-ng)
980 # Specify location for both includes and libraries.
981 want_libcap_ng=ifavailable
982 AC_ARG_WITH(cap_ng,
983 AS_HELP_STRING([--with-cap-ng],
984 [use libcap-ng @<:@default=yes, if available@:>@]),
985 [
986 if test $withval = no
987 then
988 want_libcap_ng=no
989 AC_MSG_RESULT(no)
990 elif test $withval = yes
991 then
992 want_libcap_ng=yes
993 AC_MSG_RESULT(yes)
994 fi
995 ],[
996 #
997 # Use libcap-ng if it's present, otherwise don't.
998 #
999 want_libcap_ng=ifavailable
1000 AC_MSG_RESULT([yes, if available])
1001 ])
1002 if test "$want_libcap_ng" != "no"; then
1003 AC_CHECK_LIB(cap-ng, capng_change_id)
1004 AC_CHECK_HEADERS(cap-ng.h)
1005 fi
1006
1007 dnl
1008 dnl set additional include path if necessary
1009 if test "$missing_includes" = "yes"; then
1010 CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
1011 V_INCLS="$V_INCLS -I$srcdir/missing"
1012 fi
1013
1014 AC_SUBST(V_CCOPT)
1015 AC_SUBST(V_DEFS)
1016 AC_SUBST(V_GROUP)
1017 AC_SUBST(V_INCLS)
1018 AC_SUBST(V_PCAPDEP)
1019 AC_SUBST(LOCALSRC)
1020 AC_SUBST(MAN_FILE_FORMATS)
1021 AC_SUBST(MAN_MISC_INFO)
1022
1023 AC_PROG_INSTALL
1024
1025 AC_CONFIG_HEADER(config.h)
1026
1027 AC_OUTPUT_COMMANDS([if test -f .devel; then
1028 echo timestamp > stamp-h
1029 cat $srcdir/Makefile-devel-adds >> Makefile
1030 make depend || exit 1
1031 fi])
1032 AC_OUTPUT(Makefile tcpdump.1)
1033 exit 0