1 AC_INIT([DHCP],[4.3.4],[dhcp-users@isc.org])
3 # we specify "foreign" to avoid having to have the GNU mandated files,
4 # like AUTHORS, COPYING, and such
5 AM_INIT_AUTOMAKE([foreign])
7 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
8 # the configure and makefiles. Without it users doing things that
9 # change the timestamps on the code, like checking it into a cvs
10 # tree, could trigger a rebuild of the infrastructure files which
11 # might fail if they don't have the correct tools.
16 # We want to turn on warnings if we are using gcc and the user did
17 # not specify CFLAGS. The autoconf check for the C compiler sets the
18 # CFLAGS if gcc is used, so we will save it before we run that check.
21 # Now find our C compiler.
24 # Suppress warnings about --datarootdir
25 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
27 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
28 # user did not specify any flags. Add warnings in this case.
29 if test "$GCC" = "yes"; then
30 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
31 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
35 # We can have some flags to pass to bind configure
37 if test "$cross_compiling" = "yes"; then
38 BINDCONFIG="--host=$host"
41 AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = "yes")
43 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
44 # parts of the IPv6 Advanced Socket API as a result. This is stupid
45 # as it breaks how the two halves (Basic and Advanced) of the IPv6
46 # Socket API were designed to be used but we have to live with it.
47 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
48 AC_USE_SYSTEM_EXTENSIONS
55 if test "X$AR" = "X"; then
57 ar program not found. Please fix your PATH to include the directory in
58 which ar resides, or set AR in the environment with the full path to ar.])
61 AC_CONFIG_HEADERS([includes/config.h])
63 # we sometimes need to know byte order for building packets
64 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
65 AC_SUBST(byte_order, LITTLE_ENDIAN))
66 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
67 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
68 or LITTLE_ENDIAN for LSB (Intel CPUs).])
70 # Optional compile-time DEBUGging.
72 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
73 [case "${enableval}" in
75 AC_DEFINE([DEBUG], [1],
76 [Define to compile debug-only DHCP software.])
77 # Just override CFLAGS totally to remove optimization.
79 no) enable_debug=no ;;
80 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
81 esac],[enable_debug=no])
83 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
84 # but I don't want to pollute the --help space.
86 #/* #define DEBUG_TOKENS */
87 #/* #define DEBUG_PACKET */
88 #/* #define DEBUG_EXPRESSIONS */
89 #/* #define DEBUG_FIND_LEASE */
90 #/* #define DEBUG_EXPRESSION_PARSE */
91 #/* #define DEBUG_CLASS_MATCHING */
92 #/* #define DEBUG_MEMORY_LEAKAGE */
93 #/* #define DEBUG_MALLOC_POOL */
94 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
95 #/* #define DEBUG_RC_HISTORY */
96 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
97 #/* #define RC_HISTORY_MAX 10240 */
98 #/* #define POINTER_DEBUG */
99 #/* #define DEBUG_FAILOVER_MESSAGES */
100 #/* #define DEBUG_FAILOVER_TIMING */
101 #/* #define DEBUG_DUMP_ALL_LEASES */
103 # Failover optional compile-time feature.
104 AC_ARG_ENABLE(failover,
105 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
106 # Failover is on by default, so define if it is not explicitly disabled.
107 if test "$enable_failover" != "no"; then
108 enable_failover="yes"
109 AC_DEFINE([FAILOVER_PROTOCOL], [1],
110 [Define to include Failover Protocol support.])
114 AC_ARG_ENABLE(execute,
115 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
116 # execute() is on by default, so define if it is not explicitly disabled.
117 if test "$enable_execute" != "no" ; then
119 AC_DEFINE([ENABLE_EXECUTE], [1],
120 [Define to include execute() config language support.])
123 # Server tracing support.
124 AC_ARG_ENABLE(tracing,
125 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
126 # tracing is on by default, so define if it is not explicitly disabled.
127 if test "$enable_tracing" != "no" ; then
128 AC_DEFINE([TRACING], [1],
129 [Define to include server activity tracing support.])
132 # Delayed-ack feature support (experimental).
133 AC_ARG_ENABLE(delayed_ack,
134 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
135 if test "$enable_delayed_ack" = "yes"; then
136 AC_DEFINE([DELAYED_ACK], [1],
137 [Define to queue multiple DHCPACK replies per fsync.])
139 enable_delayed_ack="no"
142 # DHCPv6 optional compile-time feature.
143 AC_ARG_ENABLE(dhcpv6,
144 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
145 # DHCPv6 is on by default, so define if it is not explicitly disabled.
146 if test "$enable_dhcpv6" != "no"; then
148 AC_DEFINE([DHCPv6], [1],
149 [Define to 1 to include DHCPv6 support.])
152 # DHCPv4o6 optional compile-time feature.
153 AC_ARG_ENABLE(dhcpv4o6,
154 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
155 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
156 if test "$enable_dhcpv4o6" = "yes"; then
157 # DHCPv4o6 requires DHCPv6
158 if test "$enable_dhcpv6" = "no"; then
159 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
161 # DHCPv4o6 is not yet compatible with delayed-ack
162 if test "$enable_delayed_ack" = "yes"; then
163 AC_MSG_ERROR([dhcpv4o6 is not compatible with delayed-ack])
165 AC_DEFINE([DHCP4o6], [1],
166 [Define to 1 to include DHCPv4 over DHCPv6 support.])
169 # PARANOIA is off by default (until we can test it with all features)
170 AC_ARG_ENABLE(paranoia,
171 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
172 AC_ARG_ENABLE(early_chroot,
173 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
174 # If someone enables early chroot, but does not enable paranoia, do so for
176 if test "$enable_paranoia" != "yes" && \
177 test "$enable_early_chroot" = "yes" ; then
178 enable_paranoia="yes"
181 if test "$enable_paranoia" = "yes" ; then
182 AC_DEFINE([PARANOIA], [1],
183 [Define to any value to include Ari's PARANOIA patch.])
185 if test "$enable_early_chroot" = "yes" ; then
186 AC_DEFINE([EARLY_CHROOT], [1],
187 [Define to any value to chroot() prior to loading config.])
190 AC_ARG_ENABLE(ipv4_pktinfo,
191 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
193 if test "$enable_ipv4_pktinfo" = "yes"; then
194 AC_DEFINE([USE_V4_PKTINFO], [1],
195 [Define to 1 to enable IPv4 packet info support.])
198 AC_ARG_ENABLE(use_sockets,
199 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
201 if test "$enable_use_sockets" = "yes"; then
202 AC_DEFINE([USE_SOCKETS], [1],
203 [Define to 1 to use the standard BSD socket API.])
206 # Try to hnadle incorrect byte order for secs field
207 # This is off by default
208 AC_ARG_ENABLE(secs_byteorder,
209 AS_HELP_STRING([--enable-secs-byteorder],[Correct bad byteorders in the secs field (default is no).]))
211 if test "$enable_secs_byteorder" = "yes" ; then
212 AC_DEFINE([SECS_BYTEORDER], [1],
213 [Define to correct bad byteorders in secs field.])
216 # Include the PID in the log messages. This is useful when there may
217 # be multiple instances of a program.
218 # This is off by default
219 AC_ARG_ENABLE(log_pid,
220 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
221 if test "$enable_log_pid" = "yes" ; then
222 AC_DEFINE([USE_LOG_PID], [1],
223 [Define to include PIDs in syslog messages.])
226 # Allow for binary search when inserting v4 leases into queues
227 AC_ARG_ENABLE(binary_leases,
228 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
229 # binary_leases is off by default.
230 if test "$enable_binary_leases" = "yes"; then
231 AC_DEFINE([BINARY_LEASES], [1],
232 [Define to support binary insertion of leases into queues.])
234 enable_binary_leases="no"
239 DISTCHECK_ATF_CONFIGURE_FLAG=
242 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
243 [atf_path="$withval"])
244 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
245 if test "$atf_path" = "bind" ; then
246 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
248 atf_path="\${top_srcdir}/bind/atf"
249 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
250 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
251 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
253 AC_SUBST(ATF_LDFLAGS)
255 BINDCONFIG="$BINDCONFIG --with-atf"
256 elif test "$atf_path" != "no" ; then
257 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
258 # Config path for pkg-config
260 if test "$atf_path" != "yes" ; then
261 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
262 atf_pcp=$atf_path/lib/pkgconfig
263 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
264 atf_pcp=$atf_path/lib64/pkgconfig
267 # Not specified, try some common paths
268 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
271 if test -f $d/lib/pkgconfig/atf-c.pc ; then
272 atf_pcp=$d/lib/pkgconfig
274 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
275 atf_pcp=$d/lib64/pkgconfig
281 if test "$atf_pcp" = "" ; then
282 AC_MSG_ERROR([Unable to find atf files in location specified])
284 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
285 if test "$pkgcfg_found" = ""; then
286 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
288 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
289 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
290 if test -f $atf_pcp/atf-sh.pc ; then
291 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
293 # older versions don't have atf-sh, try usual place
294 ATF_BIN=$atf_path/bin
297 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
298 AC_MSG_WARN([atf-run,atf-report not found, assuming they are in your path])
302 AC_SUBST(ATF_LDFLAGS)
307 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
308 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
309 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
312 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
313 ### need to look there and potentially overwrite by default (but not if
314 ### the user configures an alternate value). LOCALSTATEDIR is totally
315 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
316 ### they would be insane for suggesting it. We need to look in /var/for
317 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
320 AC_PREFIX_PROGRAM(dhcpd)
322 # XXX - isn't there SOME WAY to default autoconf to /var instead of
323 # /usr/local/var/no/one/has/this/please/stop/trying?
324 case "$localstatedir" in
330 # Allow specification of alternate state files
331 AC_ARG_WITH(srv-lease-file,
332 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
333 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
334 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
335 [File for dhcpd leases.]))
337 AC_MSG_CHECKING([for dhcpd.leases location])
338 if [[ "x$with_srv_lease_file" = "x" ]] ; then
339 if [[ -d "${localstatedir}/db" ]] ; then
340 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
341 elif [[ -d "${localstatedir}/state" ]] ; then
342 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
343 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
345 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
347 elif [[ -d "${localstatedir}/lib" ]] ; then
348 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
349 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
351 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
353 elif [[ -d "${localstatedir}/etc" ]] ; then
354 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
356 with_srv_lease_file="/etc/dhcpd.leases"
359 AC_MSG_RESULT($with_srv_lease_file)
361 AC_ARG_WITH(srv6-lease-file,
362 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
363 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
364 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
365 [File for dhcpd6 leases.]))
367 AC_MSG_CHECKING([for dhcpd6.leases location])
368 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
369 if [[ -d "${localstatedir}/db" ]] ; then
370 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
371 elif [[ -d "${localstatedir}/state" ]] ; then
372 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
373 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
375 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
377 elif [[ -d "${localstatedir}/lib" ]] ; then
378 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
379 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
381 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
383 elif [[ -d "${localstatedir}/etc" ]] ; then
384 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
386 with_srv6_lease_file="/etc/dhcpd6.leases"
389 AC_MSG_RESULT($with_srv6_lease_file)
391 AC_ARG_WITH(cli-lease-file,
392 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
393 (default is LOCALSTATEDIR/db/dhclient.leases)]),
394 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
395 [File for dhclient leases.]))
397 AC_MSG_CHECKING([for dhclient.leases location])
398 if [[ "x$with_cli_lease_file" = "x" ]] ; then
399 if [[ -d "${localstatedir}/db" ]] ; then
400 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
401 elif [[ -d "${localstatedir}/state" ]] ; then
402 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
403 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
405 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
407 elif [[ -d "${localstatedir}/lib" ]] ; then
408 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
409 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
411 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
413 elif [[ -d "${localstatedir}/etc" ]] ; then
414 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
416 with_cli_lease_file="/etc/dhclient.leases"
419 AC_MSG_RESULT($with_cli_lease_file)
421 AC_ARG_WITH(cli6-lease-file,
422 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
423 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
424 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
425 [File for dhclient6 leases.]))
427 AC_MSG_CHECKING([for dhclient6.leases location])
428 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
429 if [[ -d "${localstatedir}/db" ]] ; then
430 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
431 elif [[ -d "${localstatedir}/state" ]] ; then
432 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
433 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
435 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
437 elif [[ -d "${localstatedir}/lib" ]] ; then
438 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
439 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
441 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
443 elif [[ -d "${localstatedir}/etc" ]] ; then
444 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
446 with_cli6_lease_file="/etc/dhclient6.leases"
449 AC_MSG_RESULT($with_cli6_lease_file)
451 AC_ARG_WITH(srv-pid-file,
452 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
453 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
454 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
455 [File for dhcpd process information.]))
456 AC_ARG_WITH(srv6-pid-file,
457 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
458 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
459 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
460 [File for dhcpd6 process information.]))
461 AC_ARG_WITH(cli-pid-file,
462 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
463 (default is LOCALSTATEDIR/run/dhclient.pid)]),
464 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
465 [File for dhclient process information.]))
466 AC_ARG_WITH(cli6-pid-file,
467 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
468 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
469 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
470 [File for dhclient6 process information.]))
471 AC_ARG_WITH(relay-pid-file,
472 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
473 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
474 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
475 [File for dhcrelay process information.]))
476 AC_ARG_WITH(relay6-pid-file,
477 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
478 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
479 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
480 [File for dhcrelay6 process information.]))
488 # Some systems need the u_intX_t types defined across.
489 AC_CHECK_TYPE([u_int8_t], [], [
491 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
494 AC_CHECK_TYPE([u_int16_t], [], [
496 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
499 AC_CHECK_TYPE([u_int32_t], [], [
501 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
504 AC_CHECK_TYPE([u_int64_t], [], [
506 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
510 # see if ifaddrs.h is available
511 AC_CHECK_HEADERS(ifaddrs.h)
513 # figure out what IPv4 interface code to use
514 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
516 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
518 #ifdef HAVE_LINUX_TYPES_H
519 #include <linux/types.h>
524 AC_DEFINE([HAVE_LPF], [1],
525 [Define to 1 to use the Linux Packet Filter interface code.])
527 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
528 if test -n "$DO_DLPI"
530 AC_DEFINE([HAVE_DLPI], [1],
531 [Define to 1 to use DLPI interface code.])
533 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
536 AC_DEFINE([HAVE_BPF], [1],
537 [Define to 1 to use the
538 Berkeley Packet Filter interface code.])
543 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
544 # use the same structures. We like to use 'struct lifconf' and 'struct
545 # lifreq', but we'll use these other structures if they're present. HPUX
546 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
549 AC_MSG_CHECKING([for struct lifnum])
550 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
551 #include <sys/socket.h>
553 ]], [[ struct lifnum a;
554 ]])],[AC_MSG_RESULT(yes)
555 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
556 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
558 AC_MSG_CHECKING([for struct if_laddrconf])
559 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
561 ]], [[ struct if_laddrconf a;
562 ]])],[AC_MSG_RESULT(yes)
563 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
564 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
566 AC_MSG_CHECKING([for struct if_laddrreq])
567 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
569 ]], [[ struct if_laddrreq a;
570 ]])],[AC_MSG_RESULT(yes)
571 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
572 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
575 # check for GCC noreturn attribute
577 AC_MSG_CHECKING(for GCC noreturn attribute)
578 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
579 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
580 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
581 AC_DEFINE([ISC_DHCP_NORETURN], [],
582 [Define to the string for a noreturn attribute.])])
584 # Look for optional headers.
585 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
587 # Solaris needs some libraries for functions
588 AC_SEARCH_LIBS(socket, [socket])
589 AC_SEARCH_LIBS(inet_ntoa, [nsl])
591 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
592 AC_DEFINE([NEED_INET_ATON], [1],
593 [Define to 1 if the inet_aton() function is missing.]))
595 # Check for a standalone regex library.
596 AC_SEARCH_LIBS(regcomp, [regex])
598 AC_CHECK_FUNCS(strlcat)
600 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
601 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
603 # check for /dev/random (declares HAVE_DEV_RANDOM)
604 AC_MSG_CHECKING(for random device)
605 AC_ARG_WITH(randomdev,
606 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
607 (default is /dev/random)]),
608 use_randomdev="$withval", use_randomdev="unspec")
609 if test "$use_randomdev" = "unspec"; then
610 if test "$cross_compiling" = "yes"; then
611 AC_MSG_RESULT(unspecified)
612 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
614 use_randomdev="/dev/random"
615 elif test "$use_randomdev" = "yes"; then
616 use_randomdev="/dev/random"
618 if test "$use_randomdev" = "no"; then
619 AC_MSG_RESULT(disabled)
620 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
622 if test "$cross_compiling" = "yes"; then
623 AC_MSG_RESULT($use_randomdev (unchecked))
625 AC_MSG_RESULT($use_randomdev)
626 AC_CHECK_FILE($use_randomdev,
627 AC_DEFINE([HAVE_DEV_RANDOM], [1],
628 [Define to 1 if you have the /dev/random or other configured file.]),
629 AC_MSG_ERROR(cannot find $use_randomdev))
631 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
634 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
635 # check kqueue/epoll/devpoll alternative to select
636 AC_ARG_ENABLE(kqueue,
637 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
638 want_kqueue="$enableval", want_kqueue="no")
639 if test "$enableval" = "yes"; then
640 BINDIOMUX="--enable-kqueue"
643 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
644 want_epoll="$enableval", want_epoll="no")
645 if test "$enableval" = "yes"; then
646 BINDIOMUX="--enable-epoll"
648 AC_ARG_ENABLE(devpoll,
649 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
650 want_devpoll="$enableval", want_devpoll="no")
651 if test "$enableval" = "yes"; then
652 BINDIOMUX="--enable-devpoll"
656 # general extra bind configure arguments
657 AC_ARG_WITH(bind-extra-config,
658 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
659 with some extra options (default is none)]),
660 use_xbindconfig="$withval", use_xbindconfig="")
661 case "$use_xbindconfig" in
665 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
669 # see if there is a "sa_len" field in our interface information structure
670 AC_CHECK_MEMBER(struct sockaddr.sa_len,
671 AC_DEFINE([HAVE_SA_LEN], [],
672 [Define to 1 if the sockaddr structure has a length field.]),
674 [#include <sys/socket.h>])
676 # figure out pointer size
677 SAVE_CFLAGS="$CFLAGS"
678 CFLAGS="$CFLAGS -I$srcdir"
679 AC_CHECK_SIZEOF(struct iaddr *, , [
680 #include "includes/inet.h"
683 CFLAGS="$SAVE_CFLAGS"
685 # Solaris does not have the msg_control or msg_controlen members
686 # in the msghdr structure unless you define:
688 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
690 # See the "standards" man page for details.
692 # We check for the msg_control member, and if it is not found, we check
693 # again with the appropriate defines added to the CFLAGS. (In order to
694 # do this we have to remove the check from the cache, which is what the
696 AC_CHECK_MEMBER(struct msghdr.msg_control,,
697 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
698 CFLAGS="$CFLAGS -D__EXTENSIONS__"
699 unset ac_cv_member_struct_msghdr_msg_control
700 AC_CHECK_MEMBER(struct msghdr.msg_control,,
701 [AC_MSG_ERROR([Missing msg_control member in
702 msg_control structure.])],
704 #include <sys/types.h>
705 #include <sys/socket.h>
709 #include <sys/types.h>
710 #include <sys/socket.h>
713 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
714 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
715 ,, [#include <linux/if_packet.h>])
720 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH
721 (default is ./bind)]),
722 use_libbind="$withval", use_libbind="no")
723 case "$use_libbind" in
725 BINDDIR="\${top_srcdir}/bind"
726 BINDSRCDIR="\${top_srcdir}/bind"
729 BINDDIR="\${top_srcdir}/bind"
730 BINDSRCDIR="\${top_srcdir}/bind"
733 BINDDIR="$use_libbind"
734 if test ! -d "$srcdir/bind"; then
735 # no bind directory, create it with a fake Makefile.in
736 # (AC_CONFIG_FILES and top Makefile refer to it so
739 cat > $srcdir/bind/Makefile.in << EOF
741 all check clean distclean distdir install uninstall:
752 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
756 # OpenLDAP with SSL support.
757 AC_ARG_WITH(ldapcrypto,
758 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
759 [ldapcrypto=$withval],
762 # Gssapi to allow LDAP to authenticate with a keytab
763 AC_ARG_WITH(ldap-gssapi,
764 AC_HELP_STRING([--with-ldap-gssapi],
765 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
766 [ldap_gssapi=$withval],
770 # LDAP CASA auth support.
771 AC_ARG_WITH(ldapcasa,
772 AC_HELP_STRING([--with-ldapcasa],
773 [enable LDAP CASA auth support in dhcpd (default is no)]),
777 # OpenLDAP support is disabled by default, if enabled then SSL support is an
778 # extra optional that is also disabled by default. Enabling LDAP SSL support
779 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
780 # but doesn't include SSL. The two are not dependant.
781 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
784 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
785 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
786 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
787 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
788 if test x$ldap_gssapi = xyes ; then
789 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
790 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
793 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
794 AC_SUBST(LDAP_LIBS, [$LIBS])
798 AC_CHECK_HEADERS([ldap.h])
799 AC_CHECK_FUNCS([inet_pton inet_ntop])
802 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
804 if test x$ldapcasa = xyes ; then
805 AC_CHECK_HEADERS([micasa_mgmd.h],[
806 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
807 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
810 if test x$ldapcrypto = xyes ; then
811 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
814 if test x$ldap_gssapi = xyes; then
815 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
818 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
821 # Append selected warning levels to CFLAGS before substitution (but after
822 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
823 CFLAGS="$CFLAGS $STD_CWARNINGS"
825 # Try to add the bind and dhcp include directories
826 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
830 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
832 # As of Solaris 11, ethernet dev files are in /dev/net
833 AC_CHECK_FILE(/dev/net,
834 [AC_DEFINE([USE_DEV_NET], [1],
835 [Define to 1 if ethernet devices are in /dev/net])])
839 AC_C_FLEXIBLE_ARRAY_MEMBER
843 $srcdir/bind/Makefile
845 client/tests/Makefile
847 common/tests/Makefile
855 server/tests/Makefile
860 if test "$enable_dhcpv4o6" = "yes"; then
861 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
862 elif test "$enable_dhcpv6" != "no"; then
863 DHCP_VERSIONS="DHCPv4 and DHCPv6"
865 DHCP_VERSIONS="DHCPv4"
870 if test $? -ne 0; then
871 AC_MSG_ERROR([*** util/bindvar.sh failed])
874 if test $? -ne 0; then
878 cat > config.report << END
880 ISC DHCP source configure results:
881 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
885 Version: $PACKAGE_VERSION
893 DHCP versions: $DHCP_VERSIONS
897 failover: $enable_failover
898 execute: $enable_execute
899 binary-leases: $enable_binary_leases
900 dhcpv6: $enable_dhcpv6
901 delayed-ack: $enable_delayed_ack
904 ATF unittests : $atf_path
907 # TODO: Add Perl system tests
909 if test "$atf_path" != "no"
911 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
912 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
913 echo "ATF_BIN : $ATF_BIN" >> config.report
920 echo Now you can type "make" to build ISC DHCP