1: #
2: # Libnet autoconfiguration information file
3: # Copyright (c) 1998 - 2002 Mike D. Schiffman <mike@infonexus.com>
4: # Modified by: Ali Abdulkadir <autostart.ini@gmail.com>,
5: # Joachim Nilsson <troglobit@gmail.com>
6: # All rights reserved.
7: #
8: # Process this file with autoconf to produce a configure script.
9:
10: AC_INIT([libnet], [1.2], [https://github.com/libnet/libnet/issues],,
11: [https://github.com/libnet/libnet])
12:
13: # Visible in resulting configure script, e.g. with ./configure --version
14: AC_COPYRIGHT([Copyright (C) 1998 - 2019 The libnet Developer Community.])
15: AC_REVISION(${VERSION})
16:
17: # the autotools and libtool should be at least these versions
18: AC_PREREQ([2.69])
19: LT_PREREQ([2.4.2])
20:
21: AC_PROG_SHELL
22: AC_PROG_SED
23: AC_CHECK_PROGS([CHMOD],[chmod],[true])
24: AC_CANONICAL_TARGET
25: AC_CONFIG_SRCDIR([src/libnet_build_ip.c])
26: AC_CONFIG_MACRO_DIR([m4])
27: AM_INIT_AUTOMAKE([1.14 foreign subdir-objects no-dependencies dist-zip])
28: AM_SILENT_RULES([yes])
29: AC_CONFIG_HEADERS([include/config.h])
30:
31: AC_CONFIG_FILES([Makefile \
32: Doxyfile \
33: libnet-config \
34: doc/Makefile \
35: doc/man/Makefile \
36: doc/man/man1/Makefile \
37: doc/man/man3/Makefile \
38: include/Makefile \
39: include/libnet.h \
40: libnet.pc \
41: src/Makefile \
42: sample/Makefile \
43: win32/Makefile])
44: AC_CONFIG_FILES([doc/fixmanpages], [chmod a+x doc/fixmanpages])
45:
46: # Check for the usual programs
47: AC_PROG_CC
48: AC_PROG_INSTALL
49: AC_USE_SYSTEM_EXTENSIONS
50: # The default is to use only PIC objects.
51: # This can still be overwritten with --without-pic
52: LT_INIT([pic-only])
53:
54: #
55: # Check for headers
56: #
57: AC_CHECK_HEADERS([sys/sockio.h])
58: AC_CHECK_FUNCS([gethostbyname2])
59: AC_CHECK_FUNCS([getifaddrs])
60: AC_TYPE_UINT16_T
61: AC_TYPE_UINT32_T
62: AC_TYPE_UINT64_T
63:
64: AC_MSG_CHECKING(for socklen_t)
65: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
66: #include <sys/types.h>
67: #include <sys/socket.h>
68: ]], [[ socklen_t x; ]])],[have_socklen_t=yes],[have_socklen_t=no])
69: AS_IF([test "x$have_socklen_t" = "xyes"], [
70: AC_DEFINE(HAVE_SOCKLEN_T, 1, [define if socklen_t is defined])])
71: AC_MSG_RESULT($have_socklen_t)
72:
73: #
74: # And some custom things
75: #
76: AC_LIBNET_ENDIAN_CHECK
77: AC_SUBST(ENDIANESS)
78: AC_SUBST(HAVE_PACKET_SOCKET)
79: AC_SUBST(ADDITIONAL_LIBS)
80: AC_SUBST(PKG_CONFIG_DEFINES)
81: AC_SUBST(PKG_CONFIG_LIBS)
82: AC_SUBST(PKG_CONFIG_CFLAGS)
83: AC_SUBST(LTLIBOBJS)
84:
85: # Get link-layer interface type
86: AC_ARG_WITH(
87: [link-layer],
88: [AS_HELP_STRING([--with-link-layer],
89: [when cross-compiling, one of * from libnet_link_*.c @<:@autodetect@:>@])])
90:
91: AC_CHECK_HEADERS([net/pfilt.h sys/net/nit.h net/raw.h sys/dlpi.h linux/socket.h])
92:
93: AC_MSG_CHECKING(link-layer packet interface type)
94:
95: AS_IF([test -n "${with_link_layer}"], [
96: AS_CASE([${with_link_layer}],
97: [bpf], [AC_LIBOBJ([libnet_link_bpf])],
98: [pf], [AC_LIBOBJ([libnet_link_pf])],
99: [snit], [AC_LIBOBJ([libnet_link_snit])],
100: [nit], [AC_LIBOBJ([libnet_link_nit])],
101: [snoop], [AC_LIBOBJ([libnet_link_snoop])],
102: [dlpi], [AC_LIBOBJ([libnet_link_dlpi])],
103: [win32], [AC_LIBOBJ([libnet_link_win32])],
104: [none], [AC_LIBOBJ([libnet_link_none])],
105: [linux], [AC_LIBOBJ([libnet_link_linux])
106: AC_LIBNET_CHECK_PF_PACKET
107: AC_LIBNET_LINUX_PROCFS],
108: [AC_MSG_ERROR([Invalid link type "${with_link_layer}"])])
109: AC_MSG_RESULT(user selected link layer ${with_link_layer})],
110: [test "${cross_compiling}" != "yes" -a -r /dev/bpf0], [
111: AC_LIBOBJ([libnet_link_bpf])
112: AC_MSG_RESULT(found link layer bpf)],
113: [test "${ac_cv_header_net_pfilt_h}" = "yes"], [
114: AC_LIBOBJ([libnet_link_pf])
115: AC_MSG_RESULT(found link layer pf)],
116: [test "${cross_compiling}" != "yes" -a -r /dev/nit], [
117: AC_LIBOBJ([libnet_link_snit])
118: AC_MSG_RESULT(found link layer snit)],
119: [test "${ac_cv_header_sys_net_nit_h}" = "yes"], [
120: AC_LIBOBJ([libnet_link_nit])
121: AC_MSG_RESULT(found link layer nit)],
122: [test "${ac_cv_header_net_raw_h}" = "yes"], [
123: AC_LIBOBJ([libnet_link_snoop])
124: AC_MSG_RESULT(found link layer snoop)],
125: [test "${ac_cv_header_sys_dlpi_h}" = "yes"], [
126: AC_LIBOBJ([libnet_link_dlpi])
127: AC_MSG_RESULT(found link layer dlpi)
128: AC_DEFINE(HAVE_DLPI, 1, [Define if the <sys/dlpi.h> header exists.])],
129: [test "${ac_cv_header_linux_socket_h}" = "yes"], [
130: AC_LIBOBJ([libnet_link_linux])
131: AC_MSG_RESULT(found link layer linux)
132: AC_LIBNET_CHECK_PF_PACKET
133: AC_LIBNET_LINUX_PROCFS],
134: [test "${cross_compiling}" != "yes" -a -c /dev/bpf0], [
135: # check again in case not readable
136: AC_LIBOBJ([libnet_link_bpf])
137: AC_MSG_RESULT(found link layer bpf)],
138: [test "${cross_compiling}" != "yes" -a -c /dev/nit], [
139: # check again in case not readable
140: AC_LIBOBJ([libnet_link_snit])
141: AC_MSG_RESULT(found link layer snit)],
142: [test "$target_os" = "cygwin"], [
143: AC_LIBOBJ([libnet_link_win32])
144: AC_MSG_RESULT(found link layer win32 wpcap)],
145: [test "$host" = "i686-w64-mingw32" -o "x86_64-w64-mingw32" -o "x86_64-pc-mingw64"], [
146: AC_LIBOBJ([libnet_link_win32])
147: AC_MSG_RESULT(found link layer win32 @<:@WinPcap@:>@)],[
148: AC_LIBOBJ([libnet_link_none])
149: AC_MSG_WARN(could not find a link-layer packet interface)
150: AC_MSG_WARN(link-layer packet injection will not be available)])
151:
152: # Check for Doxygen and enable its features.
153: # For details, see m4/ax_prog_doxygen.m4 and
154: # http://www.bioinf.uni-freiburg.de/~mmann/HowTo/automake.html#doxygenSupport
155: DX_DOXYGEN_FEATURE(ON)
156: DX_DOT_FEATURE(ON)
157: DX_CHI_FEATURE(OFF)
158: DX_RTF_FEATURE(OFF)
159: DX_XML_FEATURE(OFF)
160: DX_PDF_FEATURE(OFF)
161: DX_PS_FEATURE(OFF)
162: DX_CHM_FEATURE(OFF)
163: DX_HTML_FEATURE(ON)
164: DX_MAN_FEATURE(ON)
165: DX_INIT_DOXYGEN(${PACKAGE_NAME}, [${top_builddir}/Doxyfile], [doc])
166: AM_CONDITIONAL(ENABLE_DOXYGEN,[test "x${DX_FLAG_doc}" = x1])
167: AM_CONDITIONAL(ENABLE_HTML,[test "x${DX_FLAG_html}" = x1])
168: AM_CONDITIONAL(ENABLE_MAN,[test "x${DX_FLAG_man}" = x1])
169:
170: # Check for sample building
171: AC_MSG_CHECKING([whether to build sample programs])
172: AC_ARG_ENABLE([samples],
173: [AS_HELP_STRING([--enable-samples],[do not build sample programs @<:@default=no@:>@])],
174: [enable_samples=$enableval],
175: [enable_samples=no]
176: )
177: AC_MSG_RESULT([$enable_samples])
178: AM_CONDITIONAL([ENABLE_SAMPLES], [test "$enable_samples" = "yes"])
179:
180: # what (not) to do if the user disables shared libraries
181: AM_CONDITIONAL([COND_SHARED], [test "x$enable_shared" != xno])
182:
183: # Check and set OS specific parameters
184: AS_CASE([$target_os],
185: [*linux*], [
186: AC_DEFINE(_BSD_SOURCE, 1,
187: [Define as necessary to "unhide" header symbols.])
188: AC_DEFINE(_DEFAULT_SOURCE, 1,
189: [Define as necessary to "unhide" header symbols.])
190:
191: PKG_CONFIG_DEFINES="-D_BSD_SOURCE -D_DEFAULT_SOURCE"
192: AC_CHECK_HEADERS(net/ethernet.h, \
193: PKG_CONFIG_DEFINES="$PKG_CONFIG_DEFINES -DHAVE_NET_ETHERNET_H")
194: ],
195:
196: [*freebsd*], [
197: PKG_CONFIG_DEFINES="-DHAVE_SOCKADDR_SA_LEN"
198: AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [FreeBSD has sa_len in struct sockaddr.])
199:
200: AC_MSG_CHECKING([FreeBSD version, is SOCK_RAW really raw?])
201: AC_TRY_COMPILE([#include <sys/param.h>], [
202: #if (__FreeBSD_version >= 1100030)
203: return 0;
204: #else
205: #error FreeBSD pre-11, SOCK_RAW isn't really raw, see https://www.freebsd.org/cgi/man.cgi?ip(4)#end
206: #endif],
207: AC_MSG_RESULT([yes]),
208: AC_MSG_RESULT([no])
209: AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1, [FreeBSD pre-11, libnet must byteswap raw ip_len, ip_off])
210: PKG_CONFIG_DEFINES="${PKG_CONFIG_DEFINES} -DLIBNET_BSD_BYTE_SWAP")],
211:
212: [*netbsd*], [
213: AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1,
214: [Define if libnet should byteswap data.])
215:
216: PKG_CONFIG_DEFINES="-DLIBNET_BSD_BYTE_SWAP"
217: ],
218:
219: [*openbsd*], [
220: AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1,
221: [Define if the sockaddr structure includes a sa_len member.])
222: ],
223:
224: [*bsdi*], [
225: AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1,
226: [Define if libnet should byteswap data.])
227: PKG_CONFIG_DEFINES="-DLIBNET_BSD_BYTE_SWAP"
228: ],
229:
230: [*darwin*], [
231: AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1,
232: [Define if the sockaddr structure includes a sa_len member.])
233: AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1, [Define if libnet should byteswap data.])
234: PKG_CONFIG_DEFINES="-DHAVE_SOCKADDR_SA_LEN -DLIBNET_BSD_BYTE_SWAP"
235: ],
236:
237: [*solaris*], [
238: AC_DEFINE(HAVE_SOLARIS, 1, [Define if we are running on Solaris.])
239: AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
240: AC_MSG_CHECKING(for /dev/dlpi device)
241: AS_IF([test -c /dev/dlpi], [
242: AC_MSG_RESULT(yes)
243: AC_DEFINE(HAVE_DEV_DLPI, 1, [Define if /dev/dlpi is available.])
244: ], [
245: AC_MSG_RESULT(no)
246: dir="/dev/dlpi"
247: AC_MSG_CHECKING(for $dir directory)
248: AS_IF([test -d $dir], [
249: AC_MSG_RESULT(yes)
250: AC_DEFINE_UNQUOTED(DLPI_DEV_PREFIX, "$dir",
251: [Define if /dev/dlpi is a directory.])
252: ], [
253: AC_MSG_RESULT(no)
254: ])
255: ])
256: AC_CHECK_LIB(socket, socket, ,AC_MSG_ERROR(libsocket not found.))
257: AC_CHECK_LIB(nsl, gethostbyname, ,AC_MSG_ERROR(libnsl not found.))
258: AC_CHECK_LIB(resolv, hstrerror, ,AC_MSG_ERROR(libresolv not found.))
259:
260: #
261: # Broken checksums?
262: #
263: AS_CASE([`uname -r`],
264: [5.4], [
265: AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1,
266: [Define if our version of Solaris has broken checksums.])
267: ],
268: [5.5*], [
269: AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1,
270: [Define if our version of Solaris has broken checksums.])
271: ],
272: [5.8], [
273: AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1,
274: [Define if our version of Solaris has broken checksums.])
275: AC_DEFINE(HAVE_SOLARIS_IPV6, 1,
276: [Define if our version of Solaris supports IPv6.])
277:
278: ],
279: [5.9], [
280: AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1,
281: [Define if our version of Solaris has broken checksums.])
282: AC_DEFINE(HAVE_SOLARIS_IPV6, 1,
283: [Define if our version of Solaris supports IPv6.])
284: ],
285: [5.10 | 5.11 | 5.12], [
286: AC_DEFINE(HAVE_SOLARIS_IPV6, 1,
287: [Define if our version of Solaris supports IPv6.])
288: ])
289:
290: ADDITIONAL_LIBS="-lresolv -lsocket -lnsl"
291: PKG_CONFIG_LIBS="$PKG_CONFIG_LIBS -lresolv -lsocket -lnsl"
292: ],
293:
294: [*hpux11*], [
295: AC_DEFINE(HAVE_HPUX11, 1, [Define if we are building on HP/UX.])
296: AC_CHECK_HEADERS(sys/dlpi_ext.h)
297: ],
298:
299: [*cygwin* | *msys*], [
300: WIN32="yes"
301: AC_SUBST(WIN32)
302: CFLAGS="$CFLAGS -mwin32"
303: AC_CHECK_LIB(packet, PacketSetMode, ,AC_MSG_ERROR(packet lib not found.))
304: AC_CHECK_LIB(wpcap, pcap_setmode, ,AC_MSG_ERROR(pcap lib not found.))
305: LIBS="$LIBS -lws2_32"
306: ],
307:
308: [*mingw*], [
309: WIN32="yes"
310: AC_SUBST(WIN32)
311:
312: AS_IF([test "$enable_shared" = "yes"], [AC_CHECK_TOOL(WINDRES, windres, :)])
313:
314: AC_DEFINE(WIN32_LEAN_AND_MEAN, 1, [Define to limit the scope of <windows.h>])
315:
316: AC_CHECK_LIB(packet, PacketSetMode, ,AC_MSG_ERROR(libpacket.a not found. See README.win32 for more information))
317: AC_CHECK_LIB(wpcap, pcap_setmode, ,AC_MSG_ERROR(libwpcap.a not found. See README.win32 for more information))
318: LIBS="$LIBS -lws2_32 -liphlpapi"
319:
320: AS_IF([test "$host" = "i686-w64-mingw32"], [
321: CFLAGS="$CFLAGS -march=i686 -mwin32"], [
322: CFLAGS="$CFLAGS -mwin32"
323:
324: AX_CHECK_LINK_FLAG([-Wl,--high-entropy-va],
325: [LDFLAGS="$LDFLAGS -Wl,--high-entropy-va"],
326: [AC_MSG_NOTICE([Consider updating your toolchain.])])
327: ])
328:
329: AS_IF([test "${cross_compiling}" = "yes"], [
330: CFLAGS="$CFLAGS -static-libgcc"])
331: ],
332:
333: [*irix*], [
334: CFLAGS="$CFLAGS -DINET6=1"
335: ], [
336: AC_MSG_WARN(${target_os} is not officially supported yet.)
337: AC_MSG_RESULT(Please report this to ${PACKAGE_BUGREPORT})])
338:
339: # this only matters if we are building for Windows...
340: AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
341:
342: # Create all files from AC_CONFIG_FILES()
343: AC_OUTPUT
344:
345: # Helper variables for summary, below
346: AS_IF([test ${DX_FLAG_doc} -eq 1], [rebuild_docs=yes], [rebuild_docs=no])
347: link_layer=`"echo"${LTLIBOBJS}"" | sed 's/.*libnet_link_\(.*\)\$.*/\1/'`
348:
349: AC_MSG_RESULT([
350: -=-=-=-=-=-=-=-=-=-= $PACKAGE Configuration Complete =-=-=-=-=-=-=-=-=-=-
351:
352: Version ....................... ${VERSION}
353:
354: Host .......................... ${host}
355: Operating System .............. ${host_os}
356: Host CPU ...................... ${host_cpu}
357: Host Vendor ................... ${host_vendor}
358: Host OS ....................... ${host_os}
359: Prefix ........................ ${prefix}
360:
361: Cross-compiling ............... ${cross_compiling}
362: Compiler is GCC ............... ${ac_cv_c_compiler_gnu}
363: CC ............................ ${CC}
364: CFLAGS ........................ ${CFLAGS}
365: LD ............................ ${LD}
366: LDFLAGS ....................... ${LDFLAGS}
367: LIBS .......................... ${LIBS}
368:
369: Link Layer .................... ${link_layer}
370: Shared Libraries .............. ${enable_shared}
371: Static Libraries .............. ${enable_static}
372: PIC ........................... ${pic_mode}
373: Build Sample Programs ......... ${enable_samples}
374: Rebuild docs .................. ${rebuild_docs}
375:
376: To override options
377:
378: $0 --help
379:
380: Report bugs to ${PACKAGE_BUGREPORT}
381:
382: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
383: To disable silent build and print the full command line of every stage
384:
385: make V=1
386: ])
387: AS_IF([test "$WIN32" = "yes"], [AC_MSG_RESULT(
388: [To compile shared libraries on MinGW use the bundled WinPcap libraries
389: in ./win32/. GCC can NOT produce x64 compatible images with official
390: WinPcap Developer Pack. See README.win32 for more info.
391: ])])
392: AS_IF([test "$rebuild_docs" = "yes"], [AC_MSG_RESULT(
393: [To build/update the documentation
394:
395: make doc
396: ])])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>