1 AC_INIT([DHCP],[4.4.0b1],[dhcp-users@isc.org])
4 # we specify "foreign" to avoid having to have the GNU mandated files,
5 # like AUTHORS, COPYING, and such
6 AM_INIT_AUTOMAKE([foreign])
8 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
9 # the configure and makefiles. Without it users doing things that
10 # change the timestamps on the code, like checking it into a cvs
11 # tree, could trigger a rebuild of the infrastructure files which
12 # might fail if they don't have the correct tools.
17 # We want to turn on warnings if we are using gcc and the user did
18 # not specify CFLAGS. The autoconf check for the C compiler sets the
19 # CFLAGS if gcc is used, so we will save it before we run that check.
22 # Now find our C compiler.
25 # Suppress warnings about --datarootdir
26 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
28 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
29 # user did not specify any flags. Add warnings in this case.
30 if test "$GCC" = "yes"; then
31 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
32 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
36 # We can have some flags to pass to bind configure
38 if test "$cross_compiling" = "yes"; then
39 BINDCONFIG="--host=$host"
41 # Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
42 # and as there can be a space inside an argument some magic is required.
43 # This sets $1 ... $N to my_configure_args, arg1 ... argN
44 eval "set my_configure_args $ac_configure_args"
45 # remove my_configure_args, i.e., the guard against empty $ac_configure_args
47 # iterate on arguments and copying 'arg' when it begins by an upper case
51 [[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
56 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
57 # parts of the IPv6 Advanced Socket API as a result. This is stupid
58 # as it breaks how the two halves (Basic and Advanced) of the IPv6
59 # Socket API were designed to be used but we have to live with it.
60 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
61 AC_USE_SYSTEM_EXTENSIONS
68 if test "X$AR" = "X"; then
70 ar program not found. Please fix your PATH to include the directory in
71 which ar resides, or set AR in the environment with the full path to ar.])
74 AC_CONFIG_HEADERS([includes/config.h])
76 # we sometimes need to know byte order for building packets
77 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
78 AC_SUBST(byte_order, LITTLE_ENDIAN))
79 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
80 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
81 or LITTLE_ENDIAN for LSB (Intel CPUs).])
83 # Optional compile-time DEBUGging.
85 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
86 [case "${enableval}" in
88 AC_DEFINE([DEBUG], [1],
89 [Define to compile debug-only DHCP software.])
90 # Just override CFLAGS totally to remove optimization.
92 no) enable_debug=no ;;
93 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
94 esac],[enable_debug=no])
96 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
97 # but I don't want to pollute the --help space.
99 #/* #define DEBUG_TOKENS */
100 #/* #define DEBUG_PACKET */
101 #/* #define DEBUG_EXPRESSIONS */
102 #/* #define DEBUG_FIND_LEASE */
103 #/* #define DEBUG_EXPRESSION_PARSE */
104 #/* #define DEBUG_CLASS_MATCHING */
105 #/* #define DEBUG_MEMORY_LEAKAGE */
106 #/* #define DEBUG_MALLOC_POOL */
107 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
108 #/* #define DEBUG_RC_HISTORY */
109 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
110 #/* #define RC_HISTORY_MAX 10240 */
111 #/* #define POINTER_DEBUG */
112 #/* #define DEBUG_FAILOVER_MESSAGES */
113 #/* #define DEBUG_FAILOVER_TIMING */
114 #/* #define DEBUG_DUMP_ALL_LEASES */
116 # Failover optional compile-time feature.
117 AC_ARG_ENABLE(failover,
118 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
119 # Failover is on by default, so define if it is not explicitly disabled.
120 if test "$enable_failover" != "no"; then
121 enable_failover="yes"
122 AC_DEFINE([FAILOVER_PROTOCOL], [1],
123 [Define to include Failover Protocol support.])
127 AC_ARG_ENABLE(execute,
128 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
129 # execute() is on by default, so define if it is not explicitly disabled.
130 if test "$enable_execute" != "no" ; then
132 AC_DEFINE([ENABLE_EXECUTE], [1],
133 [Define to include execute() config language support.])
136 # Server tracing support.
137 AC_ARG_ENABLE(tracing,
138 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
139 # tracing is on by default, so define if it is not explicitly disabled.
140 if test "$enable_tracing" != "no" ; then
141 AC_DEFINE([TRACING], [1],
142 [Define to include server activity tracing support.])
145 # Delayed-ack feature support.
146 AC_ARG_ENABLE(delayed_ack,
147 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
148 if test "$enable_delayed_ack" != "no"; then
149 enable_delayed_ack="yes"
150 AC_DEFINE([DELAYED_ACK], [1],
151 [Define to queue multiple DHCPACK replies per fsync.])
154 # DHCPv6 optional compile-time feature.
155 AC_ARG_ENABLE(dhcpv6,
156 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
157 # DHCPv6 is on by default, so define if it is not explicitly disabled.
158 if test "$enable_dhcpv6" != "no"; then
160 AC_DEFINE([DHCPv6], [1],
161 [Define to 1 to include DHCPv6 support.])
164 # DHCPv4o6 optional compile-time feature.
165 AC_ARG_ENABLE(dhcpv4o6,
166 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
167 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
168 if test "$enable_dhcpv4o6" = "yes"; then
169 # DHCPv4o6 requires DHCPv6
170 if test "$enable_dhcpv6" = "no"; then
171 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
173 AC_DEFINE([DHCP4o6], [1],
174 [Define to 1 to include DHCPv4 over DHCPv6 support.])
176 # so we can report below
180 # Relay port (draft-ietf-dhc-relay-port-10.txt) optional compile-time feature.
181 AC_ARG_ENABLE(relay-port,
182 AS_HELP_STRING([--enable-relay-port],[enable support for relay port (default is no)]))
183 # Relay port is off by default (for now)
184 if test "$enable_relay_port" = "yes"; then
185 AC_DEFINE([RELAY_PORT], [1],
186 [Define to 1 to include relay port support.])
188 # so we can report below
189 enable_relay_port="no"
192 # PARANOIA is off by default (until we can test it with all features)
193 AC_ARG_ENABLE(paranoia,
194 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
195 AC_ARG_ENABLE(early_chroot,
196 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
197 # If someone enables early chroot, but does not enable paranoia, do so for
199 if test "$enable_paranoia" != "yes" && \
200 test "$enable_early_chroot" = "yes" ; then
201 enable_paranoia="yes"
204 if test "$enable_paranoia" = "yes" ; then
205 AC_DEFINE([PARANOIA], [1],
206 [Define to any value to include Ari's PARANOIA patch.])
208 if test "$enable_early_chroot" = "yes" ; then
209 AC_DEFINE([EARLY_CHROOT], [1],
210 [Define to any value to chroot() prior to loading config.])
213 AC_ARG_ENABLE(ipv4_pktinfo,
214 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
216 if test "$enable_ipv4_pktinfo" = "yes"; then
217 AC_DEFINE([USE_V4_PKTINFO], [1],
218 [Define to 1 to enable IPv4 packet info support.])
221 AC_ARG_ENABLE(use_sockets,
222 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
224 if test "$enable_use_sockets" = "yes"; then
225 AC_DEFINE([USE_SOCKETS], [1],
226 [Define to 1 to use the standard BSD socket API.])
229 # Include the PID in the log messages. This is useful when there may
230 # be multiple instances of a program.
231 # This is off by default
232 AC_ARG_ENABLE(log_pid,
233 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
234 if test "$enable_log_pid" = "yes" ; then
235 AC_DEFINE([USE_LOG_PID], [1],
236 [Define to include PIDs in syslog messages.])
239 # Allow for binary search when inserting v4 leases into queues
240 AC_ARG_ENABLE(binary_leases,
241 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
242 # binary_leases is off by default.
243 if test "$enable_binary_leases" = "yes"; then
244 AC_DEFINE([BINARY_LEASES], [1],
245 [Define to support binary insertion of leases into queues.])
247 enable_binary_leases="no"
252 DISTCHECK_ATF_CONFIGURE_FLAG=
255 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
256 [atf_path="$withval"])
257 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
258 if test "$atf_path" = "bind" ; then
259 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
261 atf_path="\${top_srcdir}/bind/atf"
262 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
263 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
264 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
266 AC_SUBST(ATF_LDFLAGS)
268 BINDCONFIG="$BINDCONFIG --with-atf"
269 elif test "$atf_path" != "no" ; then
270 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
271 # Config path for pkg-config
273 if test "$atf_path" != "yes" ; then
274 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
275 atf_pcp=$atf_path/lib/pkgconfig
276 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
277 atf_pcp=$atf_path/lib64/pkgconfig
280 # Not specified, try some common paths
281 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
284 if test -f $d/lib/pkgconfig/atf-c.pc ; then
285 atf_pcp=$d/lib/pkgconfig
287 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
288 atf_pcp=$d/lib64/pkgconfig
294 if test "$atf_pcp" = "" ; then
295 AC_MSG_ERROR([Unable to find atf files in location specified])
297 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
298 if test "$pkgcfg_found" = ""; then
299 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
301 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
302 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
303 if test -f $atf_pcp/atf-sh.pc ; then
304 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
306 # older versions don't have atf-sh, try usual place
307 ATF_BIN=$atf_path/bin
310 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
311 AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
315 AC_SUBST(ATF_LDFLAGS)
320 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
321 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
322 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
325 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
326 ### need to look there and potentially overwrite by default (but not if
327 ### the user configures an alternate value). LOCALSTATEDIR is totally
328 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
329 ### they would be insane for suggesting it. We need to look in /var/for
330 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
333 AC_PREFIX_PROGRAM(dhcpd)
335 # XXX - isn't there SOME WAY to default autoconf to /var instead of
336 # /usr/local/var/no/one/has/this/please/stop/trying?
337 case "$localstatedir" in
343 # Default server configuration file.
344 AC_ARG_WITH(srv-conf-file,
345 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
346 (default is typically /etc/dhcpd.conf)]),
347 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
348 [Default file containing dhcpd configuration.]))
350 # Allow specification of alternate state files
351 AC_ARG_WITH(srv-lease-file,
352 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
353 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
354 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
355 [File for dhcpd leases.]))
357 AC_MSG_CHECKING([for dhcpd.leases location])
358 if [[ "x$with_srv_lease_file" = "x" ]] ; then
359 if [[ -d "${localstatedir}/db" ]] ; then
360 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
361 elif [[ -d "${localstatedir}/state" ]] ; then
362 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
363 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
365 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
367 elif [[ -d "${localstatedir}/lib" ]] ; then
368 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
369 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
371 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
373 elif [[ -d "${localstatedir}/etc" ]] ; then
374 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
376 with_srv_lease_file="/etc/dhcpd.leases"
379 AC_MSG_RESULT($with_srv_lease_file)
381 AC_ARG_WITH(srv6-lease-file,
382 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
383 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
384 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
385 [File for dhcpd6 leases.]))
387 AC_MSG_CHECKING([for dhcpd6.leases location])
388 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
389 if [[ -d "${localstatedir}/db" ]] ; then
390 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
391 elif [[ -d "${localstatedir}/state" ]] ; then
392 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
393 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
395 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
397 elif [[ -d "${localstatedir}/lib" ]] ; then
398 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
399 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
401 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
403 elif [[ -d "${localstatedir}/etc" ]] ; then
404 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
406 with_srv6_lease_file="/etc/dhcpd6.leases"
409 AC_MSG_RESULT($with_srv6_lease_file)
411 AC_ARG_WITH(cli-lease-file,
412 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
413 (default is LOCALSTATEDIR/db/dhclient.leases)]),
414 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
415 [File for dhclient leases.]))
417 AC_MSG_CHECKING([for dhclient.leases location])
418 if [[ "x$with_cli_lease_file" = "x" ]] ; then
419 if [[ -d "${localstatedir}/db" ]] ; then
420 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
421 elif [[ -d "${localstatedir}/state" ]] ; then
422 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
423 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
425 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
427 elif [[ -d "${localstatedir}/lib" ]] ; then
428 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
429 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
431 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
433 elif [[ -d "${localstatedir}/etc" ]] ; then
434 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
436 with_cli_lease_file="/etc/dhclient.leases"
439 AC_MSG_RESULT($with_cli_lease_file)
441 AC_ARG_WITH(cli6-lease-file,
442 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
443 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
444 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
445 [File for dhclient6 leases.]))
447 AC_MSG_CHECKING([for dhclient6.leases location])
448 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
449 if [[ -d "${localstatedir}/db" ]] ; then
450 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
451 elif [[ -d "${localstatedir}/state" ]] ; then
452 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
453 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
455 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
457 elif [[ -d "${localstatedir}/lib" ]] ; then
458 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
459 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
461 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
463 elif [[ -d "${localstatedir}/etc" ]] ; then
464 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
466 with_cli6_lease_file="/etc/dhclient6.leases"
469 AC_MSG_RESULT($with_cli6_lease_file)
471 AC_ARG_WITH(srv-pid-file,
472 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
473 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
474 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
475 [File for dhcpd process information.]))
476 AC_ARG_WITH(srv6-pid-file,
477 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
478 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
479 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
480 [File for dhcpd6 process information.]))
481 AC_ARG_WITH(cli-pid-file,
482 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
483 (default is LOCALSTATEDIR/run/dhclient.pid)]),
484 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
485 [File for dhclient process information.]))
486 AC_ARG_WITH(cli6-pid-file,
487 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
488 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
489 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
490 [File for dhclient6 process information.]))
491 AC_ARG_WITH(relay-pid-file,
492 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
493 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
494 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
495 [File for dhcrelay process information.]))
496 AC_ARG_WITH(relay6-pid-file,
497 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
498 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
499 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
500 [File for dhcrelay6 process information.]))
508 # Some systems need the u_intX_t types defined across.
509 AC_CHECK_TYPE([u_int8_t], [], [
511 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
514 AC_CHECK_TYPE([u_int16_t], [], [
516 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
519 AC_CHECK_TYPE([u_int32_t], [], [
521 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
524 AC_CHECK_TYPE([u_int64_t], [], [
526 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
530 # see if ifaddrs.h is available
531 AC_CHECK_HEADERS(ifaddrs.h)
533 # figure out what IPv4 interface code to use
534 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
536 relay_port_supported="no"
537 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
539 #ifdef HAVE_LINUX_TYPES_H
540 #include <linux/types.h>
545 AC_DEFINE([HAVE_LPF], [1],
546 [Define to 1 to use the Linux Packet Filter interface code.])
547 relay_port_supported="yes"
549 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
550 if test -n "$DO_DLPI"
552 AC_DEFINE([HAVE_DLPI], [1],
553 [Define to 1 to use DLPI interface code.])
555 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
558 AC_DEFINE([HAVE_BPF], [1],
559 [Define to 1 to use the
560 Berkeley Packet Filter interface code.])
561 relay_port_supported="yes"
566 if test "$enable_relay_port" = "yes"; then
567 if test "$relay_port_supported" != "yes"; then
568 AC_MSG_ERROR([--enable-relay-port requires BPF or LPF])
572 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
573 # use the same structures. We like to use 'struct lifconf' and 'struct
574 # lifreq', but we'll use these other structures if they're present. HPUX
575 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
578 AC_MSG_CHECKING([for struct lifnum])
579 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
580 #include <sys/socket.h>
582 ]], [[ struct lifnum a;
583 ]])],[AC_MSG_RESULT(yes)
584 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
585 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
587 AC_MSG_CHECKING([for struct if_laddrconf])
588 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
590 ]], [[ struct if_laddrconf a;
591 ]])],[AC_MSG_RESULT(yes)
592 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
593 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
595 AC_MSG_CHECKING([for struct if_laddrreq])
596 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
598 ]], [[ struct if_laddrreq a;
599 ]])],[AC_MSG_RESULT(yes)
600 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
601 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
604 # check for GCC noreturn attribute
606 AC_MSG_CHECKING(for GCC noreturn attribute)
607 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
608 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
609 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
610 AC_DEFINE([ISC_DHCP_NORETURN], [],
611 [Define to the string for a noreturn attribute.])])
613 # Look for optional headers.
614 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
616 # Solaris needs some libraries for functions
617 AC_SEARCH_LIBS(socket, [socket])
618 AC_SEARCH_LIBS(inet_ntoa, [nsl])
620 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
621 AC_DEFINE([NEED_INET_ATON], [1],
622 [Define to 1 if the inet_aton() function is missing.]))
624 # Check for a standalone regex library.
625 AC_SEARCH_LIBS(regcomp, [regex])
627 AC_CHECK_FUNCS(strlcat)
629 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
630 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
632 # For some Solaris nanosleep is found by BIND in librt
634 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
635 if test "$have_nanosleep" = "no"; then
636 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
638 if test "$have_nanosleep" = "rt"; then
642 # check for /dev/random (declares HAVE_DEV_RANDOM)
643 AC_MSG_CHECKING(for random device)
644 AC_ARG_WITH(randomdev,
645 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
646 (default is /dev/random)]),
647 use_randomdev="$withval", use_randomdev="unspec")
648 if test "$use_randomdev" = "unspec"; then
649 if test "$cross_compiling" = "yes"; then
650 AC_MSG_RESULT(unspecified)
651 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
653 use_randomdev="/dev/random"
654 elif test "$use_randomdev" = "yes"; then
655 use_randomdev="/dev/random"
657 if test "$use_randomdev" = "no"; then
658 AC_MSG_RESULT(disabled)
659 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
661 if test "$cross_compiling" = "yes"; then
662 AC_MSG_RESULT($use_randomdev (unchecked))
664 AC_MSG_RESULT($use_randomdev)
665 AC_CHECK_FILE($use_randomdev,
666 AC_DEFINE([HAVE_DEV_RANDOM], [1],
667 [Define to 1 if you have the /dev/random or other configured file.]),
668 AC_MSG_ERROR(cannot find $use_randomdev))
670 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
673 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
674 # check kqueue/epoll/devpoll alternative to select
675 AC_ARG_ENABLE(kqueue,
676 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
677 want_kqueue="$enableval", want_kqueue="no")
678 if test "$want_kqueue" = "yes"; then
679 BINDIOMUX="--enable-kqueue"
680 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
683 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
684 want_epoll="$enableval", want_epoll="no")
685 if test "$want_epoll" = "yes"; then
686 BINDIOMUX="--enable-epoll"
687 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
689 AC_ARG_ENABLE(devpoll,
690 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
691 want_devpoll="$enableval", want_devpoll="no")
692 if test "$want_devpoll" = "yes"; then
693 BINDIOMUX="--enable-devpoll"
694 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
698 # general extra bind configure arguments
699 AC_ARG_WITH(bind-extra-config,
700 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
701 with some extra options (default is none)]),
702 use_xbindconfig="$withval", use_xbindconfig="")
703 case "$use_xbindconfig" in
707 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
708 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
712 # see if there is a "sa_len" field in our interface information structure
713 AC_CHECK_MEMBER(struct sockaddr.sa_len,
714 AC_DEFINE([HAVE_SA_LEN], [],
715 [Define to 1 if the sockaddr structure has a length field.]),
717 [#include <sys/socket.h>])
719 # figure out pointer size
720 SAVE_CFLAGS="$CFLAGS"
721 CFLAGS="$CFLAGS -I$srcdir"
722 AC_CHECK_SIZEOF(struct iaddr *, , [
723 #include "includes/inet.h"
726 CFLAGS="$SAVE_CFLAGS"
728 # Solaris does not have the msg_control or msg_controlen members
729 # in the msghdr structure unless you define:
731 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
733 # See the "standards" man page for details.
735 # We check for the msg_control member, and if it is not found, we check
736 # again with the appropriate defines added to the CFLAGS. (In order to
737 # do this we have to remove the check from the cache, which is what the
739 AC_CHECK_MEMBER(struct msghdr.msg_control,,
740 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
741 CFLAGS="$CFLAGS -D__EXTENSIONS__"
742 unset ac_cv_member_struct_msghdr_msg_control
743 AC_CHECK_MEMBER(struct msghdr.msg_control,,
744 [AC_MSG_ERROR([Missing msg_control member in
745 msg_control structure.])],
747 #include <sys/types.h>
748 #include <sys/socket.h>
752 #include <sys/types.h>
753 #include <sys/socket.h>
756 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
757 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
758 ,, [#include <linux/if_packet.h>])
760 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
768 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
770 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
771 use_libbind="$withval", use_libbind="no")
772 case "$use_libbind" in
774 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
777 BINDSUBDIR="\${top_srcdir}/bind"
778 my_abs_srcdir=`cd $srcdir && pwd`
779 BINDDIR="${my_abs_srcdir}/bind"
780 if test ! -d "$srcdir/bind"; then
781 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
783 if test -d "$srcdir/bind/bind9"; then
784 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
786 if test ! -f "$srcdir/bind/version.tmp"; then
787 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
789 . "$srcdir/bind/version.tmp"
790 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
791 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
793 AC_CONFIG_FILES([$srcdir/bind/Makefile])
795 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
796 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
797 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
798 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
801 if test ! -d "$use_libbind"; then
802 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
804 if test ! -d "$use_libbind/include" -o \
805 ! -f "$use_libbind/include/isc/buffer.h"
807 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
809 if test ! -d "$use_libbind/lib" -o \
810 \( ! -f "$use_libbind/lib/libisc.a" -a \
811 ! -f "$use_libbind/lib/libisc.la" \)
813 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
815 BINDDIR="$use_libbind"
816 BINDLIBIRSDIR="$BINDDIR/lib"
817 BINDLIBDNSDIR="$BINDDIR/lib"
818 BINDLIBISCCFGDIR="$BINDDIR/lib"
819 BINDLIBISCDIR="$BINDDIR/lib"
820 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
826 AC_SUBST(BINDLIBIRSDIR)
827 AC_SUBST(BINDLIBDNSDIR)
828 AC_SUBST(BINDLIBISCCFGDIR)
829 AC_SUBST(BINDLIBISCDIR)
830 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
831 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
834 # GNU libtool support
838 # Just set the maximum command line length for sunos
839 # as it otherwise takes a exceptionally long time to
840 # work it out. Required for libtool.
842 lt_cv_sys_max_cmd_len=4096
849 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
850 AC_ARG_ENABLE(libtool,
851 AS_HELP_STRING([--enable-libtool],
852 [use GNU libtool for dynamic shared libraries (default is no).]),
853 want_libtool="$enableval")
855 if test "$use_libbind" != "no"; then
856 if test "$want_libtool" = "yes" -a \
857 ! -f "$use_libbind/lib/libisc.la"
859 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
861 if test "$want_libtool" = "no" -a \
862 ! -f "$use_libbind/lib/libisc.a"
864 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
869 if test "$want_libtool" = "yes"; then
870 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
871 # expand $ac_configure_args
872 eval "set my_configure_args $ac_configure_args"
874 cd $srcdir; exec ./config+lt "$@"
875 AC_MSG_ERROR([Recovering failed])
884 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
886 # quoting in Makefile.am.in
890 # install bind includes and libraries
892 want_install_bind="no"
893 if test "$want_libtool" = "yes"; then
894 want_install_bind="yes"
896 if test "$use_libbind" != "no"; then
897 want_install_bind="no"
899 AC_ARG_ENABLE(bind_install,
900 AS_HELP_STRING([--enable-bind-install],
901 [install bind includes and libraries (default is no).]),
902 want_install_bind="$enableval")
903 if test "$want_install_bind" = "yes"; then
904 if test "$use_libbind" != "no"; then
905 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
907 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
908 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
910 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
914 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
918 # OpenLDAP with SSL support.
919 AC_ARG_WITH(ldapcrypto,
920 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
921 [ldapcrypto=$withval],
924 # Gssapi to allow LDAP to authenticate with a keytab
925 AC_ARG_WITH(ldap-gssapi,
926 AC_HELP_STRING([--with-ldap-gssapi],
927 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
928 [ldap_gssapi=$withval],
932 # LDAP CASA auth support.
933 AC_ARG_WITH(ldapcasa,
934 AC_HELP_STRING([--with-ldapcasa],
935 [enable LDAP CASA auth support in dhcpd (default is no)]),
939 # OpenLDAP support is disabled by default, if enabled then SSL support is an
940 # extra optional that is also disabled by default. Enabling LDAP SSL support
941 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
942 # but doesn't include SSL. The two are not dependant.
943 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
946 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
947 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
948 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
949 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
950 if test x$ldap_gssapi = xyes ; then
951 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
952 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
955 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
956 AC_SUBST(LDAP_LIBS, [$LIBS])
960 AC_CHECK_HEADERS([ldap.h])
961 AC_CHECK_FUNCS([inet_pton inet_ntop])
964 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
966 if test x$ldapcasa = xyes ; then
967 AC_CHECK_HEADERS([micasa_mgmd.h],[
968 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
969 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
972 if test x$ldapcrypto = xyes ; then
973 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
976 if test x$ldap_gssapi = xyes; then
977 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
980 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
983 # Append selected warning levels to CFLAGS before substitution (but after
984 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
985 CFLAGS="$CFLAGS $STD_CWARNINGS"
987 # Try to add the bind and dhcp include directories
988 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
992 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
994 # As of Solaris 11, ethernet dev files are in /dev/net
995 AC_CHECK_FILE(/dev/net,
996 [AC_DEFINE([USE_DEV_NET], [1],
997 [Define to 1 if ethernet devices are in /dev/net])])
1001 AC_C_FLEXIBLE_ARRAY_MEMBER
1006 client/tests/Makefile
1009 common/tests/Makefile
1020 server/tests/Makefile
1026 if test "$enable_dhcpv4o6" = "yes"; then
1027 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1028 elif test "$enable_dhcpv6" != "no"; then
1029 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1031 DHCP_VERSIONS="DHCPv4"
1034 cat > config.report << END
1036 ISC DHCP source configure results:
1037 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1041 Version: $PACKAGE_VERSION
1049 DHCP versions: $DHCP_VERSIONS
1052 debug: $enable_debug
1053 failover: $enable_failover
1054 execute: $enable_execute
1055 binary-leases: $enable_binary_leases
1056 dhcpv6: $enable_dhcpv6
1057 delayed-ack: $enable_delayed_ack
1058 dhcpv4o6: $enable_dhcpv4o6
1059 relay-port: $enable_relay_port
1062 ATF unittests : $atf_path
1065 # TODO: Add Perl system tests
1067 if test "$atf_path" != "no"
1069 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1070 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1071 echo "ATF_BIN : $ATF_BIN" >> config.report
1078 echo Now you can type "make" to build ISC DHCP