configure.ac 26.9 KB
Newer Older
1 2 3
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

4
AC_PREREQ([2.59])
5
AC_INIT(bind10-devel, 20101201, bind10-dev@isc.org)
6 7 8 9 10 11
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX
12 13
AC_PROG_LIBTOOL

14
# Use C++ language
15 16 17
AC_LANG([C++])

# Identify the compiler: this check must be after AC_PROG_CXX and AC_LANG.
18
AM_CONDITIONAL(USE_GXX, test "X${GXX}" = "Xyes")
19
AC_CHECK_DECL([__SUNPRO_CC], [SUNCXX="yes"], [SUNCXX="no"])
20 21
AC_CHECK_DECL([__clang__], [CLANGPP="yes"], [CLANGPP="no"])
AM_CONDITIONAL(USE_CLANGPP, test "X${CLANGPP}" = "Xyes")
22

23 24 25 26 27 28 29 30 31 32 33 34 35 36
# Linker options

# check -R rather than gcc specific -rpath to be as portable as possible.
AC_MSG_CHECKING([whether -R flag is available in linker])
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS -R/usr/lib"
AC_TRY_LINK([],[],
	[ AC_MSG_RESULT(yes)
		rpath_available=yes
	],[ AC_MSG_RESULT(no)
	rpath_available=no
	])
LDFLAGS=$LDFLAGS_SAVED

JINMEI Tatuya's avatar
JINMEI Tatuya committed
37 38 39 40 41 42 43 44
# allow building programs with static link.  we need to make it selective
# because loadable modules cannot be statically linked.
AC_ARG_ENABLE([static-link],
AC_HELP_STRING([--enable-static-link],
  [build programs with static link [[default=no]]]),
  [enable_static_link=yes], [enable_static_link=no])
AM_CONDITIONAL(USE_STATIC_LINK, test $enable_static_link = yes)

JINMEI Tatuya's avatar
JINMEI Tatuya committed
45 46 47 48 49 50 51 52
# Check validity about some libtool options
if test $enable_static_link = yes -a $enable_static = no; then
	AC_MSG_ERROR([--enable-static-link requires --enable-static])
fi
if test $enable_shared = no; then
	AC_MSG_ERROR([BIND 10 requires shared libraries to be built])
fi

Michal Vaner's avatar
Michal Vaner committed
53 54 55 56 57 58
# allow configuring without setproctitle.
AC_ARG_ENABLE(setproctitle-check,
AC_HELP_STRING([--disable-setproctitle-check],
  [do not check for python setproctitle module (used to give nice names to python processes)]),
  setproctitle_check=$enableval, setproctitle_check=yes)

59 60 61 62
# OS dependent configuration
SET_ENV_LIBRARY_PATH=no
ENV_LIBRARY_PATH=LD_LIBRARY_PATH

63
case "$host" in
64 65 66 67 68
*-solaris*)
	# Solaris requires special definitions to get some standard libraries
	# (e.g. getopt(3)) available with common used header files.
	CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
	;;
69 70 71 72 73 74 75 76 77 78
*-apple-darwin*)
	# libtool doesn't work pefectly with Darwin: libtool embeds the
	# final install path in dynamic libraries and our loadable python
	# modules always refer to that path even if it's loaded within the
	# source tree.  This prevents pre-install tests from working.
	# To work around this problem we explicitly specify paths to dynamic
	# libraries when we use them in the source tree.
	SET_ENV_LIBRARY_PATH=yes
	ENV_LIBRARY_PATH=DYLD_LIBRARY_PATH
	;;
79
esac
80 81 82
AM_CONDITIONAL(SET_ENV_LIBRARY_PATH, test $SET_ENV_LIBRARY_PATH = yes)
AC_SUBST(SET_ENV_LIBRARY_PATH)
AC_SUBST(ENV_LIBRARY_PATH)
83

84
m4_define([_AM_PYTHON_INTERPRETER_LIST], [python python3 python3.1])
85 86
AC_ARG_WITH([pythonpath],
AC_HELP_STRING([--with-pythonpath=PATH],
87
  [specify an absolute path to python executable when automatic version check (incorrectly) fails]),
88 89 90 91
  [python_path="$withval"], [python_path="auto"])
if test "$python_path" = auto; then
	AM_PATH_PYTHON([3.1])
else
92 93
	# Older versions of automake can't handle python3 well.  This is an
	# in-house workaround for them.
94 95
	PYTHON=$python_path
	AC_SUBST(PYTHON)
96 97 98 99
	PYTHON_PREFIX='${prefix}'
	AC_SUBST(PYTHON_PREFIX)
	PYTHON_EXEC_PREFIX='$(exec_prefix)'
	AC_SUBST(PYTHON_EXEC_PREFIX)
