configure.ac 66.7 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
# pkg-config can be required.
AC_PATH_PROG([PKG_CONFIG], [pkg-config])

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

Francis Dupont's avatar
Francis Dupont committed
94
# Include premium configuration
95 96
INCLUDED_HOOKS=

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

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

116 117
# Libtool configuration
#
Jelte Jansen's avatar
Jelte Jansen committed
118 119 120

# libtool cannot handle spaces in paths, so exit early if there is one
if [ test `echo $PWD | grep -c ' '` != "0"  ]; then
121
    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
122 123
fi

124 125
# On FreeBSD (and probably some others), clang++ does not meet an autoconf
# assumption in identifying libtool configuration regarding shared library:
126 127 128 129 130
# 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).
131 132 133 134 135
# 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
136
CXXFLAGS_SAVED=$CXXFLAGS
137
CFLAGS="$CFLAGS $CXX_LIBTOOL_LDFLAGS"
138
CXXFLAGS="$CXXFLAGS $CXX_LIBTOOL_LDFLAGS"
139
LT_INIT
140
CFLAGS=$CFLAGS_SAVED
141
CXXFLAGS=$CXXFLAGS_SAVED
142

143
# Use C++ language
144 145 146
AC_LANG([C++])

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

153
# Check for C++11 features support
154
AX_ISC_CPP11
155

156 157 158
# Check for std::is_base_of support
AC_MSG_CHECKING([for std::is_base_of])
AC_COMPILE_IFELSE(
159 160 161 162 163 164 165 166 167
    [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)])
168

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

176 177 178 179 180 181 182
# 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
183
        CXX_STANDARD="unknown"
184 185 186
fi
AC_MSG_RESULT([$CXX_STANDARD])

187 188
# Linker options

189
# check -R, "-Wl,-R" or -rpath
190
AX_ISC_RPATH
191

192
# Compiler dependent settings: define some mandatory CXXFLAGS here.
193
# We also use a separate variable KEA_CXXFLAGS.  This will (and should) be
194
# used as the default value for each specific AM_CXXFLAGS:
195
# AM_CXXFLAGS = $(KEA_CXXFLAGS)
196 197 198 199 200 201 202 203
# 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.
204
AC_DEFUN([KEA_CXX_TRY_FLAG], [
205 206
  AC_MSG_CHECKING([whether $CXX supports $1])

207
  kea_save_CXXFLAGS="$CXXFLAGS"
208
  CXXFLAGS="$CXXFLAGS -Werror $1"
209

210
  AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){ return 0;}])],
211 212
                 [kea_cxx_flag=yes], [kea_cxx_flag=no])
  CXXFLAGS="$kea_save_CXXFLAGS"
213

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

220
  AC_MSG_RESULT([$kea_cxx_flag])
221 222
])

223 224
CXX_VERSION="unknown"

225 226 227
# SunStudio compiler requires special compiler options for boost
# (http://blogs.sun.com/sga/entry/boost_mini_howto)
if test "$SUNCXX" = "yes"; then
228
CXX_VERSION=`$CXX -V 2> /dev/null | head -1`
229
CXXFLAGS="$CXXFLAGS -library=stlport4 -features=tmplife -features=tmplrefstatic"
Francis Dupont's avatar
Francis Dupont committed
230
KEA_CXXFLAGS="$KEA_CXXFLAGS -mt"
231 232 233 234 235 236 237 238 239 240
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.
241
if test "X$CLANGPP" = "Xyes"; then
242
CXX_VERSION=`$CXX --version 2> /dev/null | head -1`
243
KEA_CXXFLAGS="$KEA_CXXFLAGS -Qunused-arguments"
244 245
fi

246
# gcc/clang specific settings:
247
if test "X$GXX" = "Xyes"; then
248
CXX_VERSION=`$CXX --version 2> /dev/null | head -1`
249
KEA_CXXFLAGS="$KEA_CXXFLAGS -Wall -Wextra -Wnon-virtual-dtor -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare"
250 251 252
# 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.`
253
if expr "$CXX_DUMP_VERSION" \< "4.5" > /dev/null; then
254 255 256
       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
257
CPPP="$CPP"
258
# gcc 5 preprocessor requires -P for checking its output
259
if expr "$CXX_DUMP_VERSION" \> "5" > /dev/null; then
260 261
       CPPP="$CPP -P"
