1: # -*- Autoconf -*-
2: # Process this file with autoconf to produce a configure script.
3:
4: AC_PREREQ(2.61)
5: AC_INIT(arping, 2.21, thomas@habets.se)
6: AC_CANONICAL_SYSTEM
7: AC_CONFIG_SRCDIR([src/arping.c])
8: AM_INIT_AUTOMAKE
9: AM_MAINTAINER_MODE
10: AC_CONFIG_HEADER(config.h)
11:
12:
13: # Checks for programs.
14: AC_PROG_CC
15: AC_PROG_INSTALL
16: AC_PROG_MAKE_SET
17:
18: # Required to define __USE_MISC, which in turn typedefs uint, which
19: # is used by libnet headers.
20: # This "just works" until running GCC with -std=c99, where uint is
21: # no longer defined by default.
22: CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE=1"
23:
24: # Checks for libraries.
25: AC_CHECK_LIB([m], [sqrt])
26: AC_CHECK_LIB([socket], [socket])
27: AC_CHECK_LIB([nsl], [gethostbyname])
28: AC_CHECK_LIB([cap], [cap_init])
29: AC_CHECK_LIB([rt], [clock_gettime])
30: AC_CHECK_LIB([net], [libnet_name_resolve],
31: [AC_MSG_ERROR([libnet 1.0.x found. Arping 2.x requires libnet 1.1 or newer])])
32: AC_CHECK_LIB([net], [libnet_init], ,[AC_MSG_ERROR([libnet 1.1.x not found])])
33: AC_CHECK_LIB([pcap], [pcap_open_live], ,[AC_MSG_ERROR([libpcap not found])])
34: AC_SEARCH_LIBS([clock_gettime], [rt])
35:
36: # Checks for header files.
37: AC_HEADER_STDC
38: AC_CHECK_HEADERS([\
39: arpa/inet.h \
40: netinet/in.h \
41: stdlib.h \
42: sys/socket.h \
43: getopt.h \
44: time.h \
45: grp.h \
46: sys/time.h \
47: sys/types.h \
48: sys/param.h \
49: sys/capability.h \
50: stdint.h \
51: libnet.h \
52: win32/libnet.h \
53: sys/random.h \
54: net/bpf.h \
55: pwd.h \
56: unistd.h])
57:
58: # Libnet include file is not optional
59: if test ! x$ac_cv_header_libnet_h = xyes; then
60: AC_MSG_ERROR([Can't find libnet.h. See INSTALL file for where to get Libnet])
61: fi
62:
63: # Checks for typedefs, structures, and compiler characteristics.
64: AC_C_CONST
65: AC_HEADER_TIME
66: AC_C_VOLATILE
67: AC_TYPE_UINT8_T
68: AC_TYPE_UINT16_T
69: AC_TYPE_UINT32_T
70: AC_TYPE_UINT64_T
71:
72: # Checks for library functions.
73: AC_PROG_GCC_TRADITIONAL
74: AC_FUNC_SELECT_ARGTYPES
75: AC_FUNC_SETVBUF_REVERSED
76: AC_TYPE_SIGNAL
77: AC_CHECK_FUNCS([gettimeofday memset select strchr strdup strerror strstr \
78: getifaddrs cap_init pcap_create pcap_list_tstamp_types pcap_set_immediate_mode \
79: pledge unveil pcap_findalldevs getrandom])
80:
81: if test x$ac_cv_func_getifaddrs = xyes; then
82: AC_LIBOBJ([findif_getifaddrs])
83: else
84: case "$target_os" in
85: *linux*)
86: AC_LIBOBJ([findif_linux])
87: ;;
88: *freebsd*|*openbsd*|*darwin*)
89: AC_LIBOBJ([findif_sysctl])
90: ;;
91: *solaris*)
92: AC_LIBOBJ([findif_bsdroute])
93: ;;
94: *)
95: AC_LIBOBJ([findif_other])
96: ;;
97: esac
98: fi
99:
100: AC_CACHE_CHECK([for libnet_init signature has const],
101: ac_cv_have_libnet_init_const, [
102: AC_TRY_LINK([#include<libnet.h>],
103: [libnet_t*libnet_init(int a,const char* b,char* c);],
104: [ ac_cv_have_libnet_init_const="yes" ],
105: [ ac_cv_have_libnet_init_const="no" ])
106: ])
107: if test x$ac_cv_have_libnet_init_const = xyes; then
108: AC_DEFINE([HAVE_LIBNET_INIT_CONST], [1], [Libnet init takes const char device])
109: fi
110:
111: AC_CACHE_CHECK([for libnet_name2addr4 signature has const],
112: ac_cv_have_libnet_name2addr4_const, [
113: AC_TRY_LINK([#include<libnet.h>],
114: [uint32_t libnet_name2addr4(libnet_t*a, const char* b,uint8_t c);],
115: [ ac_cv_have_libnet_name2addr4_const="yes" ],
116: [ ac_cv_have_libnet_name2addr4_const="no" ])
117: ])
118: if test x$ac_cv_have_libnet_name2addr4_const = xyes; then
119: AC_DEFINE([HAVE_LIBNET_NAME2ADDR4_CONST], [1], [Libnet name2addr4 takes const char* addr])
120: fi
121:
122:
123: # check for CLOCK_MONOTONIC
124: AC_CHECK_DECL([CLOCK_MONOTONIC], [], [],
125: [
126: #include <time.h>
127: #include <sys/time.h>
128: ]
129: )
130: AM_CONDITIONAL(HAVE_CLOCK_MONOTONIC, test x$ac_cv_have_decl_CLOCK_MONOTONIC = xyes)
131: if test x$ac_cv_have_decl_CLOCK_MONOTONIC = xyes; then
132: AC_DEFINE([HAVE_CLOCK_MONOTONIC], [1], [Monotonic clock])
133: fi
134:
135: AC_ARG_ENABLE(hardened, AS_HELP_STRING([--enable-hardened], [Enable security build options]),
136: [
137: CFLAGS+=" -pie -fPIE -fstack-protector-all --param ssp-buffer-size=1 -D_FORTIFY_SOURCE=2"
138: LDFLAGS+=" -pie -fPIE -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack"
139: ])
140: AC_ARG_ENABLE(warnings, AS_HELP_STRING([--enable-warnings], [Enable build warnings]),
141: [
142: CFLAGS+=" -Wall -Wpedantic -Wextra -Wformat -Wstack-protector -Wformat-security -Werror=format-security"
143: ])
144:
145: AC_CONFIG_FILES([Makefile])
146: AC_CONFIG_FILES([src/Makefile])
147: AC_CONFIG_FILES([doc/Makefile])
148: AC_OUTPUT
149:
150: echo "
151: $PACKAGE_NAME version $PACKAGE_VERSION
152: Prefix.........: $prefix
153: Debug Build....: $debug
154: C Compiler.....: $CC $CFLAGS $CPPFLAGS
155: Linker.........: $LD $LDFLAGS $LIBS
156: "
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>