1 AC_INIT([DHCP],[4.4.3],[dhcp-users@isc.org])
5 AC_CONFIG_MACRO_DIR([m4])
8 # we specify "foreign" to avoid having to have the GNU mandated files,
9 # like AUTHORS, COPYING, and such
10 AM_INIT_AUTOMAKE([foreign])
12 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
13 # the configure and makefiles. Without it users doing things that
14 # change the timestamps on the code, like checking it into a cvs
15 # tree, could trigger a rebuild of the infrastructure files which
16 # might fail if they don't have the correct tools.
21 # We want to turn on warnings if we are using gcc and the user did
22 # not specify CFLAGS. The autoconf check for the C compiler sets the
23 # CFLAGS if gcc is used, so we will save it before we run that check.
26 # Now find our C compiler.
29 # Suppress warnings about --datarootdir
30 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
32 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
33 # user did not specify any flags. Add warnings in this case.
34 if test "$GCC" = "yes"; then
35 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
36 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
40 # We can have some flags to pass to bind configure
42 if test "$cross_compiling" = "yes"; then
43 BINDCONFIG="--host=$host"
45 # Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
46 # and as there can be a space inside an argument some magic is required.
47 # This sets $1 ... $N to my_configure_args, arg1 ... argN
48 eval "set my_configure_args $ac_configure_args"
49 # remove my_configure_args, i.e., the guard against empty $ac_configure_args
51 # iterate on arguments and copying 'arg' when it begins by an upper case
55 [[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
60 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
61 # parts of the IPv6 Advanced Socket API as a result. This is stupid
62 # as it breaks how the two halves (Basic and Advanced) of the IPv6
63 # Socket API were designed to be used but we have to live with it.
64 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
65 AC_USE_SYSTEM_EXTENSIONS
67 @BEGIN WITHOUT LIBTOOL
74 if test "X$AR" = "X"; then
76 ar program not found. Please fix your PATH to include the directory in
77 which ar resides, or set AR in the environment with the full path to ar.])
80 AC_CONFIG_HEADERS([includes/config.h])
82 # we sometimes need to know byte order for building packets
83 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
84 AC_SUBST(byte_order, LITTLE_ENDIAN))
85 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
86 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
87 or LITTLE_ENDIAN for LSB (Intel CPUs).])
89 # Optional compile-time DEBUGging.
91 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
92 [case "${enableval}" in
94 AC_DEFINE([DEBUG], [1],
95 [Define to compile debug-only DHCP software.])
96 # Just override CFLAGS totally to remove optimization.
98 no) enable_debug=no ;;
99 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
100 esac],[enable_debug=no])
102 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
103 # but I don't want to pollute the --help space.
105 #/* #define DEBUG_TOKENS */
106 #/* #define DEBUG_PACKET */
107 #/* #define DEBUG_EXPRESSIONS */
108 #/* #define DEBUG_FIND_LEASE */
109 #/* #define DEBUG_EXPRESSION_PARSE */
110 #/* #define DEBUG_CLASS_MATCHING */
111 #/* #define DEBUG_MEMORY_LEAKAGE */
112 #/* #define DEBUG_MALLOC_POOL */
113 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
114 #/* #define DEBUG_RC_HISTORY */
115 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
116 #/* #define RC_HISTORY_MAX 10240 */
117 #/* #define POINTER_DEBUG */
118 #/* #define DEBUG_FAILOVER_MESSAGES */
119 #/* #define DEBUG_FAILOVER_TIMING */
120 #/* #define DEBUG_DUMP_ALL_LEASES */
122 # Failover optional compile-time feature.
123 AC_ARG_ENABLE(failover,
124 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
125 # Failover is on by default, so define if it is not explicitly disabled.
126 if test "$enable_failover" != "no"; then
127 enable_failover="yes"
128 AC_DEFINE([FAILOVER_PROTOCOL], [1],
129 [Define to include Failover Protocol support.])
133 AC_ARG_ENABLE(execute,
134 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
135 # execute() is on by default, so define if it is not explicitly disabled.
136 if test "$enable_execute" != "no" ; then
138 AC_DEFINE([ENABLE_EXECUTE], [1],
139 [Define to include execute() config language support.])
142 # Server tracing support.
143 AC_ARG_ENABLE(tracing,
144 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
145 # tracing is on by default, so define if it is not explicitly disabled.
146 if test "$enable_tracing" != "no" ; then
147 AC_DEFINE([TRACING], [1],
148 [Define to include server activity tracing support.])
151 # Delayed-ack feature support.
152 AC_ARG_ENABLE(delayed_ack,
153 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
154 if test "$enable_delayed_ack" != "no"; then
155 enable_delayed_ack="yes"
156 AC_DEFINE([DELAYED_ACK], [1],
157 [Define to queue multiple DHCPACK replies per fsync.])
160 # DHCPv6 optional compile-time feature.
161 AC_ARG_ENABLE(dhcpv6,
162 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
163 # DHCPv6 is on by default, so define if it is not explicitly disabled.
164 if test "$enable_dhcpv6" != "no"; then
166 AC_DEFINE([DHCPv6], [1],
167 [Define to 1 to include DHCPv6 support.])
170 # DHCPv4o6 optional compile-time feature.
171 AC_ARG_ENABLE(dhcpv4o6,
172 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
173 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
174 if test "$enable_dhcpv4o6" = "yes"; then
175 # DHCPv4o6 requires DHCPv6
176 if test "$enable_dhcpv6" = "no"; then
177 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
179 AC_DEFINE([DHCP4o6], [1],
180 [Define to 1 to include DHCPv4 over DHCPv6 support.])
182 # so we can report below
186 # Relay port (draft-ietf-dhc-relay-port-10.txt) optional compile-time feature.
187 AC_ARG_ENABLE(relay-port,
188 AS_HELP_STRING([--enable-relay-port],[enable support for relay port (default is no)]))
189 # Relay port is off by default (for now)
190 if test "$enable_relay_port" = "yes"; then
191 AC_DEFINE([RELAY_PORT], [1],
192 [Define to 1 to include relay port support.])
194 # so we can report below
195 enable_relay_port="no"
198 # PARANOIA is off by default (until we can test it with all features)
199 AC_ARG_ENABLE(paranoia,
200 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
201 AC_ARG_ENABLE(early_chroot,
202 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
203 # If someone enables early chroot, but does not enable paranoia, do so for
205 if test "$enable_paranoia" != "yes" && \
206 test "$enable_early_chroot" = "yes" ; then
207 enable_paranoia="yes"
210 if test "$enable_paranoia" = "yes" ; then
211 AC_DEFINE([PARANOIA], [1],
212 [Define to any value to include Ari's PARANOIA patch.])
214 if test "$enable_early_chroot" = "yes" ; then
215 AC_DEFINE([EARLY_CHROOT], [1],
216 [Define to any value to chroot() prior to loading config.])
219 AC_ARG_ENABLE(ipv4_pktinfo,
220 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
222 if test "$enable_ipv4_pktinfo" = "yes"; then
223 AC_DEFINE([USE_V4_PKTINFO], [1],
224 [Define to 1 to enable IPv4 packet info support.])
227 AC_ARG_ENABLE(use_sockets,
228 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
230 if test "$enable_use_sockets" = "yes"; then
231 AC_DEFINE([USE_SOCKETS], [1],
232 [Define to 1 to use the standard BSD socket API.])
235 # Include the PID in the log messages. This is useful when there may
236 # be multiple instances of a program.
237 # This is off by default
238 AC_ARG_ENABLE(log_pid,
239 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
240 if test "$enable_log_pid" = "yes" ; then
241 AC_DEFINE([USE_LOG_PID], [1],
242 [Define to include PIDs in syslog messages.])
245 # Allow for binary search when inserting v4 leases into queues
246 AC_ARG_ENABLE(binary_leases,
247 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
248 # binary_leases is off by default.
249 if test "$enable_binary_leases" = "yes"; then
250 AC_DEFINE([BINARY_LEASES], [1],
251 [Define to support binary insertion of leases into queues.])
253 enable_binary_leases="no"
258 # Bind Makefile needs to know ATF is not included.
259 AM_CONDITIONAL(BIND_ATF, test "foo" = "barr")
261 DISTCHECK_ATF_CONFIGURE_FLAG=
264 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed]),
265 [atf_path="$withval"])
266 if test "$atf_path" != "no" ; then
267 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
268 # Config path for pkg-config
270 if test "$atf_path" != "yes" ; then
271 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
272 atf_pcp=$atf_path/lib/pkgconfig
273 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
274 atf_pcp=$atf_path/lib64/pkgconfig
277 # Not specified, try some common paths
278 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
281 if test -f $d/lib/pkgconfig/atf-c.pc ; then
282 atf_pcp=$d/lib/pkgconfig
284 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
285 atf_pcp=$d/lib64/pkgconfig
291 if test "$atf_pcp" = "" ; then
292 AC_MSG_ERROR([Unable to find atf files in location specified])
294 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
295 if test "$pkgcfg_found" = ""; then
296 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
298 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
299 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
300 if test -f $atf_pcp/atf-sh.pc ; then
301 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
303 # older versions don't have atf-sh, try usual place
304 ATF_BIN=$atf_path/bin
310 AC_SUBST(ATF_LDFLAGS)
316 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
317 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
318 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
321 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
322 ### need to look there and potentially overwrite by default (but not if
323 ### the user configures an alternate value). LOCALSTATEDIR is totally
324 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
325 ### they would be insane for suggesting it. We need to look in /var/for
326 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
329 AC_PREFIX_PROGRAM(dhcpd)
331 # XXX - isn't there SOME WAY to default autoconf to /var instead of
332 # /usr/local/var/no/one/has/this/please/stop/trying?
333 case "$localstatedir" in
339 # Default server configuration file.
340 AC_ARG_WITH(srv-conf-file,
341 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
342 (default is typically /etc/dhcpd.conf)]),
343 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
344 [Default file containing dhcpd configuration.]))
346 # Allow specification of alternate state files
347 AC_ARG_WITH(srv-lease-file,
348 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
349 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
350 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
351 [File for dhcpd leases.]))
353 AC_MSG_CHECKING([for dhcpd.leases location])
354 if [[ "x$with_srv_lease_file" = "x" ]] ; then
355 if [[ -d "${localstatedir}/db" ]] ; then
356 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
357 elif [[ -d "${localstatedir}/state" ]] ; then
358 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
359 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
361 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
363 elif [[ -d "${localstatedir}/lib" ]] ; then
364 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
365 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
367 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
369 elif [[ -d "${localstatedir}/etc" ]] ; then
370 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
372 with_srv_lease_file="/etc/dhcpd.leases"
375 AC_MSG_RESULT($with_srv_lease_file)
377 AC_ARG_WITH(srv6-lease-file,
378 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
379 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
380 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
381 [File for dhcpd6 leases.]))
383 AC_MSG_CHECKING([for dhcpd6.leases location])
384 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
385 if [[ -d "${localstatedir}/db" ]] ; then
386 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
387 elif [[ -d "${localstatedir}/state" ]] ; then
388 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
389 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
391 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
393 elif [[ -d "${localstatedir}/lib" ]] ; then
394 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
395 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
397 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
399 elif [[ -d "${localstatedir}/etc" ]] ; then
400 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
402 with_srv6_lease_file="/etc/dhcpd6.leases"
405 AC_MSG_RESULT($with_srv6_lease_file)
407 AC_ARG_WITH(cli-lease-file,
408 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
409 (default is LOCALSTATEDIR/db/dhclient.leases)]),
410 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
411 [File for dhclient leases.]))
413 AC_MSG_CHECKING([for dhclient.leases location])
414 if [[ "x$with_cli_lease_file" = "x" ]] ; then
415 if [[ -d "${localstatedir}/db" ]] ; then
416 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
417 elif [[ -d "${localstatedir}/state" ]] ; then
418 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
419 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
421 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
423 elif [[ -d "${localstatedir}/lib" ]] ; then
424 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
425 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
427 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
429 elif [[ -d "${localstatedir}/etc" ]] ; then
430 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
432 with_cli_lease_file="/etc/dhclient.leases"
435 AC_MSG_RESULT($with_cli_lease_file)
437 AC_ARG_WITH(cli6-lease-file,
438 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
439 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
440 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
441 [File for dhclient6 leases.]))
443 AC_MSG_CHECKING([for dhclient6.leases location])
444 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
445 if [[ -d "${localstatedir}/db" ]] ; then
446 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
447 elif [[ -d "${localstatedir}/state" ]] ; then
448 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
449 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
451 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
453 elif [[ -d "${localstatedir}/lib" ]] ; then
454 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
455 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
457 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
459 elif [[ -d "${localstatedir}/etc" ]] ; then
460 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
462 with_cli6_lease_file="/etc/dhclient6.leases"
465 AC_MSG_RESULT($with_cli6_lease_file)
467 AC_ARG_WITH(srv-pid-file,
468 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
469 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
470 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
471 [File for dhcpd process information.]))
472 AC_ARG_WITH(srv6-pid-file,
473 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
474 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
475 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
476 [File for dhcpd6 process information.]))
477 AC_ARG_WITH(cli-pid-file,
478 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
479 (default is LOCALSTATEDIR/run/dhclient.pid)]),
480 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
481 [File for dhclient process information.]))
482 AC_ARG_WITH(cli6-pid-file,
483 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
484 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
485 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
486 [File for dhclient6 process information.]))
487 AC_ARG_WITH(relay-pid-file,
488 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
489 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
490 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
491 [File for dhcrelay process information.]))
492 AC_ARG_WITH(relay6-pid-file,
493 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
494 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
495 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
496 [File for dhcrelay6 process information.]))
504 # Some systems need the u_intX_t types defined across.
505 AC_CHECK_TYPE([u_int8_t], [], [
507 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
510 AC_CHECK_TYPE([u_int16_t], [], [
512 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
515 AC_CHECK_TYPE([u_int32_t], [], [
517 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
520 AC_CHECK_TYPE([u_int64_t], [], [
522 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
526 # see if ifaddrs.h is available
527 AC_CHECK_HEADERS(ifaddrs.h)
529 # figure out what IPv4 interface code to use
530 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
532 relay_port_supported="no"
533 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
535 #ifdef HAVE_LINUX_TYPES_H
536 #include <linux/types.h>
541 AC_DEFINE([HAVE_LPF], [1],
542 [Define to 1 to use the Linux Packet Filter interface code.])
543 relay_port_supported="yes"
545 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
546 if test -n "$DO_DLPI"
548 AC_DEFINE([HAVE_DLPI], [1],
549 [Define to 1 to use DLPI interface code.])
551 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
554 AC_DEFINE([HAVE_BPF], [1],
555 [Define to 1 to use the
556 Berkeley Packet Filter interface code.])
557 relay_port_supported="yes"
562 if test "$enable_relay_port" = "yes"; then
563 if test "$relay_port_supported" != "yes"; then
564 AC_MSG_ERROR([--enable-relay-port requires BPF or LPF])
568 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
569 # use the same structures. We like to use 'struct lifconf' and 'struct
570 # lifreq', but we'll use these other structures if they're present. HPUX
571 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
574 AC_MSG_CHECKING([for struct lifnum])
575 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
576 #include <sys/socket.h>
578 ]], [[ struct lifnum a;
579 ]])],[AC_MSG_RESULT(yes)
580 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
581 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
583 AC_MSG_CHECKING([for struct if_laddrconf])
584 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
586 ]], [[ struct if_laddrconf a;
587 ]])],[AC_MSG_RESULT(yes)
588 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
589 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
591 AC_MSG_CHECKING([for struct if_laddrreq])
592 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
594 ]], [[ struct if_laddrreq a;
595 ]])],[AC_MSG_RESULT(yes)
596 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
597 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
600 # check for GCC noreturn attribute
602 AC_MSG_CHECKING(for GCC noreturn attribute)
603 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
604 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
605 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
606 AC_DEFINE([ISC_DHCP_NORETURN], [],
607 [Define to the string for a noreturn attribute.])])
609 # Look for optional headers.
610 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
612 # Solaris needs some libraries for functions
613 AC_SEARCH_LIBS(socket, [socket])
614 AC_SEARCH_LIBS(inet_ntoa, [nsl])
616 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
617 AC_DEFINE([NEED_INET_ATON], [1],
618 [Define to 1 if the inet_aton() function is missing.]))
620 # Check for a standalone regex library.
621 AC_SEARCH_LIBS(regcomp, [regex])
623 AC_CHECK_FUNCS(strlcat)
625 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
626 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
628 # For some Solaris nanosleep is found by BIND in librt
630 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
631 if test "$have_nanosleep" = "no"; then
632 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
634 if test "$have_nanosleep" = "rt"; then
638 # check for /dev/random (declares ISC_PATH_RANDOMDEV)
639 AC_MSG_CHECKING(for random device)
640 AC_ARG_WITH(randomdev,
641 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
642 (default is /dev/random)]),
643 use_randomdev="$withval", use_randomdev="unspec")
644 if test "$use_randomdev" = "unspec"; then
645 if test "$cross_compiling" = "yes"; then
646 AC_MSG_RESULT(unspecified)
647 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
649 use_randomdev="/dev/random"
650 elif test "$use_randomdev" = "yes"; then
651 use_randomdev="/dev/random"
653 if test "$use_randomdev" = "no"; then
654 AC_MSG_RESULT(disabled)
655 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
657 if test "$cross_compiling" = "yes"; then
658 AC_MSG_RESULT($use_randomdev (unchecked))
660 AC_MSG_RESULT($use_randomdev)
661 AC_CHECK_FILE($use_randomdev,
662 AC_DEFINE_UNQUOTED([ISC_PATH_RANDOMDEV], ["$use_randomdev"],
663 [Define if you have the /dev/random or other configured file.]),
664 AC_MSG_ERROR(cannot find $use_randomdev))
666 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
669 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
670 # check kqueue/epoll/devpoll alternative to select
671 AC_ARG_ENABLE(kqueue,
672 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
673 want_kqueue="$enableval", want_kqueue="no")
674 if test "$want_kqueue" = "yes"; then
675 BINDIOMUX="--enable-kqueue"
676 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
679 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
680 want_epoll="$enableval", want_epoll="no")
681 if test "$want_epoll" = "yes"; then
682 BINDIOMUX="--enable-epoll"
683 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
685 AC_ARG_ENABLE(devpoll,
686 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
687 want_devpoll="$enableval", want_devpoll="no")
688 if test "$want_devpoll" = "yes"; then
689 BINDIOMUX="--enable-devpoll"
690 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
694 # general extra bind configure arguments
695 AC_ARG_WITH(bind-extra-config,
696 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
697 with some extra options (default is none)]),
698 use_xbindconfig="$withval", use_xbindconfig="")
699 case "$use_xbindconfig" in
703 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
704 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
708 # see if there is a "sa_len" field in our interface information structure
709 AC_CHECK_MEMBER(struct sockaddr.sa_len,
710 AC_DEFINE([HAVE_SA_LEN], [],
711 [Define to 1 if the sockaddr structure has a length field.]),
713 [#include <sys/socket.h>])
715 # figure out pointer size
716 SAVE_CFLAGS="$CFLAGS"
717 CFLAGS="$CFLAGS -I$srcdir"
718 AC_CHECK_SIZEOF(struct iaddr *, , [
719 #include "includes/inet.h"
722 CFLAGS="$SAVE_CFLAGS"
724 # Solaris does not have the msg_control or msg_controlen members
725 # in the msghdr structure unless you define:
727 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
729 # See the "standards" man page for details.
731 # We check for the msg_control member, and if it is not found, we check
732 # again with the appropriate defines added to the CFLAGS. (In order to
733 # do this we have to remove the check from the cache, which is what the
735 AC_CHECK_MEMBER(struct msghdr.msg_control,,
736 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
737 CFLAGS="$CFLAGS -D__EXTENSIONS__"
738 unset ac_cv_member_struct_msghdr_msg_control
739 AC_CHECK_MEMBER(struct msghdr.msg_control,,
740 [AC_MSG_ERROR([Missing msg_control member in
741 msg_control structure.])],
743 #include <sys/types.h>
744 #include <sys/socket.h>
748 #include <sys/types.h>
749 #include <sys/socket.h>
752 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
753 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
754 ,, [#include <linux/if_packet.h>])
756 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
764 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
766 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
767 use_libbind="$withval", use_libbind="no")
768 case "$use_libbind" in
770 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
773 BINDSUBDIR="\${top_srcdir}/bind"
774 my_abs_srcdir=`cd $srcdir && pwd`
775 BINDDIR="${my_abs_srcdir}/bind"
776 if test ! -d "$srcdir/bind"; then
777 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
779 if test -d "$srcdir/bind/bind9"; then
780 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
782 if test ! -f "$srcdir/bind/version.tmp"; then
783 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
785 . "$srcdir/bind/version.tmp"
786 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
787 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
789 AC_CONFIG_FILES([$srcdir/bind/Makefile])
791 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
792 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
793 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
794 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
797 if test ! -d "$use_libbind"; then
798 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
800 if test ! -d "$use_libbind/include" -o \
801 ! -f "$use_libbind/include/isc/buffer.h"
803 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
805 if test ! -d "$use_libbind/lib" -o \
806 \( ! -f "$use_libbind/lib/libisc.a" -a \
807 ! -f "$use_libbind/lib/libisc.la" \)
809 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
811 BINDDIR="$use_libbind"
812 BINDLIBIRSDIR="$BINDDIR/lib"
813 BINDLIBDNSDIR="$BINDDIR/lib"
814 BINDLIBISCCFGDIR="$BINDDIR/lib"
815 BINDLIBISCDIR="$BINDDIR/lib"
816 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
822 AC_SUBST(BINDLIBIRSDIR)
823 AC_SUBST(BINDLIBDNSDIR)
824 AC_SUBST(BINDLIBISCCFGDIR)
825 AC_SUBST(BINDLIBISCDIR)
826 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
827 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
830 # GNU libtool support
834 # Just set the maximum command line length for sunos
835 # as it otherwise takes a exceptionally long time to
836 # work it out. Required for libtool.
838 lt_cv_sys_max_cmd_len=4096
849 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
850 AC_ARG_ENABLE(libtool,
851 AS_HELP_STRING([--enable-libtool],
853 [use GNU libtool for dynamic shared libraries (default is yes).]),
855 @BEGIN WITHOUT LIBTOOL
856 [use GNU libtool for dynamic shared libraries (default is no).]),
858 want_libtool="$enableval")
860 if test "$use_libbind" != "no"; then
861 if test "$want_libtool" = "yes" -a \
862 ! -f "$use_libbind/lib/libisc.la"
864 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
866 if test "$want_libtool" = "no" -a \
867 ! -f "$use_libbind/lib/libisc.a"
869 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
874 if test "$want_libtool" = "no"; then
875 AC_MSG_ERROR([libtool configure is used but libtool is disabled?])
880 BINDLT="--with-libtool --disable-symtable"
881 DISTCHECK_LIBTOOL_CONFIGURE_FLAG="--enable-libtool"
884 @BEGIN WITHOUT LIBTOOL
885 if test "$want_libtool" = "yes"; then
886 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
887 # expand $ac_configure_args
888 eval "set my_configure_args $ac_configure_args"
890 cd $srcdir; exec ./config+lt "$@"
891 AC_MSG_ERROR([Recovering failed])
901 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
903 # quoting in Makefile.am.in
907 # install bind includes and libraries
909 want_install_bind="no"
911 want_install_bind="yes"
913 if test "$want_libtool" = "yes"; then
914 want_install_bind="yes"
916 if test "$use_libbind" != "no"; then
917 want_install_bind="no"
919 AC_ARG_ENABLE(bind_install,
920 AS_HELP_STRING([--enable-bind-install],
922 [install bind includes and libraries.]),
924 @BEGIN WITHOUT LIBTOOL
925 [install bind includes and libraries (default is no).]),
927 want_install_bind="$enableval")
928 if test "$want_install_bind" = "yes"; then
929 if test "$use_libbind" != "no"; then
930 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
932 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
933 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
935 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
939 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
943 # OpenLDAP with SSL support.
944 AC_ARG_WITH(ldapcrypto,
945 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
946 [ldapcrypto=$withval],
949 # Gssapi to allow LDAP to authenticate with a keytab
950 AC_ARG_WITH(ldap-gssapi,
951 AC_HELP_STRING([--with-ldap-gssapi],
952 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
953 [ldap_gssapi=$withval],
957 # LDAP CASA auth support.
958 AC_ARG_WITH(ldapcasa,
959 AC_HELP_STRING([--with-ldapcasa],
960 [enable LDAP CASA auth support in dhcpd (default is no)]),
964 # OpenLDAP support is disabled by default, if enabled then SSL support is an
965 # extra optional that is also disabled by default. Enabling LDAP SSL support
966 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
967 # but doesn't include SSL. The two are not dependant.
968 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
971 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
972 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
973 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
974 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
975 if test x$ldap_gssapi = xyes ; then
976 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
977 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
980 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
981 AC_SUBST(LDAP_LIBS, [$LIBS])
985 AC_CHECK_HEADERS([ldap.h])
986 AC_CHECK_FUNCS([inet_pton inet_ntop])
989 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
991 if test x$ldapcasa = xyes ; then
992 AC_CHECK_HEADERS([micasa_mgmd.h],[
993 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
994 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
997 if test x$ldapcrypto = xyes ; then
998 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
1001 if test x$ldap_gssapi = xyes; then
1002 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
1005 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
1008 # Append selected warning levels to CFLAGS before substitution (but after
1009 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
1010 CFLAGS="$CFLAGS $STD_CWARNINGS"
1012 # Try to add the bind and dhcp include directories
1013 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
1017 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
1019 # As of Solaris 11, ethernet dev files are in /dev/net
1020 AC_CHECK_FILE(/dev/net,
1021 [AC_DEFINE([USE_DEV_NET], [1],
1022 [Define to 1 if ethernet devices are in /dev/net])])
1026 AC_C_FLEXIBLE_ARRAY_MEMBER
1031 client/tests/Makefile
1034 common/tests/Makefile
1042 relay/tests/Makefile
1047 server/tests/Makefile
1053 AC_MSG_NOTICE([postconfig: run automake in $srcdir])
1054 (cd $srcdir; automake)
1055 AC_MSG_NOTICE([postconfig: rerun config.status])
1059 if test "$enable_dhcpv4o6" = "yes"; then
1060 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1061 elif test "$enable_dhcpv6" != "no"; then
1062 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1064 DHCP_VERSIONS="DHCPv4"
1067 cat > config.report << END
1069 ISC DHCP source configure results:
1070 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1074 Version: $PACKAGE_VERSION
1082 DHCP versions: $DHCP_VERSIONS
1085 debug: $enable_debug
1086 failover: $enable_failover
1087 execute: $enable_execute
1088 binary-leases: $enable_binary_leases
1089 dhcpv6: $enable_dhcpv6
1090 delayed-ack: $enable_delayed_ack
1091 dhcpv4o6: $enable_dhcpv4o6
1092 relay-port: $enable_relay_port
1095 ATF unittests : $atf_path
1098 # TODO: Add Perl system tests
1100 if test "$atf_path" != "no"
1102 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1103 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1104 echo "ATF_BIN : $ATF_BIN" >> config.report
1111 echo Now you can type "make" to build ISC DHCP