fi
262

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

278 279 280
# Disable -Werror by default. Only use it if specifically enabled.
# The usage of this flag is:
#
281 282 283 284 285
# 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
286 287 288 289
#
# In the last case, "value" may be one or more compiler flags, e.g.

# --with-werror=-Wundef
290
# --with-werror='-Wundef -Wconversion'
291

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

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"
311
   CXXFLAGS="$CXXFLAGS $KEA_CXXFLAGS -Werror"
312
   AC_MSG_CHECKING(for in-TU anonymous namespace breakage)
313 314 315 316
   # 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_;};} ],,
317 318 319 320
        [AC_MSG_RESULT(no)
         werror_ok=1
         KEA_CXXFLAGS="$KEA_CXXFLAGS -Werror"],
        [AC_MSG_RESULT(yes)])
321 322 323
   CXXFLAGS="$CXXFLAGS_SAVED"
fi

324 325 326 327 328 329 330
# 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],
331
        [KEA_CXXFLAGS="$KEA_CXXFLAGS -Wno-missing-field-initializers"])
332 333

if test "X$CLANGPP" = "Xyes"; then
334 335 336 337
        # 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"
338 339 340 341 342
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
343 344 345
        KEA_CXX_TRY_FLAG([$extra],
                [KEA_CXXFLAGS="$KEA_CXXFLAGS $extra"],
                [AC_MSG_ERROR([$CXX does not support $extra"])])
346 347
done

348
fi                              dnl GXX = yes
349

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

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

367
# OS dependent configuration
368
kea_undefined_pthread_behavior=no
369

370
case "$host" in
371
*-solaris*)
372 373 374 375 376 377 378 379 380 381
        # 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
        ;;
382
*-apple-darwin*)
383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
        # 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])
        ;;
402
*-freebsd*)
403 404 405 406 407 408 409 410 411 412 413
        # 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
        ;;
414
esac
415
if [ test $kea_undefined_pthread_behavior = "yes" ]; then
416 417
   AC_DEFINE([HAS_UNDEFINED_PTHREAD_BEHAVIOR], [1], [Does this platform have some undefined pthreads behavior?])
fi
418

419 420 421 422 423 424 425 426 427 428
# 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)
429 430 431
        AC_DEFINE([HAVE_BROKEN_GET_IPV6_USE_MIN_MTU], [1],
        [Define to 1 if getsockopt(IPV6_USE_MIN_MTU) does not work])
        ;;
432 433
esac

434 435 436 437 438 439 440 441
# 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)

442
DISTCHECK_KEA_SHELL_CONFIGURE_FLAG=
Francis Dupont's avatar
Francis Dupont committed
443
PKGPYTHONDIR=
444 445 446
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])
447 448
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
449
# We try to find 3.x first. If not found, we can do with 2.7.
450
  AM_PATH_PYTHON([2.7])
Francis Dupont's avatar
Francis Dupont committed
451
  # pkgpythondir needs to be expanded
452 453 454 455
  saved_prefix="$prefix"
  if test "$prefix" = "NONE"; then
    prefix=$ac_default_prefix
  fi
Francis Dupont's avatar
Francis Dupont committed
456 457 458 459 460 461
  PKGPYTHONDIR="$pkgpythondir"
  OLD=
  while test "x$OLD" != "x$PKGPYTHONDIR"; do
    OLD="$PKGPYTHONDIR"
    eval PKGPYTHONDIR="\"$OLD\""
  done
462
  prefix="$saved_prefix"
463
  DISTCHECK_KEA_SHELL_CONFIGURE_FLAG="--enable-shell"
464
else
465
  PYTHON=no
466
fi
467

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

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

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

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

   CXX=$CXX_SAVED
fi
491

492
AC_SUBST(KEA_CXXFLAGS)
493

494 495
# Checks for libraries.

496 497
AC_SEARCH_LIBS(inet_pton, [nsl])
AC_SEARCH_LIBS(recvfrom, [socket])
498
AC_SEARCH_LIBS(nanosleep, [rt])
499
AC_SEARCH_LIBS(dlsym, [dl])
500

501 502 503 504 505 506
# Checks for header files.

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

507

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

