configure.ac 14 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, 20100318, bind10-dev@isc.org)
6 7 8 9 10 11 12
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
13 14
AC_PROG_LIBTOOL

15 16 17
# Use C++ language
AC_LANG_CPLUSPLUS

18
m4_define([_AM_PYTHON_INTERPRETER_LIST], [python python3 python3.1])
19 20
AC_ARG_WITH([pythonpath],
AC_HELP_STRING([--with-pythonpath=PATH],
21
  [specify an absolute path to python executable when automatic version check (incorrectly) fails]),
22 23 24 25
  [python_path="$withval"], [python_path="auto"])
if test "$python_path" = auto; then
	AM_PATH_PYTHON([3.1])
else
26 27
	# Older versions of automake can't handle python3 well.  This is an
	# in-house workaround for them.
28 29
	PYTHON=$python_path
	AC_SUBST(PYTHON)
30 31 32 33
	PYTHON_PREFIX='${prefix}'
	AC_SUBST(PYTHON_PREFIX)
	PYTHON_EXEC_PREFIX='$(exec_prefix)'
	AC_SUBST(PYTHON_EXEC_PREFIX)
34 35 36 37
	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
38 39
	AC_SUBST(PYTHON_VERSION)
	PYTHON_PLATFORM=`$PYTHON -c "import sys; print(sys.platform)"`
40
	AC_SUBST(PYTHON_PLATFORM)
41
	pythondir='${prefix}/lib/python'$PYTHON_VERSION'/site-packages'
42
	AC_SUBST(pythondir)
43
	pkgpythondir='${pythondir}/'$PACKAGE
44
	AC_SUBST(pkgpythondir)
45
	pyexecdir='${exec_prefix}/lib/python'$PYTHON_VERSION'/site-packages'
46
	AC_SUBST(pyexecdir)
47
	pkgpyexecdir='${pyexecdir}/'$PACKAGE
48
	AC_SUBST(pkgpyexecdir)
49
fi
50

51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
# Check for python development environments
if test -x ${PYTHON}-config; then
	PYTHON_INCLUDES=`${PYTHON}-config --includes`

	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.])
72 73
	fi
fi
74
AC_SUBST(PYTHON_INCLUDES)
75 76 77 78 79 80 81 82 83 84 85 86 87
AC_SUBST(PYTHON_LDFLAGS)

# Check for python library (not absolutely mandatory, but needed for
# Boost.Python when we use it.  See below.)
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)

88 89
# TODO: check for _sqlite3.py module

90 91
# default compiler warning settings
if test "X$GCC" = "Xyes"; then
92
CXXFLAGS="$CXXFLAGS -g -Wall -Wextra -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare"
JINMEI Tatuya's avatar
JINMEI Tatuya committed
93
UNUSED_PARAM_ATTRIBUTE='__attribute__((unused))'
94 95 96 97 98 99 100 101 102 103 104 105 106 107

# 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.
werror_ok=0
CXXFLAGS_SAVED="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -Werror"
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)
	 werror_ok=1],
	[AC_MSG_RESULT(yes)])
CXXFLAGS="$CXXFLAGS_SAVED"
108
fi
JINMEI Tatuya's avatar
JINMEI Tatuya committed
109
AC_DEFINE_UNQUOTED(UNUSED_PARAM, $UNUSED_PARAM_ATTRIBUTE, Define to compiler keyword indicating a function argument is intentionally unused)
110
AM_CONDITIONAL(GCC_WERROR_OK, test $werror_ok = 1)
111 112 113 114 115 116

# produce PIC unless we disable shared libraries. need this for python bindings.
if test $enable_shared != "no" -a "X$GCC" = "Xyes"; then
   CXXFLAGS="$CXXFLAGS -fPIC"
fi

117 118
# Checks for libraries.

119 120 121
AC_SEARCH_LIBS(inet_pton, [nsl])
AC_SEARCH_LIBS(recvfrom, [socket])

122 123 124 125 126 127
# Checks for header files.

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

128 129 130 131 132 133 134 135 136
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)
        AC_DEFINE(HAVE_SIN_LEN, 1, Define to 1 if sockaddr_in has a sin_len member)],
        AC_MSG_RESULT(no))

