1 AC_INIT([DHCP],[4.4.0-dev],[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 (experimental).
146 AC_ARG_ENABLE(delayed_ack,
147 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
148 if test "$enable_delayed_ack" = "yes"; then
149 AC_DEFINE([DELAYED_ACK], [1],
150 [Define to queue multiple DHCPACK replies per fsync.])
152 enable_delayed_ack="no"
155 # DHCPv6 optional compile-time feature.
156 AC_ARG_ENABLE(dhcpv6,
157 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
158 # DHCPv6 is on by default, so define if it is not explicitly disabled.
159 if test "$enable_dhcpv6" != "no"; then
161 AC_DEFINE([DHCPv6], [1],
162 [Define to 1 to include DHCPv6 support.])
165 # DHCPv4o6 optional compile-time feature.
166 AC_ARG_ENABLE(dhcpv4o6,
167 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
168 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
169 if test "$enable_dhcpv4o6" = "yes"; then
170 # DHCPv4o6 requires DHCPv6
171 if test "$enable_dhcpv6" = "no"; then
172 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
174 # DHCPv4o6 is not yet compatible with delayed-ack
175 if test "$enable_delayed_ack" = "yes"; then
176 AC_MSG_ERROR([dhcpv4o6 is not compatible with delayed-ack])
178 AC_DEFINE([DHCP4o6], [1],
179 [Define to 1 to include DHCPv4 over DHCPv6 support.])
182 # PARANOIA is off by default (until we can test it with all features)
183 AC_ARG_ENABLE(paranoia,
184 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
185 AC_ARG_ENABLE(early_chroot,
186 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
187 # If someone enables early chroot, but does not enable paranoia, do so for
189 if test "$enable_paranoia" != "yes" && \
190 test "$enable_early_chroot" = "yes" ; then
191 enable_paranoia="yes"
194 if test "$enable_paranoia" = "yes" ; then
195 AC_DEFINE([PARANOIA], [1],
196 [Define to any value to include Ari's PARANOIA patch.])
198 if test "$enable_early_chroot" = "yes" ; then
199 AC_DEFINE([EARLY_CHROOT], [1],
200 [Define to any value to chroot() prior to loading config.])
203 AC_ARG_ENABLE(ipv4_pktinfo,
204 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
206 if test "$enable_ipv4_pktinfo" = "yes"; then
207 AC_DEFINE([USE_V4_PKTINFO], [1],
208 [Define to 1 to enable IPv4 packet info support.])
211 AC_ARG_ENABLE(use_sockets,
212 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
214 if test "$enable_use_sockets" = "yes"; then
215 AC_DEFINE([USE_SOCKETS], [1],
216 [Define to 1 to use the standard BSD socket API.])
219 # Include the PID in the log messages. This is useful when there may
220 # be multiple instances of a program.
221 # This is off by default
222 AC_ARG_ENABLE(log_pid,
223 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
224 if test "$enable_log_pid" = "yes" ; then
225 AC_DEFINE([USE_LOG_PID], [1],
226 [Define to include PIDs in syslog messages.])
229 # Allow for binary search when inserting v4 leases into queues
230 AC_ARG_ENABLE(binary_leases,
231 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
232 # binary_leases is off by default.
233 if test "$enable_binary_leases" = "yes"; then
234 AC_DEFINE([BINARY_LEASES], [1],
235 [Define to support binary insertion of leases into queues.])
237 enable_binary_leases="no"
242 DISTCHECK_ATF_CONFIGURE_FLAG=
245 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
246 [atf_path="$withval"])
247 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
248 if test "$atf_path" = "bind" ; then
249 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
251 atf_path="\${top_srcdir}/bind/atf"
252 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
253 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
254 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
256 AC_SUBST(ATF_LDFLAGS)
258 BINDCONFIG="$BINDCONFIG --with-atf"
259 elif test "$atf_path" != "no" ; then
260 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
261 # Config path for pkg-config
263 if test "$atf_path" != "yes" ; then
264 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
265 atf_pcp=$atf_path/lib/pkgconfig
266 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
267 atf_pcp=$atf_path/lib64/pkgconfig
270 # Not specified, try some common paths
271 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
274 if test -f $d/lib/pkgconfig/atf-c.pc ; then
275 atf_pcp=$d/lib/pkgconfig
277 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
278 atf_pcp=$d/lib64/pkgconfig
284 if test "$atf_pcp" = "" ; then
285 AC_MSG_ERROR([Unable to find atf files in location specified])
287 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
288 if test "$pkgcfg_found" = ""; then
289 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
291 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
292 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
293 if test -f $atf_pcp/atf-sh.pc ; then
294 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
296 # older versions don't have atf-sh, try usual place
297 ATF_BIN=$atf_path/bin
300 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
301 AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
305 AC_SUBST(ATF_LDFLAGS)
310 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
311 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
312 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
315 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
316 ### need to look there and potentially overwrite by default (but not if
317 ### the user configures an alternate value). LOCALSTATEDIR is totally
318 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
319 ### they would be insane for suggesting it. We need to look in /var/for
320 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
323 AC_PREFIX_PROGRAM(dhcpd)
325 # XXX - isn't there SOME WAY to default autoconf to /var instead of
326 # /usr/local/var/no/one/has/this/please/stop/trying?
327 case "$localstatedir" in
333 # Default server configuration file.
334 AC_ARG_WITH(srv-conf-file,
335 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
336 (default is typically /etc/dhcpd.conf)]),
337 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
338 [Default file containing dhcpd configuration.]))
340 # Allow specification of alternate state files
341 AC_ARG_WITH(srv-lease-file,
342 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
343 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
344 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
345 [File for dhcpd leases.]))
347 AC_MSG_CHECKING([for dhcpd.leases location])
348 if [[ "x$with_srv_lease_file" = "x" ]] ; then
349 if [[ -d "${localstatedir}/db" ]] ; then
350 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
351 elif [[ -d "${localstatedir}/state" ]] ; then
352 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
353 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
355 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
357 elif [[ -d "${localstatedir}/lib" ]] ; then
358 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
359 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
361 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
363 elif [[ -d "${localstatedir}/etc" ]] ; then
364 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
366 with_srv_lease_file="/etc/dhcpd.leases"
369 AC_MSG_RESULT($with_srv_lease_file)
371 AC_ARG_WITH(srv6-lease-file,
372 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
373 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
374 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
375 [File for dhcpd6 leases.]))
377 AC_MSG_CHECKING([for dhcpd6.leases location])
378 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
379 if [[ -d "${localstatedir}/db" ]] ; then
380 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
381 elif [[ -d "${localstatedir}/state" ]] ; then
382 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
383 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
385 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
387 elif [[ -d "${localstatedir}/lib" ]] ; then
388 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
389 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
391 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
393 elif [[ -d "${localstatedir}/etc" ]] ; then
394 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
396 with_srv6_lease_file="/etc/dhcpd6.leases"
399 AC_MSG_RESULT($with_srv6_lease_file)
401 AC_ARG_WITH(cli-lease-file,
402 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
403 (default is LOCALSTATEDIR/db/dhclient.leases)]),
404 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
405 [File for dhclient leases.]))
407 AC_MSG_CHECKING([for dhclient.leases location])
408 if [[ "x$with_cli_lease_file" = "x" ]] ; then
409 if [[ -d "${localstatedir}/db" ]] ; then
410 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
411 elif [[ -d "${localstatedir}/state" ]] ; then
412 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
413 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
415 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
417 elif [[ -d "${localstatedir}/lib" ]] ; then
418 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
419 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
421 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
423 elif [[ -d "${localstatedir}/etc" ]] ; then
424 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
426 with_cli_lease_file="/etc/dhclient.leases"
429 AC_MSG_RESULT($with_cli_lease_file)
431 AC_ARG_WITH(cli6-lease-file,
432 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
433 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
434 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
435 [File for dhclient6 leases.]))
437 AC_MSG_CHECKING([for dhclient6.leases location])
438 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
439 if [[ -d "${localstatedir}/db" ]] ; then
440 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
441 elif [[ -d "${localstatedir}/state" ]] ; then
442 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
443 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
445 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
447 elif [[ -d "${localstatedir}/lib" ]] ; then
448 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
449 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
451 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
453 elif [[ -d "${localstatedir}/etc" ]] ; then
454 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
456 with_cli6_lease_file="/etc/dhclient6.leases"
459 AC_MSG_RESULT($with_cli6_lease_file)
461 AC_ARG_WITH(srv-pid-file,
462 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
463 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
464 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
465 [File for dhcpd process information.]))
466 AC_ARG_WITH(srv6-pid-file,
467 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
468 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
469 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
470 [File for dhcpd6 process information.]))
471 AC_ARG_WITH(cli-pid-file,
472 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
473 (default is LOCALSTATEDIR/run/dhclient.pid)]),
474 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
475 [File for dhclient process information.]))
476 AC_ARG_WITH(cli6-pid-file,
477 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
478 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
479 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
480 [File for dhclient6 process information.]))
481 AC_ARG_WITH(relay-pid-file,
482 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
483 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
484 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
485 [File for dhcrelay process information.]))
486 AC_ARG_WITH(relay6-pid-file,
487 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
488 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
489 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
490 [File for dhcrelay6 process information.]))
498 # Some systems need the u_intX_t types defined across.
499 AC_CHECK_TYPE([u_int8_t], [], [
501 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
504 AC_CHECK_TYPE([u_int16_t], [], [
506 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
509 AC_CHECK_TYPE([u_int32_t], [], [
511 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
514 AC_CHECK_TYPE([u_int64_t], [], [
516 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
520 # see if ifaddrs.h is available
521 AC_CHECK_HEADERS(ifaddrs.h)
523 # figure out what IPv4 interface code to use
524 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
526 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
528 #ifdef HAVE_LINUX_TYPES_H
529 #include <linux/types.h>
534 AC_DEFINE([HAVE_LPF], [1],
535 [Define to 1 to use the Linux Packet Filter interface code.])
537 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
538 if test -n "$DO_DLPI"
540 AC_DEFINE([HAVE_DLPI], [1],
541 [Define to 1 to use DLPI interface code.])
543 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
546 AC_DEFINE([HAVE_BPF], [1],
547 [Define to 1 to use the
548 Berkeley Packet Filter interface code.])
553 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
554 # use the same structures. We like to use 'struct lifconf' and 'struct
555 # lifreq', but we'll use these other structures if they're present. HPUX
556 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
559 AC_MSG_CHECKING([for struct lifnum])
560 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
561 #include <sys/socket.h>
563 ]], [[ struct lifnum a;
564 ]])],[AC_MSG_RESULT(yes)
565 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
566 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
568 AC_MSG_CHECKING([for struct if_laddrconf])
569 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
571 ]], [[ struct if_laddrconf a;
572 ]])],[AC_MSG_RESULT(yes)
573 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
574 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
576 AC_MSG_CHECKING([for struct if_laddrreq])
577 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
579 ]], [[ struct if_laddrreq a;
580 ]])],[AC_MSG_RESULT(yes)
581 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
582 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
585 # check for GCC noreturn attribute
587 AC_MSG_CHECKING(for GCC noreturn attribute)
588 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
589 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
590 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
591 AC_DEFINE([ISC_DHCP_NORETURN], [],
592 [Define to the string for a noreturn attribute.])])
594 # Look for optional headers.
595 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
597 # Solaris needs some libraries for functions
598 AC_SEARCH_LIBS(socket, [socket])
599 AC_SEARCH_LIBS(inet_ntoa, [nsl])
601 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
602 AC_DEFINE([NEED_INET_ATON], [1],
603 [Define to 1 if the inet_aton() function is missing.]))
605 # Check for a standalone regex library.
606 AC_SEARCH_LIBS(regcomp, [regex])
608 AC_CHECK_FUNCS(strlcat)
610 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
611 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
613 # For some Solaris nanosleep is found by BIND in librt
615 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
616 if test "$have_nanosleep" = "no"; then
617 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
619 if test "$have_nanosleep" = "rt"; then
623 # check for /dev/random (declares HAVE_DEV_RANDOM)
624 AC_MSG_CHECKING(for random device)
625 AC_ARG_WITH(randomdev,
626 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
627 (default is /dev/random)]),
628 use_randomdev="$withval", use_randomdev="unspec")
629 if test "$use_randomdev" = "unspec"; then
630 if test "$cross_compiling" = "yes"; then
631 AC_MSG_RESULT(unspecified)
632 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
634 use_randomdev="/dev/random"
635 elif test "$use_randomdev" = "yes"; then
636 use_randomdev="/dev/random"
638 if test "$use_randomdev" = "no"; then
639 AC_MSG_RESULT(disabled)
640 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
642 if test "$cross_compiling" = "yes"; then
643 AC_MSG_RESULT($use_randomdev (unchecked))
645 AC_MSG_RESULT($use_randomdev)
646 AC_CHECK_FILE($use_randomdev,
647 AC_DEFINE([HAVE_DEV_RANDOM], [1],
648 [Define to 1 if you have the /dev/random or other configured file.]),
649 AC_MSG_ERROR(cannot find $use_randomdev))
651 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
654 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
655 # check kqueue/epoll/devpoll alternative to select
656 AC_ARG_ENABLE(kqueue,
657 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
658 want_kqueue="$enableval", want_kqueue="no")
659 if test "$want_kqueue" = "yes"; then
660 BINDIOMUX="--enable-kqueue"
661 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
664 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
665 want_epoll="$enableval", want_epoll="no")
666 if test "$want_epoll" = "yes"; then
667 BINDIOMUX="--enable-epoll"
668 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
670 AC_ARG_ENABLE(devpoll,
671 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
672 want_devpoll="$enableval", want_devpoll="no")
673 if test "$want_devpoll" = "yes"; then
674 BINDIOMUX="--enable-devpoll"
675 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
679 # general extra bind configure arguments
680 AC_ARG_WITH(bind-extra-config,
681 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
682 with some extra options (default is none)]),
683 use_xbindconfig="$withval", use_xbindconfig="")
684 case "$use_xbindconfig" in
688 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
689 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
693 # see if there is a "sa_len" field in our interface information structure
694 AC_CHECK_MEMBER(struct sockaddr.sa_len,
695 AC_DEFINE([HAVE_SA_LEN], [],
696 [Define to 1 if the sockaddr structure has a length field.]),
698 [#include <sys/socket.h>])
700 # figure out pointer size
701 SAVE_CFLAGS="$CFLAGS"
702 CFLAGS="$CFLAGS -I$srcdir"
703 AC_CHECK_SIZEOF(struct iaddr *, , [
704 #include "includes/inet.h"
707 CFLAGS="$SAVE_CFLAGS"
709 # Solaris does not have the msg_control or msg_controlen members
710 # in the msghdr structure unless you define:
712 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
714 # See the "standards" man page for details.
716 # We check for the msg_control member, and if it is not found, we check
717 # again with the appropriate defines added to the CFLAGS. (In order to
718 # do this we have to remove the check from the cache, which is what the
720 AC_CHECK_MEMBER(struct msghdr.msg_control,,
721 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
722 CFLAGS="$CFLAGS -D__EXTENSIONS__"
723 unset ac_cv_member_struct_msghdr_msg_control
724 AC_CHECK_MEMBER(struct msghdr.msg_control,,
725 [AC_MSG_ERROR([Missing msg_control member in
726 msg_control structure.])],
728 #include <sys/types.h>
729 #include <sys/socket.h>
733 #include <sys/types.h>
734 #include <sys/socket.h>
737 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
738 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
739 ,, [#include <linux/if_packet.h>])
741 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
749 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
751 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
752 use_libbind="$withval", use_libbind="no")
753 case "$use_libbind" in
755 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
758 BINDSUBDIR="\${top_srcdir}/bind"
759 my_abs_srcdir=`cd $srcdir && pwd`
760 BINDDIR="${my_abs_srcdir}/bind"
761 if test ! -d "$srcdir/bind"; then
762 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
764 if test -d "$srcdir/bind/bind9"; then
765 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
767 if test ! -f "$srcdir/bind/version.tmp"; then
768 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
770 . "$srcdir/bind/version.tmp"
771 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
772 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
774 AC_CONFIG_FILES([$srcdir/bind/Makefile])
776 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
777 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
778 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
779 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
782 if test ! -d "$use_libbind"; then
783 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
785 if test ! -d "$use_libbind/include" -o \
786 ! -f "$use_libbind/include/isc/buffer.h"
788 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
790 if test ! -d "$use_libbind/lib" -o \
791 \( ! -f "$use_libbind/lib/libisc.a" -a \
792 ! -f "$use_libbind/lib/libisc.la" \)
794 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
796 BINDDIR="$use_libbind"
797 BINDLIBIRSDIR="$BINDDIR/lib"
798 BINDLIBDNSDIR="$BINDDIR/lib"
799 BINDLIBISCCFGDIR="$BINDDIR/lib"
800 BINDLIBISCDIR="$BINDDIR/lib"
801 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
807 AC_SUBST(BINDLIBIRSDIR)
808 AC_SUBST(BINDLIBDNSDIR)
809 AC_SUBST(BINDLIBISCCFGDIR)
810 AC_SUBST(BINDLIBISCDIR)
811 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
812 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
815 # GNU libtool support
819 # Just set the maximum command line length for sunos
820 # as it otherwise takes a exceptionally long time to
821 # work it out. Required for libtool.
823 lt_cv_sys_max_cmd_len=4096
830 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
831 AC_ARG_ENABLE(libtool,
832 AS_HELP_STRING([--enable-libtool],
833 [use GNU libtool for dynamic shared libraries (default is no).]),
834 want_libtool="$enableval")
836 if test "$use_libbind" != "no"; then
837 if test "$want_libtool" = "yes" -a \
838 ! -f "$use_libbind/lib/libisc.la"
840 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
842 if test "$want_libtool" = "no" -a \
843 ! -f "$use_libbind/lib/libisc.a"
845 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
850 if test "$want_libtool" = "yes"; then
851 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
852 # expand $ac_configure_args
853 eval "set my_configure_args $ac_configure_args"
855 cd $srcdir; exec ./config+lt "$@"
856 AC_MSG_ERROR([Recovering failed])
865 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
867 # quoting in Makefile.am.in
871 # install bind includes and libraries
873 want_install_bind="no"
874 if test "$want_libtool" = "yes"; then
875 want_install_bind="yes"
877 if test "$use_libbind" != "no"; then
878 want_install_bind="no"
880 AC_ARG_ENABLE(bind_install,
881 AS_HELP_STRING([--enable-bind-install],
882 [install bind includes and libraries (default is no).]),
883 want_install_bind="$enableval")
884 if test "$want_install_bind" = "yes"; then
885 if test "$use_libbind" != "no"; then
886 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
888 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
889 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
891 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
895 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
899 # OpenLDAP with SSL support.
900 AC_ARG_WITH(ldapcrypto,
901 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
902 [ldapcrypto=$withval],
905 # Gssapi to allow LDAP to authenticate with a keytab
906 AC_ARG_WITH(ldap-gssapi,
907 AC_HELP_STRING([--with-ldap-gssapi],
908 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
909 [ldap_gssapi=$withval],
913 # LDAP CASA auth support.
914 AC_ARG_WITH(ldapcasa,
915 AC_HELP_STRING([--with-ldapcasa],
916 [enable LDAP CASA auth support in dhcpd (default is no)]),
920 # OpenLDAP support is disabled by default, if enabled then SSL support is an
921 # extra optional that is also disabled by default. Enabling LDAP SSL support
922 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
923 # but doesn't include SSL. The two are not dependant.
924 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
927 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
928 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
929 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
930 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
931 if test x$ldap_gssapi = xyes ; then
932 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
933 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
936 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
937 AC_SUBST(LDAP_LIBS, [$LIBS])
941 AC_CHECK_HEADERS([ldap.h])
942 AC_CHECK_FUNCS([inet_pton inet_ntop])
945 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
947 if test x$ldapcasa = xyes ; then
948 AC_CHECK_HEADERS([micasa_mgmd.h],[
949 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
950 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
953 if test x$ldapcrypto = xyes ; then
954 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
957 if test x$ldap_gssapi = xyes; then
958 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
961 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
964 # Append selected warning levels to CFLAGS before substitution (but after
965 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
966 CFLAGS="$CFLAGS $STD_CWARNINGS"
968 # Try to add the bind and dhcp include directories
969 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
973 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
975 # As of Solaris 11, ethernet dev files are in /dev/net
976 AC_CHECK_FILE(/dev/net,
977 [AC_DEFINE([USE_DEV_NET], [1],
978 [Define to 1 if ethernet devices are in /dev/net])])
982 AC_C_FLEXIBLE_ARRAY_MEMBER
987 client/tests/Makefile
990 common/tests/Makefile
1001 server/tests/Makefile
1007 if test "$enable_dhcpv4o6" = "yes"; then
1008 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1009 elif test "$enable_dhcpv6" != "no"; then
1010 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1012 DHCP_VERSIONS="DHCPv4"
1015 cat > config.report << END
1017 ISC DHCP source configure results:
1018 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1022 Version: $PACKAGE_VERSION
1030 DHCP versions: $DHCP_VERSIONS
1033 debug: $enable_debug
1034 failover: $enable_failover
1035 execute: $enable_execute
1036 binary-leases: $enable_binary_leases
1037 dhcpv6: $enable_dhcpv6
1038 delayed-ack: $enable_delayed_ack
1041 ATF unittests : $atf_path
1044 # TODO: Add Perl system tests
1046 if test "$atf_path" != "no"
1048 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1049 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1050 echo "ATF_BIN : $ATF_BIN" >> config.report
1057 echo Now you can type "make" to build ISC DHCP