AM_CONDITIONAL(OS_LINUX, test $OS_TYPE = Linux)
560 561
AM_CONDITIONAL(OS_BSD, test $OS_TYPE = BSD)
AM_CONDITIONAL(OS_SOLARIS, test $OS_TYPE = Solaris)
562 563 564 565
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)
566 567


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

577 578 579 580 581 582 583 584 585 586 587 588 589 590
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))

591
enable_gtest="no"
592
GTEST_INCLUDES=
593 594 595

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

AC_ARG_WITH([gtest],
600 601 602
            [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"])
603

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

USE_LCOV="no"
if test "$lcov" != "no"; then
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 634 635 636
        # 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)
637 638 639
fi
AC_SUBST(USE_LCOV)

Andrei Pavel's avatar
Andrei Pavel committed
640 641 642 643 644 645 646 647 648 649 650 651 652
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"])

653 654 655
# Sets up for use of botan unless openssl is specified
# sets variables CRYPTO_*
AX_CRYPTO
656

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

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

670 671 672 673 674 675 676 677
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

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

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

    MYSQL_CPPFLAGS=`$MYSQL_CONFIG --cflags`
    MYSQL_LIBS=`$MYSQL_CONFIG --libs`
697
    MYSQL_VERSION=`$MYSQL_CONFIG --version`
698 699 700 701 702 703 704 705 706 707 708 709

    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(
710
            [AC_LANG_PROGRAM([#include <mysql.h>],
711 712 713 714 715 716 717 718 719 720 721 722 723 724 725
                             [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

726
# Solaris puts FIONREAD in filio.h
727
AC_CHECK_HEADERS(sys/filio.h,,,)
728

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

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

738 739 740 741 742 743 744 745
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

746
if test "${pg_config}" = "yes" ; then
747 748 749 750 751 752 753
    for d in $defaultdirs
    do
        if test -f $d/bin/pg_config; then
            PG_CONFIG="$d/bin/pg_config"
            break
        fi
    done
754 755 756 757 758 759
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
760
        AC_MSG_ERROR([--with-pgsql should point to a pg_config program])
761 762 763 764
    fi

    PGSQL_CPPFLAGS=`$PG_CONFIG --cppflags`
    PGSQL_INCLUDEDIR=`$PG_CONFIG --includedir`
765 766
    PGSQL_INCLUDEDIR_SERVER=`$PG_CONFIG --includedir-server`
    PGSQL_CPPFLAGS="$PGSQL_CPPFLAGS -I$PGSQL_INCLUDEDIR -I$PGSQL_INCLUDEDIR_SERVER"
767 768
    PGSQL_LIBS=`$PG_CONFIG --libdir`
    PGSQL_LIBS="-L$PGSQL_LIBS -lpq"
769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789
    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])]
    )

790
    AC_CHECK_HEADERS([utils/errcodes.h],,
791
    AC_MSG_ERROR([Missing required header file (errcodes.h) from PostgreSQL server-development package]))
792

793 794 795 796 797 798 799 800 801
    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
802

Francis Dupont's avatar
Francis Dupont committed
803
# allow building kea programs with static link to cassandra cpp-driver.
804 805 806 807
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])
808
AM_CONDITIONAL(USE_CQL_STATIC_LIB, test "$enable_cql_static_lib" = yes)
Francis Dupont's avatar
Francis Dupont committed
809 810 811 812 813 814 815
#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
816 817 818
cql_config="no"
AC_ARG_WITH([cql],
  AC_HELP_STRING([--with-cql=PATH],
Francis Dupont's avatar
Francis Dupont committed
819
    [path to pkg-config or the Cassandra CQL 'cql_config' script]),
Tomek Mrugalski's avatar
Tomek Mrugalski committed
820 821 822
    [cql_config="$withval"])

if test "${cql_config}" = "yes" ; then
Francis Dupont's avatar
Francis Dupont committed
823
    CQL_CONFIG="$PKG_CONFIG"
Tomek Mrugalski's avatar
Tomek Mrugalski committed
824
elif test "${cql_config}" != "no" ; then
Francis Dupont's avatar
Francis Dupont committed
825
    CQL_CONFIG="${cql_config}"
826 827
fi

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

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

Tomek Mrugalski's avatar
Tomek Mrugalski committed
838 839
    AC_SUBST(CQL_CPPFLAGS)
    AC_SUBST(CQL_LIBS)
840

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

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

    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
852 853 854
            [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])]