137
AC_ARG_WITH(lcov,
138
[  --with-lcov[=PROGRAM]         enable gtest and coverage target using the specified lcov], lcov="$withval", lcov="no")
139

140
AC_ARG_WITH(gtest,
141
[  --with-gtest=PATH       specify a path to gtest header files (PATH/include) and library (PATH/lib)],
142
    gtest_path="$withval", gtest_path="no")
143 144 145 146 147 148


USE_LCOV="no"
if test "$lcov" != "no"; then
	# force gtest if not set
	if test "$gtest_path" = "no"; then
149 150
#		AC_MSG_ERROR("lcov needs gtest for test coverage report")
		AC_MSG_NOTICE([gtest support is now enabled, because used by coverage tests])
151 152 153
		gtest_path="yes"
	fi
	if test "$lcov" != "yes"; then
154
		LCOV=$lcov
155
	else
156
		AC_PATH_PROG([LCOV], [lcov])
157
	fi
158 159 160 161
	if test -x "${LCOV}"; then
		USE_LCOV="yes"
	else
		AC_MSG_ERROR([Cannot find lcov.])
162 163 164 165 166 167
	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
168
	# GCC specific?
169
	CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
170
	LIBS=" $LIBS -lgcov"
171 172 173 174 175 176 177
	AC_SUBST(CPPFLAGS)
	AC_SUBST(LIBS)
	AC_SUBST(LCOV)
	AC_SUBST(GENHTML)
fi
AC_SUBST(USE_LCOV)

178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
# Check availability of the Boost Python library

AC_MSG_CHECKING([for boost::python library])
AC_ARG_WITH([boost-python],
AC_HELP_STRING([--with-boost-python],
  [specify whether to use the boost python library]),
  [with_boost_python="$withval"], [with_boost_python="auto"])
if test "$with_boost_python" != "no"; then
	if test "$with_boost_python" != "auto" -a "X$PYTHON_LIB" = X; then
		AC_MSG_ERROR([Boost.Python requested but python library is not available])
	fi
	LDFLAGS_SAVED="$LDFLAGS"
	LIBS_SAVED="$LIBS"
	CPPFLAGS_SAVED="$CPPFLAGS"
	CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"

	for BOOST_TRY_LIB in boost_python boost_python-mt; do
		LDFLAGS="$LDFLAGS_SAVED ${BOOST_LDFLAGS} ${PYTHON_LDFLAGS}"
		LIBS="$LIBS_SAVED -l${BOOST_TRY_LIB} ${PYTHON_LIB}"
		AC_TRY_LINK([#include <boost/python/module.hpp>
	      using namespace boost::python;
	      BOOST_PYTHON_MODULE(test) { throw "Boost::Python test."; }],
			[ return 0; ],
			[ AC_MSG_RESULT(yes)
			BOOST_PYTHON_LIB="-l${BOOST_TRY_LIB}"
			],[])
		if test "X${BOOST_PYTHON_LIB}" != X; then
        		break
		fi
	done

	LDFLAGS="$LDFLAGS_SAVED"
	CPPFLAGS="$CPPFLAGS_SAVED"
	LIBS="$LIBS_SAVED"
fi

if test "X${BOOST_PYTHON_LIB}" = X; then
	AC_MSG_RESULT(no)
	if test "$with_boost_python" = "yes"; then
	   AC_MSG_ERROR([boost python library is requested but not found])
	fi
else
	AC_DEFINE(HAVE_BOOST_PYTHON, 1, Define to 1 if boost python library is available)
fi

AM_CONDITIONAL(HAVE_BOOST_PYTHON, test "X${BOOST_PYTHON_LIB}" != X)
AC_SUBST(BOOST_PYTHON_LIB)

226
#
227
# Check availability of gtest, which will be used for unit tests.
228
#
229
if test "$gtest_path" != "no"
230
then
231 232
	if test "$gtest_path" != "yes"; then
		GTEST_PATHS=$gtest_path
233 234 235
		if test -x "${gtest_path}/bin/gtest-config" ; then
			GTEST_CONFIG="${gtest_path}/bin/gtest-config"
		fi
236
	else
237
		AC_PATH_PROG([GTEST_CONFIG], [gtest-config])
238
	fi