100 101 102 103
	PYTHON_VERSION=[`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`]
	if test `echo "$PYTHON_VERSION >= 3.1" | bc` != 1 ; then
		AC_MSG_ERROR(["Python version too old: $PYTHON_VERSION, need 3.1 or higher"])
	fi
104 105
	AC_SUBST(PYTHON_VERSION)
	PYTHON_PLATFORM=`$PYTHON -c "import sys; print(sys.platform)"`
106
	AC_SUBST(PYTHON_PLATFORM)
107
	pythondir='${prefix}/lib/python'$PYTHON_VERSION'/site-packages'
108
	AC_SUBST(pythondir)
109
	pkgpythondir='${pythondir}/'$PACKAGE
110
	AC_SUBST(pkgpythondir)
111
	pyexecdir='${exec_prefix}/lib/python'$PYTHON_VERSION'/site-packages'
112
	AC_SUBST(pyexecdir)
113
	pkgpyexecdir='${pyexecdir}/'$PACKAGE
114
	AC_SUBST(pkgpyexecdir)
115
fi
116

117 118 119
# Check for python development environments
if test -x ${PYTHON}-config; then
	PYTHON_INCLUDES=`${PYTHON}-config --includes`
120

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
	for flag in `${PYTHON}-config --ldflags`; do
		# add any '-L..." flags to PYTHON_LDFLAGS
		flag=`echo $flag | sed -ne 's/^\(\-L.*\)$/\1/p'`
		if test "X${flag}" != X; then
			PYTHON_LDFLAGS="$PYTHON_LDFLAGS ${flag}"
		fi
	done
	# on some platforms, ${PYTHON}-config --ldflags doesn't provide a -L
	# option while having the library under a non trivial directory.
	# as a workaround we try the "lib" sub directory under the common
	# prefix for this python.
	if test -z "${PYTHON_LDFLAGS}"; then
		PYTHON_LDFLAGS="-L`${PYTHON}-config --prefix`/lib"
	fi
else
	if test "X$PYTHON_INCLUDES" = X -o "X$PYTHON_LDFLAGS" = X; then
		AC_MSG_WARN([${PYTHON}-config does not exist or is not executable, so we could not detect python development environment.  Your system may require an additional package (e.g. "python3-dev").  Alternatively, if you are sure you have python headers and libraries, define PYTHON_INCLUDES and PYTHON_LDFLAGS and run this script.])
138 139
	fi
fi
140

141 142 143 144
# Some OSes including NetBSD don't install libpython.so in a well known path.
# To avoid requiring dynamic library path with our python wrapper loadable
# modules, we embed the path to the modules when possible.  We do this even
# when the path is known in the common operational environment (e.g. when
Jeremy C. Reed's avatar
Jeremy C. Reed committed
145
# it's stored in a common "hint" file) for simplicity.
146 147 148
if test $rpath_available = yes; then
	python_rpath=
	for flag in ${PYTHON_LDFLAGS}; do
149
		python_rpath="${python_rpath} `echo $flag | sed -ne 's/^\(\-L\)/-R/p'`"
150 151 152 153
	done
	PYTHON_LDFLAGS="${PYTHON_LDFLAGS} ${python_rpath}"
fi

154 155 156
AC_SUBST(PYTHON_INCLUDES)
AC_SUBST(PYTHON_LDFLAGS)

157 158 159 160 161
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS ${PYTHON_INCLUDES}"
AC_CHECK_HEADERS([Python.h],, AC_MSG_ERROR([Missing Python.h]))
CPPFLAGS="$CPPFLAGS_SAVED"

162
# Check for python library.  Needed for Python-wrapper libraries.
163 164 165 166 167 168 169 170
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $PYTHON_LDFLAGS"
python_bin="python${PYTHON_VERSION}"
AC_CHECK_LIB($python_bin, main, python_lib=$python_bin, python_lib=no)
if test $python_lib != "no"; then
	PYTHON_LIB="-l$python_lib"
fi
AC_SUBST(PYTHON_LIB)
171
LDFLAGS=$LDFLAGS_SAVED
172

Michal Vaner's avatar
Michal Vaner committed
173 174 175 176 177 178 179 180 181 182 183 184
# Check for the setproctitle module
if test "$setproctitle_check" = "yes" ; then
    AC_MSG_CHECKING(for setproctitle module)
    if "$PYTHON" -c 'import setproctitle' 2>/dev/null ; then
        AC_MSG_RESULT(ok)
    else
        AC_MSG_RESULT(missing)
        AC_MSG_ERROR([Missing setproctitle module. Either install it or provide --disable-setproctitle-check.
In that case we will continue, but naming of python processes will not work.])
    fi
fi

185 186
# TODO: check for _sqlite3.py module

