1 AC_INIT([DHCP],[4.4.2b1],[dhcp-users@isc.org])
4 AC_CONFIG_MACRO_DIR([m4])
6 # we specify "foreign" to avoid having to have the GNU mandated files,
7 # like AUTHORS, COPYING, and such
8 AM_INIT_AUTOMAKE([foreign])
10 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
11 # the configure and makefiles. Without it users doing things that
12 # change the timestamps on the code, like checking it into a cvs
13 # tree, could trigger a rebuild of the infrastructure files which
14 # might fail if they don't have the correct tools.
19 # We want to turn on warnings if we are using gcc and the user did
20 # not specify CFLAGS. The autoconf check for the C compiler sets the
21 # CFLAGS if gcc is used, so we will save it before we run that check.
24 # Now find our C compiler.
27 # Suppress warnings about --datarootdir
28 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
30 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
31 # user did not specify any flags. Add warnings in this case.
32 if test "$GCC" = "yes"; then
33 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
34 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
38 # We can have some flags to pass to bind configure
40 if test "$cross_compiling" = "yes"; then
41 BINDCONFIG="--host=$host"
43 # Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
44 # and as there can be a space inside an argument some magic is required.
45 # This sets $1 ... $N to my_configure_args, arg1 ... argN
46 eval "set my_configure_args $ac_configure_args"
47 # remove my_configure_args, i.e., the guard against empty $ac_configure_args
49 # iterate on arguments and copying 'arg' when it begins by an upper case
53 [[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
58 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
59 # parts of the IPv6 Advanced Socket API as a result. This is stupid
60 # as it breaks how the two halves (Basic and Advanced) of the IPv6
61 # Socket API were designed to be used but we have to live with it.
62 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
63 AC_USE_SYSTEM_EXTENSIONS
69 if test "X$AR" = "X"; then
71 ar program not found. Please fix your PATH to include the directory in
72 which ar resides, or set AR in the environment with the full path to ar.])
75 AC_CONFIG_HEADERS([includes/config.h])
77 # we sometimes need to know byte order for building packets
78 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
79 AC_SUBST(byte_order, LITTLE_ENDIAN))
80 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
81 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
82 or LITTLE_ENDIAN for LSB (Intel CPUs).])
84 # Optional compile-time DEBUGging.
86 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
87 [case "${enableval}" in
89 AC_DEFINE([DEBUG], [1],
90 [Define to compile debug-only DHCP software.])
91 # Just override CFLAGS totally to remove optimization.
93 no) enable_debug=no ;;
94 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
95 esac],[enable_debug=no])
97 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
98 # but I don't want to pollute the --help space.
100 #/* #define DEBUG_TOKENS */
101 #/* #define DEBUG_PACKET */
102 #/* #define DEBUG_EXPRESSIONS */
103 #/* #define DEBUG_FIND_LEASE */
104 #/* #define DEBUG_EXPRESSION_PARSE */
105 #/* #define DEBUG_CLASS_MATCHING */
106 #/* #define DEBUG_MEMORY_LEAKAGE */
107 #/* #define DEBUG_MALLOC_POOL */
108 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
109 #/* #define DEBUG_RC_HISTORY */
110 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
111 #/* #define RC_HISTORY_MAX 10240 */
112 #/* #define POINTER_DEBUG */
113 #/* #define DEBUG_FAILOVER_MESSAGES */
114 #/* #define DEBUG_FAILOVER_TIMING */
115 #/* #define DEBUG_DUMP_ALL_LEASES */
117 # Failover optional compile-time feature.
118 AC_ARG_ENABLE(failover,
119 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
120 # Failover is on by default, so define if it is not explicitly disabled.
121 if test "$enable_failover" != "no"; then
122 enable_failover="yes"
123 AC_DEFINE([FAILOVER_PROTOCOL], [1],
124 [Define to include Failover Protocol support.])
128 AC_ARG_ENABLE(execute,
129 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
130 # execute() is on by default, so define if it is not explicitly disabled.
131 if test "$enable_execute" != "no" ; then
133 AC_DEFINE([ENABLE_EXECUTE], [1],
134 [Define to include execute() config language support.])
137 # Server tracing support.
138 AC_ARG_ENABLE(tracing,
139 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
140 # tracing is on by default, so define if it is not explicitly disabled.
141 if test "$enable_tracing" != "no" ; then
142 AC_DEFINE([TRACING], [1],
143 [Define to include server activity tracing support.])
146 # Delayed-ack feature support.
147 AC_ARG_ENABLE(delayed_ack,
148 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
149 if test "$enable_delayed_ack" != "no"; then
150 enable_delayed_ack="yes"
151 AC_DEFINE([DELAYED_ACK], [1],
152 [Define to queue multiple DHCPACK replies per fsync.])
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 AC_DEFINE([DHCP4o6], [1],
175 [Define to 1 to include DHCPv4 over DHCPv6 support.])
177 # so we can report below
181 # Relay port (draft-ietf-dhc-relay-port-10.txt) optional compile-time feature.
182 AC_ARG_ENABLE(relay-port,
183 AS_HELP_STRING([--enable-relay-port],[enable support for relay port (default is no)]))
184 # Relay port is off by default (for now)
185 if test "$enable_relay_port" = "yes"; then
186 AC_DEFINE([RELAY_PORT], [1],
187 [Define to 1 to include relay port support.])
189 # so we can report below
190 enable_relay_port="no"
193 # PARANOIA is off by default (until we can test it with all features)
194 AC_ARG_ENABLE(paranoia,
195 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
196 AC_ARG_ENABLE(early_chroot,
197 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
198 # If someone enables early chroot, but does not enable paranoia, do so for
200 if test "$enable_paranoia" != "yes" && \
201 test "$enable_early_chroot" = "yes" ; then
202 enable_paranoia="yes"
205 if test "$enable_paranoia" = "yes" ; then
206 AC_DEFINE([PARANOIA], [1],
207 [Define to any value to include Ari's PARANOIA patch.])
209 if test "$enable_early_chroot" = "yes" ; then
210 AC_DEFINE([EARLY_CHROOT], [1],
211 [Define to any value to chroot() prior to loading config.])
214 AC_ARG_ENABLE(ipv4_pktinfo,
215 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
217 if test "$enable_ipv4_pktinfo" = "yes"; then
218 AC_DEFINE([USE_V4_PKTINFO], [1],
219 [Define to 1 to enable IPv4 packet info support.])
222 AC_ARG_ENABLE(use_sockets,
223 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
225 if test "$enable_use_sockets" = "yes"; then
226 AC_DEFINE([USE_SOCKETS], [1],
227 [Define to 1 to use the standard BSD socket API.])
230 # Include the PID in the log messages. This is useful when there may
231 # be multiple instances of a program.
232 # This is off by default
233 AC_ARG_ENABLE(log_pid,
234 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
235 if test "$enable_log_pid" = "yes" ; then
236 AC_DEFINE([USE_LOG_PID], [1],
237 [Define to include PIDs in syslog messages.])
240 # Allow for binary search when inserting v4 leases into queues
241 AC_ARG_ENABLE(binary_leases,
242 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
243 # binary_leases is off by default.
244 if test "$enable_binary_leases" = "yes"; then
245 AC_DEFINE([BINARY_LEASES], [1],
246 [Define to support binary insertion of leases into queues.])
248 enable_binary_leases="no"
253 DISTCHECK_ATF_CONFIGURE_FLAG=
256 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed]),
257 [atf_path="$withval"])
258 if test "$atf_path" != "no" ; then
259 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
260 # Config path for pkg-config
262 if test "$atf_path" != "yes" ; then
263 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
264 atf_pcp=$atf_path/lib/pkgconfig
265 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
266 atf_pcp=$atf_path/lib64/pkgconfig
269 # Not specified, try some common paths
270 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
273 if test -f $d/lib/pkgconfig/atf-c.pc ; then
274 atf_pcp=$d/lib/pkgconfig
276 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
277 atf_pcp=$d/lib64/pkgconfig
283 if test "$atf_pcp" = "" ; then
284 AC_MSG_ERROR([Unable to find atf files in location specified])
286 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
287 if test "$pkgcfg_found" = ""; then
288 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
290 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
291 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
292 if test -f $atf_pcp/atf-sh.pc ; then
293 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
295 # older versions don't have atf-sh, try usual place
296 ATF_BIN=$atf_path/bin
302 AC_SUBST(ATF_LDFLAGS)
308 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
309 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
310 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
313 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
314 ### need to look there and potentially overwrite by default (but not if
315 ### the user configures an alternate value). LOCALSTATEDIR is totally
316 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
317 ### they would be insane for suggesting it. We need to look in /var/for
318 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
321 AC_PREFIX_PROGRAM(dhcpd)
323 # XXX - isn't there SOME WAY to default autoconf to /var instead of
324 # /usr/local/var/no/one/has/this/please/stop/trying?
325 case "$localstatedir" in
331 # Default server configuration file.
332 AC_ARG_WITH(srv-conf-file,
333 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
334 (default is typically /etc/dhcpd.conf)]),
335 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
336 [Default file containing dhcpd configuration.]))
338 # Allow specification of alternate state files
339 AC_ARG_WITH(srv-lease-file,
340 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
341 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
342 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
343 [File for dhcpd leases.]))
345 AC_MSG_CHECKING([for dhcpd.leases location])
346 if [[ "x$with_srv_lease_file" = "x" ]] ; then
347 if [[ -d "${localstatedir}/db" ]] ; then
348 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
349 elif [[ -d "${localstatedir}/state" ]] ; then
350 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
351 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
353 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
355 elif [[ -d "${localstatedir}/lib" ]] ; then
356 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
357 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
359 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
361 elif [[ -d "${localstatedir}/etc" ]] ; then
362 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
364 with_srv_lease_file="/etc/dhcpd.leases"
367 AC_MSG_RESULT($with_srv_lease_file)
369 AC_ARG_WITH(srv6-lease-file,
370 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
371 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
372 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
373 [File for dhcpd6 leases.]))
375 AC_MSG_CHECKING([for dhcpd6.leases location])
376 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
377 if [[ -d "${localstatedir}/db" ]] ; then
378 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
379 elif [[ -d "${localstatedir}/state" ]] ; then
380 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
381 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
383 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
385 elif [[ -d "${localstatedir}/lib" ]] ; then
386 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
387 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
389 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
391 elif [[ -d "${localstatedir}/etc" ]] ; then
392 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
394 with_srv6_lease_file="/etc/dhcpd6.leases"
397 AC_MSG_RESULT($with_srv6_lease_file)
399 AC_ARG_WITH(cli-lease-file,
400 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
401 (default is LOCALSTATEDIR/db/dhclient.leases)]),
402 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
403 [File for dhclient leases.]))
405 AC_MSG_CHECKING([for dhclient.leases location])
406 if [[ "x$with_cli_lease_file" = "x" ]] ; then
407 if [[ -d "${localstatedir}/db" ]] ; then
408 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
409 elif [[ -d "${localstatedir}/state" ]] ; then
410 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
411 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
413 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
415 elif [[ -d "${localstatedir}/lib" ]] ; then
416 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
417 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
419 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
421 elif [[ -d "${localstatedir}/etc" ]] ; then
422 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
424 with_cli_lease_file="/etc/dhclient.leases"
427 AC_MSG_RESULT($with_cli_lease_file)
429 AC_ARG_WITH(cli6-lease-file,
430 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
431 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
432 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
433 [File for dhclient6 leases.]))
435 AC_MSG_CHECKING([for dhclient6.leases location])
436 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
437 if [[ -d "${localstatedir}/db" ]] ; then
438 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
439 elif [[ -d "${localstatedir}/state" ]] ; then
440 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
441 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
443 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
445 elif [[ -d "${localstatedir}/lib" ]] ; then
446 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
447 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
449 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
451 elif [[ -d "${localstatedir}/etc" ]] ; then
452 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
454 with_cli6_lease_file="/etc/dhclient6.leases"
457 AC_MSG_RESULT($with_cli6_lease_file)
459 AC_ARG_WITH(srv-pid-file,
460 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
461 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
462 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
463 [File for dhcpd process information.]))
464 AC_ARG_WITH(srv6-pid-file,
465 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
466 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
467 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
468 [File for dhcpd6 process information.]))
469 AC_ARG_WITH(cli-pid-file,
470 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
471 (default is LOCALSTATEDIR/run/dhclient.pid)]),
472 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
473 [File for dhclient process information.]))
474 AC_ARG_WITH(cli6-pid-file,
475 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
476 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
477 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
478 [File for dhclient6 process information.]))
479 AC_ARG_WITH(relay-pid-file,
480 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
481 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
482 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
483 [File for dhcrelay process information.]))
484 AC_ARG_WITH(relay6-pid-file,
485 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
486 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
487 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
488 [File for dhcrelay6 process information.]))
496 # Some systems need the u_intX_t types defined across.
497 AC_CHECK_TYPE([u_int8_t], [], [
499 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
502 AC_CHECK_TYPE([u_int16_t], [], [
504 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
507 AC_CHECK_TYPE([u_int32_t], [], [
509 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
512 AC_CHECK_TYPE([u_int64_t], [], [
514 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
518 # see if ifaddrs.h is available
519 AC_CHECK_HEADERS(ifaddrs.h)
521 # figure out what IPv4 interface code to use
522 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
524 relay_port_supported="no"
525 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
527 #ifdef HAVE_LINUX_TYPES_H
528 #include <linux/types.h>
533 AC_DEFINE([HAVE_LPF], [1],
534 [Define to 1 to use the Linux Packet Filter interface code.])
535 relay_port_supported="yes"
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.])
549 relay_port_supported="yes"
554 if test "$enable_relay_port" = "yes"; then
555 if test "$relay_port_supported" != "yes"; then
556 AC_MSG_ERROR([--enable-relay-port requires BPF or LPF])
560 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
561 # use the same structures. We like to use 'struct lifconf' and 'struct
562 # lifreq', but we'll use these other structures if they're present. HPUX
563 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
566 AC_MSG_CHECKING([for struct lifnum])
567 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
568 #include <sys/socket.h>
570 ]], [[ struct lifnum a;
571 ]])],[AC_MSG_RESULT(yes)
572 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
573 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
575 AC_MSG_CHECKING([for struct if_laddrconf])
576 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
578 ]], [[ struct if_laddrconf a;
579 ]])],[AC_MSG_RESULT(yes)
580 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
581 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
583 AC_MSG_CHECKING([for struct if_laddrreq])
584 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
586 ]], [[ struct if_laddrreq a;
587 ]])],[AC_MSG_RESULT(yes)
588 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
589 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
592 # check for GCC noreturn attribute
594 AC_MSG_CHECKING(for GCC noreturn attribute)
595 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
596 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
597 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
598 AC_DEFINE([ISC_DHCP_NORETURN], [],
599 [Define to the string for a noreturn attribute.])])
601 # Look for optional headers.
602 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
604 # Solaris needs some libraries for functions
605 AC_SEARCH_LIBS(socket, [socket])
606 AC_SEARCH_LIBS(inet_ntoa, [nsl])
608 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
609 AC_DEFINE([NEED_INET_ATON], [1],
610 [Define to 1 if the inet_aton() function is missing.]))
612 # Check for a standalone regex library.
613 AC_SEARCH_LIBS(regcomp, [regex])
615 AC_CHECK_FUNCS(strlcat)
617 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
618 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
620 # For some Solaris nanosleep is found by BIND in librt
622 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
623 if test "$have_nanosleep" = "no"; then
624 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
626 if test "$have_nanosleep" = "rt"; then
630 # check for /dev/random (declares HAVE_DEV_RANDOM)
631 AC_MSG_CHECKING(for random device)
632 AC_ARG_WITH(randomdev,
633 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
634 (default is /dev/random)]),
635 use_randomdev="$withval", use_randomdev="unspec")
636 if test "$use_randomdev" = "unspec"; then
637 if test "$cross_compiling" = "yes"; then
638 AC_MSG_RESULT(unspecified)
639 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
641 use_randomdev="/dev/random"
642 elif test "$use_randomdev" = "yes"; then
643 use_randomdev="/dev/random"
645 if test "$use_randomdev" = "no"; then
646 AC_MSG_RESULT(disabled)
647 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
649 if test "$cross_compiling" = "yes"; then
650 AC_MSG_RESULT($use_randomdev (unchecked))
652 AC_MSG_RESULT($use_randomdev)
653 AC_CHECK_FILE($use_randomdev,
654 AC_DEFINE([HAVE_DEV_RANDOM], [1],
655 [Define to 1 if you have the /dev/random or other configured file.]),
656 AC_MSG_ERROR(cannot find $use_randomdev))
658 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
661 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
662 # check kqueue/epoll/devpoll alternative to select
663 AC_ARG_ENABLE(kqueue,
664 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
665 want_kqueue="$enableval", want_kqueue="no")
666 if test "$want_kqueue" = "yes"; then
667 BINDIOMUX="--enable-kqueue"
668 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
671 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
672 want_epoll="$enableval", want_epoll="no")
673 if test "$want_epoll" = "yes"; then
674 BINDIOMUX="--enable-epoll"
675 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
677 AC_ARG_ENABLE(devpoll,
678 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
679 want_devpoll="$enableval", want_devpoll="no")
680 if test "$want_devpoll" = "yes"; then
681 BINDIOMUX="--enable-devpoll"
682 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
686 # general extra bind configure arguments
687 AC_ARG_WITH(bind-extra-config,
688 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
689 with some extra options (default is none)]),
690 use_xbindconfig="$withval", use_xbindconfig="")
691 case "$use_xbindconfig" in
695 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
696 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
700 # see if there is a "sa_len" field in our interface information structure
701 AC_CHECK_MEMBER(struct sockaddr.sa_len,
702 AC_DEFINE([HAVE_SA_LEN], [],
703 [Define to 1 if the sockaddr structure has a length field.]),
705 [#include <sys/socket.h>])
707 # figure out pointer size
708 SAVE_CFLAGS="$CFLAGS"
709 CFLAGS="$CFLAGS -I$srcdir"
710 AC_CHECK_SIZEOF(struct iaddr *, , [
711 #include "includes/inet.h"
714 CFLAGS="$SAVE_CFLAGS"
716 # Solaris does not have the msg_control or msg_controlen members
717 # in the msghdr structure unless you define:
719 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
721 # See the "standards" man page for details.
723 # We check for the msg_control member, and if it is not found, we check
724 # again with the appropriate defines added to the CFLAGS. (In order to
725 # do this we have to remove the check from the cache, which is what the
727 AC_CHECK_MEMBER(struct msghdr.msg_control,,
728 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
729 CFLAGS="$CFLAGS -D__EXTENSIONS__"
730 unset ac_cv_member_struct_msghdr_msg_control
731 AC_CHECK_MEMBER(struct msghdr.msg_control,,
732 [AC_MSG_ERROR([Missing msg_control member in
733 msg_control structure.])],
735 #include <sys/types.h>
736 #include <sys/socket.h>
740 #include <sys/types.h>
741 #include <sys/socket.h>
744 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
745 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
746 ,, [#include <linux/if_packet.h>])
748 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
756 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
758 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
759 use_libbind="$withval", use_libbind="no")
760 case "$use_libbind" in
762 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
765 BINDSUBDIR="\${top_srcdir}/bind"
766 my_abs_srcdir=`cd $srcdir && pwd`
767 BINDDIR="${my_abs_srcdir}/bind"
768 if test ! -d "$srcdir/bind"; then
769 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
771 if test -d "$srcdir/bind/bind9"; then
772 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
774 if test ! -f "$srcdir/bind/version.tmp"; then
775 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
777 . "$srcdir/bind/version.tmp"
778 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
779 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
781 AC_CONFIG_FILES([$srcdir/bind/Makefile])
783 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
784 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
785 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
786 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
789 if test ! -d "$use_libbind"; then
790 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
792 if test ! -d "$use_libbind/include" -o \
793 ! -f "$use_libbind/include/isc/buffer.h"
795 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
797 if test ! -d "$use_libbind/lib" -o \
798 \( ! -f "$use_libbind/lib/libisc.a" -a \
799 ! -f "$use_libbind/lib/libisc.la" \)
801 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
803 BINDDIR="$use_libbind"
804 BINDLIBIRSDIR="$BINDDIR/lib"
805 BINDLIBDNSDIR="$BINDDIR/lib"
806 BINDLIBISCCFGDIR="$BINDDIR/lib"
807 BINDLIBISCDIR="$BINDDIR/lib"
808 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
814 AC_SUBST(BINDLIBIRSDIR)
815 AC_SUBST(BINDLIBDNSDIR)
816 AC_SUBST(BINDLIBISCCFGDIR)
817 AC_SUBST(BINDLIBISCDIR)
818 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
819 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
822 # GNU libtool support
826 # Just set the maximum command line length for sunos
827 # as it otherwise takes a exceptionally long time to
828 # work it out. Required for libtool.
830 lt_cv_sys_max_cmd_len=4096
839 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
840 AC_ARG_ENABLE(libtool,
841 AS_HELP_STRING([--enable-libtool],
842 [use GNU libtool for dynamic shared libraries (default is yes).]),
843 want_libtool="$enableval")
845 if test "$use_libbind" != "no"; then
846 if test "$want_libtool" = "yes" -a \
847 ! -f "$use_libbind/lib/libisc.la"
849 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
851 if test "$want_libtool" = "no" -a \
852 ! -f "$use_libbind/lib/libisc.a"
854 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
858 if test "$want_libtool" = "no"; then
859 AC_MSG_ERROR([libtool configure is used but libtool is disabled?])
864 BINDLT="--with-libtool --disable-symtable"
865 DISTCHECK_LIBTOOL_CONFIGURE_FLAG="--enable-libtool"
871 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
873 # quoting in Makefile.am.in
877 # install bind includes and libraries
879 want_install_bind="no"
880 want_install_bind="yes"
881 if test "$want_libtool" = "yes"; then
882 want_install_bind="yes"
884 if test "$use_libbind" != "no"; then
885 want_install_bind="no"
887 AC_ARG_ENABLE(bind_install,
888 AS_HELP_STRING([--enable-bind-install],
889 [install bind includes and libraries.]),
890 want_install_bind="$enableval")
891 if test "$want_install_bind" = "yes"; then
892 if test "$use_libbind" != "no"; then
893 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
895 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
896 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
898 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
902 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
906 # OpenLDAP with SSL support.
907 AC_ARG_WITH(ldapcrypto,
908 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
909 [ldapcrypto=$withval],
912 # Gssapi to allow LDAP to authenticate with a keytab
913 AC_ARG_WITH(ldap-gssapi,
914 AC_HELP_STRING([--with-ldap-gssapi],
915 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
916 [ldap_gssapi=$withval],
920 # LDAP CASA auth support.
921 AC_ARG_WITH(ldapcasa,
922 AC_HELP_STRING([--with-ldapcasa],
923 [enable LDAP CASA auth support in dhcpd (default is no)]),
927 # OpenLDAP support is disabled by default, if enabled then SSL support is an
928 # extra optional that is also disabled by default. Enabling LDAP SSL support
929 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
930 # but doesn't include SSL. The two are not dependant.
931 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
934 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
935 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
936 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
937 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
938 if test x$ldap_gssapi = xyes ; then
939 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
940 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
943 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
944 AC_SUBST(LDAP_LIBS, [$LIBS])
948 AC_CHECK_HEADERS([ldap.h])
949 AC_CHECK_FUNCS([inet_pton inet_ntop])
952 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
954 if test x$ldapcasa = xyes ; then
955 AC_CHECK_HEADERS([micasa_mgmd.h],[
956 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
957 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
960 if test x$ldapcrypto = xyes ; then
961 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
964 if test x$ldap_gssapi = xyes; then
965 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
968 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
971 # Append selected warning levels to CFLAGS before substitution (but after
972 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
973 CFLAGS="$CFLAGS $STD_CWARNINGS"
975 # Try to add the bind and dhcp include directories
976 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
980 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
982 # As of Solaris 11, ethernet dev files are in /dev/net
983 AC_CHECK_FILE(/dev/net,
984 [AC_DEFINE([USE_DEV_NET], [1],
985 [Define to 1 if ethernet devices are in /dev/net])])
989 AC_C_FLEXIBLE_ARRAY_MEMBER
994 client/tests/Makefile
997 common/tests/Makefile
1009 server/tests/Makefile
1014 AC_MSG_NOTICE([postconfig: run automake in $srcdir])
1015 (cd $srcdir; automake)
1016 AC_MSG_NOTICE([postconfig: rerun config.status])
1019 if test "$enable_dhcpv4o6" = "yes"; then
1020 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1021 elif test "$enable_dhcpv6" != "no"; then
1022 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1024 DHCP_VERSIONS="DHCPv4"
1027 cat > config.report << END
1029 ISC DHCP source configure results:
1030 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1034 Version: $PACKAGE_VERSION
1042 DHCP versions: $DHCP_VERSIONS
1045 debug: $enable_debug
1046 failover: $enable_failover
1047 execute: $enable_execute
1048 binary-leases: $enable_binary_leases
1049 dhcpv6: $enable_dhcpv6
1050 delayed-ack: $enable_delayed_ack
1051 dhcpv4o6: $enable_dhcpv4o6
1052 relay-port: $enable_relay_port
1055 ATF unittests : $atf_path
1058 # TODO: Add Perl system tests
1060 if test "$atf_path" != "no"
1062 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1063 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1064 echo "ATF_BIN : $ATF_BIN" >> config.report
1071 echo Now you can type "make" to build ISC DHCP