239 240 241 242 243 244 245 246 247 248
	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"
249
		fi
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
		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
265 266
		AC_MSG_ERROR([Cannot find gtest in: $GTEST_PATHS])
	fi
267
else
268 269 270
	GTEST_INCLUDES=
	GTEST_LDFLAGS=
	GTEST_LDADD=
271
fi
272 273 274 275
AM_CONDITIONAL(HAVE_GTEST, test $gtest_path != "no")
AC_SUBST(GTEST_INCLUDES)
AC_SUBST(GTEST_LDFLAGS)
AC_SUBST(GTEST_LDADD)
276

277
PKG_CHECK_MODULES(SQLITE, sqlite3 >= 3.3.9, enable_features="$enable_features SQLite3")
278

279 280
# Check for headers from required devel kits.
# boost/shared_ptr.hpp is in ext in svn but not in tarball.
281 282 283 284 285 286
CPPFLAGS_SAVED=$CPPFLAGS
if test "X$BOOST_INCLUDES" = "X"; then
	# abs_top_srcdir not defined yet
	# so this is only useful to check.  We'll replace it after the check.
	CPPFLAGS="$CPPFLAGS -Iext"
fi
287
AC_CHECK_HEADERS([boost/shared_ptr.hpp boost/foreach.hpp],,
288
  AC_MSG_ERROR([Missing required header files.]))
289 290 291 292
CPPFLAGS=$CPPFLAGS_SAVED
if test "X$BOOST_INCLUDES" = "X"; then
	CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/ext"
fi
293

294 295 296 297
AC_ARG_ENABLE(man, [AC_HELP_STRING([--enable-man],
  [regenerate man pages [default=no]])] ,enable_man=yes, enable_man=no)

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

299 300 301
AC_ARG_ENABLE(install-configurations,
  [AC_HELP_STRING([--disable-install-configurations],
  [do not install configuration])], install_configurations=$enableval, install_configurations=yes)
302

303
AM_CONDITIONAL(INSTALL_CONFIGURATIONS, test x$install_configurations = xyes || test x$install_configurations = xtrue)
304

305 306
AC_CONFIG_FILES([Makefile
                 src/Makefile
307
                 src/bin/Makefile
308
                 src/bin/bind10/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
309
                 src/bin/bind10/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
310
                 src/bin/cmdctl/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
311
                 src/bin/cmdctl/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
312
                 src/bin/bindctl/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
313
                 src/bin/bindctl/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
314
                 src/bin/cfgmgr/Makefile
315
                 src/bin/host/Makefile
Evan Hunt's avatar
Evan Hunt committed
316
                 src/bin/loadzone/Makefile
317
                 src/bin/msgq/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
318
                 src/bin/msgq/tests/Makefile
319
                 src/bin/auth/Makefile
JINMEI Tatuya's avatar
JINMEI Tatuya committed
320
                 src/bin/auth/tests/Makefile
Likun Zhang's avatar
Likun Zhang committed
321
                 src/bin/xfrin/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
322
                 src/bin/xfrin/tests/Makefile
323
                 src/bin/xfrout/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
324
                 src/bin/xfrout/tests/Makefile
325
                 src/bin/usermgr/Makefile
326
                 src/lib/Makefile
327
                 src/lib/cc/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
328 329
                 src/lib/python/Makefile
                 src/lib/python/isc/Makefile
Evan Hunt's avatar
Evan Hunt committed
330
                 src/lib/python/isc/datasrc/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
331
                 src/lib/python/isc/cc/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
332
                 src/lib/python/isc/cc/tests/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
333
                 src/lib/python/isc/config/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
334
                 src/lib/python/isc/config/tests/Makefile
335
                 src/lib/config/Makefile
336
                 src/lib/config/tests/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
337
                 src/lib/dns/Makefile
Jeremy C. Reed's avatar
Jeremy C. Reed committed
338
                 src/lib/dns/tests/Makefile
339
                 src/lib/exceptions/Makefile
Evan Hunt's avatar
Evan Hunt committed
340 341
                 src/lib/datasrc/Makefile
                 src/lib/datasrc/tests/Makefile
342
                 src/lib/xfr/Makefile
Jelte Jansen's avatar
Jelte Jansen committed
343
               ])
