configure.ac 34.1 KB
Newer Older
1
AC_INIT([DHCP],[4.4.0a1],[dhcp-users@isc.org])
2

3

4 5 6 7
# we specify "foreign" to avoid having to have the GNU mandated files,
# like AUTHORS, COPYING, and such
AM_INIT_AUTOMAKE([foreign])

8 9 10 11 12
# we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
# the configure and makefiles.  Without it users doing things that
# change the timestamps on the code, like checking it into a cvs
# tree, could trigger a rebuild of the infrastructure files which
# might fail if they don't have the correct tools.
13
AM_MAINTAINER_MODE
14

15 16
AC_CANONICAL_HOST

17
# We want to turn on warnings if we are using gcc and the user did
18 19 20 21 22
# not specify CFLAGS. The autoconf check for the C compiler sets the
# CFLAGS if gcc is used, so we will save it before we run that check.
SAVE_CFLAGS="$CFLAGS"

# Now find our C compiler.
23
AC_PROG_CC
24

25 26 27
# Suppress warnings about --datarootdir
AC_DEFUN([AC_DATAROOTDIR_CHECKED])

28 29 30 31
# If we have gcc, and AC_PROG_CC changed the flags, then we know the
# user did not specify any flags. Add warnings in this case.
if test "$GCC" = "yes"; then
	if test "$CFLAGS" != "$SAVE_CFLAGS"; then
32
		STD_CWARNINGS="$STD_CWARNINGS -Wall -Werror -fno-strict-aliasing"
33 34 35
	fi
fi

36 37
# We can have some flags to pass to bind configure
BINDCONFIG=
38 39 40
if test "$cross_compiling" = "yes"; then
	BINDCONFIG="--host=$host"
fi
Francis Dupont's avatar
Francis Dupont committed
41 42 43 44 45 46 47 48 49 50 51 52 53
# Pass CFLAGS and co. $ac_configure_args looks like "'arg1' 'arg2' ..."
# and as there can be a space inside an argument some magic is required.
# This sets $1 ... $N to my_configure_args, arg1 ... argN
eval "set my_configure_args $ac_configure_args"
# remove my_configure_args, i.e., the guard against empty $ac_configure_args
shift
# iterate on arguments and copying 'arg' when it begins by an upper case
for a
do
	case $a in
		[[A-Z]]*) BINDCONFIG="$BINDCONFIG '$a'" ;;
	esac
done
54 55
AC_SUBST(BINDCONFIG)

56 57 58 59 60 61 62
# POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
# parts of the IPv6 Advanced Socket API as a result.  This is stupid
# as it breaks how the two halves (Basic and Advanced) of the IPv6
# Socket API were designed to be used but we have to live with it.
# Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
AC_USE_SYSTEM_EXTENSIONS

63
AC_PROG_RANLIB
64 65 66 67

AC_PATH_PROG(AR, ar)
AC_SUBST(AR)

68 69 70 71 72 73
if test "X$AR" = "X"; then
	AC_MSG_ERROR([
ar program not found.  Please fix your PATH to include the directory in
which ar resides, or set AR in the environment with the full path to ar.])
fi

74 75 76
AC_CONFIG_HEADERS([includes/config.h])

# 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 81 82
		   [Define to BIG_ENDIAN for MSB (Motorola or SPARC CPUs)
		    or LITTLE_ENDIAN for LSB (Intel CPUs).])

83 84
# Optional compile-time DEBUGging.
AC_ARG_ENABLE(debug,
Shawn Routhier's avatar
Shawn Routhier committed
85
	AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
86 87 88 89 90 91 92 93 94 95
  [case "${enableval}" in
    yes) enable_debug=yes
        AC_DEFINE([DEBUG], [1],
            [Define to compile debug-only DHCP software.])
        # Just override CFLAGS totally to remove optimization.
        CFLAGS="-g";;
    no)  enable_debug=no ;;
    *)   AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
  esac],[enable_debug=no])

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
# XXX: there are actually quite a lot more DEBUG_ features we could enable,
# but I don't want to pollute the --help space.
#
#/* #define DEBUG_TOKENS */
#/* #define DEBUG_PACKET */
#/* #define DEBUG_EXPRESSIONS */
#/* #define DEBUG_FIND_LEASE */
#/* #define DEBUG_EXPRESSION_PARSE */
#/* #define DEBUG_CLASS_MATCHING */
#/* #define DEBUG_MEMORY_LEAKAGE */
#/* #define DEBUG_MALLOC_POOL */
#/* #define DEBUG_LEASE_STATE_TRANSITIONS */
#/* #define DEBUG_RC_HISTORY */
#/* #define DEBUG_RC_HISTORY_EXHAUSTIVELY */
#/* #define RC_HISTORY_MAX 10240 */
#/* #define POINTER_DEBUG */
#/* #define DEBUG_FAILOVER_MESSAGES */
#/* #define DEBUG_FAILOVER_TIMING */
#/* #define DEBUG_DUMP_ALL_LEASES */

