1 AC_INIT([DHCP],[4.4.0-dev],[dhcp-users@isc.org])
4 # we specify "foreign" to avoid having to have the GNU mandated files,
5 # like AUTHORS, COPYING, and such
6 AM_INIT_AUTOMAKE([foreign])
8 # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
9 # the configure and makefiles. Without it users doing things that
10 # change the timestamps on the code, like checking it into a cvs
11 # tree, could trigger a rebuild of the infrastructure files which
12 # might fail if they don't have the correct tools.
17 # We want to turn on warnings if we are using gcc and the user did
18 # not specify CFLAGS. The autoconf check for the C compiler sets the
19 # CFLAGS if gcc is used, so we will save it before we run that check.
22 # Now find our C compiler.
25 # Suppress warnings about --datarootdir
26 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
28 # If we have gcc, and AC_PROG_CC changed the flags, then we know the
29 # user did not specify any flags. Add warnings in this case.
30 if test "$GCC" = "yes"; then
31 if test "$CFLAGS" != "$SAVE_CFLAGS"; then
32 STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
36 # We can have some flags to pass to bind configure
38 if test "$cross_compiling" = "yes"; then
39 BINDCONFIG="--host=$host"
41 # Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
42 # and as there can be a space inside an argument some magic is required.
43 # This sets $1 ... $N to my_configure_args, arg1 ... argN
44 eval "set my_configure_args $ac_configure_args"
45 # remove my_configure_args, i.e., the guard against empty $ac_configure_args
47 # iterate on arguments and copying 'arg' when it begins by an upper case
51 [[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
56 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
57 # parts of the IPv6 Advanced Socket API as a result. This is stupid
58 # as it breaks how the two halves (Basic and Advanced) of the IPv6
59 # Socket API were designed to be used but we have to live with it.
60 # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
61 AC_USE_SYSTEM_EXTENSIONS
68 if test "X$AR" = "X"; then
70 ar program not found. Please fix your PATH to include the directory in
71 which ar resides, or set AR in the environment with the full path to ar.])
74 AC_CONFIG_HEADERS([includes/config.h])
76 # we sometimes need to know byte order for building packets
77 AC_C_BIGENDIAN(AC_SUBST(byte_order, BIG_ENDIAN),
78 AC_SUBST(byte_order, LITTLE_ENDIAN))
79 AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
80 [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
81 or LITTLE_ENDIAN for LSB (Intel CPUs).])
83 # Optional compile-time DEBUGging.
85 AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
86 [case "${enableval}" in
88 AC_DEFINE([DEBUG], [1],
89 [Define to compile debug-only DHCP software.])
90 # Just override CFLAGS totally to remove optimization.
92 no) enable_debug=no ;;
93 *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
94 esac],[enable_debug=no])
96 # XXX: there are actually quite a lot more DEBUG_ features we could enable,
97 # but I don't want to pollute the --help space.
99 #/* #define DEBUG_TOKENS */
100 #/* #define DEBUG_PACKET */
101 #/* #define DEBUG_EXPRESSIONS */
102 #/* #define DEBUG_FIND_LEASE */
103 #/* #define DEBUG_EXPRESSION_PARSE */
104 #/* #define DEBUG_CLASS_MATCHING */
105 #/* #define DEBUG_MEMORY_LEAKAGE */
106 #/* #define DEBUG_MALLOC_POOL */
107 #/* #define DEBUG_LEASE_STATE_TRANSITIONS */
108 #/* #define DEBUG_RC_HISTORY */
109 #/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
110 #/* #define RC_HISTORY_MAX 10240 */
111 #/* #define POINTER_DEBUG */
112 #/* #define DEBUG_FAILOVER_MESSAGES */
113 #/* #define DEBUG_FAILOVER_TIMING */
114 #/* #define DEBUG_DUMP_ALL_LEASES */
116 # Failover optional compile-time feature.
117 AC_ARG_ENABLE(failover,
118 AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
119 # Failover is on by default, so define if it is not explicitly disabled.
120 if test "$enable_failover" != "no"; then
121 enable_failover="yes"
122 AC_DEFINE([FAILOVER_PROTOCOL], [1],
123 [Define to include Failover Protocol support.])
127 AC_ARG_ENABLE(execute,
128 AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
129 # execute() is on by default, so define if it is not explicitly disabled.
130 if test "$enable_execute" != "no" ; then
132 AC_DEFINE([ENABLE_EXECUTE], [1],
133 [Define to include execute() config language support.])
136 # Server tracing support.
137 AC_ARG_ENABLE(tracing,
138 AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
139 # tracing is on by default, so define if it is not explicitly disabled.
140 if test "$enable_tracing" != "no" ; then
141 AC_DEFINE([TRACING], [1],
142 [Define to include server activity tracing support.])
145 # Delayed-ack feature support (experimental).
146 AC_ARG_ENABLE(delayed_ack,
147 AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
148 if test "$enable_delayed_ack" = "yes"; then
149 AC_DEFINE([DELAYED_ACK], [1],
150 [Define to queue multiple DHCPACK replies per fsync.])
152 enable_delayed_ack="no"
155 # DHCPv6 optional compile-time feature.
156 AC_ARG_ENABLE(dhcpv6,
157 AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
158 # DHCPv6 is on by default, so define if it is not explicitly disabled.
159 if test "$enable_dhcpv6" != "no"; then
161 AC_DEFINE([DHCPv6], [1],
162 [Define to 1 to include DHCPv6 support.])
165 # DHCPv4o6 optional compile-time feature.
166 AC_ARG_ENABLE(dhcpv4o6,
167 AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
168 # DHCPv4o6 is off by default, so define if it is explicitly enabled.
169 if test "$enable_dhcpv4o6" = "yes"; then
170 # DHCPv4o6 requires DHCPv6
171 if test "$enable_dhcpv6" = "no"; then
172 AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
174 # DHCPv4o6 is not yet compatible with delayed-ack
175 if test "$enable_delayed_ack" = "yes"; then
176 AC_MSG_ERROR([dhcpv4o6 is not compatible with delayed-ack])
178 AC_DEFINE([DHCP4o6], [1],
179 [Define to 1 to include DHCPv4 over DHCPv6 support.])
182 # PARANOIA is off by default (until we can test it with all features)
183 AC_ARG_ENABLE(paranoia,
184 AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
185 AC_ARG_ENABLE(early_chroot,
186 AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
187 # If someone enables early chroot, but does not enable paranoia, do so for
189 if test "$enable_paranoia" != "yes" && \
190 test "$enable_early_chroot" = "yes" ; then
191 enable_paranoia="yes"
194 if test "$enable_paranoia" = "yes" ; then
195 AC_DEFINE([PARANOIA], [1],
196 [Define to any value to include Ari's PARANOIA patch.])
198 if test "$enable_early_chroot" = "yes" ; then
199 AC_DEFINE([EARLY_CHROOT], [1],
200 [Define to any value to chroot() prior to loading config.])
203 AC_ARG_ENABLE(ipv4_pktinfo,
204 AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
206 if test "$enable_ipv4_pktinfo" = "yes"; then
207 AC_DEFINE([USE_V4_PKTINFO], [1],
208 [Define to 1 to enable IPv4 packet info support.])
211 AC_ARG_ENABLE(use_sockets,
212 AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
214 if test "$enable_use_sockets" = "yes"; then
215 AC_DEFINE([USE_SOCKETS], [1],
216 [Define to 1 to use the standard BSD socket API.])
219 # Try to hnadle incorrect byte order for secs field
220 # This is off by default
221 AC_ARG_ENABLE(secs_byteorder,
222 AS_HELP_STRING([--enable-secs-byteorder],[Correct bad byteorders in the secs field (default is no).]))
224 if test "$enable_secs_byteorder" = "yes" ; then
225 AC_DEFINE([SECS_BYTEORDER], [1],
226 [Define to correct bad byteorders in secs field.])
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 (or "bind")]),
256 [atf_path="$withval"])
257 AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
258 if test "$atf_path" = "bind" ; then
259 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
261 atf_path="\${top_srcdir}/bind/atf"
262 ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
263 ATF_LDFLAGS="-L$atf_path/lib -latf-c"
264 ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
266 AC_SUBST(ATF_LDFLAGS)
268 BINDCONFIG="$BINDCONFIG --with-atf"
269 elif test "$atf_path" != "no" ; then
270 DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
271 # Config path for pkg-config
273 if test "$atf_path" != "yes" ; then
274 if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
275 atf_pcp=$atf_path/lib/pkgconfig
276 elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
277 atf_pcp=$atf_path/lib64/pkgconfig
280 # Not specified, try some common paths
281 atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
284 if test -f $d/lib/pkgconfig/atf-c.pc ; then
285 atf_pcp=$d/lib/pkgconfig
287 elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
288 atf_pcp=$d/lib64/pkgconfig
294 if test "$atf_pcp" = "" ; then
295 AC_MSG_ERROR([Unable to find atf files in location specified])
297 AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
298 if test "$pkgcfg_found" = ""; then
299 AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
301 ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
302 ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
303 if test -f $atf_pcp/atf-sh.pc ; then
304 ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
306 # older versions don't have atf-sh, try usual place
307 ATF_BIN=$atf_path/bin
310 if test ! -x $ATF_BIN/atf-run -o ! -x $ATF_BIN/atf-report ; then
311 AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
315 AC_SUBST(ATF_LDFLAGS)
320 AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
321 AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
322 AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
325 ### Path fun. Older versions of DHCP were installed in /usr/sbin, so we
326 ### need to look there and potentially overwrite by default (but not if
327 ### the user configures an alternate value). LOCALSTATEDIR is totally
328 ### braindead. No one uses /usr/local/var/db/ nor /usr/local/var/run, and
329 ### they would be insane for suggesting it. We need to look in /var/for
330 ### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
333 AC_PREFIX_PROGRAM(dhcpd)
335 # XXX - isn't there SOME WAY to default autoconf to /var instead of
336 # /usr/local/var/no/one/has/this/please/stop/trying?
337 case "$localstatedir" in
343 # Allow specification of alternate state files
344 AC_ARG_WITH(srv-lease-file,
345 AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
346 (default is LOCALSTATEDIR/db/dhcpd.leases)]),
347 AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
348 [File for dhcpd leases.]))
350 AC_MSG_CHECKING([for dhcpd.leases location])
351 if [[ "x$with_srv_lease_file" = "x" ]] ; then
352 if [[ -d "${localstatedir}/db" ]] ; then
353 with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
354 elif [[ -d "${localstatedir}/state" ]] ; then
355 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
356 with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
358 with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
360 elif [[ -d "${localstatedir}/lib" ]] ; then
361 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
362 with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
364 with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
366 elif [[ -d "${localstatedir}/etc" ]] ; then
367 with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
369 with_srv_lease_file="/etc/dhcpd.leases"
372 AC_MSG_RESULT($with_srv_lease_file)
374 AC_ARG_WITH(srv6-lease-file,
375 AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
376 (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
377 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
378 [File for dhcpd6 leases.]))
380 AC_MSG_CHECKING([for dhcpd6.leases location])
381 if [[ "x$with_srv6_lease_file" = "x" ]] ; then
382 if [[ -d "${localstatedir}/db" ]] ; then
383 with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
384 elif [[ -d "${localstatedir}/state" ]] ; then
385 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
386 with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
388 with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
390 elif [[ -d "${localstatedir}/lib" ]] ; then
391 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
392 with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
394 with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
396 elif [[ -d "${localstatedir}/etc" ]] ; then
397 with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
399 with_srv6_lease_file="/etc/dhcpd6.leases"
402 AC_MSG_RESULT($with_srv6_lease_file)
404 AC_ARG_WITH(cli-lease-file,
405 AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
406 (default is LOCALSTATEDIR/db/dhclient.leases)]),
407 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
408 [File for dhclient leases.]))
410 AC_MSG_CHECKING([for dhclient.leases location])
411 if [[ "x$with_cli_lease_file" = "x" ]] ; then
412 if [[ -d "${localstatedir}/db" ]] ; then
413 with_cli_lease_file="${localstatedir}/db/dhclient.leases"
414 elif [[ -d "${localstatedir}/state" ]] ; then
415 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
416 with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
418 with_cli_lease_file="${localstatedir}/state/dhclient.leases"
420 elif [[ -d "${localstatedir}/lib" ]] ; then
421 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
422 with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
424 with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
426 elif [[ -d "${localstatedir}/etc" ]] ; then
427 with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
429 with_cli_lease_file="/etc/dhclient.leases"
432 AC_MSG_RESULT($with_cli_lease_file)
434 AC_ARG_WITH(cli6-lease-file,
435 AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
436 (default is LOCALSTATEDIR/db/dhclient6.leases)]),
437 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
438 [File for dhclient6 leases.]))
440 AC_MSG_CHECKING([for dhclient6.leases location])
441 if [[ "x$with_cli6_lease_file" = "x" ]] ; then
442 if [[ -d "${localstatedir}/db" ]] ; then
443 with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
444 elif [[ -d "${localstatedir}/state" ]] ; then
445 if [[ -d "${localstatedir}/state/dhcp" ]] ; then
446 with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
448 with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
450 elif [[ -d "${localstatedir}/lib" ]] ; then
451 if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
452 with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
454 with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
456 elif [[ -d "${localstatedir}/etc" ]] ; then
457 with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
459 with_cli6_lease_file="/etc/dhclient6.leases"
462 AC_MSG_RESULT($with_cli6_lease_file)
464 AC_ARG_WITH(srv-pid-file,
465 AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
466 (default is LOCALSTATEDIR/run/dhcpd.pid)]),
467 AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
468 [File for dhcpd process information.]))
469 AC_ARG_WITH(srv6-pid-file,
470 AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
471 (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
472 AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
473 [File for dhcpd6 process information.]))
474 AC_ARG_WITH(cli-pid-file,
475 AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
476 (default is LOCALSTATEDIR/run/dhclient.pid)]),
477 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
478 [File for dhclient process information.]))
479 AC_ARG_WITH(cli6-pid-file,
480 AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
481 (default is LOCALSTATEDIR/run/dhclient6.pid)]),
482 AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
483 [File for dhclient6 process information.]))
484 AC_ARG_WITH(relay-pid-file,
485 AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
486 (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
487 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
488 [File for dhcrelay process information.]))
489 AC_ARG_WITH(relay6-pid-file,
490 AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
491 (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
492 AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
493 [File for dhcrelay6 process information.]))
501 # Some systems need the u_intX_t types defined across.
502 AC_CHECK_TYPE([u_int8_t], [], [
504 AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
507 AC_CHECK_TYPE([u_int16_t], [], [
509 AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
512 AC_CHECK_TYPE([u_int32_t], [], [
514 AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
517 AC_CHECK_TYPE([u_int64_t], [], [
519 AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
523 # see if ifaddrs.h is available
524 AC_CHECK_HEADERS(ifaddrs.h)
526 # figure out what IPv4 interface code to use
527 AC_CHECK_HEADERS(linux/types.h) # needed for linux/filter.h on old systems
529 AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
531 #ifdef HAVE_LINUX_TYPES_H
532 #include <linux/types.h>
537 AC_DEFINE([HAVE_LPF], [1],
538 [Define to 1 to use the Linux Packet Filter interface code.])
540 AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
541 if test -n "$DO_DLPI"
543 AC_DEFINE([HAVE_DLPI], [1],
544 [Define to 1 to use DLPI interface code.])
546 AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
549 AC_DEFINE([HAVE_BPF], [1],
550 [Define to 1 to use the
551 Berkeley Packet Filter interface code.])
556 # SIOCGLIFCONF uses some transport structures. Trick is not all platforms
557 # use the same structures. We like to use 'struct lifconf' and 'struct
558 # lifreq', but we'll use these other structures if they're present. HPUX
559 # does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
562 AC_MSG_CHECKING([for struct lifnum])
563 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
564 #include <sys/socket.h>
566 ]], [[ struct lifnum a;
567 ]])],[AC_MSG_RESULT(yes)
568 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
569 [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
571 AC_MSG_CHECKING([for struct if_laddrconf])
572 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
574 ]], [[ struct if_laddrconf a;
575 ]])],[AC_MSG_RESULT(yes)
576 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
577 [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
579 AC_MSG_CHECKING([for struct if_laddrreq])
580 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
582 ]], [[ struct if_laddrreq a;
583 ]])],[AC_MSG_RESULT(yes)
584 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
585 [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
588 # check for GCC noreturn attribute
590 AC_MSG_CHECKING(for GCC noreturn attribute)
591 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
592 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
593 [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
594 AC_DEFINE([ISC_DHCP_NORETURN], [],
595 [Define to the string for a noreturn attribute.])])
597 # Look for optional headers.
598 AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
600 # Solaris needs some libraries for functions
601 AC_SEARCH_LIBS(socket, [socket])
602 AC_SEARCH_LIBS(inet_ntoa, [nsl])
604 AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
605 AC_DEFINE([NEED_INET_ATON], [1],
606 [Define to 1 if the inet_aton() function is missing.]))
608 # Check for a standalone regex library.
609 AC_SEARCH_LIBS(regcomp, [regex])
611 AC_CHECK_FUNCS(strlcat)
613 # For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
614 AC_SEARCH_LIBS(if_nametoindex, [ipv6])
616 # check for /dev/random (declares HAVE_DEV_RANDOM)
617 AC_MSG_CHECKING(for random device)
618 AC_ARG_WITH(randomdev,
619 AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
620 (default is /dev/random)]),
621 use_randomdev="$withval", use_randomdev="unspec")
622 if test "$use_randomdev" = "unspec"; then
623 if test "$cross_compiling" = "yes"; then
624 AC_MSG_RESULT(unspecified)
625 AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
627 use_randomdev="/dev/random"
628 elif test "$use_randomdev" = "yes"; then
629 use_randomdev="/dev/random"
631 if test "$use_randomdev" = "no"; then
632 AC_MSG_RESULT(disabled)
633 BINDCONFIG="$BINDCONFIG --with-randomdev=no"
635 if test "$cross_compiling" = "yes"; then
636 AC_MSG_RESULT($use_randomdev (unchecked))
638 AC_MSG_RESULT($use_randomdev)
639 AC_CHECK_FILE($use_randomdev,
640 AC_DEFINE([HAVE_DEV_RANDOM], [1],
641 [Define to 1 if you have the /dev/random or other configured file.]),
642 AC_MSG_ERROR(cannot find $use_randomdev))
644 BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
647 BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
648 # check kqueue/epoll/devpoll alternative to select
649 AC_ARG_ENABLE(kqueue,
650 AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
651 want_kqueue="$enableval", want_kqueue="no")
652 if test "$want_kqueue" = "yes"; then
653 BINDIOMUX="--enable-kqueue"
654 AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
657 AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
658 want_epoll="$enableval", want_epoll="no")
659 if test "$want_epoll" = "yes"; then
660 BINDIOMUX="--enable-epoll"
661 AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
663 AC_ARG_ENABLE(devpoll,
664 AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
665 want_devpoll="$enableval", want_devpoll="no")
666 if test "$want_devpoll" = "yes"; then
667 BINDIOMUX="--enable-devpoll"
668 AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
672 # general extra bind configure arguments
673 AC_ARG_WITH(bind-extra-config,
674 AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
675 with some extra options (default is none)]),
676 use_xbindconfig="$withval", use_xbindconfig="")
677 case "$use_xbindconfig" in
681 BINDCONFIG="$BINDCONFIG $use_xbindconfig"
682 AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
686 # see if there is a "sa_len" field in our interface information structure
687 AC_CHECK_MEMBER(struct sockaddr.sa_len,
688 AC_DEFINE([HAVE_SA_LEN], [],
689 [Define to 1 if the sockaddr structure has a length field.]),
691 [#include <sys/socket.h>])
693 # figure out pointer size
694 SAVE_CFLAGS="$CFLAGS"
695 CFLAGS="$CFLAGS -I$srcdir"
696 AC_CHECK_SIZEOF(struct iaddr *, , [
697 #include "includes/inet.h"
700 CFLAGS="$SAVE_CFLAGS"
702 # Solaris does not have the msg_control or msg_controlen members
703 # in the msghdr structure unless you define:
705 # _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
707 # See the "standards" man page for details.
709 # We check for the msg_control member, and if it is not found, we check
710 # again with the appropriate defines added to the CFLAGS. (In order to
711 # do this we have to remove the check from the cache, which is what the
713 AC_CHECK_MEMBER(struct msghdr.msg_control,,
714 [CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
715 CFLAGS="$CFLAGS -D__EXTENSIONS__"
716 unset ac_cv_member_struct_msghdr_msg_control
717 AC_CHECK_MEMBER(struct msghdr.msg_control,,
718 [AC_MSG_ERROR([Missing msg_control member in
719 msg_control structure.])],
721 #include <sys/types.h>
722 #include <sys/socket.h>
726 #include <sys/types.h>
727 #include <sys/socket.h>
730 AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
731 [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
732 ,, [#include <linux/if_packet.h>])
734 # bind/Makefile.in is not from automake so we need 2 variables for bind dir
742 DISTCHECK_LIBBIND_CONFIGURE_FLAG=
744 AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
745 use_libbind="$withval", use_libbind="no")
746 case "$use_libbind" in
748 AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
751 BINDSUBDIR="\${top_srcdir}/bind"
752 my_abs_srcdir=`cd $srcdir && pwd`
753 BINDDIR="${my_abs_srcdir}/bind"
754 if test ! -d "$srcdir/bind"; then
755 AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
757 if test -d "$srcdir/bind/bind9"; then
758 BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
760 if test ! -f "$srcdir/bind/version.tmp"; then
761 AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
763 . "$srcdir/bind/version.tmp"
764 bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
765 BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
767 AC_CONFIG_FILES([$srcdir/bind/Makefile])
769 BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
770 BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
771 BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
772 BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
775 if test ! -d "$use_libbind"; then
776 AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
778 if test ! -d "$use_libbind/include" -o \
779 ! -f "$use_libbind/include/isc/buffer.h"
781 AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
783 if test ! -d "$use_libbind/lib" -o \
784 \( ! -f "$use_libbind/lib/libisc.a" -a \
785 ! -f "$use_libbind/lib/libisc.la" \)
787 AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
789 BINDDIR="$use_libbind"
790 BINDLIBIRSDIR="$BINDDIR/lib"
791 BINDLIBDNSDIR="$BINDDIR/lib"
792 BINDLIBISCCFGDIR="$BINDDIR/lib"
793 BINDLIBISCDIR="$BINDDIR/lib"
794 DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
800 AC_SUBST(BINDLIBIRSDIR)
801 AC_SUBST(BINDLIBDNSDIR)
802 AC_SUBST(BINDLIBISCCFGDIR)
803 AC_SUBST(BINDLIBISCDIR)
804 AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
805 AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
808 # GNU libtool support
812 # Just set the maximum command line length for sunos
813 # as it otherwise takes a exceptionally long time to
814 # work it out. Required for libtool.
816 lt_cv_sys_max_cmd_len=4096
823 DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
824 AC_ARG_ENABLE(libtool,
825 AS_HELP_STRING([--enable-libtool],
826 [use GNU libtool for dynamic shared libraries (default is no).]),
827 want_libtool="$enableval")
829 if test "$use_libbind" != "no"; then
830 if test "$want_libtool" = "yes" -a \
831 ! -f "$use_libbind/lib/libisc.la"
833 AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
835 if test "$want_libtool" = "no" -a \
836 ! -f "$use_libbind/lib/libisc.a"
838 AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
843 if test "$want_libtool" = "yes"; then
844 AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
845 # expand $ac_configure_args
846 eval "set my_configure_args $ac_configure_args"
848 cd $srcdir; exec ./config+lt "$@"
849 AC_MSG_ERROR([Recovering failed])
858 AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)
860 # quoting in Makefile.am.in
864 # install bind includes and libraries
866 want_install_bind="no"
867 if test "$want_libtool" = "yes"; then
868 want_install_bind="yes"
870 if test "$use_libbind" != "no"; then
871 want_install_bind="no"
873 AC_ARG_ENABLE(bind_install,
874 AS_HELP_STRING([--enable-bind-install],
875 [install bind includes and libraries (default is no).]),
876 want_install_bind="$enableval")
877 if test "$want_install_bind" = "yes"; then
878 if test "$use_libbind" != "no"; then
879 AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
881 elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
882 AC_MSG_WARN([embedded dynamic bind libraries must be installed])
884 AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
888 AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
892 # OpenLDAP with SSL support.
893 AC_ARG_WITH(ldapcrypto,
894 AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
895 [ldapcrypto=$withval],
898 # Gssapi to allow LDAP to authenticate with a keytab
899 AC_ARG_WITH(ldap-gssapi,
900 AC_HELP_STRING([--with-ldap-gssapi],
901 [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
902 [ldap_gssapi=$withval],
906 # LDAP CASA auth support.
907 AC_ARG_WITH(ldapcasa,
908 AC_HELP_STRING([--with-ldapcasa],
909 [enable LDAP CASA auth support in dhcpd (default is no)]),
913 # OpenLDAP support is disabled by default, if enabled then SSL support is an
914 # extra optional that is also disabled by default. Enabling LDAP SSL support
915 # implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
916 # but doesn't include SSL. The two are not dependant.
917 if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
920 AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
921 AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
922 AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
923 AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
924 if test x$ldap_gssapi = xyes ; then
925 AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
926 AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
929 # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
930 AC_SUBST(LDAP_LIBS, [$LIBS])
934 AC_CHECK_HEADERS([ldap.h])
935 AC_CHECK_FUNCS([inet_pton inet_ntop])
938 LDAP_CFLAGS="-DLDAP_CONFIGURATION"
940 if test x$ldapcasa = xyes ; then
941 AC_CHECK_HEADERS([micasa_mgmd.h],[
942 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
943 ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
946 if test x$ldapcrypto = xyes ; then
947 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
950 if test x$ldap_gssapi = xyes; then
951 LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
954 AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
957 # Append selected warning levels to CFLAGS before substitution (but after
958 # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
959 CFLAGS="$CFLAGS $STD_CWARNINGS"
961 # Try to add the bind and dhcp include directories
962 CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
966 CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
968 # As of Solaris 11, ethernet dev files are in /dev/net
969 AC_CHECK_FILE(/dev/net,
970 [AC_DEFINE([USE_DEV_NET], [1],
971 [Define to 1 if ethernet devices are in /dev/net])])
975 AC_C_FLEXIBLE_ARRAY_MEMBER
980 client/tests/Makefile
983 common/tests/Makefile
994 server/tests/Makefile
1000 if test "$enable_dhcpv4o6" = "yes"; then
1001 DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
1002 elif test "$enable_dhcpv6" != "no"; then
1003 DHCP_VERSIONS="DHCPv4 and DHCPv6"
1005 DHCP_VERSIONS="DHCPv4"
1008 cat > config.report << END
1010 ISC DHCP source configure results:
1011 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1015 Version: $PACKAGE_VERSION
1023 DHCP versions: $DHCP_VERSIONS
1026 debug: $enable_debug
1027 failover: $enable_failover
1028 execute: $enable_execute
1029 binary-leases: $enable_binary_leases
1030 dhcpv6: $enable_dhcpv6
1031 delayed-ack: $enable_delayed_ack
1034 ATF unittests : $atf_path
1037 # TODO: Add Perl system tests
1039 if test "$atf_path" != "no"
1041 echo "ATF_CFLAGS : $ATF_CFLAGS" >> config.report
1042 echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1043 echo "ATF_BIN : $ATF_BIN" >> config.report
1050 echo Now you can type "make" to build ISC DHCP