187 188
# Compiler dependent settings: define some mandatory CXXFLAGS here.
# We also use a separate variable B10_CXXFLAGS.  This will (and should) be
189 190 191 192 193 194 195 196 197
# used as the default value for each specifc AM_CXXFLAGS:
# AM_CXXFLAGS = $(B10_CXXFLAGS)
# AM_CXXFLAGS += ... # add module specific flags
# We need this so that we can disable some specific compiler warnings per
# module basis; since AM_CXXFLAGS are placed before CXXFLAGS, and since
# gcc's -Wno-XXX option must be specified after -Wall or -Wextra, we cannot
# specify the default warning flags in CXXFLAGS and let specific modules
# "override" the default.

198
# This may be used to try linker flags.
199 200 201 202 203 204
AC_DEFUN([BIND10_CXX_TRY_FLAG], [
  AC_MSG_CHECKING([whether $CXX supports $1])

  bind10_save_CXXFLAGS="$CXXFLAGS"
  CXXFLAGS="$CXXFLAGS $1"

205 206
  AC_LINK_IFELSE([int main(void){ return 0;} ],
                 [bind10_cxx_flag=yes], [bind10_cxx_flag=no])
207 208
  CXXFLAGS="$bind10_save_CXXFLAGS"

209 210 211 212 213 214
  if test "x$bind10_cxx_flag" = "xyes"; then
    ifelse([$2], , :, [$2])
  else
    ifelse([$3], , :, [$3])
  fi

215 216 217
  AC_MSG_RESULT([$bind10_cxx_flag])
])

218
werror_ok=0
219 220 221 222 223

# SunStudio compiler requires special compiler options for boost
# (http://blogs.sun.com/sga/entry/boost_mini_howto)
if test "$SUNCXX" = "yes"; then
CXXFLAGS="$CXXFLAGS -library=stlport4 -features=tmplife -features=tmplrefstatic"
224
MULTITHREADING_FLAG="-mt"
225 226
fi

227 228 229 230
BIND10_CXX_TRY_FLAG(-Wno-missing-field-initializers,
	[WARNING_NO_MISSING_FIELD_INITIALIZERS_CFLAG="-Wno-missing-field-initializers"])
AC_SUBST(WARNING_NO_MISSING_FIELD_INITIALIZERS_CFLAG)

231
# gcc specific settings:
232 233
if test "X$GXX" = "Xyes"; then
B10_CXXFLAGS="-Wall -Wextra -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare"
234 235 236 237 238 239 240 241
case "$host" in
*-solaris*)
	MULTITHREADING_FLAG=-pthreads
	;;
*)
	MULTITHREADING_FLAG=-pthread
	;;
esac
242 243 244 245 246

# Certain versions of gcc (g++) have a bug that incorrectly warns about
# the use of anonymous name spaces even if they're closed in a single
# translation unit.  For these versions we have to disable -Werror.
CXXFLAGS_SAVED="$CXXFLAGS"
247
CXXFLAGS="$CXXFLAGS $B10_CXXFLAGS -Werror"
248 249 250 251
AC_MSG_CHECKING(for in-TU anonymous namespace breakage)
AC_TRY_COMPILE([namespace { class Foo {}; }
namespace isc {class Bar {Foo foo_;};} ],,
	[AC_MSG_RESULT(no)
252 253
	 werror_ok=1
	 B10_CXXFLAGS="$B10_CXXFLAGS -Werror"],
254 255
	[AC_MSG_RESULT(yes)])
CXXFLAGS="$CXXFLAGS_SAVED"
256

257
fi				dnl GXX = yes
258

259
AM_CONDITIONAL(GCC_WERROR_OK, test $werror_ok = 1)
260 261

# produce PIC unless we disable shared libraries. need this for python bindings.
262
if test $enable_shared != "no" -a "X$GXX" = "Xyes"; then
263
   B10_CXXFLAGS="$B10_CXXFLAGS -fPIC"
264 265
fi

266 267
AC_SUBST(B10_CXXFLAGS)

268 269
# Checks for libraries.

270 271 272
AC_SEARCH_LIBS(inet_pton, [nsl])
AC_SEARCH_LIBS(recvfrom, [socket])

273 274 275 276 277 278
# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_TYPE_SIZE_T

279 280


281 282 283 284 285 286
AC_MSG_CHECKING(for sa_len in struct sockaddr)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>],
[struct sockaddr sa; sa.sa_len = 0; return (0);],
        [AC_MSG_RESULT(yes)
287
        AC_DEFINE(HAVE_SA_LEN, 1, [Define to 1 if sockaddr has a sa_len member, and corresponding sin_len and sun_len])],
288 289
        AC_MSG_RESULT(no))

290
AC_ARG_WITH(lcov,
291
[  --with-lcov[=PROGRAM]         enable gtest and coverage target using the specified lcov], lcov="$withval", lcov="no")
292

293
AC_ARG_WITH(gtest,
294
[  --with-gtest=PATH       specify a path to gtest header files (PATH/include) and library (PATH/lib)],
295
    gtest_path="$withval", gtest_path="no")
