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