1 AC_INIT([DHCP],[4.4.0-dev],[dhcp-users@isc.org])
5 AC_CONFIG_MACRO_DIR([m4])
8 # we specify "foreign" to avoid having to have the GNU mandated files,
9 # like AUTHORS, COPYING, and such
10 AM_INIT_AUTOMAKE([foreign])
12 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
13 # the configure and makefiles. Without it users doing things that
14 # change the timestamps on the code, like checking it into a cvs
15 # tree, could trigger a rebuild of the infrastructure files which
16 # might fail if they don't have the correct tools.
21 # We want to turn on warnings if we are using gcc and the user did
22 # not specify CFLAGS. The autoconf check for the C compiler sets the
23 # CFLAGS if gcc is used, so we will save it before we run that check.
26 # Now find our C compiler.
29 # Suppress warnings about --datarootdir
30 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
32 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
33 # user did not specify any flags. Add warnings in this case.
34 if test "$GCC" = "yes"; then
35 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
36 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
40 # We can have some flags to pass to bind configure
42 if test "$cross_compiling" = "yes"; then
43 BINDCONFIG="--host=$host"
45 # Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
46 # and as there can be a space inside an argument some magic is required.
47 # This sets $1 ... $N to my_configure_args, arg1 ... argN
48 eval "set my_configure_args $ac_configure_args"
49 # remove my_configure_args, i.e., the guard against empty $ac_configure_args
51 # iterate on arguments and copying 'arg' when it begins by an upper case
55 [[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
60 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
61 # parts of the IPv6 Advanced Socket API as a result. This is stupid
62 # as it breaks how the two halves (Basic and Advanced) of the IPv6
63 # Socket API were designed to be used but we have to live with it.
64 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
65 AC_USE_SYSTEM_EXTENSIONS
67 @BEGIN WITHOUT LIBTOOL
74 if test "X$AR" = "X"; then
76 ar program not found. Please fix your PATH to include the directory in
77 which ar resides, or set AR in the environment with the full path to ar.])
80 AC_CONFIG_HEADERS([includes/config.h])
82 # we sometimes need to know byte order for building packets
83 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
84 AC_SUBST(byte_order, LITTLE_ENDIAN))
85 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
86 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
87 or LITTLE_ENDIAN for LSB (Intel CPUs).])
89 # Optional compile-time DEBUGging.
91 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
92 [case "${enableval}" in
94 AC_DEFINE([DEBUG], [1],
95 [Define to compile debug-only DHCP software.])
96 # Just override CFLAGS totally to remove optimization.
98 no) enable_debug=no ;;
99 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
100 esac],[enable_debug=no])
102 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
103 # but I don't want to pollute the --help space.
105 #/* #define DEBUG_TOKENS */
106 #/* #define DEBUG_PACKET */
107 #/* #define DEBUG_EXPRESSIONS */
108 #/* #define DEBUG_FIND_LEASE */
109 #/* #define DEBUG_EXPRESSION_PARSE */
110 #/* #define DEBUG_CLASS_MATCHING */
111 #/* #define DEBUG_MEMORY_LEAKAGE */
112 #/* #define DEBUG_MALLOC_POOL */
113 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
114 #/* #define DEBUG_RC_HISTORY */
115 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
116 #/* #define RC_HISTORY_MAX 10240 */
117 #/* #define POINTER_DEBUG */
118 #/* #define DEBUG_FAILOVER_MESSAGES */
119 #/* #define DEBUG_FAILOVER_TIMING */
120 #/* #define DEBUG_DUMP_ALL_LEASES */
122 # Failover optional compile-time feature.
123 AC_ARG_ENABLE(failover,
124 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
125 # Failover is on by default, so define if it is not explicitly disabled.
126 if test "$enable_failover" != "no"; then
127 enable_failover="yes"
128 AC_DEFINE([FAILOVER_PROTOCOL], [1],
129 [Define to include Failover Protocol support.])
133 AC_ARG_ENABLE(execute,
134 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
135 # execute() is on by default, so define if it is not explicitly disabled.
136 if test "$enable_execute" != "no" ; then
138 AC_DEFINE([ENABLE_EXECUTE], [1],
139 [Define to include execute() config language support.])
142 # Server tracing support.
143 AC_ARG_ENABLE(tracing,
144 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
145 # tracing is on by default, so define if it is not explicitly disabled.
146 if test "$enable_tracing" != "no" ; then
147 AC_DEFINE([TRACING], [1],
148 [Define to include server activity tracing support.])
151 # Delayed-ack feature support (experimental).
152 AC_ARG_ENABLE(delayed_ack,
153 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
154 if test "$enable_delayed_ack" = "yes"; then
155 AC_DEFINE([DELAYED_ACK], [1],
156 [Define to queue multiple DHCPACK replies per fsync.])
158 enable_delayed_ack="no"
161 # DHCPv6 optional compile-time feature.
162 AC_ARG_ENABLE(dhcpv6,
163 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
164 # DHCPv6 is on by default, so define if it is not explicitly disabled.
165 if test "$enable_dhcpv6" != "no"; then
167 AC_DEFINE([DHCPv6], [1],
168 [Define to 1 to include DHCPv6 support.])
171 # DHCPv4o6 optional compile-time feature.
172 AC_ARG_ENABLE(dhcpv4o6,
173 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
174 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
175 if test "$enable_dhcpv4o6" = "yes"; then
176 # DHCPv4o6 requires DHCPv6
177 if test "$enable_dhcpv6" = "no"; then
178 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
180 # DHCPv4o6 is not yet compatible with delayed-ack
181 if test "$enable_delayed_ack" = "yes"; then
182 AC_MSG_ERROR([dhcpv4o6 is not compatible with delayed-ack])
184 AC_DEFINE([DHCP4o6], [1],
185 [Define to 1 to include DHCPv4 over DHCPv6 support.])
188 # PARANOIA is off by default (until we can test it with all features)
189 AC_ARG_ENABLE(paranoia,
190 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
191 AC_ARG_ENABLE(early_chroot,
192 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
193 # If someone enables early chroot, but does not enable paranoia, do so for
195 if test "$enable_paranoia" != "yes" && \
196 test "$enable_early_chroot" = "yes" ; then
197 enable_paranoia="yes"
200 if test "$enable_paranoia" = "yes" ; then
201 AC_DEFINE([PARANOIA], [1],
202 [Define to any value to include Ari's PARANOIA patch.])
204 if test "$enable_early_chroot" = "yes" ; then
205 AC_DEFINE([EARLY_CHROOT], [1],
206 [Define to any value to chroot() prior to loading config.])
209 AC_ARG_ENABLE(ipv4_pktinfo,
210 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
212 if test "$enable_ipv4_pktinfo" = "yes"; then
213 AC_DEFINE([USE_V4_PKTINFO], [1],
214 [Define to 1 to enable IPv4 packet info support.])
217 AC_ARG_ENABLE(use_sockets,
218 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
220 if test "$enable_use_sockets" = "yes"; then
221 AC_DEFINE([USE_SOCKETS], [1],
222 [Define to 1 to use the standard BSD socket API.])
225 # Try to hnadle incorrect byte order for secs field
226 # This is off by default
227 AC_ARG_ENABLE(secs_byteorder,
228 AS_HELP_STRING([--enable-secs-byteorder],[Correct bad byteorders in the secs field (default is no).]))
230 if test "$enable_secs_byteorder" = "yes" ; then
231 AC_DEFINE([SECS_BYTEORDER], [1],
232 [Define to correct bad byteorders in secs field.])
235 # Include the PID in the log messages. This is useful when there may
236 # be multiple instances of a program.
237 # This is off by default
238 AC_ARG_ENABLE(log_pid,
239 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
240 if test "$enable_log_pid" = "yes" ; then
241 AC_DEFINE([USE_LOG_PID], [1],
242 [Define to include PIDs in syslog messages.])
245 # Allow for binary search when inserting v4 leases into queues
246 AC_ARG_ENABLE(binary_leases,
247 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
248 # binary_leases is off by default.
249 if test "$enable_binary_leases" = "yes"; then
250 AC_DEFINE([BINARY_LEASES], [1],
251 [Define to support binary insertion of leases into queues.])
253 enable_binary_leases="no"
258 DISTCHECK_ATF_CONFIGURE_FLAG=
261 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
262 [atf_path="$withval"])
263 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
264 if test "$atf_path" = "bind" ; then
265 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
267 atf_path="\${top_srcdir}/bind/atf"
268 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
269 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
270 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
272 AC_SUBST(ATF_LDFLAGS)
274 BINDCONFIG="$BINDCONFIG --with-atf"
275 elif test "$atf_path" != "no" ; then
276 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
277 # Config path for pkg-config
279 if test "$atf_path" != "yes" ; then
280 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
281 atf_pcp=$atf_path/lib/pkgconfig
282 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
283 atf_pcp=$atf_path/lib64/pkgconfig
286 # Not specified, try some common paths
287 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
290 if test -f $d/lib/pkgconfig/atf-c.pc ; then
291 atf_pcp=$d/lib/pkgconfig
293 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
294 atf_pcp=$d/lib64/pkgconfig
300 if test "$atf_pcp" = "" ; then
301 AC_MSG_ERROR([Unable to find atf files in location specified])
303 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
304 if test "$pkgcfg_found" = ""; then
305 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
307 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
308 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
309 if test -f $atf_pcp/atf-sh.pc ; then
310 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
312 # older versions don't have atf-sh, try usual place
313 ATF_BIN=$atf_path/bin
316 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
317 AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
321 AC_SUBST(ATF_LDFLAGS)
326 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
327 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
328 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
331 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
332 ### need to look there and potentially overwrite by default (but not if
333 ### the user configures an alternate value). LOCALSTATEDIR is totally
334 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
335 ### they would be insane for suggesting it. We need to look in /var/for
336 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
339 AC_PREFIX_PROGRAM(dhcpd)
341 # XXX - isn't there SOME WAY to default autoconf to /var instead of
342 # /usr/local/var/no/one/has/this/please/stop/trying?
343 case "$localstatedir" in
349 # Default server configuration file.
350 AC_ARG_WITH(srv-conf-file,
351 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
352 (default is typically /etc/dhcpd.conf)]),
353 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
354 [Default file containing dhcpd configuration.]))
356 # Allow specification of alternate state files
357 AC_ARG_WITH(srv-lease-file,
358 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
359 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
360 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
361 [File for dhcpd leases.]))
363 AC_MSG_CHECKING([for dhcpd.leases location])
364 if [[ "x$with_srv_lease_file" = "x" ]] ; then
365 if [[ -d "${localstatedir}/db" ]] ; then
366 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
367 elif [[ -d "${localstatedir}/state" ]] ; then
368 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
369 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
371 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
373 elif [[ -d "${localstatedir}/lib" ]] ; then
374 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
375 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
377 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
379 elif [[ -d "${localstatedir}/etc" ]] ; then
380 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
382 with_srv_lease_file="/etc/dhcpd.leases"
385 AC_MSG_RESULT($with_srv_lease_file)
387 AC_ARG_WITH(srv6-lease-file,
388 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
389 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
390 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
391 [File for dhcpd6 leases.]))
393 AC_MSG_CHECKING([for dhcpd6.leases location])
394 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
395 if [[ -d "${localstatedir}/db" ]] ; then
396 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
397 elif [[ -d "${localstatedir}/state" ]] ; then
398 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
399 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
401 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
403 elif [[ -d "${localstatedir}/lib" ]] ; then
404 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
405 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
407 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
409 elif [[ -d "${localstatedir}/etc" ]] ; then
410 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
412 with_srv6_lease_file="/etc/dhcpd6.leases"
415 AC_MSG_RESULT($with_srv6_lease_file)
417 AC_ARG_WITH(cli-lease-file,
418 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
419 (default is LOCALSTATEDIR/db/dhclient.leases)]),
420 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
421 [File for dhclient leases.]))
423 AC_MSG_CHECKING([for dhclient.leases location])
424 if [[ "x$with_cli_lease_file" = "x" ]] ; then
425 if [[ -d "${localstatedir}/db" ]] ; then
426 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
427 elif [[ -d "${localstatedir}/state" ]] ; then
428 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
429 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
431 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
433 elif [[ -d "${localstatedir}/lib" ]] ; then
434 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
435 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
437 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
439 elif [[ -d "${localstatedir}/etc" ]] ; then
440 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
442 with_cli_lease_file="/etc/dhclient.leases"
445 AC_MSG_RESULT($with_cli_lease_file)
447 AC_ARG_WITH(cli6-lease-file,
448 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
449 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
450 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
451 [File for dhclient6 leases.]))
453 AC_MSG_CHECKING([for dhclient6.leases location])
454 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
455 if [[ -d "${localstatedir}/db" ]] ; then
456 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
457 elif [[ -d "${localstatedir}/state" ]] ; then
458 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
459 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
461 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
463 elif [[ -d "${localstatedir}/lib" ]] ; then
464 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
465 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
467 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
469 elif [[ -d "${localstatedir}/etc" ]] ; then
470 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
472 with_cli6_lease_file="/etc/dhclient6.leases"
475 AC_MSG_RESULT($with_cli6_lease_file)
477 AC_ARG_WITH(srv-pid-file,
478 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
479 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
480 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
481 [File for dhcpd process information.]))
482 AC_ARG_WITH(srv6-pid-file,
483 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
484 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
485 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
486 [File for dhcpd6 process information.]))
487 AC_ARG_WITH(cli-pid-file,
488 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
489 (default is LOCALSTATEDIR/run/dhclient.pid)]),
490 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
491 [File for dhclient process information.]))
492 AC_ARG_WITH(cli6-pid-file,
493 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
494 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
495 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
496 [File for dhclient6 process information.]))
497 AC_ARG_WITH(relay-pid-file,
498 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
499 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
500 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
501 [File for dhcrelay process information.]))
502 AC_ARG_WITH(relay6-pid-file,
503 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
504 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
505 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
506 [File for dhcrelay6 process information.]))
514 # Some systems need the u_intX_t types defined across.
515 AC_CHECK_TYPE([u_int8_t], [], [
517 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
520 AC_CHECK_TYPE([u_int16_t], [], [
522 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
525 AC_CHECK_TYPE([u_int32_t], [], [
527 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
530 AC_CHECK_TYPE([u_int64_t], [], [
532 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
536 # see if ifaddrs.h is available
537 AC_CHECK_HEADERS(ifaddrs.h)
539 # figure out what IPv4 interface code to use
540 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
542 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
544 #ifdef HAVE_LINUX_TYPES_H
545 #include <linux/types.h>
550 AC_DEFINE([HAVE_LPF], [1],
551 [Define to 1 to use the Linux Packet Filter interface code.])
553 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
554 if test -n "$DO_DLPI"
556 AC_DEFINE([HAVE_DLPI], [1],
557 [Define to 1 to use DLPI interface code.])
559 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
562 AC_DEFINE([HAVE_BPF], [1],
563 [Define to 1 to use the
564 Berkeley Packet Filter interface code.])
569 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
570 # use the same structures. We like to use 'struct lifconf' and 'struct
571 # lifreq', but we'll use these other structures if they're present. HPUX
572 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
575 AC_MSG_CHECKING([for struct lifnum])
576 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
577 #include <sys/socket.h>
579 ]], [[ struct lifnum a;
580 ]])],[AC_MSG_RESULT(yes)
581 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
582 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
584 AC_MSG_CHECKING([for struct if_laddrconf])
585 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
587 ]], [[ struct if_laddrconf a;
588 ]])],[AC_MSG_RESULT(yes)
589 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
590 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
592 AC_MSG_CHECKING([for struct if_laddrreq])
593 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
595 ]], [[ struct if_laddrreq a;
596 ]])],[AC_MSG_RESULT(yes)
597 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
598 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
601 # check for GCC noreturn attribute
603 AC_MSG_CHECKING(for GCC noreturn attribute)
604 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
605 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
606 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
607 AC_DEFINE([ISC_DHCP_NORETURN], [],
608 [Define to the string for a noreturn attribute.])])
610 # Look for optional headers.
611 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
613 # Solaris needs some libraries for functions
614 AC_SEARCH_LIBS(socket, [socket])
615 AC_SEARCH_LIBS(inet_ntoa, [nsl])
617 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
618 AC_DEFINE([NEED_INET_ATON], [1],
619 [Define to 1 if the inet_aton() function is missing.]))
621 # Check for a standalone regex library.
622 AC_SEARCH_LIBS(regcomp, [regex])
624 AC_CHECK_FUNCS(strlcat)
626 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
627 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
629 # For some Solaris nanosleep is found by BIND in librt
631 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
632 if test "$have_nanosleep" = "no"; then
633 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
635 if test "$have_nanosleep" = "rt"; then
639 # check for /dev/random (declares HAVE_DEV_RANDOM)
640 AC_MSG_CHECKING(for random device)
641 AC_ARG_WITH(randomdev,
642 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
643 (default is /dev/random)]),
644 use_randomdev="$withval", use_randomdev="unspec")
645 if test "$use_randomdev" = "unspec"; then
646 if test "$cross_compiling" = "yes"; then
647 AC_MSG_RESULT(unspecified)
648 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
650 use_randomdev="/dev/random"
651 elif test "$use_randomdev" = "yes"; then
652 use_randomdev="/dev/random"
654 if test "$use_randomdev" = "no"; then
655 AC_MSG_RESULT(disabled)
656 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
658 if test "$cross_compiling" = "yes"; then
659 AC_MSG_RESULT($use_randomdev (unchecked))
661 AC_MSG_RESULT($use_randomdev)
662 AC_CHECK_FILE($use_randomdev,
663 AC_DEFINE([HAVE_DEV_RANDOM], [1],
664 [Define to 1 if you have the /dev/random or other configured file.]),
665 AC_MSG_ERROR(cannot find $use_randomdev))
667 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
670 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
671 # check kqueue/epoll/devpoll alternative to select
672 AC_ARG_ENABLE(kqueue,
673 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
674 want_kqueue="$enableval", want_kqueue="no")
675 if test "$want_kqueue" = "yes"; then
676 BINDIOMUX="--enable-kqueue"
677 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
680 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
681 want_epoll="$enableval", want_epoll="no")
682 if test "$want_epoll" = "yes"; then
683 BINDIOMUX="--enable-epoll"
684 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
686 AC_ARG_ENABLE(devpoll,
687 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
688 want_devpoll="$enableval", want_devpoll="no")
689 if test "$want_devpoll" = "yes"; then
690 BINDIOMUX="--enable-devpoll"
691 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
695 # general extra bind configure arguments
696 AC_ARG_WITH(bind-extra-config,
697 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
698 with some extra options (default is none)]),
699 use_xbindconfig="$withval", use_xbindconfig="")
700 case "$use_xbindconfig" in
704 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
705 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
709 # see if there is a "sa_len" field in our interface information structure
710 AC_CHECK_MEMBER(struct sockaddr.sa_len,
711 AC_DEFINE([HAVE_SA_LEN], [],
712 [Define to 1 if the sockaddr structure has a length field.]),
714 [#include <sys/socket.h>])
716 # figure out pointer size
717 SAVE_CFLAGS="$CFLAGS"
718 CFLAGS="$CFLAGS -I$srcdir"
719 AC_CHECK_SIZEOF(struct iaddr *, , [
720 #include "includes/inet.h"
723 CFLAGS="$SAVE_CFLAGS"
725 # Solaris does not have the msg_control or msg_controlen members
726 # in the msghdr structure unless you define:
728 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
730 # See the "standards" man page for details.
732 # We check for the msg_control member, and if it is not found, we check
733 # again with the appropriate defines added to the CFLAGS. (In order to
734 # do this we have to remove the check from the cache, which is what the
736 AC_CHECK_MEMBER(struct msghdr.msg_control,,
737 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
738 CFLAGS="$CFLAGS -D__EXTENSIONS__"
739 unset ac_cv_member_struct_msghdr_msg_control
740 AC_CHECK_MEMBER(struct msghdr.msg_control,,
741 [AC_MSG_ERROR([Missing msg_control member in
742 msg_control structure.])],
744 #include <sys/types.h>
745 #include <sys/socket.h>
749 #include <sys/types.h>
750 #include <sys/socket.h>
753 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
754 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
755 ,, [#include <linux/if_packet.h>])
757 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
765 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
767 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
768 use_libbind="$withval", use_libbind="no")
769 case "$use_libbind" in
771 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
774 BINDSUBDIR="\${top_srcdir}/bind"
775 my_abs_srcdir=`cd $srcdir && pwd`
776 BINDDIR="${my_abs_srcdir}/bind"
777 if test ! -d "$srcdir/bind"; then
778 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
780 if test -d "$srcdir/bind/bind9"; then
781 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
783 if test ! -f "$srcdir/bind/version.tmp"; then
784 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
786 . "$srcdir/bind/version.tmp"
787 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
788 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
790 AC_CONFIG_FILES([$srcdir/bind/Makefile])
792 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
793 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
794 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
795 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
798 if test ! -d "$use_libbind"; then
799 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
801 if test ! -d "$use_libbind/include" -o \
802 ! -f "$use_libbind/include/isc/buffer.h"
804 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
806 if test ! -d "$use_libbind/lib" -o \
807 \( ! -f "$use_libbind/lib/libisc.a" -a \
808 ! -f "$use_libbind/lib/libisc.la" \)
810 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
812 BINDDIR="$use_libbind"
813 BINDLIBIRSDIR="$BINDDIR/lib"
814 BINDLIBDNSDIR="$BINDDIR/lib"
815 BINDLIBISCCFGDIR="$BINDDIR/lib"
816 BINDLIBISCDIR="$BINDDIR/lib"
817 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
823 AC_SUBST(BINDLIBIRSDIR)
824 AC_SUBST(BINDLIBDNSDIR)
825 AC_SUBST(BINDLIBISCCFGDIR)
826 AC_SUBST(BINDLIBISCDIR)
827 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
828 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
831 # GNU libtool support
835 # Just set the maximum command line length for sunos
836 # as it otherwise takes a exceptionally long time to
837 # work it out. Required for libtool.
839 lt_cv_sys_max_cmd_len=4096
850 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
851 AC_ARG_ENABLE(libtool,
852 AS_HELP_STRING([--enable-libtool],
854 [use GNU libtool for dynamic shared libraries (default is yes).]),
856 @BEGIN WITHOUT LIBTOOL
857 [use GNU libtool for dynamic shared libraries (default is no).]),
859 want_libtool="$enableval")
861 if test "$use_libbind" != "no"; then
862 if test "$want_libtool" = "yes" -a \
863 ! -f "$use_libbind/lib/libisc.la"
865 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
867 if test "$want_libtool" = "no" -a \
868 ! -f "$use_libbind/lib/libisc.a"
870 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
875 if test "$want_libtool" = "no"; then
876 AC_MSG_ERROR([libtool configure is used but libtool is disabled?])
881 BINDLT="--with-libtool --disable-symtable"
882 # BIND does not provide uninstall
883 DISTCHECK_LIBTOOL_CONFIGURE_FLAG="--enable-libtool --disable-bind-install"
886 @BEGIN WITHOUT LIBTOOL
887 if test "$want_libtool" = "yes"; then
888 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
889 # expand $ac_configure_args
890 eval "set my_configure_args $ac_configure_args"
892 cd $srcdir; exec ./config+lt "$@"
893 AC_MSG_ERROR([Recovering failed])
903 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
905 # quoting in Makefile.am.in
909 # install bind includes and libraries
911 want_install_bind="no"
913 want_install_bind="yes"
915 if test "$want_libtool" = "yes"; then
916 want_install_bind="yes"
918 if test "$use_libbind" != "no"; then
919 want_install_bind="no"
921 AC_ARG_ENABLE(bind_install,
922 AS_HELP_STRING([--enable-bind-install],
924 [install bind includes and libraries.]),
926 @BEGIN WITHOUT LIBTOOL
927 [install bind includes and libraries (default is no).]),
929 want_install_bind="$enableval")
930 if test "$want_install_bind" = "yes"; then
931 if test "$use_libbind" != "no"; then
932 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
934 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
935 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
937 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
941 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
945 # OpenLDAP with SSL support.
946 AC_ARG_WITH(ldapcrypto,
947 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
948 [ldapcrypto=$withval],
951 # Gssapi to allow LDAP to authenticate with a keytab
952 AC_ARG_WITH(ldap-gssapi,
953 AC_HELP_STRING([--with-ldap-gssapi],
954 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
955 [ldap_gssapi=$withval],
959 # LDAP CASA auth support.
960 AC_ARG_WITH(ldapcasa,
961 AC_HELP_STRING([--with-ldapcasa],
962 [enable LDAP CASA auth support in dhcpd (default is no)]),
966 # OpenLDAP support is disabled by default, if enabled then SSL support is an
967 # extra optional that is also disabled by default. Enabling LDAP SSL support
968 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
969 # but doesn't include SSL. The two are not dependant.
970 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
973 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
974 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
975 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
976 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
977 if test x$ldap_gssapi = xyes ; then
978 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
979 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
982 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
983 AC_SUBST(LDAP_LIBS, [$LIBS])
987 AC_CHECK_HEADERS([ldap.h])
988 AC_CHECK_FUNCS([inet_pton inet_ntop])
991 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
993 if test x$ldapcasa = xyes ; then
994 AC_CHECK_HEADERS([micasa_mgmd.h],[
995 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
996 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
999 if test x$ldapcrypto = xyes ; then
1000 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
1003 if test x$ldap_gssapi = xyes; then
1004 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
1007 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
1010 # Append selected warning levels to CFLAGS before substitution (but after
1011 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
1012 CFLAGS="$CFLAGS $STD_CWARNINGS"
1014 # Try to add the bind and dhcp include directories
1015 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
1019 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
1021 # As of Solaris 11, ethernet dev files are in /dev/net
1022 AC_CHECK_FILE(/dev/net,
1023 [AC_DEFINE([USE_DEV_NET], [1],
1024 [Define to 1 if ethernet devices are in /dev/net])])
1028 AC_C_FLEXIBLE_ARRAY_MEMBER
1033 client/tests/Makefile
1036 common/tests/Makefile
1047 server/tests/Makefile
1053 AC_MSG_NOTICE([postconfig: run automake in $srcdir])
1054 (cd $srcdir; automake)
1055 AC_MSG_NOTICE([postconfig: rerun config.status])
1059 if test "$enable_dhcpv4o6" = "yes"; then
1060 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1061 elif test "$enable_dhcpv6" != "no"; then
1062 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1064 DHCP_VERSIONS="DHCPv4"
1067 cat > config.report << END
1069 ISC DHCP source configure results:
1070 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1074 Version: $PACKAGE_VERSION
1082 DHCP versions: $DHCP_VERSIONS
1085 debug: $enable_debug
1086 failover: $enable_failover
1087 execute: $enable_execute
1088 binary-leases: $enable_binary_leases
1089 dhcpv6: $enable_dhcpv6
1090 delayed-ack: $enable_delayed_ack
1093 ATF unittests : $atf_path
1096 # TODO: Add Perl system tests
1098 if test "$atf_path" != "no"
1100 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1101 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1102 echo "ATF_BIN : $ATF_BIN" >> config.report
1109 echo Now you can type "make" to build ISC DHCP