# Failover optional compile-time feature.
AC_ARG_ENABLE(failover,
Shawn Routhier's avatar
Shawn Routhier committed
118
	AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
119 120
# Failover is on by default, so define if it is not explicitly disabled.
if test "$enable_failover" != "no"; then
121
    enable_failover="yes"
122 123 124 125 126 127
	AC_DEFINE([FAILOVER_PROTOCOL], [1],
		  [Define to include Failover Protocol support.])
fi

# execute() support.
AC_ARG_ENABLE(execute,
Shawn Routhier's avatar
Shawn Routhier committed
128
	AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
129 130
# execute() is on by default, so define if it is not explicitly disabled.
if test "$enable_execute" != "no" ; then
131
    enable_execute="yes"
132 133 134 135 136 137
	AC_DEFINE([ENABLE_EXECUTE], [1],
		  [Define to include execute() config language support.])
fi

# Server tracing support.
AC_ARG_ENABLE(tracing,
Shawn Routhier's avatar
Shawn Routhier committed
138
	AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
139 140 141 142 143 144
# tracing is on by default, so define if it is not explicitly disabled.
if test "$enable_tracing" != "no" ; then
	AC_DEFINE([TRACING], [1],
		  [Define to include server activity tracing support.])
fi

145
# Delayed-ack feature support.
146
AC_ARG_ENABLE(delayed_ack,
147 148 149
	AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
if test "$enable_delayed_ack" != "no"; then
    enable_delayed_ack="yes"
150 151 152 153
	AC_DEFINE([DELAYED_ACK], [1],
		  [Define to queue multiple DHCPACK replies per fsync.])
fi

154
# DHCPv6 optional compile-time feature.
155
AC_ARG_ENABLE(dhcpv6,
Shawn Routhier's avatar
Shawn Routhier committed
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.
Shane Kerr's avatar
Shane Kerr committed
158
if test "$enable_dhcpv6" != "no"; then
159
    enable_dhcpv6="yes"
160
	AC_DEFINE([DHCPv6], [1],
Shane Kerr's avatar
Shane Kerr committed
161 162
		  [Define to 1 to include DHCPv6 support.])
fi
163

164 165 166 167 168 169 170 171 172 173 174
# DHCPv4o6 optional compile-time feature.
AC_ARG_ENABLE(dhcpv4o6,
	AS_HELP_STRING([--enable-dhcpv4o6],[enable support for DHCPv4-over-DHCPv6 (default is no)]))
# DHCPv4o6 is off by default, so define if it is explicitly enabled.
if test "$enable_dhcpv4o6" = "yes"; then
	# DHCPv4o6 requires DHCPv6
	if test "$enable_dhcpv6" = "no"; then
		AC_MSG_ERROR([dhcpv4o6 requires dhcpv6])
	fi
	AC_DEFINE([DHCP4o6], [1], 
		  [Define to 1 to include DHCPv4 over DHCPv6 support.])
175 176 177
else
    # so we can report below
    enable_dhcpv4o6="no"
178 179
fi

180 181
# PARANOIA is off by default (until we can test it with all features)
AC_ARG_ENABLE(paranoia,
Shawn Routhier's avatar
Shawn Routhier committed
182
	AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
183
AC_ARG_ENABLE(early_chroot,
Shawn Routhier's avatar
Shawn Routhier committed
184
	AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
# If someone enables early chroot, but does not enable paranoia, do so for
# them.
if test "$enable_paranoia" != "yes" && \
   test "$enable_early_chroot" = "yes" ; then
	enable_paranoia="yes"
fi

if test "$enable_paranoia" = "yes" ; then
	AC_DEFINE([PARANOIA], [1],
		  [Define to any value to include Ari's PARANOIA patch.])
fi
if test "$enable_early_chroot" = "yes" ; then
	AC_DEFINE([EARLY_CHROOT], [1],
		  [Define to any value to chroot() prior to loading config.])
fi

201
AC_ARG_ENABLE(ipv4_pktinfo,
Shawn Routhier's avatar
Shawn Routhier committed
202
	AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
203 204 205 206 207 208

if test "$enable_ipv4_pktinfo" = "yes"; then
	AC_DEFINE([USE_V4_PKTINFO], [1],
		[Define to 1 to enable IPv4 packet info support.])
fi

209
AC_ARG_ENABLE(use_sockets,
Shawn Routhier's avatar
Shawn Routhier committed
210
	AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
211 212 213 214 215 216

if test "$enable_use_sockets" = "yes"; then
	AC_DEFINE([USE_SOCKETS], [1],
		[Define to 1 to use the standard BSD socket API.])
fi

217 218 219 220 221 222 223 224 225 226
# Include the PID in the log messages.  This is useful when there may
# be multiple instances of a program.
# This is off by default
AC_ARG_ENABLE(log_pid,
	AS_HELP_STRING([--enable-log-pid],[Include PIDs in syslog messages (default is no).]))
if test "$enable_log_pid" = "yes" ; then
	AC_DEFINE([USE_LOG_PID], [1],
		[Define to include PIDs in syslog messages.])
fi

227 228 229 230 231 232 233
# Allow for binary search when inserting v4 leases into queues
AC_ARG_ENABLE(binary_leases,
	AS_HELP_STRING([--enable-binary-leases],[enable support for binary insertion of leases (default is no)]))
# binary_leases is off by default.
if test "$enable_binary_leases" = "yes"; then
	AC_DEFINE([BINARY_LEASES], [1],
		  [Define to support binary insertion of leases into queues.])
234 235
else
    enable_binary_leases="no"
236 237
fi

238 239
# Testing section

Francis Dupont's avatar
Francis Dupont committed
240
DISTCHECK_ATF_CONFIGURE_FLAG=
241 242
atf_path="no"
AC_ARG_WITH([atf],
243
    AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed (or "bind")]),
244
    [atf_path="$withval"])
245 246
AM_CONDITIONAL(BIND_ATF, test "$atf_path" = "bind")
if test "$atf_path" = "bind" ; then
Francis Dupont's avatar
Francis Dupont committed
247
    DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=bind"
248 249 250 251
    atf_pcp="bind"
    atf_path="\${top_srcdir}/bind/atf"
    ATF_CFLAGS="-I$atf_path/include -DUNIT_TEST"
    ATF_LDFLAGS="-L$atf_path/lib -latf-c"
252
    ATF_BIN=`cd $srcdir; pwd`/bind/atf/bin
253 254 255 256 257
    AC_SUBST(ATF_CFLAGS)
    AC_SUBST(ATF_LDFLAGS)
    AC_SUBST(ATF_BIN)
    BINDCONFIG="$BINDCONFIG --with-atf"
elif test "$atf_path" != "no" ; then
Francis Dupont's avatar
Francis Dupont committed
258
    DISTCHECK_ATF_CONFIGURE_FLAG="--with-atf=$atf_path"
259 260 261 262 263
    # Config path for pkg-config
    atf_pcp=""
    if test "$atf_path" != "yes" ; then
        if test -f $atf_path/lib/pkgconfig/atf-c.pc ; then
            atf_pcp=$atf_path/lib/pkgconfig
Shawn Routhier's avatar
Shawn Routhier committed
264 265
        elif test -f $atf_path/lib64/pkgconfig/atf-c.pc ; then
            atf_pcp=$atf_path/lib64/pkgconfig
266 267 268 269 270 271 272 273
        fi
    else
        # Not specified, try some common paths
        atf_dirs="/usr /usr/local /usr/pkg /opt /opt/local"
        for d in $atf_dirs
        do
            if test -f $d/lib/pkgconfig/atf-c.pc ; then
                atf_pcp=$d/lib/pkgconfig
274
                atf_path=$d
Shawn Routhier's avatar
Shawn Routhier committed
275 276
            elif test -f $d/lib64/pkgconfig/atf-c.pc ; then
                atf_pcp=$d/lib64/pkgconfig
277
                atf_path=$d
278 279 280
            fi
        done
    fi
281

282 283 284
    if test "$atf_pcp" = "" ; then
        AC_MSG_ERROR([Unable to find atf files in location specified])
    else
285 286 287 288
        AC_CHECK_PROG([pkgcfg_found],[pkg-config],[pkg-config],[])
        if test "$pkgcfg_found" = ""; then
            AC_MSG_ERROR([Could not locate ATF, pkg-config not installed])
        fi
289 290
        ATF_CFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --cflags atf-c` -DUNIT_TEST"
        ATF_LDFLAGS="`PKG_CONFIG_PATH=$atf_pcp pkg-config --libs atf-c`"
291 292 293 294 295 296 297 298
        if  test -f $atf_pcp/atf-sh.pc ; then
                ATF_BIN="`PKG_CONFIG_PATH=$atf_pcp pkg-config --variable=exec_prefix atf-sh`/bin"
        else
                # older versions don't have atf-sh, try usual place
                ATF_BIN=$atf_path/bin
        fi

        if test ! -x $ATF_BIN/atf-run  -o  ! -x $ATF_BIN/atf-report ; then
Francis Dupont's avatar
Francis Dupont committed
299
            AC_MSG_WARN([atf-run/atf-report not found, assuming they are in your path])
300 301
        fi

302 303
        AC_SUBST(ATF_CFLAGS)
        AC_SUBST(ATF_LDFLAGS)
304
        AC_SUBST(ATF_BIN)
305
    fi
306
fi
307 308

AM_CONDITIONAL(HAVE_ATF, test "$atf_pcp" != "")
309
AM_COND_IF([HAVE_ATF], [AC_DEFINE([HAVE_ATF], [1], [ATF framework specified?])])
Francis Dupont's avatar
Francis Dupont committed
310
AC_SUBST(DISTCHECK_ATF_CONFIGURE_FLAG)
311

312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
###
### Path fun.  Older versions of DHCP were installed in /usr/sbin, so we
### need to look there and potentially overwrite by default (but not if
### the user configures an alternate value).  LOCALSTATEDIR is totally
### braindead.  No one uses /usr/local/var/db/ nor /usr/local/var/run, and
### they would be insane for suggesting it.  We need to look in /var/for
### 'db' and 'state/dhcp' for db files, and /var/run for pid files by
### default.
###
AC_PREFIX_PROGRAM(dhcpd)

# XXX - isn't there SOME WAY to default autoconf to /var instead of
# /usr/local/var/no/one/has/this/please/stop/trying?
case "$localstatedir" in
	'${prefix}/var')
		localstatedir=/var
		;;
esac

331 332 333 334 335 336 337
# Default server configuration file.
AC_ARG_WITH(srv-conf-file,
	AS_HELP_STRING([--with-srv-conf-file=PATH],[Default file containing dhcpd configuration
		        (default is typically /etc/dhcpd.conf)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCPD_CONF], ["$withval"],
			   [Default file containing dhcpd configuration.]))

338 339
# Allow specification of alternate state files
AC_ARG_WITH(srv-lease-file,
340
	AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
341 342 343
		        (default is LOCALSTATEDIR/db/dhcpd.leases)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
			   [File for dhcpd leases.]))
344

345
AC_MSG_CHECKING([for dhcpd.leases location])
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
if [[ "x$with_srv_lease_file" = "x" ]] ; then
	if [[ -d "${localstatedir}/db" ]] ; then
		with_srv_lease_file="${localstatedir}/db/dhcpd.leases"
	elif [[ -d "${localstatedir}/state" ]] ; then
		if [[ -d "${localstatedir}/state/dhcp" ]] ; then
			with_srv_lease_file="${localstatedir}/state/dhcp/dhcpd.leases"
		else
			with_srv_lease_file="${localstatedir}/state/dhcpd.leases"
		fi
	elif [[ -d "${localstatedir}/lib" ]] ; then
		if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
			with_srv_lease_file="${localstatedir}/lib/dhcp/dhcpd.leases"
		else
			with_srv_lease_file="${localstatedir}/lib/dhcpd.leases"
		fi
	elif [[ -d "${localstatedir}/etc" ]] ; then
		with_srv_lease_file="${localstatedir}/etc/dhcpd.leases"
	else
		with_srv_lease_file="/etc/dhcpd.leases"
	fi
fi
367
AC_MSG_RESULT($with_srv_lease_file)
368

Francis Dupont's avatar
Francis Dupont committed
369
AC_ARG_WITH(srv6-lease-file,
370
	AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
Francis Dupont's avatar
Francis Dupont committed
371 372 373 374
		        (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
			   [File for dhcpd6 leases.]))

375
AC_MSG_CHECKING([for dhcpd6.leases location])
Francis Dupont's avatar
Francis Dupont committed
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396
if [[ "x$with_srv6_lease_file" = "x" ]] ; then
	if [[ -d "${localstatedir}/db" ]] ; then
		with_srv6_lease_file="${localstatedir}/db/dhcpd6.leases"
	elif [[ -d "${localstatedir}/state" ]] ; then
		if [[ -d "${localstatedir}/state/dhcp" ]] ; then
			with_srv6_lease_file="${localstatedir}/state/dhcp/dhcpd6.leases"
		else
			with_srv6_lease_file="${localstatedir}/state/dhcpd6.leases"
		fi
	elif [[ -d "${localstatedir}/lib" ]] ; then
		if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
			with_srv6_lease_file="${localstatedir}/lib/dhcp/dhcpd6.leases"
		else
			with_srv6_lease_file="${localstatedir}/lib/dhcpd6.leases"
		fi
	elif [[ -d "${localstatedir}/etc" ]] ; then
		with_srv6_lease_file="${localstatedir}/etc/dhcpd6.leases"
	else
		with_srv6_lease_file="/etc/dhcpd6.leases"
	fi
fi
397
AC_MSG_RESULT($with_srv6_lease_file)
Francis Dupont's avatar
Francis Dupont committed
398

399
AC_ARG_WITH(cli-lease-file,
400
	AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
401 402 403
		        (default is LOCALSTATEDIR/db/dhclient.leases)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
			   [File for dhclient leases.]))
404

405
AC_MSG_CHECKING([for dhclient.leases location])
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
if [[ "x$with_cli_lease_file" = "x" ]] ; then
	if [[ -d "${localstatedir}/db" ]] ; then
		with_cli_lease_file="${localstatedir}/db/dhclient.leases"
	elif [[ -d "${localstatedir}/state" ]] ; then
		if [[ -d "${localstatedir}/state/dhcp" ]] ; then
			with_cli_lease_file="${localstatedir}/state/dhcp/dhclient.leases"
		else
			with_cli_lease_file="${localstatedir}/state/dhclient.leases"
		fi
	elif [[ -d "${localstatedir}/lib" ]] ; then
		if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
			with_cli_lease_file="${localstatedir}/lib/dhcp/dhclient.leases"
		else
			with_cli_lease_file="${localstatedir}/lib/dhclient.leases"
		fi
	elif [[ -d "${localstatedir}/etc" ]] ; then
		with_cli_lease_file="${localstatedir}/etc/dhclient.leases"
	else
		with_cli_lease_file="/etc/dhclient.leases"
	fi
fi
427
AC_MSG_RESULT($with_cli_lease_file)
428

Francis Dupont's avatar
Francis Dupont committed
429
AC_ARG_WITH(cli6-lease-file,
430
	AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
Francis Dupont's avatar
Francis Dupont committed
431 432 433 434
		        (default is LOCALSTATEDIR/db/dhclient6.leases)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
			   [File for dhclient6 leases.]))

435
AC_MSG_CHECKING([for dhclient6.leases location])
Francis Dupont's avatar
Francis Dupont committed
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
if [[ "x$with_cli6_lease_file" = "x" ]] ; then
	if [[ -d "${localstatedir}/db" ]] ; then
		with_cli6_lease_file="${localstatedir}/db/dhclient6.leases"
	elif [[ -d "${localstatedir}/state" ]] ; then
		if [[ -d "${localstatedir}/state/dhcp" ]] ; then
			with_cli6_lease_file="${localstatedir}/state/dhcp/dhclient6.leases"
		else
			with_cli6_lease_file="${localstatedir}/state/dhclient6.leases"
		fi
	elif [[ -d "${localstatedir}/lib" ]] ; then
		if [[ -d "${localstatedir}/lib/dhcp" ]] ; then
			with_cli6_lease_file="${localstatedir}/lib/dhcp/dhclient6.leases"
		else
			with_cli6_lease_file="${localstatedir}/lib/dhclient6.leases"
		fi
	elif [[ -d "${localstatedir}/etc" ]] ; then
		with_cli6_lease_file="${localstatedir}/etc/dhclient6.leases"
	else
		with_cli6_lease_file="/etc/dhclient6.leases"
	fi
fi
457
AC_MSG_RESULT($with_cli6_lease_file)
Francis Dupont's avatar
Francis Dupont committed
458

459
AC_ARG_WITH(srv-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
460
	AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
461 462 463
		        (default is LOCALSTATEDIR/run/dhcpd.pid)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
			   [File for dhcpd process information.]))
Francis Dupont's avatar
Francis Dupont committed
464
AC_ARG_WITH(srv6-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
465
	AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
Francis Dupont's avatar
Francis Dupont committed
466 467 468
		        (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
			   [File for dhcpd6 process information.]))
469
AC_ARG_WITH(cli-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
470
	AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
471
		        (default is LOCALSTATEDIR/run/dhclient.pid)]),
Francis Dupont's avatar
Francis Dupont committed
472
	AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
473
			   [File for dhclient process information.]))
Francis Dupont's avatar
Francis Dupont committed
474
AC_ARG_WITH(cli6-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
475
	AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
Francis Dupont's avatar
Francis Dupont committed
476 477 478
		        (default is LOCALSTATEDIR/run/dhclient6.pid)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
			   [File for dhclient6 process information.]))
479
AC_ARG_WITH(relay-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
480
	AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
481 482 483
		        (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
			   [File for dhcrelay process information.]))
484
AC_ARG_WITH(relay6-pid-file,
Shawn Routhier's avatar
Shawn Routhier committed
485
	AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
486 487 488
		        (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
	AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
			   [File for dhcrelay6 process information.]))
489

490 491 492 493
# Check basic types.
AC_TYPE_INT8_T
AC_TYPE_INT16_T
AC_TYPE_INT32_T
494
AC_TYPE_INT64_T
495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511

# Some systems need the u_intX_t types defined across.
AC_CHECK_TYPE([u_int8_t], [], [
  AC_TYPE_UINT8_T
  AC_DEFINE(u_int8_t, [uint8_t], [Define a type for 8-bit unsigned
				  integers.])
])
AC_CHECK_TYPE([u_int16_t], [], [
  AC_TYPE_UINT16_T
  AC_DEFINE(u_int16_t, [uint16_t], [Define a type for 16-bit unsigned
				    integers.])
])
AC_CHECK_TYPE([u_int32_t], [], [
  AC_TYPE_UINT32_T
  AC_DEFINE(u_int32_t, [uint32_t], [Define a type for 32-bit unsigned
				    integers.])
])
512 513 514 515 516
AC_CHECK_TYPE([u_int64_t], [], [
  AC_TYPE_UINT64_T
  AC_DEFINE(u_int64_t, [uint64_t], [Define a type for 64-bit unsigned
				    integers.])
])
517

Mark Andrews's avatar
Mark Andrews committed
518 519 520
# see if ifaddrs.h is available
AC_CHECK_HEADERS(ifaddrs.h)

521
# figure out what IPv4 interface code to use
522 523 524 525 526 527 528 529 530 531
AC_CHECK_HEADERS(linux/types.h)  # needed for linux/filter.h on old systems

AC_CHECK_HEADER(linux/filter.h, DO_LPF=1, ,
[
#ifdef HAVE_LINUX_TYPES_H
#include <linux/types.h>
#endif
])
if test -n "$DO_LPF"
then
532
	AC_DEFINE([HAVE_LPF], [1],
533 534 535 536 537
		  [Define to 1 to use the Linux Packet Filter interface code.])
else
	AC_CHECK_HEADER(sys/dlpi.h, DO_DLPI=1)
	if test -n "$DO_DLPI"
	then
538
		AC_DEFINE([HAVE_DLPI], [1],
539 540 541 542 543
			  [Define to 1 to use DLPI interface code.])
	else
		AC_CHECK_HEADER(net/bpf.h, DO_BPF=1)
		if test -n "$DO_BPF"
		then
544
			AC_DEFINE([HAVE_BPF], [1],
545
				   [Define to 1 to use the
546 547 548 549
				   Berkeley Packet Filter interface code.])
		fi
	fi
fi
550

551 552 553 554 555 556 557
# SIOCGLIFCONF uses some transport structures.  Trick is not all platforms
# use the same structures.  We like to use 'struct lifconf' and 'struct
# lifreq', but we'll use these other structures if they're present.  HPUX
# does not define 'struct lifnum', but does use SIOCGLIFNUM - they use an
# int value.
#
AC_MSG_CHECKING([for struct lifnum])
Shawn Routhier's avatar
Shawn Routhier committed
558
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
Shane Kerr's avatar
Shane Kerr committed
559
  #include <sys/socket.h>
560
  #include <net/if.h>
Shawn Routhier's avatar
Shawn Routhier committed
561 562
]], [[ struct lifnum a;
]])],[AC_MSG_RESULT(yes)
563
	 AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
Shawn Routhier's avatar
Shawn Routhier committed
564
		   [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
565 566

AC_MSG_CHECKING([for struct if_laddrconf])
Shawn Routhier's avatar
Shawn Routhier committed
567
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
568
  #include <net/if6.h>
Shawn Routhier's avatar
Shawn Routhier committed
569 570
]], [[ struct if_laddrconf a;
]])],[AC_MSG_RESULT(yes)
571
	 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
Shawn Routhier's avatar
Shawn Routhier committed
572
		   [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
573 574

AC_MSG_CHECKING([for struct if_laddrreq])
Shawn Routhier's avatar
Shawn Routhier committed
575
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
576
 #include <net/if6.h>
Shawn Routhier's avatar
Shawn Routhier committed
577 578
]], [[ struct if_laddrreq a;
]])],[AC_MSG_RESULT(yes)
579
	 AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
Shawn Routhier's avatar
Shawn Routhier committed
580
		   [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
581

582 583 584 585
#
# check for GCC noreturn attribute
#
AC_MSG_CHECKING(for GCC noreturn attribute)
Shawn Routhier's avatar
Shawn Routhier committed
586
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
587
	 AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
Shawn Routhier's avatar
Shawn Routhier committed
588
		   [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
589 590 591
	 AC_DEFINE([ISC_DHCP_NORETURN], [],
		   [Define to the string for a noreturn attribute.])])

592
# Look for optional headers.
Shane Kerr's avatar
Shane Kerr committed
593
AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
594

595 596 597 598
# Solaris needs some libraries for functions
AC_SEARCH_LIBS(socket, [socket])
AC_SEARCH_LIBS(inet_ntoa, [nsl])

599 600
AC_SEARCH_LIBS(inet_aton, [socket nsl], ,
	AC_DEFINE([NEED_INET_ATON], [1],
601 602
		  [Define to 1 if the inet_aton() function is missing.]))

603 604 605
# Check for a standalone regex library.
AC_SEARCH_LIBS(regcomp, [regex])

606 607
AC_CHECK_FUNCS(strlcat)

608 609 610
# For HP/UX we need -lipv6 for if_nametoindex, perhaps others.
AC_SEARCH_LIBS(if_nametoindex, [ipv6])

611 612 613 614 615 616 617 618 619 620
# For some Solaris nanosleep is found by BIND in librt
have_nanosleep="no"
AC_CHECK_FUNC(nanosleep, have_nanosleep="yes")
if test "$have_nanosleep" = "no"; then
	AC_CHECK_LIB(rt, nanosleep, have_nanosleep="rt")
fi
if test "$have_nanosleep" = "rt"; then
	LIBS="-lrt $LIBS"
fi

621
# check for /dev/random (declares HAVE_DEV_RANDOM)
622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650
AC_MSG_CHECKING(for random device)
AC_ARG_WITH(randomdev,
	AS_HELP_STRING([--with-randomdev=PATH],[Path for random device
		       (default is /dev/random)]),
	use_randomdev="$withval", use_randomdev="unspec")
if test "$use_randomdev" = "unspec"; then
	if test "$cross_compiling" = "yes"; then
		AC_MSG_RESULT(unspecified)
		AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
	fi
	use_randomdev="/dev/random"
elif test "$use_randomdev" = "yes"; then
	use_randomdev="/dev/random"
fi
if test "$use_randomdev" = "no"; then
	AC_MSG_RESULT(disabled)
	BINDCONFIG="$BINDCONFIG --with-randomdev=no"
else
	if test "$cross_compiling" = "yes"; then
		AC_MSG_RESULT($use_randomdev (unchecked))
	else
		AC_MSG_RESULT($use_randomdev)
		AC_CHECK_FILE($use_randomdev,
		    AC_DEFINE([HAVE_DEV_RANDOM], [1], 
			[Define to 1 if you have the /dev/random or other configured file.]),
		    AC_MSG_ERROR(cannot find $use_randomdev))
	fi
	BINDCONFIG="$BINDCONFIG --with-randomdev=$use_randomdev"
fi
651

Francis Dupont's avatar
Francis Dupont committed
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690
BINDIOMUX="--disable-kqueue --disable-epoll --disable-devpoll"
# check kqueue/epoll/devpoll alternative to select
AC_ARG_ENABLE(kqueue,
	AS_HELP_STRING([--enable-kqueue],[use BSD kqueue (default is no)]),
	want_kqueue="$enableval", want_kqueue="no")
if test "$want_kqueue" = "yes"; then
	BINDIOMUX="--enable-kqueue"
	AC_MSG_WARN([--enable-kqueue is not supported: it may lead to issues such as server looping])
fi
AC_ARG_ENABLE(epoll,
	AS_HELP_STRING([--enable-epoll],[use Linux epoll (default is no)]),
	want_epoll="$enableval", want_epoll="no")
if test "$want_epoll" = "yes"; then
	BINDIOMUX="--enable-epoll"
	AC_MSG_WARN([--enable-epoll is not supported: it may lead to issues such as server looping])
fi
AC_ARG_ENABLE(devpoll,
	AS_HELP_STRING([--enable-devpoll],[use /dev/poll (default is no)]),
	want_devpoll="$enableval", want_devpoll="no")
if test "$want_devpoll" = "yes"; then
	BINDIOMUX="--enable-devpoll"
	AC_MSG_WARN([--enable-devpoll is not supported: it may lead to issues such as server looping])
fi
AC_SUBST(BINDIOMUX)

# general extra bind configure arguments
AC_ARG_WITH(bind-extra-config,
	AS_HELP_STRING([--with-bind-extra-config],[configure bind librairies
		       with some extra options (default is none)]),
	use_xbindconfig="$withval", use_xbindconfig="")
case "$use_xbindconfig" in
yes|no|'')
	;;
*)
	BINDCONFIG="$BINDCONFIG $use_xbindconfig"
	AC_MSG_WARN([Most options to bind configure are not supported when used by ISC DHCP])
	;;
esac

691 692
# see if there is a "sa_len" field in our interface information structure
AC_CHECK_MEMBER(struct sockaddr.sa_len,
693
	AC_DEFINE([HAVE_SA_LEN], [],
694 695 696 697
		  [Define to 1 if the sockaddr structure has a length field.]),
	,
	[#include <sys/socket.h>])

Shane Kerr's avatar
Shane Kerr committed
698
# figure out pointer size
Francis Dupont's avatar
Francis Dupont committed
699 700
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -I$srcdir"
Shane Kerr's avatar
Shane Kerr committed
701 702 703 704
AC_CHECK_SIZEOF(struct iaddr *, , [
#include "includes/inet.h"
#include <stdio.h>
])
Francis Dupont's avatar
Francis Dupont committed
705
CFLAGS="$SAVE_CFLAGS"
Shane Kerr's avatar
Shane Kerr committed
706

707
# Solaris does not have the msg_control or msg_controlen members
Shane Kerr's avatar
Shane Kerr committed
708 709 710
# in the msghdr structure unless you define:
#
#   _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, and __EXTENSIONS__
711
#
Shane Kerr's avatar
Shane Kerr committed
712
# See the "standards" man page for details.
713
#
Shane Kerr's avatar
Shane Kerr committed
714 715 716 717 718 719 720 721 722
# We check for the msg_control member, and if it is not found, we check
# again with the appropriate defines added to the CFLAGS. (In order to
# do this we have to remove the check from the cache, which is what the
# "unset" is for.)
AC_CHECK_MEMBER(struct msghdr.msg_control,,
	[CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
	 CFLAGS="$CFLAGS -D__EXTENSIONS__"
	 unset ac_cv_member_struct_msghdr_msg_control
	 AC_CHECK_MEMBER(struct msghdr.msg_control,,
723
	 	[AC_MSG_ERROR([Missing msg_control member in
Shane Kerr's avatar
Shane Kerr committed
724
			       msg_control structure.])],
725 726 727 728 729 730 731 732 733
		[
#include <sys/types.h>
#include <sys/socket.h>
		])
	],
	[
#include <sys/types.h>
#include <sys/socket.h>
	])
Shane Kerr's avatar
Shane Kerr committed
734

735 736 737 738
AC_CHECK_MEMBER(struct tpacket_auxdata.tp_vlan_tci,
    [AC_DEFINE([VLAN_TCI_PRESENT], [1], [tpacket_auxdata.tp_vlan_tci present])]
    ,, [#include <linux/if_packet.h>])

Francis Dupont's avatar
Francis Dupont committed
739 740
# bind/Makefile.in is not from automake so we need 2 variables for bind dir
BINDSUBDIR=
Francis Dupont's avatar
Francis Dupont committed
741
BINDDIR=
742
BINDSRCDIR=
Francis Dupont's avatar
Francis Dupont committed
743 744 745 746
BINDLIBIRSDIR=
BINDLIBDNSDIR=
BINDLIBISCCFGDIR=
BINDLIBISCDIR=
747
DISTCHECK_LIBBIND_CONFIGURE_FLAG=
748
AC_ARG_WITH(libbind,
Francis Dupont's avatar
Francis Dupont committed
749
	AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH]),
750
	use_libbind="$withval", use_libbind="no")
751
case "$use_libbind" in
752
yes)
Francis Dupont's avatar
Francis Dupont committed
753
	AC_MSG_ERROR([PATH is required in --with-libbind=PATH])
754 755
	;;
no)
Francis Dupont's avatar
Francis Dupont committed
756
	BINDSUBDIR="\${top_srcdir}/bind"
Francis Dupont's avatar
Francis Dupont committed
757
	my_abs_srcdir=`cd $srcdir && pwd`
Francis Dupont's avatar
Francis Dupont committed
758
	BINDDIR="${my_abs_srcdir}/bind"
Francis Dupont's avatar
Francis Dupont committed
759 760 761 762
	if test ! -d "$srcdir/bind"; then
		AC_MSG_ERROR([Where to find or build bind includes and libraries must be specified])
	fi
	if test -d "$srcdir/bind/bind9"; then
Francis Dupont's avatar
Francis Dupont committed
763
		BINDSRCDIR="${my_abs_srcdir}/bind/bind9"
Francis Dupont's avatar
Francis Dupont committed
764 765 766 767 768 769
	else
		if test ! -f "$srcdir/bind/version.tmp"; then
			AC_MSG_ERROR([Cannot find $srcdir/bind/version.tmp])
		fi
		. "$srcdir/bind/version.tmp"
		bindversion=${MAJORVER}.${MINORVER}.${PATCHVER}${RELEASETYPE}${RELEASEVER}
Francis Dupont's avatar
Francis Dupont committed
770
		BINDSRCDIR="${my_abs_srcdir}/bind/bind-$bindversion"
Francis Dupont's avatar
Francis Dupont committed
771 772
	fi
	AC_CONFIG_FILES([$srcdir/bind/Makefile])
Francis Dupont's avatar
Francis Dupont committed
773

Francis Dupont's avatar
Francis Dupont committed
774 775 776 777
	BINDLIBIRSDIR="$BINDSRCDIR/lib/irs"
	BINDLIBDNSDIR="$BINDSRCDIR/lib/dns"
	BINDLIBISCCFGDIR="$BINDSRCDIR/lib/isccfg"
	BINDLIBISCDIR="$BINDSRCDIR/lib/isc"
778 779
	;;
*)
Francis Dupont's avatar
Francis Dupont committed
780 781 782
	if test ! -d "$use_libbind"; then
		AC_MSG_ERROR([Cannot find bind directory at $use_libbind])
	fi
783 784 785
	if test ! -d "$use_libbind/include" -o \
	        ! -f "$use_libbind/include/isc/buffer.h"
	then
Francis Dupont's avatar
Francis Dupont committed
786
		AC_MSG_ERROR([Cannot find bind includes at $use_libbind/include])
Francis Dupont's avatar
Francis Dupont committed
787
	fi
788 789 790 791
	if test	! -d "$use_libbind/lib" -o \
	        \( ! -f "$use_libbind/lib/libisc.a" -a \
		   ! -f	"$use_libbind/lib/libisc.la" \)
	then
Francis Dupont's avatar
Francis Dupont committed
792 793 794
		AC_MSG_ERROR([Cannot find bind libraries at $use_libbind/lib])
	fi
	BINDDIR="$use_libbind"
Francis Dupont's avatar
Francis Dupont committed
795 796 797 798
	BINDLIBIRSDIR="$BINDDIR/lib"
	BINDLIBDNSDIR="$BINDDIR/lib"
	BINDLIBISCCFGDIR="$BINDDIR/lib"
	BINDLIBISCDIR="$BINDDIR/lib"	
799
	DISTCHECK_LIBBIND_CONFIGURE_FLAG="--with-libbind=$use_libbind"
800 801
	;;
esac
Francis Dupont's avatar
Francis Dupont committed
802
AC_SUBST(BINDSUBDIR)
Francis Dupont's avatar
Francis Dupont committed
803
AC_SUBST(BINDDIR)
804
AC_SUBST(BINDSRCDIR)
Francis Dupont's avatar
Francis Dupont committed
805 806 807 808
AC_SUBST(BINDLIBIRSDIR)
AC_SUBST(BINDLIBDNSDIR)
AC_SUBST(BINDLIBISCCFGDIR)
AC_SUBST(BINDLIBISCDIR)
809 810
AC_SUBST(DISTCHECK_LIBBIND_CONFIGURE_FLAG)
AM_CONDITIONAL(HAVE_BINDDIR, test "$use_libbind" = "no")
811

812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827
#
# GNU libtool support
#
case "$build_os" in
	sunos*)
		# Just set the maximum command line length for sunos
		# as it otherwise takes a exceptionally long time to
		# work it out. Required for libtool.

		lt_cv_sys_max_cmd_len=4096
		;;
esac

want_libtool="no"

BINDLT=
828
DISTCHECK_LIBTOOL_CONFIGURE_FLAG=
829
AC_ARG_ENABLE(libtool,
830 831
	AS_HELP_STRING([--enable-libtool],
[use GNU libtool for dynamic shared libraries (default is no).]),
832
	want_libtool="$enableval")
833

834 835 836 837 838 839 840 841 842 843 844 845 846
if test "$use_libbind" != "no"; then
	if test "$want_libtool" = "yes" -a \
	        ! -f "$use_libbind/lib/libisc.la"
	then
		AC_MSG_ERROR([Cannot find dynamic libraries at $use_libbind/lib])
	fi
	if test "$want_libtool" = "no" -a \
	        ! -f "$use_libbind/lib/libisc.a"
	then
		AC_MSG_ERROR([Cannot find static libraries at $use_libbind/lib])
	fi
fi

847

848 849
if test "$want_libtool" = "yes"; then
	AC_MSG_WARN([legacy configure is used but libtool is enabled. Trying to recover...])
850
	# expand $ac_configure_args
851 852
	eval "set my_configure_args $ac_configure_args"
	shift
853
	cd $srcdir; exec ./config+lt "$@"
854 855
	AC_MSG_ERROR([Recovering failed])
fi
856 857

DHLIBS=LIBRARIES
858
A=a
859 860

AC_SUBST(DHLIBS)
861 862
AC_SUBST(A)
AC_SUBST(BINDLT)
863 864 865 866 867 868 869 870 871 872 873 874 875 876 877
AC_SUBST(DISTCHECK_LIBTOOL_CONFIGURE_FLAG)

# quoting in Makefile.am.in
Q=@
AC_SUBST(Q)

# install bind includes and libraries

want_install_bind="no"
if test "$want_libtool" = "yes"; then
	want_install_bind="yes"
fi
if test "$use_libbind" != "no"; then
	want_install_bind="no"
fi
Francis Dupont's avatar
Francis Dupont committed
878
AC_ARG_ENABLE(bind_install,
879 880
	AS_HELP_STRING([--enable-bind-install],
[install bind includes and libraries (default is no).]),
881 882 883 884 885 886 887
	want_install_bind="$enableval")
if test "$want_install_bind" = "yes"; then
        if test "$use_libbind" != "no"; then
		AC_MSG_WARN([--enable-bind-install does nothing when --with-libbind is set])
	fi
elif test "$want_libtool" = "yes" -a "$use_libbind" = "no"; then
	AC_MSG_WARN([embedded dynamic bind libraries must be installed])
Francis Dupont's avatar
Francis Dupont committed
888
fi
889
AM_CONDITIONAL(INSTALL_BIND, test "$want_install_bind" = "yes")
Francis Dupont's avatar
Francis Dupont committed
890

891 892
# OpenLDAP support.
AC_ARG_WITH(ldap,
Shawn Routhier's avatar
Shawn Routhier committed
893
    AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
894 895 896 897 898
    [ldap=$withval],
    [ldap=no])

# OpenLDAP with SSL support.
AC_ARG_WITH(ldapcrypto,
Shawn Routhier's avatar
Shawn Routhier committed
899
    AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
900 901 902
    [ldapcrypto=$withval],
    [ldapcrypto=no])

903 904 905 906 907 908 909 910 911 912 913 914 915 916 917
# Gssapi to allow LDAP to authenticate with a keytab
AC_ARG_WITH(ldap-gssapi,
    AC_HELP_STRING([--with-ldap-gssapi],
                   [enable krb5/gssapi authentication for OpenLDAP in dhcpd (default is no)]),
    [ldap_gssapi=$withval],
    [ldap_gssapi=no])


# LDAP CASA auth support.
AC_ARG_WITH(ldapcasa,
    AC_HELP_STRING([--with-ldapcasa],
                   [enable LDAP CASA auth support in dhcpd (default is no)]),
    [ldapcasa=$withval],
    [ldapcasa=no])

918 919
# OpenLDAP support is disabled by default, if enabled then SSL support is an
# extra optional that is also disabled by default.  Enabling LDAP SSL support
920 921 922 923 924
# implies enabling LDAP support. Similarly, KRB5 support implies LDAP support,
# but doesn't include SSL. The two are not dependant.
if test x$ldap = xyes || test x$ldapcrypto = xyes || test x$ldap_gssapi = xyes; then
    saved_LIBS="$LIBS"
    LIBS=""
925 926
    AC_SEARCH_LIBS(ldap_initialize, [ldap], ,
		   AC_MSG_FAILURE([*** Cannot find ldap_initialize with -lldap - do you need to install an OpenLDAP2 Devel package?]))
Shawn Routhier's avatar
Shawn Routhier committed
927 928
    AC_SEARCH_LIBS(ber_pvt_opt_on, [lber], ,
		   AC_MSG_FAILURE([*** Cannot find ber_pvt_opt_on with -llber - do you need to install an OpenLDAP2 Devel package?]))
929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949
    if test x$ldap_gssapi = xyes ; then
    AC_SEARCH_LIBS(krb5_init_context, [krb5], ,
          AC_MSG_FAILURE([*** Cannot find krb5_init_context with -lkrb5 - do you need to install a Kerberos Devel package?]))
    fi

    # Create LDAP_LIBS which we specify them explicitly rather than lumping them in with LIBS
    AC_SUBST(LDAP_LIBS, [$LIBS])
    LIBS="$saved_LIBS"


    AC_CHECK_HEADERS([ldap.h])
    AC_CHECK_FUNCS([inet_pton inet_ntop])


    LDAP_CFLAGS="-DLDAP_CONFIGURATION"

    if test x$ldapcasa = xyes ; then
    AC_CHECK_HEADERS([micasa_mgmd.h],[
           LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_CASA_AUTH"
    ], AC_MSG_FAILURE([*** Cannot find micasa_mgmd.h for ldap casa auth support]))
    fi
950 951

    if test x$ldapcrypto = xyes ; then
952
    LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_SSL"
953
    fi
954 955 956 957 958 959

    if test x$ldap_gssapi = xyes; then
    LDAP_CFLAGS="$LDAP_CFLAGS -DLDAP_USE_GSSAPI"
    fi

    AC_SUBST(LDAP_CFLAGS, [$LDAP_CFLAGS])
960 961
fi

962
# Append selected warning levels to CFLAGS before substitution (but after
Shawn Routhier's avatar
Shawn Routhier committed
963
# AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
964 965
CFLAGS="$CFLAGS $STD_CWARNINGS"

966 967
# Try to add the bind and dhcp include directories
CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
968

969 970
case "$host" in
*-darwin*)
971 972 973 974 975 976 977
    CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
*-solaris*)
    # As of Solaris 11, ethernet dev files are in /dev/net
    AC_CHECK_FILE(/dev/net,
		    [AC_DEFINE([USE_DEV_NET], [1],
			[Define to 1 if ethernet devices are in /dev/net])])
    ;;
978 979
esac

980 981
AC_C_FLEXIBLE_ARRAY_MEMBER

Shawn Routhier's avatar
Shawn Routhier committed
982
AC_CONFIG_FILES([
983 984
  Makefile
  client/Makefile
985
  client/tests/Makefile
986
  common/Makefile.am
987
  common/Makefile
Shane Kerr's avatar
Shane Kerr committed
988
  common/tests/Makefile
989
  dhcpctl/Makefile.am
990 991
  dhcpctl/Makefile
  includes/Makefile
992
  omapip/Makefile.am
993 994 995
  omapip/Makefile
  relay/Makefile
  server/Makefile
996
  tests/Makefile.am
Shane Kerr's avatar
Shane Kerr committed
997
  tests/Makefile
998
  tests/unittest.sh
999
  server/tests/Makefile
1000
  doc/devel/doxyfile
1001
])
Shawn Routhier's avatar
Shawn Routhier committed
1002
AC_OUTPUT
1003

1004

1005 1006 1007 1008 1009 1010 1011 1012
if test "$enable_dhcpv4o6" = "yes"; then
	DHCP_VERSIONS="DHCPv4, DHCPv6 and DHCPv4-over-DHCPv6"
elif test "$enable_dhcpv6" != "no"; then
	DHCP_VERSIONS="DHCPv4 and DHCPv6"
else
	DHCP_VERSIONS="DHCPv4"
fi

1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027
cat > config.report << END

     ISC DHCP source configure results:
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Package:
  Name:          $PACKAGE_NAME
  Version:       $PACKAGE_VERSION

C Compiler:      $CC

Flags:
  DEFS:          $DEFS
  CFLAGS:        $CFLAGS

1028 1029
DHCP versions:   $DHCP_VERSIONS

1030 1031 1032 1033
Features:
  debug:         $enable_debug
  failover:      $enable_failover
  execute:       $enable_execute
1034
  binary-leases: $enable_binary_leases
1035 1036
  dhcpv6:        $enable_dhcpv6
  delayed-ack:   $enable_delayed_ack
1037
  dhcpv4o6:      $enable_dhcpv4o6
1038 1039

Developer:
1040
  ATF unittests : $atf_path
1041 1042 1043 1044

END
# TODO: Add Perl system tests

1045
if test "$atf_path" != "no"
1046 1047 1048
then
echo "ATF_CFLAGS  : $ATF_CFLAGS" >> config.report
echo "ATF_LDFLAGS : $ATF_LDFLAGS" >> config.report
1049
echo "ATF_BIN : $ATF_BIN" >> config.report
1050 1051 1052 1053 1054 1055 1056 1057
echo
fi

cat config.report

echo
echo Now you can type "make" to build ISC DHCP
echo