296 297 298 299 300

USE_LCOV="no"
if test "$lcov" != "no"; then
	# force gtest if not set
	if test "$gtest_path" = "no"; then
301 302
#		AC_MSG_ERROR("lcov needs gtest for test coverage report")
		AC_MSG_NOTICE([gtest support is now enabled, because used by coverage tests])
303 304 305
		gtest_path="yes"
	fi
	if test "$lcov" != "yes"; then
306
		LCOV=$lcov
307
	else
308
		AC_PATH_PROG([LCOV], [lcov])
309
	fi
310 311 312 313
	if test -x "${LCOV}"; then
		USE_LCOV="yes"
	else
		AC_MSG_ERROR([Cannot find lcov.])
314 315 316 317 318 319
	fi
	# is genhtml always in the same directory?
	GENHTML=`echo "$LCOV" | sed s/lcov$/genhtml/`
	if test ! -x $GENHTML; then
		AC_MSG_ERROR([genhtml not found, needed for lcov])
	fi
320
	# GCC specific?
321
	CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
322
	LIBS=" $LIBS -lgcov"
323 324 325 326 327 328 329
	AC_SUBST(CPPFLAGS)
	AC_SUBST(LIBS)
	AC_SUBST(LCOV)
	AC_SUBST(GENHTML)
fi
AC_SUBST(USE_LCOV)

330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
# Configure log4cxx header and library path
#
# If explicitly specified, use it.

AC_ARG_WITH([log4cxx],
  AC_HELP_STRING([--with-log4cxx=PATH],
    [specify directory where log4cxx is installed]),
  [log4cxx_include_path="${withval}/include"])

# If not specified, try some common paths.  These default to
# /usr/include if not found

if test -z "$with_log4cxx"; then
	log4cxxdirs="/usr/local /usr/pkg /opt /opt/local"
	for d in $log4cxxdirs
	do
		if test -d $d/include/log4cxx; then
			log4cxx_include_path=$d/include
			break
		fi
	done
fi

CPPFLAGS_SAVES="$CPPFLAGS"
if test "${log4cxx_include_path}" ; then
	LOG4CXX_INCLUDES="-I${log4cxx_include_path}"
	CPPFLAGS="$CPPFLAGS $LOG4CXX_INCLUDES"
fi
AC_CHECK_HEADER([log4cxx/logger.h],, AC_MSG_ERROR([Missing log4cxx header files.]))
CPPFLAGS="$CPPFLAGS_SAVES"
AC_SUBST(LOG4CXX_INCLUDES)


363 364 365 366
#
# Configure Boost header path
#
# If explicitly specified, use it.
367 368 369 370
AC_ARG_WITH([boost-include],
  AC_HELP_STRING([--with-boost-include=PATH],
    [specify exact directory for Boost headers]),
    [boost_include_path="$withval"])
371 372 373 374 375 376 377 378 379 380 381
# If not specified, try some common paths.
if test -z "$with_boost_include"; then
	boostdirs="/usr/local /usr/pkg /opt /opt/local"
	for d in $boostdirs
	do
		if test -f $d/include/boost/shared_ptr.hpp; then
			boost_include_path=$d/include
			break
		fi
	done
fi
382
CPPFLAGS_SAVES="$CPPFLAGS"
383
if test "${boost_include_path}" ; then
384 385
	BOOST_INCLUDES="-I${boost_include_path}"
	CPPFLAGS="$CPPFLAGS $BOOST_INCLUDES"
386
fi
387
AC_CHECK_HEADERS([boost/shared_ptr.hpp boost/foreach.hpp boost/interprocess/sync/interprocess_upgradable_mutex.hpp],,
388
  AC_MSG_ERROR([Missing required header files.]))
389
CPPFLAGS="$CPPFLAGS_SAVES"
390
AC_SUBST(BOOST_INCLUDES)
391

