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

Francis Dupont's avatar
Francis Dupont committed
4
AC_PREREQ([2.69])
5 6 7 8 9

# For released versions, this is in x.y.z format.
# For GIT versions, this is x.y.z-git, where x.y.z denotes the software
# version that was used as a base + changes that were made later, but
# are not released yet.
10
AC_INIT(kea,1.4.0-git, kea-dev@lists.isc.org)
11
AC_CONFIG_SRCDIR(README)
12 13 14 15 16 17 18 19 20 21 22 23 24

# serial-tests is not available in automake version before 1.13, so
# we'll check that and conditionally use serial-tests. This check is
# adopted from code by Richard W.M. Jones:
# https://www.redhat.com/archives/libguestfs/2013-February/msg00102.html
m4_define([serial_tests], [
    m4_esyscmd([automake --version |
                head -1 |
                awk '{split ($NF,a,"."); if (a[1] == 1 && a[2] >= 12) { print "serial-tests" }}'
    ])
])
AM_INIT_AUTOMAKE(foreign serial_tests)

25
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])dnl be backward compatible
26
AC_CONFIG_HEADERS([config.h])
27
AC_CONFIG_MACRO_DIR([m4macros])
28

29
AC_CANONICAL_HOST
30
AC_CANONICAL_BUILD
31

32 33
# Checks for programs.
AC_PROG_CXX
34

35 36 37
# Check for exact Kea version.
AC_MSG_CHECKING(whether this is a tarball or git source)
if test -d "${srcdir}/.git"; then
38
        KEA_SRCID="git `(cd "${top_srcdir}";git rev-parse HEAD)`"
39 40 41 42 43 44 45 46 47
        AC_MSG_RESULT("git")
else
        KEA_SRCID="tarball"
        AC_MSG_RESULT("tarball")
fi
# Export EXTENDED_VERSION to config.h
# This will be either "tarball" or "git abcd".
AC_DEFINE_UNQUOTED([EXTENDED_VERSION], ["${KEA_SRCID}"], [Extended Kea version])

48 49
# Find a separator for path_replacer
for sep in "+" "," ";" "&" "__NONE__"; do
50 51 52 53 54 55
        if `pwd | grep -q $sep`; then continue; fi
        if `echo ${prefix} | grep -q $sep`; then continue; fi
        if `echo ${sysconfdir} | grep -q $sep`; then continue; fi
        if `echo ${localstatedir} | grep -q $sep`; then continue; fi
        SEP=$sep
        break
56 57
done
if test "$sep" = "__NONE__"; then
58
        AC_MSG_ERROR([can't find a separator character in '+,;&' for the path_replacer shell script])
59 60 61
fi
AC_SUBST(SEP)

62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
# If cross compiling assume the message compiler executable was
# magically already in place...
if test "$cross_compiling" = "yes"; then
        AC_MSG_CHECKING("build (vs. host) compiled message compiler")
	if test -x "${srcdir}/src/lib/log/compiler/message"; then
		AC_MSG_RESULT(yes)
	else
		AC_MSG_RESULT(no)
		AC_MSG_WARN("you must install a message compiler in:")
		AC_MSG_WARN("    ${srcdir}/src/lib/log/compiler/message")
		AC_MSG_WARN("compiled for build ($build).")
	fi
fi
AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = "yes"])

77 78 79
# Enable low-performing debugging facilities? This option optionally
# enables some debugging aids that perform slowly and hence aren't built
# by default.
80 81 82 83
AC_ARG_ENABLE([debug],
  AS_HELP_STRING([--enable-debug],
    [enable debugging (default is no)]),
  [case "${enableval}" in
84 85
    yes) debug_enabled=yes ;;
    no)  debug_enabled=no ;;
86
    *)   AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
87 88
  esac],[debug_enabled=no])
AM_CONDITIONAL([DEBUG_ENABLED], [test x$debug_enabled = xyes])
89
AM_COND_IF([DEBUG_ENABLED], [AC_DEFINE([ENABLE_DEBUG], [1], [Enable low-performing debugging facilities?])])
90

Francis Dupont's avatar
Francis Dupont committed
91
# Include premium configuration
92 93
INCLUDED_HOOKS=

94
PREMIUM_DIR=
95
DISTCHECK_PREMIUM_CONFIGURE_FLAG=
Francis Dupont's avatar
Francis Dupont committed
96
AC_DEFUN([AX_PREMIUM],[])
Francis Dupont's avatar
Francis Dupont committed
97
# m4_sinclude includes the file if it exists at autoreconf time
98
m4_sinclude(premium/config.m4)
99
AC_SUBST(PREMIUM_DIR)
100
AC_SUBST(DISTCHECK_PREMIUM_CONFIGURE_FLAG)
Francis Dupont's avatar
Francis Dupont committed
101
AX_PREMIUM
102

Francis Dupont's avatar
Francis Dupont committed
103
# Include contrib configuration
104
# (currently only a provision copied from premium support)
Francis Dupont's avatar
Francis Dupont committed
105
CONTRIB_DIR=
106
DISTCHECK_CONTRIB_CONFIGURE_FLAG=
Francis Dupont's avatar
Francis Dupont committed
107
AC_DEFUN([AX_CONTRIB],[])
Francis Dupont's avatar
Francis Dupont committed
108
m4_sinclude(contrib/config.m4)
Francis Dupont's avatar
Francis Dupont committed
109
AC_SUBST(CONTRIB_DIR)
110
AC_SUBST(DISTCHECK_CONTRIB_CONFIGURE_FLAG)
Francis Dupont's avatar
Francis Dupont committed
111
AX_CONTRIB
112

113 114
# Libtool configuration
#
Jelte Jansen's avatar
Jelte Jansen committed
115 116 117

# libtool cannot handle spaces in paths, so exit early if there is one
if [ test `echo $PWD | grep -c ' '` != "0"  ]; then
118
    AC_MSG_ERROR([Kea cannot be built in a directory that contains spaces, because of libtool limitations. Please change the directory name, or use a symbolic link that does not contain spaces.])
Jelte Jansen's avatar
Jelte Jansen committed
119 120
fi

121 122
# On FreeBSD (and probably some others), clang++ does not meet an autoconf
# assumption in identifying libtool configuration regarding shared library:
123 124 125 126 127
# the configure script will execute "$CC -shared $CFLAGS/$CXXFLAGS -v" and
# expect the output contains -Lxxx or -Ryyy.  This is the case for g++, but
# not for clang++, and, as a result, it will cause various errors in linking
# programs or running them with a shared object (such as some of our python
# scripts).
128 129 130 131 132
# To work around this problem we define a temporary variable
# "CXX_LIBTOOL_LDFLAGS".  It's expected to be defined as, e.g, "-L/usr/lib"
# to temporarily fake the output so that it will be compatible with that of
# g++.
CFLAGS_SAVED=$CFLAGS
133
CXXFLAGS_SAVED=$CXXFLAGS
134
CFLAGS="$CFLAGS $CXX_LIBTOOL_LDFLAGS"
135
CXXFLAGS="$CXXFLAGS $CXX_LIBTOOL_LDFLAGS"
136
LT_INIT
137
CFLAGS=$CFLAGS_SAVED
138
CXXFLAGS=$CXXFLAGS_SAVED
139