344
AC_OUTPUT([src/bin/cfgmgr/b10-cfgmgr.py
345
           src/bin/cmdctl/cmdctl.py
346
           src/bin/cmdctl/run_b10-cmdctl.sh
347 348
           src/bin/cmdctl/tests/cmdctl_test
           src/bin/xfrin/tests/xfrin_test
Likun Zhang's avatar
Likun Zhang committed
349
           src/bin/xfrin/xfrin.py
350
           src/bin/xfrin/xfrin.spec.pre
Likun Zhang's avatar
Likun Zhang committed
351
           src/bin/xfrin/run_b10-xfrin.sh
352
           src/bin/xfrout/xfrout.py
353
           src/bin/xfrout/xfrout.spec.pre
Likun Zhang's avatar
Likun Zhang committed
354
           src/bin/xfrout/tests/xfrout_test
355
           src/bin/xfrout/run_b10-xfrout.sh
356
           src/bin/bind10/bind10.py
357
           src/bin/bind10/tests/bind10_test
358
           src/bin/bind10/run_bind10.sh
359
           src/bin/bindctl/run_bindctl.sh
360
           src/bin/bindctl/bindctl-source.py
361
           src/bin/bindctl/tests/bindctl_test
362
           src/bin/loadzone/run_loadzone.sh
Evan Hunt's avatar
Evan Hunt committed
363
           src/bin/loadzone/b10-loadzone.py
364 365
           src/bin/usermgr/run_b10-cmdctl-usermgr.sh
           src/bin/usermgr/b10-cmdctl-usermgr.py
366
           src/bin/msgq/msgq.py
Jeremy C. Reed's avatar
Jeremy C. Reed committed
367
           src/bin/msgq/tests/msgq_test
368
           src/bin/msgq/run_msgq.sh
369
           src/bin/auth/auth.spec.pre
370
           src/bin/auth/spec_config.h.pre
371 372
           src/lib/config/tests/data_def_unittests_config.h
           src/lib/python/isc/config/tests/config_test
373
           src/lib/python/isc/cc/tests/cc_test
Jeremy C. Reed's avatar
Jeremy C. Reed committed
374 375
           src/lib/dns/gen-rdatacode.py
           src/lib/dns/tests/testdata/gen-wiredata.py
376
          ], [
377
           chmod +x src/bin/cmdctl/run_b10-cmdctl.sh
Likun Zhang's avatar
Likun Zhang committed
378
           chmod +x src/bin/xfrin/run_b10-xfrin.sh
379
           chmod +x src/bin/xfrout/run_b10-xfrout.sh
380
           chmod +x src/bin/bind10/run_bind10.sh
381 382
           chmod +x src/bin/cmdctl/tests/cmdctl_test
           chmod +x src/bin/xfrin/tests/xfrin_test
Likun Zhang's avatar
Likun Zhang committed
383
           chmod +x src/bin/xfrout/tests/xfrout_test
384
           chmod +x src/bin/bindctl/tests/bindctl_test
385 386
           chmod +x src/bin/bindctl/run_bindctl.sh
           chmod +x src/bin/loadzone/run_loadzone.sh
387
           chmod +x src/bin/usermgr/run_b10-cmdctl-usermgr.sh
388
           chmod +x src/bin/msgq/run_msgq.sh
Jeremy C. Reed's avatar
Jeremy C. Reed committed
389
           chmod +x src/bin/msgq/tests/msgq_test
Jeremy C. Reed's avatar
Jeremy C. Reed committed
390 391
           chmod +x src/lib/dns/gen-rdatacode.py
           chmod +x src/lib/dns/tests/testdata/gen-wiredata.py
392
          ])
393
AC_OUTPUT
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433

dnl Print the results
dnl

cat > config.report << END

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

Package:
  Name:          $PACKAGE_NAME
  Version:       $PACKAGE_VERSION

Flags:
  DEFS:          $DEFS
  CPPFLAGS:      $CPPFLAGS
  CFLAGS:        $CFLAGS
  CXXFLAGS:      $CXXFLAGS
dnl includes too
  Boost Python:  $BOOST_PYTHON_LIB
  SQLite:	 $SQLITE_CFLAGS
                 $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