392 393 394
# Using boost::mutex can result in requiring libboost_thread with older
# versions of Boost.  We'd like to avoid relying on a compiled Boost library
# whenever possible, so we need to check for it step by step.
395 396 397 398
#
# NOTE: another fix of this problem is to simply require newer versions of
# boost.  If we choose that solution we should simplify the following tricky
# checks accordingly and all Makefile.am's that refer to NEED_LIBBOOST_THREAD.
399 400 401
AC_MSG_CHECKING(for boost::mutex)
CPPFLAGS_SAVES="$CPPFLAGS"
LIBS_SAVES="$LIBS"
402
CPPFLAGS="$BOOST_INCLUDES $CPPFLAGS $MULTITHREADING_FLAG"
403
need_libboost_thread=0
404
need_sunpro_workaround=0
405 406 407 408 409 410
AC_TRY_LINK([
#include <boost/thread.hpp>
],[
boost::mutex m;
],
	[ AC_MSG_RESULT(yes (without libboost_thread)) ],
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428

    # there is one specific problem with SunStudio 5.10
    # where including boost/thread causes a compilation failure
    # There is a workaround in boost but it checks the version not being 5.10
    # This will probably be fixed in the future, in which case this
    # is only a temporary workaround
    [ AC_TRY_LINK([
#if defined(__SUNPRO_CC) && __SUNPRO_CC == 0x5100
#undef __SUNPRO_CC
#define __SUNPRO_CC 0x5090
#endif
#include <boost/thread.hpp>
],[
boost::mutex m;
],
    [ AC_MSG_RESULT(yes (with SUNOS workaround))
      need_sunpro_workaround=1 ],
    	[ LIBS=" $LIBS -lboost_thread"
429
	  AC_TRY_LINK([
430 431 432 433
#include <boost/thread.hpp>
],[
boost::mutex m;
],
434 435 436 437
		  [ AC_MSG_RESULT(yes (with libboost_thread))
		    need_libboost_thread=1 ],
		  [ AC_MSG_RESULT(no)
		    AC_MSG_ERROR([boost::mutex cannot be linked in this build environment.
438 439
Perhaps you are using an older version of Boost that requires libboost_thread for the mutex support, which does not appear to be available.
You may want to check the availability of the library or to upgrade Boost.])
440
   		  ])])])
441 442 443
CPPFLAGS="$CPPFLAGS_SAVES"
LIBS="$LIBS_SAVES"
AM_CONDITIONAL(NEED_LIBBOOST_THREAD, test $need_libboost_thread = 1)
444 445 446
if test $need_sunpro_workaround = 1; then
    AC_DEFINE([NEED_SUNPRO_WORKAROUND], [], [Need boost sunstudio workaround])
fi
447

448
#
449
# Check availability of gtest, which will be used for unit tests.
450
#
451
if test "$gtest_path" != "no"
452
then
453 454
	if test "$gtest_path" != "yes"; then
		GTEST_PATHS=$gtest_path
455 456 457
		if test -x "${gtest_path}/bin/gtest-config" ; then
			GTEST_CONFIG="${gtest_path}/bin/gtest-config"
		fi
458
	else
459
		AC_PATH_PROG([GTEST_CONFIG], [gtest-config])
460
	fi