140
# Use C++ language
141 142 143
AC_LANG([C++])

# Identify the compiler: this check must be after AC_PROG_CXX and AC_LANG.
144
AM_CONDITIONAL(USE_GXX, test "X${GXX}" = "Xyes")
145
AC_CHECK_DECL([__SUNPRO_CC], [SUNCXX="yes"], [SUNCXX="no"])
146
AC_CHECK_DECL([__clang__], [CLANGPP="yes"], [CLANGPP="no"])
Josh Soref's avatar
Josh Soref committed
147
# USE_CLANGPP is no longer used, keep it by symmetry with USE_GXX?
148
AM_CONDITIONAL(USE_CLANGPP, test "X${CLANGPP}" = "Xyes")
149

150
# Check for C++11 features support
151
AX_ISC_CPP11
152

153 154 155
# Check for std::is_base_of support
AC_MSG_CHECKING([for std::is_base_of])
AC_COMPILE_IFELSE(
156 157 158 159 160 161 162 163 164
    [AC_LANG_PROGRAM(
        [#include <type_traits>
        class A {};
        class B : A {};]
        [static_assert(std::is_base_of<A, B>::value, "");])],
    [AC_MSG_RESULT(yes)
    AC_DEFINE([HAVE_IS_BASE_OF], [1],
    [Define to 1 if std::is_base_of is available])],
    [AC_MSG_RESULT(no)])
165

166
dnl Determine if we are using GNU sed
167
GNU_SED=no
168
$SED --version 2> /dev/null | grep GNU > /dev/null 2>&1
169 170 171 172
if test $? -eq 0; then
  GNU_SED=yes
fi

173 174 175 176 177 178 179
# Display the C++ version
AC_MSG_CHECKING([C++ version])
cat > conftest.cpp << EOF
long v = __cplusplus;
EOF
CXX_STANDARD=`$CXX $CXXFLAGS -E -o - conftest.cpp | grep '^long v = ' | $SED -e 's/^long v = //' -e 's/[[^0-9]]*$//' 2> /dev/null`
if test -z "$CXX_STANDARD"; then
180
        CXX_STANDARD="unknown"
181 182 183
fi
AC_MSG_RESULT([$CXX_STANDARD])

184 185
# Linker options

186
# check -R, "-Wl,-R" or -rpath
187
AX_ISC_RPATH
188

189
# Compiler dependent settings: define some mandatory CXXFLAGS here.
190
# We also use a separate variable KEA_CXXFLAGS.  This will (and should) be
191
# used as the default value for each specific AM_CXXFLAGS:
192
# AM_CXXFLAGS = $(KEA_CXXFLAGS)
193 194 195 196 197 198 199 200
# 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.

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

204
  kea_save_CXXFLAGS="$CXXFLAGS"
205
  CXXFLAGS="$CXXFLAGS -Werror $1"
206

207
  AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){ return 0;}])],
208 209
                 [kea_cxx_flag=yes], [kea_cxx_flag=no])
  CXXFLAGS="$kea_save_CXXFLAGS"
210

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

217
  AC_MSG_RESULT([$kea_cxx_flag])
218 219
])

220 221
CXX_VERSION="unknown"

222 223 224
# SunStudio compiler requires special compiler options for boost
# (http://blogs.sun.com/sga/entry/boost_mini_howto)
if test "$SUNCXX" = "yes"; then
225
CXX_VERSION=`$CXX -V 2> /dev/null | head -1`
226
CXXFLAGS="$CXXFLAGS -library=stlport4 -features=tmplife -features=tmplrefstatic"
Francis Dupont's avatar
Francis Dupont committed
227
KEA_CXXFLAGS="$KEA_CXXFLAGS -mt"
228 229 230 231 232 233 234 235 236 237
MULTITHREADING_FLAG="-mt"
fi

# Newer versions of clang++ promotes "unused driver arguments" warnings to
# a fatal error with -Werror, causing build failure.  Since we use multiple
# compilers on multiple systems, this can easily happen due to settings for
# non clang++ environments that could be just ignored otherwise.  It can also
# happen if clang++ is used via ccache.  So, although probably suboptimal,
# we suppress this particular warning.  Note that it doesn't weaken checks
# on the source code.
238
if test "X$CLANGPP" = "Xyes"; then
239
CXX_VERSION=`$CXX --version 2> /dev/null | head -1`
240
KEA_CXXFLAGS="$KEA_CXXFLAGS -Qunused-arguments"
241 242
fi

243
# gcc/clang specific settings:
244
if test "X$GXX" = "Xyes"; then
245
CXX_VERSION=`$CXX --version 2> /dev/null | head -1`
246
KEA_CXXFLAGS="$KEA_CXXFLAGS -Wall -Wextra -Wnon-virtual-dtor -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare"
247 248 249
# gcc 4.4 would emit warnings about breaking strict aliasing rules.
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41874
CXX_DUMP_VERSION=`$CXX -dumpversion | cut -f1-2 -d.`
250
if expr "$CXX_DUMP_VERSION" \< "4.5" > /dev/null; then
251 252 253
       WARNING_GCC_44_STRICT_ALIASING_CFLAG="-fno-strict-aliasing"
fi
AC_SUBST(WARNING_GCC_44_STRICT_ALIASING_CFLAG)
Francis Dupont's avatar
Francis Dupont committed
254
CPPP="$CPP"
255
# gcc 5 preprocessor requires -P for checking its output
256
if expr "$CXX_DUMP_VERSION" \> "5" > /dev/null; then
257 258
       CPPP="$CPP -P"
fi
259

260 261
case "$host" in
*-solaris*)
262 263 264 265
        MULTITHREADING_FLAG=-pthreads
        # In Solaris, IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT need -Wno-missing-braces
        KEA_CXXFLAGS="$KEA_CXXFLAGS -Wno-missing-braces"
        ;;
266
*-apple-darwin*)
267 268
        MULTITHREADING_FLAG=
        ;;
269
*)
270 271
        MULTITHREADING_FLAG=-pthread
        ;;
272
esac
273
KEA_CXXFLAGS="$KEA_CXXFLAGS $MULTITHREADING_FLAG"
274

275 276 277
# Disable -Werror by default. Only use it if specifically enabled.
# The usage of this flag is:
#
278 279 280 281 282
# No flag:            -Werror is disabled
# --with-werror:      -Werror is enabled
# --with-werror=yes:  -Werror is enabled
# --with-werror=no:   -Werror is disabled
# --with-werror=value -Werror is enabled and "value" is included in the compiler flags
283 284 285 286
#
# In the last case, "value" may be one or more compiler flags, e.g.