855 856 857 858
    )
    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

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

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

866 867 868 869 870 871 872 873 874 875 876 877
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

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

883
    # Let's get the configuration environment for pure Sysrepo (written in C) first
Andrei Pavel's avatar
Andrei Pavel committed
884 885 886 887
    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`
888

889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
    # 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

909 910 911
    AC_SUBST(SYSREPO_CPPFLAGS)
    AC_SUBST(SYSREPO_LIBS)

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

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

    AC_LINK_IFELSE(
Andrei Pavel's avatar
Andrei Pavel committed
920 921 922
            [AC_LANG_PROGRAM([extern "C" {
                              #include <sysrepo.h>
                              }],
923 924 925 926 927 928 929 930
                              [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])]
    )
931 932 933 934 935 936 937 938 939

    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.])]
    )

940 941 942
    CPPFLAGS=$CPPFLAGS_SAVED
    LIBS=$LIBS_SAVED

Andrei Pavel's avatar
Andrei Pavel committed
943
    # Note that Sysrepo is present in the config.h file
944 945 946 947 948 949
    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" != "")

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

Francis Dupont's avatar
Francis Dupont committed
976
LOG4CPLUS_LIBS="$LOG4CPLUS_LIBS -llog4cplus"
977

978
AC_SUBST(DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG)
979
AC_SUBST(LOG4CPLUS_LIBS)
980 981 982 983
AC_SUBST(LOG4CPLUS_INCLUDES)

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

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])]
)

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

1006
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`
1007 1008 1009 1010 1011 1012
if test -z "$LOG4CPLUS_VERSION"; then
  LOG4CPLUS_VERSION="unknown"
fi
$RM -f conftest.cpp
AC_MSG_RESULT([$LOG4CPLUS_VERSION])

1013
CPPFLAGS=$CPPFLAGS_SAVED
1014
LIBS=$LIBS_SAVED
1015

1016 1017 1018
#
# Configure Boost header path
#
1019
AX_BOOST_FOR_KEA
1020 1021
# Boost offset_ptr is required in one library and not optional right now, so
# we unconditionally fail here if it doesn't work.
1022
if test "$BOOST_OFFSET_PTR_WOULDFAIL" = "yes" -a X"$werror_ok" = X1; then
1023
    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.])
1024
fi
1025

1026 1027 1028 1029
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

1030
# There's a known bug in FreeBSD ports for Boost that would trigger a false
1031 1032
# warning in build with g++ and -Werror (we exclude clang++ explicitly to
# avoid unexpected false positives).
1033
if test "$BOOST_NUMERIC_CAST_WOULDFAIL" = "yes" -a X"$werror_ok" = X1 -a $CLANGPP = "no"; then
1034 1035 1036 1037
    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.
1038
CPPFLAGS="$CPPFLAGS $CPPFLAGS_BOOST_THREADCONF"
1039

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

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

1051
if test "x$enable_gtest" = "xyes" ; then
1052

1053 1054
    DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest=$gtest_path"

1055
    if test -n "$with_gtest_source" ; then
1056

1057
        if test "x$GTEST_SOURCE" = "xyes" ; then
1058

1059
            AC_MSG_CHECKING([for gtest source])
1060
            # If not specified, try some common paths.
1061
            GTEST_SOURCE=
1062 1063 1064 1065 1066 1067 1068
            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
1069
            if test -z $GTEST_SOURCE ; then
1070
                AC_MSG_ERROR([no gtest source but it was selected])
1071
            fi
1072
        else
1073 1074 1075
            if test ! -d $GTEST_SOURCE/src -a -d $GTEST_SOURCE/googletest; then
                GTEST_SOURCE=$GTEST_SOURCE/googletest
            fi
1076
            AC_CHECK_FILES([$GTEST_SOURCE/src/gtest-all.cc]
1077 1078 1079 1080 1081
                [$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
1082
        GTEST_LDADD="\$(top_builddir)/ext/gtest/libgtest.a"
1083 1084
        DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest-source=$GTEST_SOURCE"
        GTEST_INCLUDES="-I$GTEST_SOURCE -I$GTEST_SOURCE/include"
1085
        GTEST_VERSION="`basename $GTEST_SOURCE`"
1086
    fi
1087 1088 1089 1090 1091 1092 1093 1094 1095

    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])
1096