461 462 463 464 465 466 467 468 469 470
	if test -x "${GTEST_CONFIG}" ; then :
		# using cppflags instead of cxxflags
		GTEST_INCLUDES=`${GTEST_CONFIG} --cppflags`
		GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags`
		GTEST_LDADD=`${GTEST_CONFIG} --libs`
		GTEST_FOUND="true"
	else
		AC_MSG_WARN([Unable to locate Google Test gtest-config.])
		if test -z "${GTEST_PATHS}" ; then
			GTEST_PATHS="/usr /usr/local"
471
		fi
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
		GTEST_FOUND="false"
	fi
	if test "${GTEST_FOUND}" != "true"; then
		GTEST_FOUND="false"
		for dir in $GTEST_PATHS; do
			if test -f "$dir/include/gtest/gtest.h"; then
				GTEST_INCLUDES="-I$dir/include"
				GTEST_LDFLAGS="-L$dir/lib"
				GTEST_LDADD="-lgtest"
				GTEST_FOUND="true"
				break
			fi
		done
	fi
	if test "${GTEST_FOUND}" != "true"; then
487 488
		AC_MSG_ERROR([Cannot find gtest in: $GTEST_PATHS])
	fi
489
else
490 491 492
	GTEST_INCLUDES=
	GTEST_LDFLAGS=
	GTEST_LDADD=
493
fi
494 495 496 497
AM_CONDITIONAL(HAVE_GTEST, test $gtest_path != "no")
AC_SUBST(GTEST_INCLUDES)
AC_SUBST(GTEST_LDFLAGS)
AC_SUBST(GTEST_LDADD)
498

499 500 501 502 503
dnl check for pkg-config itself so we don't try the m4 macro without pkg-config
AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes, no)
if test "x$HAVE_PKG_CONFIG" = "xno" ; then
  AC_MSG_ERROR(Please install pkg-config)
fi
504
PKG_CHECK_MODULES(SQLITE, sqlite3 >= 3.3.9, enable_features="$enable_features SQLite3")
505

Jelte Jansen's avatar
 
Jelte Jansen committed
506 507 508 509 510 511 512
# I can't get some of the #include <asio.hpp> right without this
# TODO: find the real cause of asio/boost wanting pthreads
# (this currently only occurs for src/lib/cc/session_unittests)
PTHREAD_LDFLAGS=
AC_CHECK_LIB(pthread, pthread_create,[ PTHREAD_LDFLAGS=-lpthread ], [])
AC_SUBST(PTHREAD_LDFLAGS)

513 514
AC_SUBST(MULTITHREADING_FLAG)

515 516 517
#
# ASIO: we extensively use it as the C++ event management module.
#
518
# Use local ASIO headers from ext
519
#
520
CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/ext/asio"
521
#
522 523 524
# Disable threads: Currently we don't use them.
CPPFLAGS="$CPPFLAGS -DASIO_DISABLE_THREADS=1"
#
525 526 527 528 529 530 531 532
# kqueue portability: ASIO uses kqueue by default if it's available (it's
# generally available in BSD variants).  Unfortunately, some public
# implementation of kqueue forces a conversion from a pointer to an integer,
# which is prohibited in C++ unless reinterpret_cast, C++'s most evil beast
# (and ASIO doesn't use it anyway) is used.  This will cause build error for
# some of our C++ files including ASIO header files.  The following check
# detects such cases and tells ASIO not to use kqueue if so.
AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no)
533
if test "X$ac_cv_have_kqueue" = "Xyes"; then
534 535 536 537 538 539 540 541 542 543 544
	AC_MSG_CHECKING([whether kqueue EV_SET compiles in C++])
	AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/param.h>
#include <sys/event.h>],
[char* udata;
EV_SET(NULL, 0, 0, 0, 0, 0, udata);],
	[AC_MSG_RESULT(yes)],
	[AC_MSG_RESULT([no, disable kqueue for ASIO])
	 CPPFLAGS="$CPPFLAGS -DASIO_DISABLE_KQUEUE=1"
	])
545
fi
546 547 548 549 550

# /dev/poll issue: ASIO uses /dev/poll by default if it's available (generally
# the case with Solaris).  Unfortunately its /dev/poll specific code would
# trigger the gcc's "missing-field-initializers" warning, which would
# subsequently make the build fail with -Werror.  Further, older versions of
551
# gcc don't provide an option to selectively suppress this warning.
552 553 554 555 556 557
# So, for the moment, we simply disable the use of /dev/poll.  Unless we
# implement recursive DNS server with randomized ports, we don't need the
# scalability that /dev/poll can provide, so this decision wouldn't affect
# run time performance.  Hpefully we can find a better solution or the ASIO
# code will be updated by the time we really need it.
AC_CHECK_HEADERS(sys/devpoll.h, ac_cv_have_devpoll=yes, ac_cv_have_devpoll=no)
558
if test "X$ac_cv_have_devpoll" = "Xyes" -a "X$GXX" = "Xyes"; then
559 560
	CPPFLAGS="$CPPFLAGS -DASIO_DISABLE_DEV_POLL=1"
fi
561

562
AC_ARG_ENABLE(man, [AC_HELP_STRING([--enable-man],
563
  [regenerate man pages [default=no]])], enable_man=yes, enable_man=no)
564 565

AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
566

567 568 569
AC_ARG_ENABLE(install-configurations,
  [AC_HELP_STRING([--disable-install-configurations],
  [do not install configuration])], install_configurations=$enableval, install_configurations=yes)
570

571
AM_CONDITIONAL(INSTALL_CONFIGURATIONS, test x$install_configurations = xyes || test x$install_configurations = xtrue)
572

573 574
AC_CONFIG_FILES([Makefile
                 src/Makefile
575
                 src/bin/Makefile
576
                 src/bin/bind10/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
577
                 src/bin/bind10/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
578
                 src/bin/cmdctl/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
579
                 src/bin/cmdctl/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
580
                 src/bin/bindctl/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
581
                 src/bin/bindctl/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
582
                 src/bin/cfgmgr/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
583
                 src/bin/cfgmgr/tests/Makefile
584
                 src/bin/host/Makefile
Evan Hunt's avatar
Evan Hunt committed
585
                 src/bin/loadzone/Makefile
586 587
                 src/bin/loadzone/tests/correct/Makefile
                 src/bin/loadzone/tests/error/Makefile
588
                 src/bin/msgq/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
589
                 src/bin/msgq/tests/Makefile
590
                 src/bin/auth/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
591
                 src/bin/auth/tests/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
592
                 src/bin/auth/benchmarks/Makefile
593 594
                 src/bin/recurse/Makefile
                 src/bin/recurse/tests/Makefile
Likun Zhang's avatar
Likun Zhang committed
595
                 src/bin/xfrin/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
596
                 src/bin/xfrin/tests/Makefile
597
                 src/bin/xfrout/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
598
                 src/bin/xfrout/tests/Makefile
599 600
                 src/bin/zonemgr/Makefile
                 src/bin/zonemgr/tests/Makefile
601 602
                 src/bin/stats/Makefile
                 src/bin/stats/tests/Makefile
603 604 605
                 src/bin/stats/tests/isc/Makefile
                 src/bin/stats/tests/isc/cc/Makefile
                 src/bin/stats/tests/isc/config/Makefile
Likun Zhang's avatar
Likun Zhang committed
606
                 src/bin/stats/tests/isc/util/Makefile
607
                 src/bin/stats/tests/testdata/Makefile
608
                 src/bin/usermgr/Makefile
Michal Vaner's avatar
Michal Vaner committed
609
                 src/bin/tests/Makefile
610
                 src/lib/Makefile
611 612
                 src/lib/asiolink/Makefile
                 src/lib/asiolink/tests/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
613 614 615
                 src/lib/bench/Makefile
                 src/lib/bench/example/Makefile
                 src/lib/bench/tests/Makefile
616
                 src/lib/cc/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
617
                 src/lib/cc/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
618 619
                 src/lib/python/Makefile
                 src/lib/python/isc/Makefile
620 621
                 src/lib/python/isc/util/Makefile
                 src/lib/python/isc/util/tests/Makefile
Evan Hunt's avatar
Evan Hunt committed
622
                 src/lib/python/isc/datasrc/Makefile
623
                 src/lib/python/isc/datasrc/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
624
                 src/lib/python/isc/cc/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
625
                 src/lib/python/isc/cc/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
626
                 src/lib/python/isc/config/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
627
                 src/lib/python/isc/config/tests/Makefile
628 629
                 src/lib/python/isc/log/Makefile
                 src/lib/python/isc/log/tests/Makefile
630
                 src/lib/python/isc/net/Makefile
Michal Vaner's avatar
Michal Vaner committed
631
                 src/lib/python/isc/net/tests/Makefile
632 633
                 src/lib/python/isc/notify/Makefile
                 src/lib/python/isc/notify/tests/Makefile
634
                 src/lib/config/Makefile
635
                 src/lib/config/tests/Makefile
636
                 src/lib/config/tests/testdata/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
637
                 src/lib/dns/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
638
                 src/lib/dns/tests/Makefile
639
                 src/lib/dns/tests/testdata/Makefile
640
                 src/lib/dns/python/Makefile
641
                 src/lib/dns/python/tests/Makefile
642
                 src/lib/exceptions/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
643
                 src/lib/exceptions/tests/Makefile
Evan Hunt's avatar
Evan Hunt committed
644 645
                 src/lib/datasrc/Makefile
                 src/lib/datasrc/tests/Makefile
646
                 src/lib/xfr/Makefile
647
                 src/lib/log/Makefile
648
                 src/lib/log/tests/Makefile
649
                 src/lib/testutils/Makefile
Michal Vaner's avatar
Michal Vaner committed
650
                 src/lib/testutils/testdata/Makefile
651 652
                 src/lib/nsas/Makefile
                 src/lib/nsas/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
653
               ])
654
AC_OUTPUT([src/bin/cfgmgr/b10-cfgmgr.py
Jelte Jansen's avatar
Jelte Jansen committed
655
           src/bin/cfgmgr/tests/b10-cfgmgr_test.py
656
           src/bin/cmdctl/cmdctl.py
657
           src/bin/cmdctl/run_b10-cmdctl.sh
658
           src/bin/cmdctl/tests/cmdctl_test
Likun Zhang's avatar
 
Likun Zhang committed
659
           src/bin/cmdctl/cmdctl.spec.pre
660
           src/bin/xfrin/tests/xfrin_test
Likun Zhang's avatar
Likun Zhang committed
661 662
           src/bin/xfrin/xfrin.py
           src/bin/xfrin/run_b10-xfrin.sh
663
           src/bin/xfrout/xfrout.py
664
           src/bin/xfrout/xfrout.spec.pre
Likun Zhang's avatar
Likun Zhang committed
665
           src/bin/xfrout/tests/xfrout_test
666
           src/bin/xfrout/run_b10-xfrout.sh
667
           src/bin/recurse/recurse.spec.pre
Jelte Jansen's avatar
Jelte Jansen committed
668
           src/bin/recurse/spec_config.h.pre
669 670 671 672
           src/bin/zonemgr/zonemgr.py
           src/bin/zonemgr/zonemgr.spec.pre
           src/bin/zonemgr/tests/zonemgr_test
           src/bin/zonemgr/run_b10-zonemgr.sh
673 674 675 676 677 678
           src/bin/stats/stats.py
           src/bin/stats/stats_stub.py
           src/bin/stats/stats.spec.pre
           src/bin/stats/run_b10-stats.sh
           src/bin/stats/run_b10-stats_stub.sh
           src/bin/stats/tests/stats_test
679
           src/bin/bind10/bind10.py
680
           src/bin/bind10/tests/bind10_test
681
           src/bin/bind10/run_bind10.sh
682
           src/bin/bindctl/run_bindctl.sh
683
           src/bin/bindctl/bindctl-source.py
684
           src/bin/bindctl/tests/bindctl_test
685
           src/bin/loadzone/run_loadzone.sh
686 687
           src/bin/loadzone/tests/correct/correct_test.sh
           src/bin/loadzone/tests/error/error_test.sh
Evan Hunt's avatar
Evan Hunt committed
688
           src/bin/loadzone/b10-loadzone.py
689 690
           src/bin/usermgr/run_b10-cmdctl-usermgr.sh
           src/bin/usermgr/b10-cmdctl-usermgr.py
691
           src/bin/msgq/msgq.py
Jeremy C. Reed's avatar
Jeremy C. Reed committed
692
           src/bin/msgq/tests/msgq_test
693
           src/bin/msgq/run_msgq.sh
694
           src/bin/auth/auth.spec.pre
695
           src/bin/auth/spec_config.h.pre
Michal Vaner's avatar
Michal Vaner committed
696
           src/bin/tests/process_rename_test.py
697 698
           src/lib/config/tests/data_def_unittests_config.h
           src/lib/python/isc/config/tests/config_test
699
           src/lib/python/isc/cc/tests/cc_test
Jerry's avatar
Jerry committed
700
           src/lib/python/isc/log/tests/log_test
701
           src/lib/python/isc/notify/tests/notify_out_test
Jeremy C. Reed's avatar
Jeremy C. Reed committed
702
           src/lib/dns/gen-rdatacode.py
703
           src/lib/python/bind10_config.py
Jeremy C. Reed's avatar
Jeremy C. Reed committed
704
           src/lib/dns/tests/testdata/gen-wiredata.py
705
           src/lib/cc/session_config.h.pre
Jelte Jansen's avatar
Jelte Jansen committed
706
           src/lib/cc/tests/session_unittests_config.h
707
          ], [
708
           chmod +x src/bin/cmdctl/run_b10-cmdctl.sh
Likun Zhang's avatar
Likun Zhang committed
709
           chmod +x src/bin/xfrin/run_b10-xfrin.sh
710
           chmod +x src/bin/xfrout/run_b10-xfrout.sh
711
           chmod +x src/bin/recurse/run_b10-recurse.sh
712
           chmod +x src/bin/zonemgr/run_b10-zonemgr.sh
713 714 715
           chmod +x src/bin/stats/tests/stats_test
           chmod +x src/bin/stats/run_b10-stats.sh
           chmod +x src/bin/stats/run_b10-stats_stub.sh
716
           chmod +x src/bin/bind10/run_bind10.sh
717 718
           chmod +x src/bin/cmdctl/tests/cmdctl_test
           chmod +x src/bin/xfrin/tests/xfrin_test
Likun Zhang's avatar
Likun Zhang committed
719
           chmod +x src/bin/xfrout/tests/xfrout_test
720
           chmod +x src/bin/zonemgr/tests/zonemgr_test
721
           chmod +x src/bin/bindctl/tests/bindctl_test
722 723
           chmod +x src/bin/bindctl/run_bindctl.sh
           chmod +x src/bin/loadzone/run_loadzone.sh
724 725
           chmod +x src/bin/loadzone/tests/correct/correct_test.sh
           chmod +x src/bin/loadzone/tests/error/error_test.sh
726
           chmod +x src/bin/usermgr/run_b10-cmdctl-usermgr.sh
727
           chmod +x src/bin/msgq/run_msgq.sh
Jeremy C. Reed's avatar
Jeremy C. Reed committed
728
           chmod +x src/bin/msgq/tests/msgq_test
Jeremy C. Reed's avatar
Jeremy C. Reed committed
729 730
           chmod +x src/lib/dns/gen-rdatacode.py
           chmod +x src/lib/dns/tests/testdata/gen-wiredata.py
731
          ])
732
AC_OUTPUT
733 734 735 736 737 738 739 740 741 742 743 744 745

dnl Print the results
dnl

cat > config.report << END

     BIND 10 source configure results:
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Package:
  Name:          $PACKAGE_NAME
  Version:       $PACKAGE_VERSION

746 747
C++ Compiler:    $CXX

748 749 750 751
Flags:
  DEFS:          $DEFS
  CPPFLAGS:      $CPPFLAGS
  CXXFLAGS:      $CXXFLAGS
752
  B10_CXXFLAGS:  $B10_CXXFLAGS
753
dnl includes too
754 755 756
  Python:        ${PYTHON_INCLUDES}
                 ${PYTHON_LDFLAGS}
                 ${PYTHON_LIB}
757
  Boost:         ${BOOST_INCLUDES}
758
  log4cxx:       ${LOG4CXX_INCLUDES}
759
  SQLite:        $SQLITE_CFLAGS
760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777
                 $SQLITE_LIBS

Features:
  $enable_features

Developer:
  Google Tests:  $gtest_path
  Code Coverage: $USE_LCOV
  Generate Manuals:  $enable_man

END

cat config.report
cat <<EOF

  Now you can type "make" to build BIND 10

EOF