# --with-werror=-Wundef
287
# --with-werror='-Wundef -Wconversion'
288

289
werror_extras=
290
AC_ARG_WITH(werror,
291
    AC_HELP_STRING([--with-werror], [Compile using -Werror (default=no)]),
292 293 294 295
    [
     case "${withval}" in
         yes) with_werror=1 ;;
         no)  with_werror=0 ;;
296
         -*)  with_werror=1; werror_extras=${withval} ;;
297
         *)   AC_MSG_ERROR(bad value ${withval} for --with-werror) ;;
298
     esac],
299
     [with_werror=0])
300 301 302 303 304 305 306 307

werror_ok=0

# 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.
if test $with_werror = 1; then
   CXXFLAGS_SAVED="$CXXFLAGS"
308
   CXXFLAGS="$CXXFLAGS $KEA_CXXFLAGS -Werror"
309
   AC_MSG_CHECKING(for in-TU anonymous namespace breakage)
310 311 312 313
   # We use struct, not class, here, because some compilers complain about
   # "unused private members", causing a false positive.
   AC_TRY_COMPILE([namespace { struct Foo {}; }
   namespace isc {struct Bar {Foo foo_;};} ],,
314 315 316 317
        [AC_MSG_RESULT(no)
         werror_ok=1
         KEA_CXXFLAGS="$KEA_CXXFLAGS -Werror"],
        [AC_MSG_RESULT(yes)])
318 319 320
   CXXFLAGS="$CXXFLAGS_SAVED"
fi

321 322 323 324 325 326 327
# Added flags after -Werror

# Some versions of GCC warn about some versions of Boost regarding
# missing initializer for members in its posix_time.
# https://svn.boost.org/trac/boost/ticket/3477
# But older GCC compilers don't have the flag.
KEA_CXX_TRY_FLAG([-Wno-missing-field-initializers],
328
        [KEA_CXXFLAGS="$KEA_CXXFLAGS -Wno-missing-field-initializers"])
329 330

if test "X$CLANGPP" = "Xyes"; then
331 332 333 334
        # This is to workaround unused variables tcout and tcerr in
        # log4cplus's streams.h and unused parameters from some of the
        # Boost headers.
        KEA_CXXFLAGS="$KEA_CXXFLAGS -Wno-unused-variable -Wno-unused-parameter"
335 336 337 338 339
fi

# Add the extras at the very last
# Note it can be used to re-enable a (fatal) warning
for extra in $werror_extras; do
340 341 342
        KEA_CXX_TRY_FLAG([$extra],
                [KEA_CXXFLAGS="$KEA_CXXFLAGS $extra"],
                [AC_MSG_ERROR([$CXX does not support $extra"])])
343 344
done

345
fi                              dnl GXX = yes
346

JINMEI Tatuya's avatar
JINMEI Tatuya committed
347 348 349 350 351 352 353
# 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)
354
AM_COND_IF([USE_STATIC_LINK], [AC_DEFINE([USE_STATIC_LINK], [1], [Was Kea statically linked?])])
JINMEI Tatuya's avatar
JINMEI Tatuya committed
355

JINMEI Tatuya's avatar
JINMEI Tatuya committed
356 357
# Check validity about some libtool options
if test $enable_static_link = yes -a $enable_static = no; then
358
        AC_MSG_ERROR([--enable-static-link requires --enable-static])
JINMEI Tatuya's avatar
JINMEI Tatuya committed
359
fi
360
if test $enable_static_link = no -a $enable_shared = no; then
361
        AC_MSG_ERROR([--disable-static-link requires --enable-shared])
JINMEI Tatuya's avatar
JINMEI Tatuya committed
362 363
fi

364
# OS dependent configuration
365
kea_undefined_pthread_behavior=no
366

367
case "$host" in
368
*-solaris*)
369 370 371 372 373 374 375 376 377 378
        # 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__"
        # "now" binding is necessary to prevent deadlocks in C++ static initialization code
        LDFLAGS="$LDFLAGS -z now"
        # Destroying locked mutexes, condition variables being waited
        # on, etc. are undefined behavior on Solaris, so we set it as
        # such here.
        kea_undefined_pthread_behavior=yes
        ;;
379
*-apple-darwin*)
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
        # Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use
        # (RFC2292 or RFC3542).
        CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542"

        # In OS X 10.9 (and possibly any future versions?) pthread_cond_destroy
        # doesn't work as documented, which makes some of unit tests fail.
        AC_MSG_CHECKING([OS X versions where destroying locked locks do not fail])
        AC_TRY_COMPILE(
        [#include <Availability.h>],
        [#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
         #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
         #error " OS X >= 10.9"
         #endif
         #endif
         return 1;],
        [AC_MSG_RESULT([OS X < 10.9])],
        [AC_MSG_RESULT([OS X >= 10.9])
         kea_undefined_pthread_behavior=yes])
        ;;
399
*-freebsd*)
400 401 402 403 404 405 406 407 408 409 410
        # On FreeBSD10.1 pthread_cond_destroy doesn't work as documented, which
        # causes the CondVarTest.destroyWhileWait test to fail. According to the
        # pthread_cond_destroy documentation for FreeBSD, this function should
        # return EBUSY error when there is a thread waiting for the conditional
        # variable, whereas this function returned success code. We treat it here
        # as an undefined behavior. Also note that this issue was only visible
        # when gtest 1.7 was in use, because the previous versions of gtest
        # didn't seem to have support for the death tests on FreeBSD. As a
        # result, the test was not executed and the error didn't occur.
        kea_undefined_pthread_behavior=yes
        ;;
411
esac
412
if [ test $kea_undefined_pthread_behavior = "yes" ]; then
413 414
   AC_DEFINE([HAS_UNDEFINED_PTHREAD_BEHAVIOR], [1], [Does this platform have some undefined pthreads behavior?])
fi
415

416 417 418 419 420 421 422 423 424 425
# Our experiments have shown Solaris 10 has broken support for the
# IPV6_USE_MIN_MTU socket option for getsockopt(); it doesn't return the value
# previously set via setsockopt().  We know it doesn't happen on one instance
# on Solaris 11, but we don't know whether it happens for any Solaris 10
# implementations or for earlier versions of Solaris.  In any case, at the
# moment this matters for only one unittest case, so we'll simply disable
# the affected test using the following definition with the specific hardcoding
# of that version of Solaris.
case "$host" in
*-solaris2.10)
426 427 428
        AC_DEFINE([HAVE_BROKEN_GET_IPV6_USE_MIN_MTU], [1],
        [Define to 1 if getsockopt(IPV6_USE_MIN_MTU) does not work])
        ;;
429 430
esac

431 432 433 434 435 436 437 438
# Kea-shell is written in python. It can work with python 2.7 or any 3.x.
# It may likely work with earlier versions, but 2.7 was the oldest one we tested
# it with. We require python only if kea-shell was enabled. It is disabled
# by default to not introduce hard dependency on python.
AC_ARG_ENABLE(shell, [AC_HELP_STRING([--enable-shell],
  [enable kea-shell, a text management client for Control Agent [default=no]])],
  enable_shell=$enableval, enable_shell=no)

439
DISTCHECK_KEA_SHELL_CONFIGURE_FLAG=
Francis Dupont's avatar
Francis Dupont committed
440
PKGPYTHONDIR=
441 442 443
m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
 [python3 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 dnl
  python3.3 python3.2 python3.1 python3.0 python python2 python2.7])
