1 AC_INIT([DHCP],[4.4.0a1],[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 # DHCPv4o6 is not yet compatible with delayed-ack
174 if test "$enable_delayed_ack" = "yes"; then
175 AC_MSG_ERROR([dhcpv4o6 is not compatible with delayed-ack])
177 AC_DEFINE([DHCP4o6], [1],
178 [Define to 1 to include DHCPv4 over DHCPv6 support.])
180 # so we can report below
184 # PARANOIA is off by default (until we can test it with all features)
185 AC_ARG_ENABLE(paranoia,
186 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
187 AC_ARG_ENABLE(early_chroot,
188 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
189 # If someone enables early chroot, but does not enable paranoia, do so for
191 if test "$enable_paranoia" != "yes" && \
192 test "$enable_early_chroot" = "yes" ; then
193 enable_paranoia="yes"
196 if test "$enable_paranoia" = "yes" ; then
197 AC_DEFINE([PARANOIA], [1],
198 [Define to any value to include Ari's PARANOIA patch.])
200 if test "$enable_early_chroot" = "yes" ; then
201 AC_DEFINE([EARLY_CHROOT], [1],
202 [Define to any value to chroot() prior to loading config.])
205 AC_ARG_ENABLE(ipv4_pktinfo,
206 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
208 if test "$enable_ipv4_pktinfo" = "yes"; then
209 AC_DEFINE([USE_V4_PKTINFO], [1],
210 [Define to 1 to enable IPv4 packet info support.])
213 AC_ARG_ENABLE(use_sockets,
214 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
216 if test "$enable_use_sockets" = "yes"; then
217 AC_DEFINE([USE_SOCKETS], [1],
218 [Define to 1 to use the standard BSD socket API.])
221 # Include the PID in the log messages. This is useful when there may
222 # be multiple instances of a program.
223 # This is off by default
224 AC_ARG_ENABLE(log_pid,
225 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
226 if test "$enable_log_pid" = "yes" ; then
227 AC_DEFINE([USE_LOG_PID], [1],
228 [Define to include PIDs in syslog messages.])
231 # Allow for binary search when inserting v4 leases into queues
232 AC_ARG_ENABLE(binary_leases,
233 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
234 # binary_leases is off by default.
235 if test "$enable_binary_leases" = "yes"; then
236 AC_DEFINE([BINARY_LEASES], [1],
237 [Define to support binary insertion of leases into queues.])
239 enable_binary_leases="no"
244 DISTCHECK_ATF_CONFIGURE_FLAG=
247 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
248 [atf_path="$withval"])
249 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
250 if test "$atf_path" = "bind" ; then
251 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
253 atf_path="\${top_srcdir}/bind/atf"
254 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
255 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
256 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
258 AC_SUBST(ATF_LDFLAGS)
260 BINDCONFIG="$BINDCONFIG --with-atf"
261 elif test "$atf_path" != "no" ; then
262 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
263 # Config path for pkg-config
265 if test "$atf_path" != "yes" ; then
266 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
267 atf_pcp=$atf_path/lib/pkgconfig
268 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
269 atf_pcp=$atf_path/lib64/pkgconfig
272 # Not specified, try some common paths
273 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
276 if test -f $d/lib/pkgconfig/atf-c.pc ; then
277 atf_pcp=$d/lib/pkgconfig
279 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
280 atf_pcp=$d/lib64/pkgconfig
286 if test "$atf_pcp" = "" ; then
287 AC_MSG_ERROR([Unable to find atf files in location specified])
289 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
290 if test "$pkgcfg_found" = ""; then
291 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
293 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
294 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
295 if test -f $atf_pcp/atf-sh.pc ; then
296 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
298 # older versions don't have atf-sh, try usual place
299 ATF_BIN=$atf_path/bin
302 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
303 AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
307 AC_SUBST(ATF_LDFLAGS)
312 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
313 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
314 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
317 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
318 ### need to look there and potentially overwrite by default (but not if
319 ### the user configures an alternate value). LOCALSTATEDIR is totally
320 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
321 ### they would be insane for suggesting it. We need to look in /var/for
322 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
325 AC_PREFIX_PROGRAM(dhcpd)
327 # XXX - isn't there SOME WAY to default autoconf to /var instead of
328 # /usr/local/var/no/one/has/this/please/stop/trying?
329 case "$localstatedir" in
335 # Default server configuration file.
336 AC_ARG_WITH(srv-conf-file,
337 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
338 (default is typically /etc/dhcpd.conf)]),
339 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
340 [Default file containing dhcpd configuration.]))
342 # Allow specification of alternate state files
343 AC_ARG_WITH(srv-lease-file,
344 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
345 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
346 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
347 [File for dhcpd leases.]))
349 AC_MSG_CHECKING([for dhcpd.leases location])
350 if [[ "x$with_srv_lease_file" = "x" ]] ; then
351 if [[ -d "${localstatedir}/db" ]] ; then
352 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
353 elif [[ -d "${localstatedir}/state" ]] ; then
354 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
355 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
357 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
359 elif [[ -d "${localstatedir}/lib" ]] ; then
360 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
361 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
363 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
365 elif [[ -d "${localstatedir}/etc" ]] ; then
366 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
368 with_srv_lease_file="/etc/dhcpd.leases"
371 AC_MSG_RESULT($with_srv_lease_file)
373 AC_ARG_WITH(srv6-lease-file,
374 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
375 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
376 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
377 [File for dhcpd6 leases.]))
379 AC_MSG_CHECKING([for dhcpd6.leases location])
380 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
381 if [[ -d "${localstatedir}/db" ]] ; then
382 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
383 elif [[ -d "${localstatedir}/state" ]] ; then
384 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
385 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
387 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
389 elif [[ -d "${localstatedir}/lib" ]] ; then
390 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
391 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
393 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
395 elif [[ -d "${localstatedir}/etc" ]] ; then
396 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
398 with_srv6_lease_file="/etc/dhcpd6.leases"
401 AC_MSG_RESULT($with_srv6_lease_file)
403 AC_ARG_WITH(cli-lease-file,
404 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
405 (default is LOCALSTATEDIR/db/dhclient.leases)]),
406 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
407 [File for dhclient leases.]))
409 AC_MSG_CHECKING([for dhclient.leases location])
410 if [[ "x$with_cli_lease_file" = "x" ]] ; then
411 if [[ -d "${localstatedir}/db" ]] ; then
412 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
413 elif [[ -d "${localstatedir}/state" ]] ; then
414 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
415 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
417 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
419 elif [[ -d "${localstatedir}/lib" ]] ; then
420 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
421 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
423 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
425 elif [[ -d "${localstatedir}/etc" ]] ; then
426 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
428 with_cli_lease_file="/etc/dhclient.leases"
431 AC_MSG_RESULT($with_cli_lease_file)
433 AC_ARG_WITH(cli6-lease-file,
434 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
435 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
436 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
437 [File for dhclient6 leases.]))
439 AC_MSG_CHECKING([for dhclient6.leases location])
440 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
441 if [[ -d "${localstatedir}/db" ]] ; then
442 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
443 elif [[ -d "${localstatedir}/state" ]] ; then
444 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
445 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
447 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
449 elif [[ -d "${localstatedir}/lib" ]] ; then
450 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
451 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
453 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
455 elif [[ -d "${localstatedir}/etc" ]] ; then
456 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
458 with_cli6_lease_file="/etc/dhclient6.leases"
461 AC_MSG_RESULT($with_cli6_lease_file)
463 AC_ARG_WITH(srv-pid-file,
464 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
465 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
466 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
467 [File for dhcpd process information.]))
468 AC_ARG_WITH(srv6-pid-file,
469 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
470 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
471 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
472 [File for dhcpd6 process information.]))
473 AC_ARG_WITH(cli-pid-file,
474 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
475 (default is LOCALSTATEDIR/run/dhclient.pid)]),
476 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
477 [File for dhclient process information.]))
478 AC_ARG_WITH(cli6-pid-file,
479 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
480 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
481 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
482 [File for dhclient6 process information.]))
483 AC_ARG_WITH(relay-pid-file,
484 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
485 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
486 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
487 [File for dhcrelay process information.]))
488 AC_ARG_WITH(relay6-pid-file,
489 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
490 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
491 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
492 [File for dhcrelay6 process information.]))
500 # Some systems need the u_intX_t types defined across.
501 AC_CHECK_TYPE([u_int8_t], [], [
503 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
506 AC_CHECK_TYPE([u_int16_t], [], [
508 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
511 AC_CHECK_TYPE([u_int32_t], [], [
513 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
516 AC_CHECK_TYPE([u_int64_t], [], [
518 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
522 # see if ifaddrs.h is available
523 AC_CHECK_HEADERS(ifaddrs.h)
525 # figure out what IPv4 interface code to use
526 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
528 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
530 #ifdef HAVE_LINUX_TYPES_H
531 #include <linux/types.h>
536 AC_DEFINE([HAVE_LPF], [1],
537 [Define to 1 to use the Linux Packet Filter interface code.])
539 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
540 if test -n "$DO_DLPI"
542 AC_DEFINE([HAVE_DLPI], [1],
543 [Define to 1 to use DLPI interface code.])
545 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
548 AC_DEFINE([HAVE_BPF], [1],
549 [Define to 1 to use the
550 Berkeley Packet Filter interface code.])
555 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
556 # use the same structures. We like to use 'struct lifconf' and 'struct
557 # lifreq', but we'll use these other structures if they're present. HPUX
558 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
561 AC_MSG_CHECKING([for struct lifnum])
562 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
563 #include <sys/socket.h>
565 ]], [[ struct lifnum a;
566 ]])],[AC_MSG_RESULT(yes)
567 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
568 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
570 AC_MSG_CHECKING([for struct if_laddrconf])
571 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
573 ]], [[ struct if_laddrconf a;
574 ]])],[AC_MSG_RESULT(yes)
575 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
576 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
578 AC_MSG_CHECKING([for struct if_laddrreq])
579 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
581 ]], [[ struct if_laddrreq a;
582 ]])],[AC_MSG_RESULT(yes)
583 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
584 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
587 # check for GCC noreturn attribute
589 AC_MSG_CHECKING(for GCC noreturn attribute)
590 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
591 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
592 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
593 AC_DEFINE([ISC_DHCP_NORETURN], [],
594 [Define to the string for a noreturn attribute.])])
596 # Look for optional headers.
597 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
599 # Solaris needs some libraries for functions
600 AC_SEARCH_LIBS(socket, [socket])
601 AC_SEARCH_LIBS(inet_ntoa, [nsl])
603 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
604 AC_DEFINE([NEED_INET_ATON], [1],
605 [Define to 1 if the inet_aton() function is missing.]))
607 # Check for a standalone regex library.
608 AC_SEARCH_LIBS(regcomp, [regex])
610 AC_CHECK_FUNCS(strlcat)
612 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
613 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
615 # For some Solaris nanosleep is found by BIND in librt
617 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
618 if test "$have_nanosleep" = "no"; then
619 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
621 if test "$have_nanosleep" = "rt"; then
625 # check for /dev/random (declares HAVE_DEV_RANDOM)
626 AC_MSG_CHECKING(for random device)
627 AC_ARG_WITH(randomdev,
628 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
629 (default is /dev/random)]),
630 use_randomdev="$withval", use_randomdev="unspec")
631 if test "$use_randomdev" = "unspec"; then
632 if test "$cross_compiling" = "yes"; then
633 AC_MSG_RESULT(unspecified)
634 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
636 use_randomdev="/dev/random"
637 elif test "$use_randomdev" = "yes"; then
638 use_randomdev="/dev/random"
640 if test "$use_randomdev" = "no"; then
641 AC_MSG_RESULT(disabled)
642 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
644 if test "$cross_compiling" = "yes"; then
645 AC_MSG_RESULT($use_randomdev (unchecked))
647 AC_MSG_RESULT($use_randomdev)
648 AC_CHECK_FILE($use_randomdev,
649 AC_DEFINE([HAVE_DEV_RANDOM], [1],
650 [Define to 1 if you have the /dev/random or other configured file.]),
651 AC_MSG_ERROR(cannot find $use_randomdev))
653 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
656 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
657 # check kqueue/epoll/devpoll alternative to select
658 AC_ARG_ENABLE(kqueue,
659 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
660 want_kqueue="$enableval", want_kqueue="no")
661 if test "$want_kqueue" = "yes"; then
662 BINDIOMUX="--enable-kqueue"
663 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
666 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
667 want_epoll="$enableval", want_epoll="no")
668 if test "$want_epoll" = "yes"; then
669 BINDIOMUX="--enable-epoll"
670 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
672 AC_ARG_ENABLE(devpoll,
673 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
674 want_devpoll="$enableval", want_devpoll="no")
675 if test "$want_devpoll" = "yes"; then
676 BINDIOMUX="--enable-devpoll"
677 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
681 # general extra bind configure arguments
682 AC_ARG_WITH(bind-extra-config,
683 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
684 with some extra options (default is none)]),
685 use_xbindconfig="$withval", use_xbindconfig="")
686 case "$use_xbindconfig" in
690 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
691 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
695 # see if there is a "sa_len" field in our interface information structure
696 AC_CHECK_MEMBER(struct sockaddr.sa_len,
697 AC_DEFINE([HAVE_SA_LEN], [],
698 [Define to 1 if the sockaddr structure has a length field.]),
700 [#include <sys/socket.h>])
702 # figure out pointer size
703 SAVE_CFLAGS="$CFLAGS"
704 CFLAGS="$CFLAGS -I$srcdir"
705 AC_CHECK_SIZEOF(struct iaddr *, , [
706 #include "includes/inet.h"
709 CFLAGS="$SAVE_CFLAGS"
711 # Solaris does not have the msg_control or msg_controlen members
712 # in the msghdr structure unless you define:
714 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
716 # See the "standards" man page for details.
718 # We check for the msg_control member, and if it is not found, we check
719 # again with the appropriate defines added to the CFLAGS. (In order to
720 # do this we have to remove the check from the cache, which is what the
722 AC_CHECK_MEMBER(struct msghdr.msg_control,,
723 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
724 CFLAGS="$CFLAGS -D__EXTENSIONS__"
725 unset ac_cv_member_struct_msghdr_msg_control
726 AC_CHECK_MEMBER(struct msghdr.msg_control,,
727 [AC_MSG_ERROR([Missing msg_control member in
728 msg_control structure.])],
730 #include <sys/types.h>
731 #include <sys/socket.h>
735 #include <sys/types.h>
736 #include <sys/socket.h>
739 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
740 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
741 ,, [#include <linux/if_packet.h>])
743 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
751 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
753 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
754 use_libbind="$withval", use_libbind="no")
755 case "$use_libbind" in
757 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
760 BINDSUBDIR="\${top_srcdir}/bind"
761 my_abs_srcdir=`cd $srcdir && pwd`
762 BINDDIR="${my_abs_srcdir}/bind"
763 if test ! -d "$srcdir/bind"; then
764 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
766 if test -d "$srcdir/bind/bind9"; then
767 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
769 if test ! -f "$srcdir/bind/version.tmp"; then
770 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
772 . "$srcdir/bind/version.tmp"
773 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
774 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
776 AC_CONFIG_FILES([$srcdir/bind/Makefile])
778 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
779 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
780 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
781 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
784 if test ! -d "$use_libbind"; then
785 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
787 if test ! -d "$use_libbind/include" -o \
788 ! -f "$use_libbind/include/isc/buffer.h"
790 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
792 if test ! -d "$use_libbind/lib" -o \
793 \( ! -f "$use_libbind/lib/libisc.a" -a \
794 ! -f "$use_libbind/lib/libisc.la" \)
796 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
798 BINDDIR="$use_libbind"
799 BINDLIBIRSDIR="$BINDDIR/lib"
800 BINDLIBDNSDIR="$BINDDIR/lib"
801 BINDLIBISCCFGDIR="$BINDDIR/lib"
802 BINDLIBISCDIR="$BINDDIR/lib"
803 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
809 AC_SUBST(BINDLIBIRSDIR)
810 AC_SUBST(BINDLIBDNSDIR)
811 AC_SUBST(BINDLIBISCCFGDIR)
812 AC_SUBST(BINDLIBISCDIR)
813 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
814 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
817 # GNU libtool support
821 # Just set the maximum command line length for sunos
822 # as it otherwise takes a exceptionally long time to
823 # work it out. Required for libtool.
825 lt_cv_sys_max_cmd_len=4096
832 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
833 AC_ARG_ENABLE(libtool,
834 AS_HELP_STRING([--enable-libtool],
835 [use GNU libtool for dynamic shared libraries (default is no).]),
836 want_libtool="$enableval")
838 if test "$use_libbind" != "no"; then
839 if test "$want_libtool" = "yes" -a \
840 ! -f "$use_libbind/lib/libisc.la"
842 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
844 if test "$want_libtool" = "no" -a \
845 ! -f "$use_libbind/lib/libisc.a"
847 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
852 if test "$want_libtool" = "yes"; then
853 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
854 # expand $ac_configure_args
855 eval "set my_configure_args $ac_configure_args"
857 cd $srcdir; exec ./config+lt "$@"
858 AC_MSG_ERROR([Recovering failed])
867 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
869 # quoting in Makefile.am.in
873 # install bind includes and libraries
875 want_install_bind="no"
876 if test "$want_libtool" = "yes"; then
877 want_install_bind="yes"
879 if test "$use_libbind" != "no"; then
880 want_install_bind="no"
882 AC_ARG_ENABLE(bind_install,
883 AS_HELP_STRING([--enable-bind-install],
884 [install bind includes and libraries (default is no).]),
885 want_install_bind="$enableval")
886 if test "$want_install_bind" = "yes"; then
887 if test "$use_libbind" != "no"; then
888 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
890 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
891 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
893 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
897 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
901 # OpenLDAP with SSL support.
902 AC_ARG_WITH(ldapcrypto,
903 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
904 [ldapcrypto=$withval],
907 # Gssapi to allow LDAP to authenticate with a keytab
908 AC_ARG_WITH(ldap-gssapi,
909 AC_HELP_STRING([--with-ldap-gssapi],
910 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
911 [ldap_gssapi=$withval],
915 # LDAP CASA auth support.
916 AC_ARG_WITH(ldapcasa,
917 AC_HELP_STRING([--with-ldapcasa],
918 [enable LDAP CASA auth support in dhcpd (default is no)]),
922 # OpenLDAP support is disabled by default, if enabled then SSL support is an
923 # extra optional that is also disabled by default. Enabling LDAP SSL support
924 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
925 # but doesn't include SSL. The two are not dependant.
926 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
929 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
930 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
931 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
932 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
933 if test x$ldap_gssapi = xyes ; then
934 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
935 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
938 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
939 AC_SUBST(LDAP_LIBS, [$LIBS])
943 AC_CHECK_HEADERS([ldap.h])
944 AC_CHECK_FUNCS([inet_pton inet_ntop])
947 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
949 if test x$ldapcasa = xyes ; then
950 AC_CHECK_HEADERS([micasa_mgmd.h],[
951 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
952 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
955 if test x$ldapcrypto = xyes ; then
956 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
959 if test x$ldap_gssapi = xyes; then
960 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
963 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
966 # Append selected warning levels to CFLAGS before substitution (but after
967 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
968 CFLAGS="$CFLAGS $STD_CWARNINGS"
970 # Try to add the bind and dhcp include directories
971 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
975 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
977 # As of Solaris 11, ethernet dev files are in /dev/net
978 AC_CHECK_FILE(/dev/net,
979 [AC_DEFINE([USE_DEV_NET], [1],
980 [Define to 1 if ethernet devices are in /dev/net])])
984 AC_C_FLEXIBLE_ARRAY_MEMBER
989 client/tests/Makefile
992 common/tests/Makefile
1003 server/tests/Makefile
1009 if test "$enable_dhcpv4o6" = "yes"; then
1010 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1011 elif test "$enable_dhcpv6" != "no"; then
1012 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1014 DHCP_VERSIONS="DHCPv4"
1017 cat > config.report << END
1019 ISC DHCP source configure results:
1020 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1024 Version: $PACKAGE_VERSION
1032 DHCP versions: $DHCP_VERSIONS
1035 debug: $enable_debug
1036 failover: $enable_failover
1037 execute: $enable_execute
1038 binary-leases: $enable_binary_leases
1039 dhcpv6: $enable_dhcpv6
1040 delayed-ack: $enable_delayed_ack
1041 dhcpv4o6: $enable_dhcpv4o6
1044 ATF unittests : $atf_path
1047 # TODO: Add Perl system tests
1049 if test "$atf_path" != "no"
1051 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1052 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1053 echo "ATF_BIN : $ATF_BIN" >> config.report
1060 echo Now you can type "make" to build ISC DHCP