1 AC_INIT([DHCP],[4.4.2-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.
146 AC_ARG_ENABLE(delayed_ack,
147 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
148 if test "$enable_delayed_ack" != "no"; then
149 enable_delayed_ack="yes"
150 AC_DEFINE([DELAYED_ACK], [1],
151 [Define to queue multiple DHCPACK replies per fsync.])
154 # DHCPv6 optional compile-time feature.
155 AC_ARG_ENABLE(dhcpv6,
156 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
157 # DHCPv6 is on by default, so define if it is not explicitly disabled.
158 if test "$enable_dhcpv6" != "no"; then
160 AC_DEFINE([DHCPv6], [1],
161 [Define to 1 to include DHCPv6 support.])
164 # DHCPv4o6 optional compile-time feature.
165 AC_ARG_ENABLE(dhcpv4o6,
166 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
167 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
168 if test "$enable_dhcpv4o6" = "yes"; then
169 # DHCPv4o6 requires DHCPv6
170 if test "$enable_dhcpv6" = "no"; then
171 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
173 AC_DEFINE([DHCP4o6], [1],
174 [Define to 1 to include DHCPv4 over DHCPv6 support.])
176 # so we can report below
180 # Relay port (draft-ietf-dhc-relay-port-10.txt) optional compile-time feature.
181 AC_ARG_ENABLE(relay-port,
182 AS_HELP_STRING([--enable-relay-port],[enable support for relay port (default is no)]))
183 # Relay port is off by default (for now)
184 if test "$enable_relay_port" = "yes"; then
185 AC_DEFINE([RELAY_PORT], [1],
186 [Define to 1 to include relay port support.])
188 # so we can report below
189 enable_relay_port="no"
192 # PARANOIA is off by default (until we can test it with all features)
193 AC_ARG_ENABLE(paranoia,
194 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
195 AC_ARG_ENABLE(early_chroot,
196 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
197 # If someone enables early chroot, but does not enable paranoia, do so for
199 if test "$enable_paranoia" != "yes" && \
200 test "$enable_early_chroot" = "yes" ; then
201 enable_paranoia="yes"
204 if test "$enable_paranoia" = "yes" ; then
205 AC_DEFINE([PARANOIA], [1],
206 [Define to any value to include Ari's PARANOIA patch.])
208 if test "$enable_early_chroot" = "yes" ; then
209 AC_DEFINE([EARLY_CHROOT], [1],
210 [Define to any value to chroot() prior to loading config.])
213 AC_ARG_ENABLE(ipv4_pktinfo,
214 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
216 if test "$enable_ipv4_pktinfo" = "yes"; then
217 AC_DEFINE([USE_V4_PKTINFO], [1],
218 [Define to 1 to enable IPv4 packet info support.])
221 AC_ARG_ENABLE(use_sockets,
222 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
224 if test "$enable_use_sockets" = "yes"; then
225 AC_DEFINE([USE_SOCKETS], [1],
226 [Define to 1 to use the standard BSD socket API.])
229 # Include the PID in the log messages. This is useful when there may
230 # be multiple instances of a program.
231 # This is off by default
232 AC_ARG_ENABLE(log_pid,
233 AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
234 if test "$enable_log_pid" = "yes" ; then
235 AC_DEFINE([USE_LOG_PID], [1],
236 [Define to include PIDs in syslog messages.])
239 # Allow for binary search when inserting v4 leases into queues
240 AC_ARG_ENABLE(binary_leases,
241 AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
242 # binary_leases is off by default.
243 if test "$enable_binary_leases" = "yes"; then
244 AC_DEFINE([BINARY_LEASES], [1],
245 [Define to support binary insertion of leases into queues.])
247 enable_binary_leases="no"
252 DISTCHECK_ATF_CONFIGURE_FLAG=
255 AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed]),
256 [atf_path="$withval"])
257 if test "$atf_path" != "no" ; then
258 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
259 # Config path for pkg-config
261 if test "$atf_path" != "yes" ; then
262 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
263 atf_pcp=$atf_path/lib/pkgconfig
264 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
265 atf_pcp=$atf_path/lib64/pkgconfig
268 # Not specified, try some common paths
269 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
272 if test -f $d/lib/pkgconfig/atf-c.pc ; then
273 atf_pcp=$d/lib/pkgconfig
275 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
276 atf_pcp=$d/lib64/pkgconfig
282 if test "$atf_pcp" = "" ; then
283 AC_MSG_ERROR([Unable to find atf files in location specified])
285 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
286 if test "$pkgcfg_found" = ""; then
287 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
289 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
290 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
291 if test -f $atf_pcp/atf-sh.pc ; then
292 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
294 # older versions don't have atf-sh, try usual place
295 ATF_BIN=$atf_path/bin
301 AC_SUBST(ATF_LDFLAGS)
307 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
308 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
309 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
312 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
313 ### need to look there and potentially overwrite by default (but not if
314 ### the user configures an alternate value). LOCALSTATEDIR is totally
315 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
316 ### they would be insane for suggesting it. We need to look in /var/for
317 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
320 AC_PREFIX_PROGRAM(dhcpd)
322 # XXX - isn't there SOME WAY to default autoconf to /var instead of
323 # /usr/local/var/no/one/has/this/please/stop/trying?
324 case "$localstatedir" in
330 # Default server configuration file.
331 AC_ARG_WITH(srv-conf-file,
332 AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
333 (default is typically /etc/dhcpd.conf)]),
334 AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
335 [Default file containing dhcpd configuration.]))
337 # Allow specification of alternate state files
338 AC_ARG_WITH(srv-lease-file,
339 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
340 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
341 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
342 [File for dhcpd leases.]))
344 AC_MSG_CHECKING([for dhcpd.leases location])
345 if [[ "x$with_srv_lease_file" = "x" ]] ; then
346 if [[ -d "${localstatedir}/db" ]] ; then
347 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
348 elif [[ -d "${localstatedir}/state" ]] ; then
349 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
350 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
352 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
354 elif [[ -d "${localstatedir}/lib" ]] ; then
355 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
356 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
358 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
360 elif [[ -d "${localstatedir}/etc" ]] ; then
361 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
363 with_srv_lease_file="/etc/dhcpd.leases"
366 AC_MSG_RESULT($with_srv_lease_file)
368 AC_ARG_WITH(srv6-lease-file,
369 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
370 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
371 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
372 [File for dhcpd6 leases.]))
374 AC_MSG_CHECKING([for dhcpd6.leases location])
375 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
376 if [[ -d "${localstatedir}/db" ]] ; then
377 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
378 elif [[ -d "${localstatedir}/state" ]] ; then
379 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
380 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
382 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
384 elif [[ -d "${localstatedir}/lib" ]] ; then
385 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
386 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
388 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
390 elif [[ -d "${localstatedir}/etc" ]] ; then
391 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
393 with_srv6_lease_file="/etc/dhcpd6.leases"
396 AC_MSG_RESULT($with_srv6_lease_file)
398 AC_ARG_WITH(cli-lease-file,
399 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
400 (default is LOCALSTATEDIR/db/dhclient.leases)]),
401 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
402 [File for dhclient leases.]))
404 AC_MSG_CHECKING([for dhclient.leases location])
405 if [[ "x$with_cli_lease_file" = "x" ]] ; then
406 if [[ -d "${localstatedir}/db" ]] ; then
407 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
408 elif [[ -d "${localstatedir}/state" ]] ; then
409 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
410 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
412 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
414 elif [[ -d "${localstatedir}/lib" ]] ; then
415 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
416 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
418 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
420 elif [[ -d "${localstatedir}/etc" ]] ; then
421 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
423 with_cli_lease_file="/etc/dhclient.leases"
426 AC_MSG_RESULT($with_cli_lease_file)
428 AC_ARG_WITH(cli6-lease-file,
429 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
430 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
431 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
432 [File for dhclient6 leases.]))
434 AC_MSG_CHECKING([for dhclient6.leases location])
435 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
436 if [[ -d "${localstatedir}/db" ]] ; then
437 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
438 elif [[ -d "${localstatedir}/state" ]] ; then
439 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
440 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
442 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
444 elif [[ -d "${localstatedir}/lib" ]] ; then
445 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
446 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
448 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
450 elif [[ -d "${localstatedir}/etc" ]] ; then
451 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
453 with_cli6_lease_file="/etc/dhclient6.leases"
456 AC_MSG_RESULT($with_cli6_lease_file)
458 AC_ARG_WITH(srv-pid-file,
459 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
460 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
461 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
462 [File for dhcpd process information.]))
463 AC_ARG_WITH(srv6-pid-file,
464 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
465 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
466 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
467 [File for dhcpd6 process information.]))
468 AC_ARG_WITH(cli-pid-file,
469 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
470 (default is LOCALSTATEDIR/run/dhclient.pid)]),
471 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
472 [File for dhclient process information.]))
473 AC_ARG_WITH(cli6-pid-file,
474 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
475 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
476 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
477 [File for dhclient6 process information.]))
478 AC_ARG_WITH(relay-pid-file,
479 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
480 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
481 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
482 [File for dhcrelay process information.]))
483 AC_ARG_WITH(relay6-pid-file,
484 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
485 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
486 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
487 [File for dhcrelay6 process information.]))
495 # Some systems need the u_intX_t types defined across.
496 AC_CHECK_TYPE([u_int8_t], [], [
498 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
501 AC_CHECK_TYPE([u_int16_t], [], [
503 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
506 AC_CHECK_TYPE([u_int32_t], [], [
508 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
511 AC_CHECK_TYPE([u_int64_t], [], [
513 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
517 # see if ifaddrs.h is available
518 AC_CHECK_HEADERS(ifaddrs.h)
520 # figure out what IPv4 interface code to use
521 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
523 relay_port_supported="no"
524 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
526 #ifdef HAVE_LINUX_TYPES_H
527 #include <linux/types.h>
532 AC_DEFINE([HAVE_LPF], [1],
533 [Define to 1 to use the Linux Packet Filter interface code.])
534 relay_port_supported="yes"
536 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
537 if test -n "$DO_DLPI"
539 AC_DEFINE([HAVE_DLPI], [1],
540 [Define to 1 to use DLPI interface code.])
542 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
545 AC_DEFINE([HAVE_BPF], [1],
546 [Define to 1 to use the
547 Berkeley Packet Filter interface code.])
548 relay_port_supported="yes"
553 if test "$enable_relay_port" = "yes"; then
554 if test "$relay_port_supported" != "yes"; then
555 AC_MSG_ERROR([--enable-relay-port requires BPF or LPF])
559 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
560 # use the same structures. We like to use 'struct lifconf' and 'struct
561 # lifreq', but we'll use these other structures if they're present. HPUX
562 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
565 AC_MSG_CHECKING([for struct lifnum])
566 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
567 #include <sys/socket.h>
569 ]], [[ struct lifnum a;
570 ]])],[AC_MSG_RESULT(yes)
571 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
572 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
574 AC_MSG_CHECKING([for struct if_laddrconf])
575 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
577 ]], [[ struct if_laddrconf a;
578 ]])],[AC_MSG_RESULT(yes)
579 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
580 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
582 AC_MSG_CHECKING([for struct if_laddrreq])
583 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
585 ]], [[ struct if_laddrreq a;
586 ]])],[AC_MSG_RESULT(yes)
587 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
588 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
591 # check for GCC noreturn attribute
593 AC_MSG_CHECKING(for GCC noreturn attribute)
594 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
595 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
596 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
597 AC_DEFINE([ISC_DHCP_NORETURN], [],
598 [Define to the string for a noreturn attribute.])])
600 # Look for optional headers.
601 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
603 # Solaris needs some libraries for functions
604 AC_SEARCH_LIBS(socket, [socket])
605 AC_SEARCH_LIBS(inet_ntoa, [nsl])
607 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
608 AC_DEFINE([NEED_INET_ATON], [1],
609 [Define to 1 if the inet_aton() function is missing.]))
611 # Check for a standalone regex library.
612 AC_SEARCH_LIBS(regcomp, [regex])
614 AC_CHECK_FUNCS(strlcat)
616 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
617 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
619 # For some Solaris nanosleep is found by BIND in librt
621 AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
622 if test "$have_nanosleep" = "no"; then
623 AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
625 if test "$have_nanosleep" = "rt"; then
629 # check for /dev/random (declares HAVE_DEV_RANDOM)
630 AC_MSG_CHECKING(for random device)
631 AC_ARG_WITH(randomdev,
632 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
633 (default is /dev/random)]),
634 use_randomdev="$withval", use_randomdev="unspec")
635 if test "$use_randomdev" = "unspec"; then
636 if test "$cross_compiling" = "yes"; then
637 AC_MSG_RESULT(unspecified)
638 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
640 use_randomdev="/dev/random"
641 elif test "$use_randomdev" = "yes"; then
642 use_randomdev="/dev/random"
644 if test "$use_randomdev" = "no"; then
645 AC_MSG_RESULT(disabled)
646 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
648 if test "$cross_compiling" = "yes"; then
649 AC_MSG_RESULT($use_randomdev (unchecked))
651 AC_MSG_RESULT($use_randomdev)
652 AC_CHECK_FILE($use_randomdev,
653 AC_DEFINE([HAVE_DEV_RANDOM], [1],
654 [Define to 1 if you have the /dev/random or other configured file.]),
655 AC_MSG_ERROR(cannot find $use_randomdev))
657 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
660 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
661 # check kqueue/epoll/devpoll alternative to select
662 AC_ARG_ENABLE(kqueue,
663 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
664 want_kqueue="$enableval", want_kqueue="no")
665 if test "$want_kqueue" = "yes"; then
666 BINDIOMUX="--enable-kqueue"
667 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
670 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
671 want_epoll="$enableval", want_epoll="no")
672 if test "$want_epoll" = "yes"; then
673 BINDIOMUX="--enable-epoll"
674 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
676 AC_ARG_ENABLE(devpoll,
677 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
678 want_devpoll="$enableval", want_devpoll="no")
679 if test "$want_devpoll" = "yes"; then
680 BINDIOMUX="--enable-devpoll"
681 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
685 # general extra bind configure arguments
686 AC_ARG_WITH(bind-extra-config,
687 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
688 with some extra options (default is none)]),
689 use_xbindconfig="$withval", use_xbindconfig="")
690 case "$use_xbindconfig" in
694 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
695 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
699 # see if there is a "sa_len" field in our interface information structure
700 AC_CHECK_MEMBER(struct sockaddr.sa_len,
701 AC_DEFINE([HAVE_SA_LEN], [],
702 [Define to 1 if the sockaddr structure has a length field.]),
704 [#include <sys/socket.h>])
706 # figure out pointer size
707 SAVE_CFLAGS="$CFLAGS"
708 CFLAGS="$CFLAGS -I$srcdir"
709 AC_CHECK_SIZEOF(struct iaddr *, , [
710 #include "includes/inet.h"
713 CFLAGS="$SAVE_CFLAGS"
715 # Solaris does not have the msg_control or msg_controlen members
716 # in the msghdr structure unless you define:
718 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
720 # See the "standards" man page for details.
722 # We check for the msg_control member, and if it is not found, we check
723 # again with the appropriate defines added to the CFLAGS. (In order to
724 # do this we have to remove the check from the cache, which is what the
726 AC_CHECK_MEMBER(struct msghdr.msg_control,,
727 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
728 CFLAGS="$CFLAGS -D__EXTENSIONS__"
729 unset ac_cv_member_struct_msghdr_msg_control
730 AC_CHECK_MEMBER(struct msghdr.msg_control,,
731 [AC_MSG_ERROR([Missing msg_control member in
732 msg_control structure.])],
734 #include <sys/types.h>
735 #include <sys/socket.h>
739 #include <sys/types.h>
740 #include <sys/socket.h>
743 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
744 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
745 ,, [#include <linux/if_packet.h>])
747 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
755 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
757 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
758 use_libbind="$withval", use_libbind="no")
759 case "$use_libbind" in
761 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
764 BINDSUBDIR="\${top_srcdir}/bind"
765 my_abs_srcdir=`cd $srcdir && pwd`
766 BINDDIR="${my_abs_srcdir}/bind"
767 if test ! -d "$srcdir/bind"; then
768 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
770 if test -d "$srcdir/bind/bind9"; then
771 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
773 if test ! -f "$srcdir/bind/version.tmp"; then
774 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
776 . "$srcdir/bind/version.tmp"
777 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
778 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
780 AC_CONFIG_FILES([$srcdir/bind/Makefile])
782 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
783 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
784 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
785 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
788 if test ! -d "$use_libbind"; then
789 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
791 if test ! -d "$use_libbind/include" -o \
792 ! -f "$use_libbind/include/isc/buffer.h"
794 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
796 if test ! -d "$use_libbind/lib" -o \
797 \( ! -f "$use_libbind/lib/libisc.a" -a \
798 ! -f "$use_libbind/lib/libisc.la" \)
800 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
802 BINDDIR="$use_libbind"
803 BINDLIBIRSDIR="$BINDDIR/lib"
804 BINDLIBDNSDIR="$BINDDIR/lib"
805 BINDLIBISCCFGDIR="$BINDDIR/lib"
806 BINDLIBISCDIR="$BINDDIR/lib"
807 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
813 AC_SUBST(BINDLIBIRSDIR)
814 AC_SUBST(BINDLIBDNSDIR)
815 AC_SUBST(BINDLIBISCCFGDIR)
816 AC_SUBST(BINDLIBISCDIR)
817 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
818 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
821 # GNU libtool support
825 # Just set the maximum command line length for sunos
826 # as it otherwise takes a exceptionally long time to
827 # work it out. Required for libtool.
829 lt_cv_sys_max_cmd_len=4096
836 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
837 AC_ARG_ENABLE(libtool,
838 AS_HELP_STRING([--enable-libtool],
839 [use GNU libtool for dynamic shared libraries (default is no).]),
840 want_libtool="$enableval")
842 if test "$use_libbind" != "no"; then
843 if test "$want_libtool" = "yes" -a \
844 ! -f "$use_libbind/lib/libisc.la"
846 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
848 if test "$want_libtool" = "no" -a \
849 ! -f "$use_libbind/lib/libisc.a"
851 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
856 if test "$want_libtool" = "yes"; then
857 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
858 # expand $ac_configure_args
859 eval "set my_configure_args $ac_configure_args"
861 cd $srcdir; exec ./config+lt "$@"
862 AC_MSG_ERROR([Recovering failed])
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 if test "$want_libtool" = "yes"; then
881 want_install_bind="yes"
883 if test "$use_libbind" != "no"; then
884 want_install_bind="no"
886 AC_ARG_ENABLE(bind_install,
887 AS_HELP_STRING([--enable-bind-install],
888 [install bind includes and libraries (default is no).]),
889 want_install_bind="$enableval")
890 if test "$want_install_bind" = "yes"; then
891 if test "$use_libbind" != "no"; then
892 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
894 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
895 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
897 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
901 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
905 # OpenLDAP with SSL support.
906 AC_ARG_WITH(ldapcrypto,
907 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
908 [ldapcrypto=$withval],
911 # Gssapi to allow LDAP to authenticate with a keytab
912 AC_ARG_WITH(ldap-gssapi,
913 AC_HELP_STRING([--with-ldap-gssapi],
914 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
915 [ldap_gssapi=$withval],
919 # LDAP CASA auth support.
920 AC_ARG_WITH(ldapcasa,
921 AC_HELP_STRING([--with-ldapcasa],
922 [enable LDAP CASA auth support in dhcpd (default is no)]),
926 # OpenLDAP support is disabled by default, if enabled then SSL support is an
927 # extra optional that is also disabled by default. Enabling LDAP SSL support
928 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
929 # but doesn't include SSL. The two are not dependant.
930 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
933 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
934 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
935 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
936 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
937 if test x$ldap_gssapi = xyes ; then
938 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
939 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
942 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
943 AC_SUBST(LDAP_LIBS, [$LIBS])
947 AC_CHECK_HEADERS([ldap.h])
948 AC_CHECK_FUNCS([inet_pton inet_ntop])
951 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
953 if test x$ldapcasa = xyes ; then
954 AC_CHECK_HEADERS([micasa_mgmd.h],[
955 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
956 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
959 if test x$ldapcrypto = xyes ; then
960 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
963 if test x$ldap_gssapi = xyes; then
964 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
967 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
970 # Append selected warning levels to CFLAGS before substitution (but after
971 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
972 CFLAGS="$CFLAGS $STD_CWARNINGS"
974 # Try to add the bind and dhcp include directories
975 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
979 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
981 # As of Solaris 11, ethernet dev files are in /dev/net
982 AC_CHECK_FILE(/dev/net,
983 [AC_DEFINE([USE_DEV_NET], [1],
984 [Define to 1 if ethernet devices are in /dev/net])])
988 AC_C_FLEXIBLE_ARRAY_MEMBER
993 client/tests/Makefile
996 common/tests/Makefile
1008 server/tests/Makefile
1014 if test "$enable_dhcpv4o6" = "yes"; then
1015 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1016 elif test "$enable_dhcpv6" != "no"; then
1017 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1019 DHCP_VERSIONS="DHCPv4"
1022 cat > config.report << END
1024 ISC DHCP source configure results:
1025 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1029 Version: $PACKAGE_VERSION
1037 DHCP versions: $DHCP_VERSIONS
1040 debug: $enable_debug
1041 failover: $enable_failover
1042 execute: $enable_execute
1043 binary-leases: $enable_binary_leases
1044 dhcpv6: $enable_dhcpv6
1045 delayed-ack: $enable_delayed_ack
1046 dhcpv4o6: $enable_dhcpv4o6
1047 relay-port: $enable_relay_port
1050 ATF unittests : $atf_path
1053 # TODO: Add Perl system tests
1055 if test "$atf_path" != "no"
1057 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1058 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1059 echo "ATF_BIN : $ATF_BIN" >> config.report
1066 echo Now you can type "make" to build ISC DHCP