444 445
if test "x$enable_shell" != xno ; then
# If kea-shell is enabled, we really need python. 2.7 or anything newer will do.
Tomek Mrugalski's avatar
Tomek Mrugalski committed
446
# We try to find 3.x first. If not found, we can do with 2.7.
447
  AM_PATH_PYTHON([2.7])
Francis Dupont's avatar
Francis Dupont committed
448
  # pkgpythondir needs to be expanded
449 450 451 452
  saved_prefix="$prefix"
  if test "$prefix" = "NONE"; then
    prefix=$ac_default_prefix
  fi
Francis Dupont's avatar
Francis Dupont committed
453 454 455 456 457 458
  PKGPYTHONDIR="$pkgpythondir"
  OLD=
  while test "x$OLD" != "x$PKGPYTHONDIR"; do
    OLD="$PKGPYTHONDIR"
    eval PKGPYTHONDIR="\"$OLD\""
  done
459
  prefix="$saved_prefix"
460
  DISTCHECK_KEA_SHELL_CONFIGURE_FLAG="--enable-shell"
461
else
462
  PYTHON=no
463
fi
464

465 466
# Export to makefiles the info whether we have shell enabled or not
AM_CONDITIONAL(KEA_SHELL, test x$enable_shell != xno)
467
AC_SUBST(DISTCHECK_KEA_SHELL_CONFIGURE_FLAG)
Francis Dupont's avatar
Francis Dupont committed
468
AC_SUBST(PKGPYTHONDIR)
469

470
# produce PIC unless we disable shared libraries. need this for python bindings.
471
if test $enable_shared != "no" -a "X$GXX" = "Xyes"; then
472
   KEA_CXXFLAGS="$KEA_CXXFLAGS -fPIC"
473 474
fi

475
# Look for glib static libs if they're trying to do static builds
476
if test $enable_static_link != "no"; then
477 478 479 480
   CXX_SAVED=$CXX
   CXX="$CXX -static"

   AC_LINK_IFELSE(
481
     [AC_LANG_PROGRAM([#include <math.h>],[(void)sqrt(-1.0);])],
482 483
     [AC_MSG_RESULT([checking for static glib libraries... yes])],
     [AC_MSG_RESULT([checking for static glib libraries... no])
484
      AC_MSG_ERROR([Building with --enable-static-link does not work. You appear to be missing glib static libraries. Check config.log for details.])])
485 486 487

   CXX=$CXX_SAVED
fi
488

489
AC_SUBST(KEA_CXXFLAGS)
490

491 492
# Checks for libraries.

493 494
AC_SEARCH_LIBS(inet_pton, [nsl])
AC_SEARCH_LIBS(recvfrom, [socket])
495
AC_SEARCH_LIBS(nanosleep, [rt])
496
AC_SEARCH_LIBS(dlsym, [dl])
497

498 499 500 501 502 503
# Checks for header files.

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

504

505 506
# Detect OS type (it may be used to do OS-specific things, e.g.
# interface detection in DHCP)
507
AC_MSG_CHECKING(OS type)
508
BSD_TYPE="notaBSD"
509 510 511
case $host in
    *-linux*)
      AC_DEFINE([OS_LINUX], [1], [Running on Linux?])
512
      OS_TYPE="Linux"
513 514
      CPPFLAGS="$CPPFLAGS -DOS_LINUX"
      ;;
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538
    *-apple-darwin*)
      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
      AC_DEFINE([OS_OSX], [1], [Running on OSX?])
      OS_TYPE="BSD"
      BSD_TYPE="OSX"
      CPPFLAGS="$CPPFLAGS -DOS_BSD"
      ;;
    *-freebsd*)
      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
      AC_DEFINE([OS_FREEBSD], [1], [Running on FreeBSD?])
      OS_TYPE="BSD"
      BSD_TYPE="FreeBSD"
      CPPFLAGS="$CPPFLAGS -DOS_BSD"
      ;;
    *-netbsd*)
      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
      AC_DEFINE([OS_NETBSD], [1], [Running on NetBSD?])
      OS_TYPE="BSD"
      BSD_TYPE="NetBSD"
      CPPFLAGS="$CPPFLAGS -DOS_BSD"
      ;;
    *-openbsd*)
      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
      AC_DEFINE([OS_OPENBSD], [1], [Running on OpenBSD?])
539
      OS_TYPE="BSD"
540
      BSD_TYPE="OpenBSD"
541 542
      CPPFLAGS="$CPPFLAGS -DOS_BSD"
      ;;
543 544
    *-solaris*)
      AC_DEFINE([OS_SOLARIS], [1], [Running on Solaris?])
545
      OS_TYPE="Solaris"
546
      CPPFLAGS="$CPPFLAGS -DOS_SUN"
547 548 549
      ;;
    *)
      OS_TYPE="Unknown"
550 551
      # $host_os is more user friendly than full $host
      AC_MSG_WARN("Unsupported OS: $host_os")
552 553 554
      ;;
esac
AC_MSG_RESULT($OS_TYPE)
555 556

AM_CONDITIONAL(OS_LINUX, test $OS_TYPE = Linux)
557 558
AM_CONDITIONAL(OS_BSD, test $OS_TYPE = BSD)
AM_CONDITIONAL(OS_SOLARIS, test $OS_TYPE = Solaris)
559 560 561 562
AM_CONDITIONAL(OS_OSX, test $BSD_TYPE = OSX)
AM_CONDITIONAL(OS_FREEBSD, test $BSD_TYPE = FreeBSD)
AM_CONDITIONAL(OS_NETBSD, test $BSD_TYPE = NetBSD)
AM_CONDITIONAL(OS_OPENBSD, test $BSD_TYPE = OpenBSD)
563 564


565 566 567 568 569 570
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)
571
        AC_DEFINE(HAVE_SA_LEN, 1, [Define to 1 if sockaddr has a sa_len member, and corresponding sin_len and sun_len])],
572 573
        AC_MSG_RESULT(no))

574 575 576 577 578 579 580 581 582 583 584 585 586 587
AC_MSG_CHECKING(for usuable C++11 regex)
AC_TRY_RUN([
#include <regex>
#include <iostream>
int main() {
  const std::regex regex(".*");
  const std::string string = "This should match!";
  const auto result = std::regex_search(string, regex);
  return result ? EXIT_SUCCESS : EXIT_FAILURE;
}],
        [AC_MSG_RESULT(yes)
        AC_DEFINE(USE_REGEX, 1, [Define to 1 if C++11 regex is usable])],
        AC_MSG_RESULT(no))

588
enable_gtest="no"
589
GTEST_INCLUDES=
590 591 592

AC_ARG_WITH([gtest-source],
            [AS_HELP_STRING([--with-gtest-source=PATH],
593 594
                            [location of the Googletest source])],
            [enable_gtest="yes" ; GTEST_SOURCE="$withval"])
595 596

AC_ARG_WITH([gtest],
597 598 599
            [AS_HELP_STRING([--with-gtest=PATH],
                            [specify a path to gtest header files (PATH/include) and library (PATH/lib)])],
        [gtest_path="$withval"; enable_gtest="yes"], [gtest_path="no"])
600

601
AC_ARG_WITH(lcov,
602
[  --with-lcov[=PROGRAM]         enable gtest and coverage target using the specified lcov], lcov="$withval", lcov="no")
603 604 605

USE_LCOV="no"
if test "$lcov" != "no"; then
606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
        # force gtest if not set
        if test "$enable_gtest" = "no"; then
#               AC_MSG_ERROR("lcov needs gtest for test coverage report")
                AC_MSG_NOTICE([gtest support is now enabled, because used by coverage tests])
                enable_gtest="yes"
        fi
        if test "$lcov" != "yes"; then
                LCOV=$lcov
        else
                AC_PATH_PROG([LCOV], [lcov])
        fi
        if test -x "${LCOV}"; then
                USE_LCOV="yes"
        else
                AC_MSG_ERROR([Cannot find lcov.])
        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
        # GCC specific?
        CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
        LIBS=" $LIBS -lgcov"
        AC_SUBST(CPPFLAGS)
        AC_SUBST(LIBS)
        AC_SUBST(LCOV)
        AC_SUBST(GENHTML)
634 635 636
fi
AC_SUBST(USE_LCOV)

Andrei Pavel's avatar
Andrei Pavel committed
637 638 639 640 641 642 643 644 645 646 647 648 649
enable_benchmark="no"
BENCHMARK_INCLUDES=

AC_ARG_WITH([benchmark-source],
            [AS_HELP_STRING([--with-benchmark-source=PATH],
                            [location of the benchmark source])],
            [enable_benchmark="yes" ; BENCHMARK_SOURCE="$withval"])

AC_ARG_WITH([benchmark],
            [AS_HELP_STRING([--with-benchmark=PATH],
                            [specify a path to benchmark header files (PATH/include) and library (PATH/lib)])],
        [benchmark_path="$withval"; enable_benchmark="yes"], [benchmark_path="no"])

650 651 652
# Sets up for use of botan unless openssl is specified
# sets variables CRYPTO_*
AX_CRYPTO
653

654 655 656 657
# List of directories, where tools like mysql_config or pgsql_config will be
# searched for
defaultdirs="/usr /usr/local /usr/pkg /opt /opt/local"

658
# Check for MySql.  The path to the mysql_config program is given with
659 660
# the --with-mysql-config (default to /usr/bin/mysql-config).  By default,
# the software is not built with MySQL support enabled.
661
mysql_config="no"
662 663
AC_ARG_WITH([mysql],
  AC_HELP_STRING([--with-mysql=PATH],
664
    [path to the MySQL 'mysql_config' script (MySQL is used for the DHCP database)]),
665 666
    [mysql_config="$withval"])

667 668 669 670 671 672 673 674
deprec_msg="no"
AC_ARG_WITH([dhcp-mysql],,
    [mysql_config="$withval";deprec_msg="yes"])

if test "${deprec_msg}" = "yes" ; then
    AC_MSG_WARN([--with-dhcp-mysql has been deprecated, please use --with-mysql])
fi

675
if test "${mysql_config}" = "yes" ; then
676 677 678 679 680 681 682
    for d in $defaultdirs
    do
        if test -f $d/bin/mysql_config; then
            MYSQL_CONFIG="$d/bin/mysql_config"
            break
        fi
    done
683 684 685 686 687
elif test "${mysql_config}" != "no" ; then
    MYSQL_CONFIG="${withval}"
fi

if test "$MYSQL_CONFIG" != "" ; then
688
    if test -d "$MYSQL_CONFIG" -o ! -x "$MYSQL_CONFIG" ; then
689
        AC_MSG_ERROR([--with-mysql should point to a mysql_config program])
690 691 692 693
    fi

    MYSQL_CPPFLAGS=`$MYSQL_CONFIG --cflags`
    MYSQL_LIBS=`$MYSQL_CONFIG --libs`
694
    MYSQL_VERSION=`$MYSQL_CONFIG --version`
695 696 697 698 699 700 701 702 703 704 705 706

    AC_SUBST(MYSQL_CPPFLAGS)
    AC_SUBST(MYSQL_LIBS)

    # Check that a simple program using MySQL functions can compile and link.
    CPPFLAGS_SAVED="$CPPFLAGS"
    LIBS_SAVED="$LIBS"

    CPPFLAGS="$MYSQL_CPPFLAGS $CPPFLAGS"
    LIBS="$MYSQL_LIBS $LIBS"

    AC_LINK_IFELSE(
707
            [AC_LANG_PROGRAM([#include <mysql.h>],
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
                             [MYSQL mysql_handle;
                              (void) mysql_init(&mysql_handle);
                             ])],
            [AC_MSG_RESULT([checking for MySQL headers and library... yes])],
            [AC_MSG_RESULT([checking for MySQL headers and library... no])
             AC_MSG_ERROR([Needs MySQL library])]
    )

    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

    # Note that MYSQL is present in the config.h file
    AC_DEFINE([HAVE_MYSQL], [1], [MySQL is present])
fi

723
# Solaris puts FIONREAD in filio.h
724
AC_CHECK_HEADERS(sys/filio.h,,,)
725

726 727 728
# ... and at the shell level, so Makefile.am can take action depending on this.
AM_CONDITIONAL(HAVE_MYSQL, test "$MYSQL_CONFIG" != "")

729
pg_config="no"
730 731
AC_ARG_WITH([pgsql],
  AC_HELP_STRING([--with-pgsql=PATH],
732 733 734
    [path to the PostgreSQL 'pg_config' script]),
    [pg_config="$withval"])

735 736 737 738 739 740 741 742
deprec_msg="no"
AC_ARG_WITH([dhcp-pgsql],,
    [pg_config="$withval";deprec_msg="yes"])

if test "${deprec_msg}" = "yes" ; then
    AC_MSG_WARN([--with-dhcp-pgsql has been deprecated, please use --with-pgsql])
fi

743
if test "${pg_config}" = "yes" ; then
744 745 746 747 748 749 750
    for d in $defaultdirs
    do
        if test -f $d/bin/pg_config; then
            PG_CONFIG="$d/bin/pg_config"
            break
        fi
    done
751 752 753 754 755 756
elif test "${pg_config}" != "no" ; then
    PG_CONFIG="${withval}"
fi

if test "$PG_CONFIG" != "" ; then
    if test -d "$PG_CONFIG" -o ! -x "$PG_CONFIG" ; then
757
        AC_MSG_ERROR([--with-pgsql should point to a pg_config program])
758 759 760 761
    fi

    PGSQL_CPPFLAGS=`$PG_CONFIG --cppflags`
    PGSQL_INCLUDEDIR=`$PG_CONFIG --includedir`
762 763
    PGSQL_INCLUDEDIR_SERVER=`$PG_CONFIG --includedir-server`
    PGSQL_CPPFLAGS="$PGSQL_CPPFLAGS -I$PGSQL_INCLUDEDIR -I$PGSQL_INCLUDEDIR_SERVER"
764 765
    PGSQL_LIBS=`$PG_CONFIG --libdir`
    PGSQL_LIBS="-L$PGSQL_LIBS -lpq"
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786
    PGSQL_VERSION=`$PG_CONFIG --version`

    AC_SUBST(PGSQL_CPPFLAGS)
    AC_SUBST(PGSQL_LIBS)

    # Check that a simple program using PostgreSQL functions can compile and link.
    CPPFLAGS_SAVED="$CPPFLAGS"
    LIBS_SAVED="$LIBS"

    CPPFLAGS="$PGSQL_CPPFLAGS $CPPFLAGS"
    LIBS="$PGSQL_LIBS $LIBS"

    AC_LINK_IFELSE(
            [AC_LANG_PROGRAM([#include <libpq-fe.h>],
                             [PGconn * c = PQconnectdb("dbname = 'postgres'");
                              PQfinish(c);])],
            [AC_MSG_RESULT([checking for PostgreSQL headers and library... yes])],
            [AC_MSG_RESULT([checking for PostgreSQL headers and library... no])
             AC_MSG_ERROR([Needs PostgreSQL library])]
    )

787
    AC_CHECK_HEADERS([utils/errcodes.h],,
788
    AC_MSG_ERROR([Missing required header file (errcodes.h) from PostgreSQL server-development package]))
789

790 791 792 793 794 795 796 797 798
    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

    # Note that PostgreSQL is present in the config.h file
    AC_DEFINE([HAVE_PGSQL], [1], [PostgreSQL is present])
fi

# ... and at the shell level, so Makefile.am can take action depending on this.
AM_CONDITIONAL(HAVE_PGSQL, test "$PG_CONFIG" != "")
Jelte Jansen's avatar
Jelte Jansen committed
799

Francis Dupont's avatar
Francis Dupont committed
800
# allow building kea programs with static link to cassandra cpp-driver.
801 802 803 804
AC_ARG_ENABLE([cql-static-lib],
AS_HELP_STRING([--enable-cql-static-lib],
    [build programs with cassandra cpp driver static library [[default=no]]]),
    [enable_cql_static_lib=yes], [enable_cql_static_lib=no])
805
AM_CONDITIONAL(USE_CQL_STATIC_LIB, test "$enable_cql_static_lib" = yes)
Francis Dupont's avatar
Francis Dupont committed
806 807 808 809 810 811 812
#AC_DEFINE USE_CQL_STATIC_LIB? (unused)

cql_lib="cassandra"
if test "${enable_cql_static_lib}" = "yes" ; then
    cql_lib="${cql_lib}_static"
fi

Tomek Mrugalski's avatar
Tomek Mrugalski committed
813 814 815
cql_config="no"
AC_ARG_WITH([cql],
  AC_HELP_STRING([--with-cql=PATH],
Francis Dupont's avatar
Francis Dupont committed
816
    [path to pkg-config or the Cassandra CQL 'cql_config' script]),
Tomek Mrugalski's avatar
Tomek Mrugalski committed
817 818 819
    [cql_config="$withval"])

if test "${cql_config}" = "yes" ; then
Francis Dupont's avatar
Francis Dupont committed
820 821
    AC_PATH_PROG([PKG_CONFIG], [pkg-config])
    CQL_CONFIG="$PKG_CONFIG"
Tomek Mrugalski's avatar
Tomek Mrugalski committed
822
elif test "${cql_config}" != "no" ; then
Francis Dupont's avatar
Francis Dupont committed
823
    CQL_CONFIG="${cql_config}"
824 825
fi

Tomek Mrugalski's avatar
Tomek Mrugalski committed
826 827
if test "$CQL_CONFIG" != "" ; then
    if test -d "$CQL_CONFIG" -o ! -x "$CQL_CONFIG" ; then
Francis Dupont's avatar
Francis Dupont committed
828
        AC_MSG_ERROR([--with-cql should point to a pkg-config or cql_config program])
829 830
    fi

Francis Dupont's avatar
Francis Dupont committed
831
    CQL_INCLUDEDIR=`$CQL_CONFIG --cflags-only-I $cql_lib`
Andrei Pavel's avatar
Andrei Pavel committed
832
    CQL_CPPFLAGS="$CQL_INCLUDEDIR `$CQL_CONFIG --cflags-only-other $cql_lib`"
Francis Dupont's avatar
Francis Dupont committed
833
    CQL_LIBS="`$CQL_CONFIG --libs $cql_lib`"
Francis Dupont's avatar
Francis Dupont committed
834
    CQL_VERSION=`$CQL_CONFIG --modversion $cql_lib`
835

Tomek Mrugalski's avatar
Tomek Mrugalski committed
836 837
    AC_SUBST(CQL_CPPFLAGS)
    AC_SUBST(CQL_LIBS)
838

Tomek Mrugalski's avatar
Tomek Mrugalski committed
839
    # Check that a simple program using CQL functions can compile and link.
840 841 842
    CPPFLAGS_SAVED="$CPPFLAGS"
    LIBS_SAVED="$LIBS"

Tomek Mrugalski's avatar
Tomek Mrugalski committed
843 844
    CPPFLAGS="$CQL_CPPFLAGS $CPPFLAGS"
    LIBS="$CQL_LIBS $LIBS"
845 846 847 848 849

    AC_LINK_IFELSE(
            [AC_LANG_PROGRAM([#include <cassandra.h>],
                             [CassCluster* cluster = cass_cluster_new();
                              cass_cluster_free(cluster);])],
Tomek Mrugalski's avatar
Tomek Mrugalski committed
850 851 852
            [AC_MSG_RESULT([checking for Cassandra CQL headers and library... yes])],
            [AC_MSG_RESULT([checking for Cassandra CQL headers and library... no])
             AC_MSG_ERROR([Needs Cassandra CQL library])]
853 854 855 856
    )
    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

Tomek Mrugalski's avatar
Tomek Mrugalski committed
857 858
    # Note that CQL is present in the config.h file
    AC_DEFINE([HAVE_CQL], [1], [CQL is present])
859 860 861
fi

# ... and at the shell level, so Makefile.am can take action depending on this.
Tomek Mrugalski's avatar
Tomek Mrugalski committed
862
AM_CONDITIONAL(HAVE_CQL, test "$CQL_CONFIG" != "")
863

864 865 866 867 868 869 870 871 872 873 874 875
sysrepo_config="no"
AC_ARG_WITH([sysrepo],
  AC_HELP_STRING([--with-sysrepo=PATH],
    [path to the Sysrepo 'sysrepo_config' script]),
    [sysrepo_config="$withval"])

if test "${sysrepo_config}" = "yes" ; then
    SYSREPO_CONFIG="$PKG_CONFIG"
elif test "${sysrepo_config}" != "no" ; then
    SYSREPO_CONFIG="${sysrepo_config}"
fi

876
if test "$SYSREPO_CONFIG" != "" ; then
877 878 879 880
    if test -d "$SYSREPO_CONFIG" -o ! -x "$SYSREPO_CONFIG" ; then
        AC_MSG_ERROR([--with-sysrepo should point to a sysrepo_config program])
    fi

881
    # Let's get the configuration environment for pure Sysrepo (written in C) first
Andrei Pavel's avatar
Andrei Pavel committed
882 883 884 885
    SYSREPO_INCLUDEDIR=`$SYSREPO_CONFIG --cflags-only-I libsysrepo`
    SYSREPO_CPPFLAGS="$SYSREPO_INCLUDEDIR `$SYSREPO_CONFIG --cflags-only-other libsysrepo`"
    SYSREPO_LIBS="`$SYSREPO_CONFIG --libs libsysrepo`"
    SYSREPO_VERSION=`$SYSREPO_CONFIG --modversion libsysrepo`
886

887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906
    # Now get the environment for C++ bindings for Sysrepo.
    SYSREPOCPP_INCLUDEDIR=`$SYSREPO_CONFIG --cflags-only-I libSysrepo-cpp`
    SYSREPOCPP_CPPFLAGS="$SYSREPO_INCLUDEDIR `$SYSREPO_CONFIG --cflags-only-other libSysrepo-cpp`"
    SYSREPOCPP_LIBS="`$SYSREPO_CONFIG --libs libSysrepo-cpp`"
    SYSREPOCPP_VERSION=`$SYSREPO_CONFIG --modversion libSysrepo-cpp`

    # If include paths are equal, there's no need to include both. But if they're different,
    # we need both.
    if test "${SYSREPO_INCLUDEDIR}" != "${SYSREPOCPP_INCLUDEDIR}"; then
       SYSREPO_INCLUDEDIR="${SYSREPO_INCLUDEDIR} ${SYSREPOCPP_INCLUDEDIR}"
    fi

    if test "${SYSREPO_CPPFLAGS}" != "${SYSREPOCPP_CPPFLAGS}"; then
       SYSREPO_CPPFLAGS="${SYSREPO_CPPFLAGS} ${SYSREPOCPP_CPPFLAGS}"
    fi

    if test "${SYSREPO_LIBS}" != "${SYSREPOCPP_LIBS}"; then
       SYSREPO_LIBS="${SYSREPO_LIBS} ${SYSREPOCPP_LIBS}"
    fi

907 908 909
    AC_SUBST(SYSREPO_CPPFLAGS)
    AC_SUBST(SYSREPO_LIBS)

Andrei Pavel's avatar
Andrei Pavel committed
910
    # Check that a simple program using Sysrepo functions can compile and link.
911 912 913 914 915 916 917
    CPPFLAGS_SAVED="$CPPFLAGS"
    LIBS_SAVED="$LIBS"

    CPPFLAGS="$SYSREPO_CPPFLAGS $CPPFLAGS"
    LIBS="$SYSREPO_LIBS $LIBS"

    AC_LINK_IFELSE(
Andrei Pavel's avatar
Andrei Pavel committed
918 919 920
            [AC_LANG_PROGRAM([extern "C" {
                              #include <sysrepo.h>
                              }],
921 922 923 924 925 926 927 928
                              [sr_conn_ctx_t *connection = NULL;
                              sr_session_ctx_t *session = NULL;
                              sr_connect("configure_test", SR_CONN_DEFAULT, &connection);
                              sr_disconnect(connection);])],
            [AC_MSG_RESULT([checking for Sysrepo headers and library... yes])],
            [AC_MSG_RESULT([checking for Sysrepo headers and library... no])
             AC_MSG_ERROR([Needs Sysrepo library])]
    )
929 930 931 932 933 934 935 936 937

    AC_LINK_IFELSE(
            [AC_LANG_PROGRAM([#include <sysrepo-cpp/Session.h>],
                              [Connection("conn-name");])],
            [AC_MSG_RESULT([checking for Sysrepo C++ bindings headers and library... yes])],
            [AC_MSG_RESULT([checking for Sysrepo C++ bindings headers and library... no])
             AC_MSG_ERROR([Needs Sysrepo C++ bindings (unable to find Sysrepo-ccp library. To get it, you need to compile sysrepo with -DGEN_CPP_BINDINGS=ON.])]
    )

938 939 940
    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

Andrei Pavel's avatar
Andrei Pavel committed
941
    # Note that Sysrepo is present in the config.h file
942 943 944 945 946 947
    AC_DEFINE([HAVE_SYSREPO], [1], [SYSREPO is present])
fi

# ... and at the shell level, so Makefile.am can take action depending on this.
AM_CONDITIONAL(HAVE_SYSREPO, test "$SYSREPO_CONFIG" != "")

948
# Check for log4cplus
949
DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG=
950 951 952 953 954
log4cplus_path="yes"
AC_ARG_WITH([log4cplus],
  AC_HELP_STRING([--with-log4cplus=PATH],
    [specify exact directory of log4cplus library and headers]),
    [log4cplus_path="$withval"])
955
if test "${log4cplus_path}" = "no" ; then
956 957
    AC_MSG_ERROR([Need log4cplus])
elif test "${log4cplus_path}" != "yes" ; then
958
  DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG="-with-log4cplus=${log4cplus_path}"
959
  LOG4CPLUS_INCLUDES="-I${log4cplus_path}/include"
960
  LOG4CPLUS_LIBS="-L${log4cplus_path}/lib"
961 962
else
# If not specified, try some common paths.
963
        for d in $defaultdirs
964 965 966 967 968 969 970
        do
                if test -f $d/include/log4cplus/logger.h; then
                        LOG4CPLUS_INCLUDES="-I$d/include"
                        LOG4CPLUS_LIBS="-L$d/lib -L$d/lib64"
                        break
                fi
        done
971
	DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG="-with-log4cplus"
972 973
fi

Francis Dupont's avatar
Francis Dupont committed
974
LOG4CPLUS_LIBS="$LOG4CPLUS_LIBS -llog4cplus"
975

976
AC_SUBST(DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG)
977
AC_SUBST(LOG4CPLUS_LIBS)
978 979 980 981
AC_SUBST(LOG4CPLUS_INCLUDES)

CPPFLAGS_SAVED=$CPPFLAGS
CPPFLAGS="$LOG4CPLUS_INCLUDES $CPPFLAGS"
982
LIBS_SAVED="$LIBS"
Francis Dupont's avatar
Francis Dupont committed
983
LIBS="$LOG4CPLUS_LIBS $MULTITHREADING_FLAG $LIBS"
984 985 986 987 988 989 990 991 992 993 994 995 996

AC_CHECK_HEADERS([log4cplus/logger.h],,AC_MSG_ERROR([Missing required header files.]))
AC_LINK_IFELSE(
        [AC_LANG_PROGRAM([#include <log4cplus/logger.h>
                         ],
                         [using namespace log4cplus;
                          Logger logger = Logger::getInstance("main");
                         ])],
        [AC_MSG_RESULT([checking for log4cplus library... yes])],
        [AC_MSG_RESULT([checking for log4cplus library... no])
         AC_MSG_ERROR([Needs log4cplus library])]
)

997 998 999
dnl Determine the log4cplus version, used mainly for config.report.
AC_MSG_CHECKING([log4cplus version])
cat > conftest.cpp << EOF
1000
#include <log4cplus/version.h>
1001 1002 1003
AUTOCONF_LOG4CPLUS_VERSION=LOG4CPLUS_VERSION_STR
EOF

1004
LOG4CPLUS_VERSION=`$CPPP $CPPFLAGS conftest.cpp | grep '^AUTOCONF_LOG4CPLUS_VERSION=' | $SED -e 's/^AUTOCONF_LOG4CPLUS_VERSION=//' -e 's/[[ 	]]//g' -e 's/"//g' 2> /dev/null`
1005 1006 1007 1008 1009 1010
if test -z "$LOG4CPLUS_VERSION"; then
  LOG4CPLUS_VERSION="unknown"
fi
$RM -f conftest.cpp
AC_MSG_RESULT([$LOG4CPLUS_VERSION])

1011
CPPFLAGS=$CPPFLAGS_SAVED
1012
LIBS=$LIBS_SAVED
1013

1014 1015 1016
#
# Configure Boost header path
#
1017
AX_BOOST_FOR_KEA
1018 1019
# Boost offset_ptr is required in one library and not optional right now, so
# we unconditionally fail here if it doesn't work.
1020
if test "$BOOST_OFFSET_PTR_WOULDFAIL" = "yes" -a X"$werror_ok" = X1; then
1021
    AC_MSG_ERROR([Failed to compile a required header file.  Try upgrading Boost to 1.44 or higher (when using clang++) or specifying --without-werror.  See the ChangeLog entry for Trac no. 2147 for more details.])
1022
fi
1023

1024 1025 1026 1027
if test "$BOOST_STATIC_ASSERT_WOULDFAIL" = "yes" -a X"$werror_ok" = X1; then
    AC_MSG_ERROR([Failed to use Boost static assertions. Try upgrading Boost to 1.54 or higher (when using GCC 4.8) or specifying --without-werror.  See trac ticket no. 3039 for more details.])
fi

1028
# There's a known bug in FreeBSD ports for Boost that would trigger a false
1029 1030
# warning in build with g++ and -Werror (we exclude clang++ explicitly to
# avoid unexpected false positives).
1031
if test "$BOOST_NUMERIC_CAST_WOULDFAIL" = "yes" -a X"$werror_ok" = X1 -a $CLANGPP = "no"; then
1032 1033 1034 1035
    AC_MSG_ERROR([Failed to compile a required header file.  If you are using FreeBSD and Boost installed via ports, retry with specifying --without-werror.  See the ChangeLog entry for Trac no. 1991 for more details.])
fi

# Add some default CPP flags needed for Boost, identified by the AX macro.
1036
CPPFLAGS="$CPPFLAGS $CPPFLAGS_BOOST_THREADCONF"
1037

1038
# Can be required by gtest, boost and perhaps still asio
Francis Dupont's avatar
Francis Dupont committed
1039
AC_CHECK_LIB(pthread, pthread_create,[ LDFLAGS="$LDFLAGS -lpthread" ], [])
1040

1041
#
1042
# Check availability of gtest, which will be used for unit tests.
1043
#
1044 1045 1046
GTEST_LDFLAGS=
GTEST_LDADD=
DISTCHECK_GTEST_CONFIGURE_FLAG=
1047
GTEST_VERSION="unknown"
1048

1049
if test "x$enable_gtest" = "xyes" ; then
1050

1051 1052
    DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest=$gtest_path"

1053
    if test -n "$with_gtest_source" ; then
1054

1055
        if test "x$GTEST_SOURCE" = "xyes" ; then
1056

1057
            AC_MSG_CHECKING([for gtest source])
1058
            # If not specified, try some common paths.
1059
            GTEST_SOURCE=
1060 1061 1062 1063 1064 1065 1066
            for d in /usr/src/gtest /usr/local /usr/pkg /opt /opt/local ; do
                if test -f $d/src/gtest-all.cc -a $d/src/gtest_main.cc; then
                    GTEST_SOURCE=$d
                    AC_MSG_RESULT([$GTEST_SOURCE])
                    break
                fi
            done
1067
            if test -z $GTEST_SOURCE ; then
1068
                AC_MSG_ERROR([no gtest source but it was selected])
1069
            fi
1070
        else
1071 1072 1073
            if test ! -d $GTEST_SOURCE/src -a -d $GTEST_SOURCE/googletest; then
                GTEST_SOURCE=$GTEST_SOURCE/googletest
            fi
1074
            AC_CHECK_FILES([$GTEST_SOURCE/src/gtest-all.cc]
1075 1076 1077 1078 1079
                [$GTEST_SOURCE/src/gtest_main.cc],
                [have_gtest_source=yes],
                [AC_MSG_ERROR([no gtest source at $GTEST_SOURCE])])
        fi
        have_gtest_source=yes
Francis Dupont's avatar
Francis Dupont committed
1080
        GTEST_LDADD="\$(top_builddir)/ext/gtest/libgtest.a"
1081 1082
        DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest-source=$GTEST_SOURCE"
        GTEST_INCLUDES="-I$GTEST_SOURCE -I$GTEST_SOURCE/include"
1083
        GTEST_VERSION="`basename $GTEST_SOURCE`"
1084
    fi
1085 1086 1087 1088 1089 1090 1091 1092 1093

    if test "$gtest_path" != "no" ; then
        if test "$gtest_path" != "yes"; then
            GTEST_PATHS=$gtest_path
            if test -x "${gtest_path}/bin/gtest-config" ; then
                GTEST_CONFIG="${gtest_path}/bin/gtest-config"
            fi
        else
            AC_PATH_PROG([GTEST_CONFIG], [gtest-config])
1094
        fi
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
        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_VERSION=`${GTEST_CONFIG} --version`
            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"
1106
            fi
1107 1108 1109 1110 1111 1112
            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
1113