|
Packit |
4e8bc4 |
AC_PREREQ(2.52)
|
|
Packit |
4e8bc4 |
m4_include([version.m4])
|
|
Packit |
4e8bc4 |
m4_include([m4/c99-backport.m4])
|
|
Packit |
4e8bc4 |
AC_INIT([memcached], [VERSION_NUMBER], [memcached@googlegroups.com])
|
|
Packit |
4e8bc4 |
AC_CANONICAL_HOST
|
|
Packit |
4e8bc4 |
AC_CONFIG_SRCDIR([memcached.c])
|
|
Packit |
4e8bc4 |
AM_INIT_AUTOMAKE([foreign])
|
|
Packit |
4e8bc4 |
AM_CONFIG_HEADER([config.h])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_PROG_CC
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_ICC ([ACTION-IF-YES], [ACTION-IF-NO])
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
|
|
Packit |
4e8bc4 |
dnl sets the $ICC variable to "yes" or "no"
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([DETECT_ICC],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
ICC="no"
|
|
Packit |
4e8bc4 |
AC_MSG_CHECKING([for icc in use])
|
|
Packit |
4e8bc4 |
if test "$GCC" = "yes"; then
|
|
Packit |
4e8bc4 |
dnl check if this is icc acting as gcc in disguise
|
|
Packit |
4e8bc4 |
AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT([no])
|
|
Packit |
4e8bc4 |
[$2],
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT([yes])
|
|
Packit |
4e8bc4 |
[$1]
|
|
Packit |
4e8bc4 |
ICC="yes")
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT([no])
|
|
Packit |
4e8bc4 |
[$2]
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
DETECT_ICC([], [])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_CLANG ([ACTION-IF-YES], [ACTION-IF-NO])
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if compiler is clang, and if so run the ACTION-IF-YES sets the
|
|
Packit |
4e8bc4 |
dnl $CLANG variable to "yes" or "no"
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([DETECT_CLANG],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_MSG_CHECKING([for clang in use])
|
|
Packit |
4e8bc4 |
AC_COMPILE_IFELSE(
|
|
Packit |
4e8bc4 |
[AC_LANG_PROGRAM([], [[
|
|
Packit |
4e8bc4 |
#ifndef __clang__
|
|
Packit |
4e8bc4 |
not clang
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
]])],
|
|
Packit |
4e8bc4 |
[CLANG=yes], [CLANG=no])
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT([$CLANG])
|
|
Packit |
4e8bc4 |
AS_IF([test "$CLANG" = "yes"],[$1],[$2])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
DETECT_CLANG([],[])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_SUNCC ([ACTION-IF-YES], [ACTION-IF-NO])
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if this is the Sun Studio compiler, and if so run the ACTION-IF-YES
|
|
Packit |
4e8bc4 |
dnl sets the $SUNCC variable to "yes" or "no"
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([DETECT_SUNCC],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
|
|
Packit |
4e8bc4 |
AS_IF(test "x$SUNCC" = "xyes", [$1], [$2])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
DETECT_SUNCC([CFLAGS="-mt $CFLAGS"], [])
|
|
Packit |
4e8bc4 |
AS_IF([test "$ICC" = "yes" -o "$GCC" = "yes"],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AS_IF(test "$CLANG" = "no",[CFLAGS="$CFLAGS -pthread"])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "$ICC" = "no"; then
|
|
Packit |
4e8bc4 |
AC_PROG_CC_C99
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AM_PROG_CC_C_O
|
|
Packit |
4e8bc4 |
AC_PROG_INSTALL
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(arm_crc32,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-arm-crc32], [Enable ARMv8 CRC32 instructions])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(extstore,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-extstore], [Enable external storage EXPERIMENTAL ])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(seccomp,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-seccomp],[Enable seccomp restrictions EXPERIMENTAL])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(sasl,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-sasl],[Enable SASL authentication])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(sasl_pwdb,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-sasl-pwdb],[Enable plaintext password db])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AS_IF([test "x$enable_sasl_pwdb" = "xyes"],
|
|
Packit |
4e8bc4 |
[enable_sasl=yes ])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(tls,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-tls], [Enable Transport Layer Security EXPERIMENTAL ])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(asan,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-asan], [Compile with ASAN EXPERIMENTAL ])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_SASL_CB_GETCONF
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if we can use SASL_CB_GETCONF
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_DETECT_SASL_CB_GETCONF],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_CACHE_CHECK([for SASL_CB_GETCONF],
|
|
Packit |
4e8bc4 |
[ac_cv_c_sasl_cb_getconf],
|
|
Packit |
4e8bc4 |
[AC_TRY_COMPILE(
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
#include <sasl/sasl.h>
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
unsigned long val = SASL_CB_GETCONF;
|
|
Packit |
4e8bc4 |
],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_sasl_cb_getconf=yes ],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_sasl_cb_getconf=no ])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
AS_IF([test "$ac_cv_c_sasl_cb_getconf" = "yes"],
|
|
Packit |
4e8bc4 |
[AC_DEFINE([HAVE_SASL_CB_GETCONF], 1,
|
|
Packit |
4e8bc4 |
[Set to nonzero if your SASL implementation supports SASL_CB_GETCONF])])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_SASL_CB_GETCONFPATH
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if we can use SASL_CB_GETCONFPATH
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_DETECT_SASL_CB_GETCONFPATH],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_CACHE_CHECK([for SASL_CB_GETCONFPATH],
|
|
Packit |
4e8bc4 |
[ac_cv_c_sasl_cb_getconfpath],
|
|
Packit |
4e8bc4 |
[AC_TRY_COMPILE(
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
#include <sasl/sasl.h>
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
unsigned long val = SASL_CB_GETCONFPATH;
|
|
Packit |
4e8bc4 |
],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_sasl_cb_getconfpath=yes ],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_sasl_cb_getconfpath=no ])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
AS_IF([test "$ac_cv_c_sasl_cb_getconfpath" = "yes"],
|
|
Packit |
4e8bc4 |
[AC_DEFINE([HAVE_SASL_CB_GETCONFPATH], 1,
|
|
Packit |
4e8bc4 |
[Set to nonzero if your SASL implementation supports SASL_CB_GETCONFPATH])])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADERS([sasl/sasl.h])
|
|
Packit |
4e8bc4 |
if test "x$enable_sasl" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_C_DETECT_SASL_CB_GETCONF
|
|
Packit |
4e8bc4 |
AC_C_DETECT_SASL_CB_GETCONFPATH
|
|
Packit |
4e8bc4 |
AC_DEFINE([ENABLE_SASL],1,[Set to nonzero if you want to include SASL])
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS([sasl_server_init], [sasl2 sasl], [],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([Failed to locate the library containing sasl_server_init])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AS_IF([test "x$enable_sasl_pwdb" = "xyes"],
|
|
Packit |
4e8bc4 |
[AC_DEFINE([ENABLE_SASL_PWDB], 1,
|
|
Packit |
4e8bc4 |
[Set to nonzero if you want to enable a SASL pwdb])])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(dtrace,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-dtrace],[Enable dtrace probes])])
|
|
Packit |
4e8bc4 |
if test "x$enable_dtrace" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([DTRACE], [dtrace], "no", [/usr/sbin:$PATH])
|
|
Packit |
4e8bc4 |
if test "x$DTRACE" != "xno"; then
|
|
Packit |
4e8bc4 |
AC_DEFINE([ENABLE_DTRACE],1,[Set to nonzero if you want to include DTRACE])
|
|
Packit |
4e8bc4 |
build_dtrace=yes
|
|
Packit |
4e8bc4 |
$DTRACE -h -o conftest.h -s memcached_dtrace.d 2>/dev/zero
|
|
Packit |
4e8bc4 |
if test $? -eq 0
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
dtrace_instrument_obj=yes
|
|
Packit |
4e8bc4 |
rm conftest.h
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "`which tr`" = "/usr/ucb/tr"; then
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([Please remove /usr/ucb from your path. See man standards for more info])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([Need dtrace binary and OS support.])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "x$enable_extstore" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_DEFINE([EXTSTORE],1,[Set to nonzero if you want to enable extstore])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "x$enable_tls" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_DEFINE([TLS],1,[Set to nonzero if you want to enable TLS])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "x$enable_arm_crc32" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_DEFINE([ARM_CRC32],1,[Set to nonzero if you want to enable ARMv8 crc32])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "x$enable_asan" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_DEFINE([ASAN],1,[Set to nonzero if you want to compile using ASAN])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_DTRACE],[test "$build_dtrace" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([DTRACE_INSTRUMENT_OBJ],[test "$dtrace_instrument_obj" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([ENABLE_SASL],[test "$enable_sasl" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([ENABLE_EXTSTORE],[test "$enable_extstore" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([ENABLE_ARM_CRC32],[test "$enable_arm_crc32" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([ENABLE_TLS],[test "$enable_tls" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([ENABLE_ASAN],[test "$enable_asan" = "yes"])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_SUBST(DTRACE)
|
|
Packit |
4e8bc4 |
AC_SUBST(DTRACEFLAGS)
|
|
Packit |
4e8bc4 |
AC_SUBST(ENABLE_SASL)
|
|
Packit |
4e8bc4 |
AC_SUBST(PROFILER_LDFLAGS)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(coverage,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--disable-coverage],[Disable code coverage])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if test "x$enable_coverage" != "xno"; then
|
|
Packit |
4e8bc4 |
if test "$GCC" = "yes" -a "$ICC" != "yes" -a "$CLANG" != "yes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -pthread"
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([PROFILER], [gcov], "no", [$PATH])
|
|
Packit |
4e8bc4 |
if test "x$PROFILER" != "xno"; then
|
|
Packit |
4e8bc4 |
# Issue 97: The existence of gcov doesn't mean we have -lgcov
|
|
Packit |
4e8bc4 |
AC_CHECK_LIB(gcov, main,
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
PROFILER_FLAGS="-fprofile-arcs -ftest-coverage"
|
|
Packit |
4e8bc4 |
PROFILER_LDFLAGS="-lgcov"
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
PROFILER_FLAGS=
|
|
Packit |
4e8bc4 |
PROFILER_LDFLAGS=
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
elif test "$SUNCC" = "yes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([PROFILER], [tcov], "no", [$PATH])
|
|
Packit |
4e8bc4 |
if test "x$PROFILER" != "xno"; then
|
|
Packit |
4e8bc4 |
PROFILER_FLAGS=-xprofile=tcov
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
elif test "x$CLANG" != "xno"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([PROFILER], [gcov], "no", [$PATH])
|
|
Packit |
4e8bc4 |
if test "x$PROFILER" != "xno"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
PROFILER_FLAGS="-fprofile-arcs -ftest-coverage"
|
|
Packit |
4e8bc4 |
PROFILER_LDFLAGS=
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
AC_SUBST(PROFILER_FLAGS)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(64bit,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--enable-64bit],[build 64bit version])])
|
|
Packit |
4e8bc4 |
if test "x$enable_64bit" = "xyes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
org_cflags=$CFLAGS
|
|
Packit |
4e8bc4 |
CFLAGS=-m64
|
|
Packit |
4e8bc4 |
AC_RUN_IFELSE(
|
|
Packit |
4e8bc4 |
[AC_LANG_PROGRAM([], [dnl
|
|
Packit |
4e8bc4 |
return sizeof(void*) == 8 ? 0 : 1;
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
CFLAGS="-m64 $org_cflags"
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([Don't know how to build a 64-bit object.])
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
dnl cross compile
|
|
Packit |
4e8bc4 |
AC_MSG_WARN([Assuming no extra CFLAGS are required for cross-compiling 64bit version.])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check if data pointer is 64bit or not
|
|
Packit |
4e8bc4 |
AC_CHECK_SIZEOF([void *])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Issue 213: Search for clock_gettime to help people linking
|
|
Packit |
4e8bc4 |
# with a static version of libevent
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(clock_gettime, rt)
|
|
Packit |
4e8bc4 |
# Issue 214: Search for the network libraries _before_ searching
|
|
Packit |
4e8bc4 |
# for libevent (to help people linking with static libevent)
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(socket, socket)
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
trylibeventdir=""
|
|
Packit |
4e8bc4 |
AC_ARG_WITH(libevent,
|
|
Packit |
4e8bc4 |
[ --with-libevent=PATH Specify path to libevent installation ],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
if test "x$withval" != "xno" ; then
|
|
Packit |
4e8bc4 |
trylibeventdir=$withval
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
]
|
|
Packit |
4e8bc4 |
)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl ------------------------------------------------------
|
|
Packit |
4e8bc4 |
dnl libevent detection. swiped from Tor. modified a bit.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
LIBEVENT_URL=https://www.monkey.org/~provos/libevent/
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CACHE_CHECK([for libevent directory], ac_cv_libevent_dir, [
|
|
Packit |
4e8bc4 |
saved_LIBS="$LIBS"
|
|
Packit |
4e8bc4 |
saved_LDFLAGS="$LDFLAGS"
|
|
Packit |
4e8bc4 |
saved_CPPFLAGS="$CPPFLAGS"
|
|
Packit |
4e8bc4 |
le_found=no
|
|
Packit |
4e8bc4 |
for ledir in $trylibeventdir "" $prefix /usr/local ; do
|
|
Packit |
4e8bc4 |
LDFLAGS="$saved_LDFLAGS"
|
|
Packit |
4e8bc4 |
LIBS="-levent $saved_LIBS"
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Skip the directory if it isn't there.
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" -a ! -d "$ledir" ; then
|
|
Packit |
4e8bc4 |
continue;
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" ; then
|
|
Packit |
4e8bc4 |
if test -d "$ledir/lib" ; then
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ledir/lib $LDFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ledir $LDFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test -d "$ledir/include" ; then
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ledir/include $CPPFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ledir $CPPFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
# Can I compile and link it?
|
|
Packit |
4e8bc4 |
AC_TRY_LINK([#include <sys/time.h>
|
|
Packit |
4e8bc4 |
#include <sys/types.h>
|
|
Packit |
4e8bc4 |
#include <event.h>], [ event_init(); ],
|
|
Packit |
4e8bc4 |
[ libevent_linked=yes ], [ libevent_linked=no ])
|
|
Packit |
4e8bc4 |
if test $libevent_linked = yes; then
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" ; then
|
|
Packit |
4e8bc4 |
ac_cv_libevent_dir=$ledir
|
|
Packit |
4e8bc4 |
_myos=`echo $target_os | cut -f 1 -d .`
|
|
Packit |
4e8bc4 |
AS_IF(test "$SUNCC" = "yes" -o "x$_myos" = "xsolaris2",
|
|
Packit |
4e8bc4 |
[saved_LDFLAGS="$saved_LDFLAGS -Wl,-R$ledir/lib"],
|
|
Packit |
4e8bc4 |
[AS_IF(test "$GCC" = "yes",
|
|
Packit |
4e8bc4 |
[saved_LDFLAGS="$saved_LDFLAGS -Wl,-rpath,$ledir/lib"])])
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
ac_cv_libevent_dir="(system)"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
le_found=yes
|
|
Packit |
4e8bc4 |
break
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
done
|
|
Packit |
4e8bc4 |
LIBS="$saved_LIBS"
|
|
Packit |
4e8bc4 |
LDFLAGS="$saved_LDFLAGS"
|
|
Packit |
4e8bc4 |
CPPFLAGS="$saved_CPPFLAGS"
|
|
Packit |
4e8bc4 |
if test $le_found = no ; then
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([libevent is required. You can get it from $LIBEVENT_URL
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
If it's already installed, specify its path using --with-libevent=/dir/
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
LIBS="-levent $LIBS"
|
|
Packit |
4e8bc4 |
if test $ac_cv_libevent_dir != "(system)"; then
|
|
Packit |
4e8bc4 |
if test -d "$ac_cv_libevent_dir/lib" ; then
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ac_cv_libevent_dir/lib $LDFLAGS"
|
|
Packit |
4e8bc4 |
le_libdir="$ac_cv_libevent_dir/lib"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ac_cv_libevent_dir $LDFLAGS"
|
|
Packit |
4e8bc4 |
le_libdir="$ac_cv_libevent_dir"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test -d "$ac_cv_libevent_dir/include" ; then
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ac_cv_libevent_dir/include $CPPFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ac_cv_libevent_dir $CPPFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
trylibssldir=""
|
|
Packit |
4e8bc4 |
AC_ARG_WITH(libssl,
|
|
Packit |
4e8bc4 |
[ --with-libssl=PATH Specify path to libssl installation ],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
if test "x$withval" != "xno" ; then
|
|
Packit |
4e8bc4 |
trylibssldir=$withval
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
]
|
|
Packit |
4e8bc4 |
)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl ----------------------------------------------------------------------------
|
|
Packit |
4e8bc4 |
dnl libssl detection. swiped from libevent. modified for openssl detection.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
OPENSSL_URL=https://www.openssl.org/
|
|
Packit |
4e8bc4 |
if test "x$enable_tls" = "xyes"; then
|
|
Packit |
4e8bc4 |
AC_CACHE_CHECK([for libssl directory], ac_cv_libssl_dir, [
|
|
Packit |
4e8bc4 |
saved_LIBS="$LIBS"
|
|
Packit |
4e8bc4 |
saved_LDFLAGS="$LDFLAGS"
|
|
Packit |
4e8bc4 |
saved_CPPFLAGS="$CPPFLAGS"
|
|
Packit |
4e8bc4 |
le_found=no
|
|
Packit |
4e8bc4 |
for ledir in $trylibssldir "" $prefix /usr/local ; do
|
|
Packit |
4e8bc4 |
LDFLAGS="$saved_LDFLAGS"
|
|
Packit |
4e8bc4 |
LIBS="-lssl -lcrypto $saved_LIBS"
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Skip the directory if it isn't there.
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" -a ! -d "$ledir" ; then
|
|
Packit |
4e8bc4 |
continue;
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" ; then
|
|
Packit |
4e8bc4 |
if test -d "$ledir/lib" ; then
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ledir/lib $LDFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ledir $LDFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test -d "$ledir/include" ; then
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ledir/include $CPPFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ledir $CPPFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
# Can I compile and link it?
|
|
Packit |
4e8bc4 |
AC_TRY_LINK([#include <sys/time.h>
|
|
Packit |
4e8bc4 |
#include <sys/types.h>
|
|
Packit |
4e8bc4 |
#include <assert.h>
|
|
Packit |
4e8bc4 |
#include <openssl/ssl.h>], [ SSL_CTX* ssl_ctx = SSL_CTX_new(TLS_server_method());
|
|
Packit |
4e8bc4 |
assert(OPENSSL_VERSION_NUMBER >= 0x10100000L);],
|
|
Packit |
4e8bc4 |
[ libssl_linked=yes ], [ libssl_linked=no ])
|
|
Packit |
4e8bc4 |
if test $libssl_linked = yes; then
|
|
Packit |
4e8bc4 |
if test ! -z "$ledir" ; then
|
|
Packit |
4e8bc4 |
ac_cv_libssl_dir=$ledir
|
|
Packit |
4e8bc4 |
_myos=`echo $target_os | cut -f 1 -d .`
|
|
Packit |
4e8bc4 |
AS_IF(test "$SUNCC" = "yes" -o "x$_myos" = "xsolaris2",
|
|
Packit |
4e8bc4 |
[saved_LDFLAGS="$saved_LDFLAGS -Wl,-R$ledir/lib"],
|
|
Packit |
4e8bc4 |
[AS_IF(test "$GCC" = "yes",
|
|
Packit |
4e8bc4 |
[saved_LDFLAGS="$saved_LDFLAGS -Wl,-rpath,$ledir/lib"])])
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
ac_cv_libssl_dir="(system)"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
le_found=yes
|
|
Packit |
4e8bc4 |
break
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
done
|
|
Packit |
4e8bc4 |
LIBS="$saved_LIBS"
|
|
Packit |
4e8bc4 |
LDFLAGS="$saved_LDFLAGS"
|
|
Packit |
4e8bc4 |
CPPFLAGS="$saved_CPPFLAGS"
|
|
Packit |
4e8bc4 |
if test $le_found = no ; then
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([libssl (at least version 1.1.0) is required. You can get it from $OPENSSL_URL
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
If it's already installed, specify its path using --with-libssl=/dir/
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
LIBS="-lssl -lcrypto $LIBS"
|
|
Packit |
4e8bc4 |
if test $ac_cv_libssl_dir != "(system)"; then
|
|
Packit |
4e8bc4 |
if test -d "$ac_cv_libssl_dir/lib" ; then
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ac_cv_libssl_dir/lib $LDFLAGS"
|
|
Packit |
4e8bc4 |
le_libdir="$ac_cv_libssl_dir/lib"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
LDFLAGS="-L$ac_cv_libssl_dir $LDFLAGS"
|
|
Packit |
4e8bc4 |
le_libdir="$ac_cv_libssl_dir"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
if test -d "$ac_cv_libssl_dir/include" ; then
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ac_cv_libssl_dir/include $CPPFLAGS"
|
|
Packit |
4e8bc4 |
else
|
|
Packit |
4e8bc4 |
CPPFLAGS="-I$ac_cv_libssl_dir $CPPFLAGS"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl ----------------------------------------------------------------------------
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(umem_cache_create, umem)
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(gethugepagesizes, hugetlbfs)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_HEADER_STDBOOL
|
|
Packit |
4e8bc4 |
AH_BOTTOM([#if HAVE_STDBOOL_H
|
|
Packit |
4e8bc4 |
#include <stdbool.h>
|
|
Packit |
4e8bc4 |
#else
|
|
Packit |
4e8bc4 |
#define bool char
|
|
Packit |
4e8bc4 |
#define false 0
|
|
Packit |
4e8bc4 |
#define true 1
|
|
Packit |
4e8bc4 |
#endif ])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADERS([inttypes.h])
|
|
Packit |
4e8bc4 |
AH_BOTTOM([#ifdef HAVE_INTTYPES_H
|
|
Packit |
4e8bc4 |
#include <inttypes.h>
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl Figure out if this system has the stupid sasl_callback_ft
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_HAVE_SASL_CALLBACK_FT],
|
|
Packit |
4e8bc4 |
[AC_CACHE_CHECK(for sasl_callback_ft, ac_cv_has_sasl_callback_ft,
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_TRY_COMPILE([
|
|
Packit |
4e8bc4 |
#ifdef HAVE_SASL_SASL_H
|
|
Packit |
4e8bc4 |
#include <sasl/sasl.h>
|
|
Packit |
4e8bc4 |
#include <sasl/saslplug.h>
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
sasl_callback_ft a_callback;
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_has_sasl_callback_ft=yes
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_has_sasl_callback_ft=no
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
if test $ac_cv_has_sasl_callback_ft = yes; then
|
|
Packit |
4e8bc4 |
AC_DEFINE(HAVE_SASL_CALLBACK_FT, 1, [we have sasl_callback_ft])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_HAVE_SASL_CALLBACK_FT
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
dnl DETECT_UINT64_SUPPORT
|
|
Packit |
4e8bc4 |
dnl
|
|
Packit |
4e8bc4 |
dnl check if we can use a uint64_t
|
|
Packit |
4e8bc4 |
dnl **********************************************************************
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_DETECT_UINT64_SUPPORT],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_CACHE_CHECK([for print macros for integers (C99 section 7.8.1)],
|
|
Packit |
4e8bc4 |
[ac_cv_c_uint64_support],
|
|
Packit |
4e8bc4 |
[AC_TRY_COMPILE(
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
#ifdef HAVE_INTTYPES_H
|
|
Packit |
4e8bc4 |
#include <inttypes.h>
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
#include <stdio.h>
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
uint64_t val = 0;
|
|
Packit |
4e8bc4 |
fprintf(stderr, "%" PRIu64 "\n", val);
|
|
Packit |
4e8bc4 |
],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_uint64_support=yes ],
|
|
Packit |
4e8bc4 |
[ ac_cv_c_uint64_support=no ])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_C_DETECT_UINT64_SUPPORT
|
|
Packit |
4e8bc4 |
AS_IF([test "x$ac_cv_c_uint64_support" = "xno"],
|
|
Packit |
4e8bc4 |
[AC_MSG_WARN([
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Failed to use print macros (PRIu) as defined in C99 section 7.8.1.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_C_CONST
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl From licq: Copyright (c) 2000 Dirk Mueller
|
|
Packit |
4e8bc4 |
dnl Check if the type socklen_t is defined anywhere
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_SOCKLEN_T],
|
|
Packit |
4e8bc4 |
[AC_CACHE_CHECK(for socklen_t, ac_cv_c_socklen_t,
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_TRY_COMPILE([
|
|
Packit |
4e8bc4 |
#include <sys/types.h>
|
|
Packit |
4e8bc4 |
#include <sys/socket.h>
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
socklen_t foo;
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_c_socklen_t=yes
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_c_socklen_t=no
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
if test $ac_cv_c_socklen_t = no; then
|
|
Packit |
4e8bc4 |
AC_DEFINE(socklen_t, int, [define to int if socklen_t not available])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_C_SOCKLEN_T
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check if we're a little-endian or a big-endian system, needed by hash code
|
|
Packit |
4e8bc4 |
AC_C_BIGENDIAN(
|
|
Packit |
4e8bc4 |
[AC_DEFINE(ENDIAN_BIG, 1, [machine is bigendian])],
|
|
Packit |
4e8bc4 |
[AC_DEFINE(ENDIAN_LITTLE, 1, [machine is littleendian])],
|
|
Packit |
4e8bc4 |
[AC_MSG_ERROR([Cannot detect endianness. Must pass ac_cv_c_bigendian={yes,no} to configure.])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_HTONLL],
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_MSG_CHECKING([for htonll])
|
|
Packit |
4e8bc4 |
have_htoll="no"
|
|
Packit |
4e8bc4 |
AC_TRY_LINK([
|
|
Packit |
4e8bc4 |
#include <sys/types.h>
|
|
Packit |
4e8bc4 |
#include <netinet/in.h>
|
|
Packit |
4e8bc4 |
#ifdef HAVE_INTTYPES_H
|
|
Packit |
4e8bc4 |
#include <inttypes.h> */
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
return htonll(0);
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
have_htoll="yes"
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_HTONLL], [1], [Have ntohll])
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
have_htoll="no"
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT([$have_htoll])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_C_HTONLL
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check whether the user's system supports pthread
|
|
Packit |
4e8bc4 |
AC_SEARCH_LIBS(pthread_create, pthread)
|
|
Packit |
4e8bc4 |
if test "x$ac_cv_search_pthread_create" = "xno"; then
|
|
Packit |
4e8bc4 |
AC_MSG_ERROR([Can't enable threads without the POSIX thread library.])
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(mlockall)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(getpagesizes)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(sysconf)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(memcntl)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(sigignore)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(clock_gettime)
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS([accept4], [AC_DEFINE(HAVE_ACCEPT4, 1, [Define to 1 if support accept4])])
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS([getopt_long], [AC_DEFINE(HAVE_GETOPT_LONG, 1, [Define to 1 if support getopt_long])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Need to disable opt for alignment check. GCC is too clever and turns this
|
|
Packit |
4e8bc4 |
dnl into wide stores and no cmp under O2.
|
|
Packit |
4e8bc4 |
AC_DEFUN([AC_C_ALIGNMENT],
|
|
Packit |
4e8bc4 |
[AC_CACHE_CHECK(for alignment, ac_cv_c_alignment,
|
|
Packit |
4e8bc4 |
[
|
|
Packit |
4e8bc4 |
AC_RUN_IFELSE(
|
|
Packit |
4e8bc4 |
[AC_LANG_PROGRAM([
|
|
Packit |
4e8bc4 |
#include <stdlib.h>
|
|
Packit |
4e8bc4 |
#include <inttypes.h>
|
|
Packit |
4e8bc4 |
#pragma GCC optimize ("O0")
|
|
Packit |
4e8bc4 |
], [
|
|
Packit |
4e8bc4 |
char *buf = malloc(32);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
uint64_t *ptr = (uint64_t*)(buf+2);
|
|
Packit |
4e8bc4 |
// catch sigbus, etc.
|
|
Packit |
4e8bc4 |
*ptr = 0x1;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
// catch unaligned word access (ARM cpus)
|
|
Packit |
4e8bc4 |
#ifdef ENDIAN_BIG
|
|
Packit |
4e8bc4 |
#define ALIGNMENT 0x02030405
|
|
Packit |
4e8bc4 |
#else
|
|
Packit |
4e8bc4 |
#define ALIGNMENT 0x05040302
|
|
Packit |
4e8bc4 |
#endif
|
|
Packit |
4e8bc4 |
*(buf + 0) = 1;
|
|
Packit |
4e8bc4 |
*(buf + 1) = 2;
|
|
Packit |
4e8bc4 |
*(buf + 2) = 3;
|
|
Packit |
4e8bc4 |
*(buf + 3) = 4;
|
|
Packit |
4e8bc4 |
*(buf + 4) = 5;
|
|
Packit |
4e8bc4 |
int* i = (int*)(buf+1);
|
|
Packit |
4e8bc4 |
return (ALIGNMENT == *i) ? 0 : 1;
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_c_alignment=none
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
ac_cv_c_alignment=need
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
dnl cross compile
|
|
Packit |
4e8bc4 |
ac_cv_c_alignment=maybe
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
AS_IF([test $ac_cv_c_alignment = need],
|
|
Packit |
4e8bc4 |
[AC_DEFINE(NEED_ALIGN, 1, [Machine need alignment])])
|
|
Packit |
4e8bc4 |
AS_IF([test $ac_cv_c_alignment = maybe],
|
|
Packit |
4e8bc4 |
[AC_MSG_WARN([Assuming aligned access is required when cross-compiling])
|
|
Packit |
4e8bc4 |
AC_DEFINE(NEED_ALIGN, 1, [Machine need alignment])])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_C_ALIGNMENT
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check for our specific usage of GCC atomics.
|
|
Packit |
4e8bc4 |
dnl These were added in 4.1.2, but 32bit OS's may lack shorts and 4.1.2
|
|
Packit |
4e8bc4 |
dnl lacks testable defines.
|
|
Packit |
4e8bc4 |
have_gcc_atomics=no
|
|
Packit |
4e8bc4 |
AC_MSG_CHECKING(for GCC atomics)
|
|
Packit |
4e8bc4 |
AC_TRY_LINK([],[
|
|
Packit |
4e8bc4 |
unsigned short a;
|
|
Packit |
4e8bc4 |
unsigned short b;
|
|
Packit |
4e8bc4 |
b = __sync_add_and_fetch(&a, 1);
|
|
Packit |
4e8bc4 |
b = __sync_sub_and_fetch(&a, 2);
|
|
Packit |
4e8bc4 |
],[have_gcc_atomics=yes
|
|
Packit |
4e8bc4 |
AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])])
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT($have_gcc_atomics)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check for usage of 64bit atomics
|
|
Packit |
4e8bc4 |
dnl 32bit systems shouldn't have these.
|
|
Packit |
4e8bc4 |
have_gcc_64atomics=no
|
|
Packit |
4e8bc4 |
AC_MSG_CHECKING(for GCC 64bit atomics)
|
|
Packit |
4e8bc4 |
AC_TRY_LINK([#include <inttypes.h>
|
|
Packit |
4e8bc4 |
],[
|
|
Packit |
4e8bc4 |
uint64_t a;
|
|
Packit |
4e8bc4 |
uint64_t b;
|
|
Packit |
4e8bc4 |
b = __sync_add_and_fetch(&a, 1);
|
|
Packit |
4e8bc4 |
b = __sync_sub_and_fetch(&a, 2);
|
|
Packit |
4e8bc4 |
],[have_gcc_64atomics=yes
|
|
Packit |
4e8bc4 |
AC_DEFINE(HAVE_GCC_64ATOMICS, 1, [GCC 64bit Atomics available])])
|
|
Packit |
4e8bc4 |
AC_MSG_RESULT($have_gcc_64atomics)
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Check for the requirements for running memcached with less privileges
|
|
Packit |
4e8bc4 |
dnl than the default privilege set. On Solaris we need setppriv and priv.h
|
|
Packit |
4e8bc4 |
dnl If you want to add support for other platforms you should check for
|
|
Packit |
4e8bc4 |
dnl your requirements, define HAVE_DROP_PRIVILEGES, and make sure you add
|
|
Packit |
4e8bc4 |
dnl the source file containing the implementation into memcached_SOURCE
|
|
Packit |
4e8bc4 |
dnl in Makefile.am
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(setppriv, [
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADER(priv.h, [
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have an implementation of drop_privileges()])
|
|
Packit |
4e8bc4 |
build_solaris_privs=yes
|
|
Packit |
4e8bc4 |
], [])
|
|
Packit |
4e8bc4 |
],[])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AS_IF([test "x$enable_seccomp" = "xyes" ], [
|
|
Packit |
4e8bc4 |
AC_CHECK_LIB(seccomp, seccomp_rule_add, [
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have an implementation of drop_privileges()])
|
|
Packit |
4e8bc4 |
build_linux_privs=yes
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_DROP_WORKER_PRIVILEGES], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have an implementation of drop_worker_privileges()])
|
|
Packit |
4e8bc4 |
build_linux_privs=yes
|
|
Packit |
4e8bc4 |
], [])
|
|
Packit |
4e8bc4 |
])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(pledge, [
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADER(unistd.h, [
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have an implementation of drop_privileges()])
|
|
Packit |
4e8bc4 |
build_openbsd_privs=yes
|
|
Packit |
4e8bc4 |
], [])
|
|
Packit |
4e8bc4 |
],[])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_FUNCS(cap_enter, [
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADER(sys/capsicum.h, [
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have an implementation of drop_privileges()])
|
|
Packit |
4e8bc4 |
build_freebsd_privs=yes
|
|
Packit |
4e8bc4 |
], [])
|
|
Packit |
4e8bc4 |
],[])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_SOLARIS_PRIVS],[test "$build_solaris_privs" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_LINUX_PRIVS],[test "$build_linux_privs" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_OPENBSD_PRIVS],[test "$build_openbsd_privs" = "yes"])
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_FREEBSD_PRIVS],[test "$build_freebsd_privs" = "yes"])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CHECK_HEADER(umem.h, [
|
|
Packit |
4e8bc4 |
AC_DEFINE([HAVE_UMEM_H], 1,
|
|
Packit |
4e8bc4 |
[Define this if you have umem.h])
|
|
Packit |
4e8bc4 |
build_cache=no
|
|
Packit |
4e8bc4 |
], [build_cache=yes])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_CACHE], [test "x$build_cache" = "xyes"])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_ARG_ENABLE(docs,
|
|
Packit |
4e8bc4 |
[AS_HELP_STRING([--disable-docs],[Disable documentation generation])])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([XML2RFC], [xml2rfc], "no")
|
|
Packit |
4e8bc4 |
AC_PATH_PROG([XSLTPROC], [xsltproc], "no")
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AM_CONDITIONAL([BUILD_SPECIFICATIONS],
|
|
Packit |
4e8bc4 |
[test "x$enable_docs" != "xno" -a "x$XML2RFC" != "xno" -a "x$XSLTPROC" != "xno"])
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
dnl Let the compiler be a bit more picky. Please note that you cannot
|
|
Packit |
4e8bc4 |
dnl specify these flags to the compiler before AC_CHECK_FUNCS, because
|
|
Packit |
4e8bc4 |
dnl the test program will generate a compilation warning and hence fail
|
|
Packit |
4e8bc4 |
dnl to detect the function ;-)
|
|
Packit |
4e8bc4 |
if test "$ICC" = "yes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
dnl ICC trying to be gcc.
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -diag-disable 187 -Wall -Werror"
|
|
Packit |
4e8bc4 |
AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
|
|
Packit |
4e8bc4 |
elif test "$GCC" = "yes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
GCC_VERSION=`$CC -dumpversion`
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls"
|
|
Packit |
4e8bc4 |
if test "x$enable_asan" = "xyes"; then
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -fsanitize=address"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
case $GCC_VERSION in
|
|
Packit |
4e8bc4 |
4.4.*)
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
Packit |
4e8bc4 |
;;
|
|
Packit |
4e8bc4 |
esac
|
|
Packit |
4e8bc4 |
AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
|
|
Packit |
4e8bc4 |
elif test "$SUNCC" = "yes"
|
|
Packit |
4e8bc4 |
then
|
|
Packit |
4e8bc4 |
CFLAGS="$CFLAGS -errfmt=error -errwarn -errshort=tags"
|
|
Packit |
4e8bc4 |
fi
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
AC_CONFIG_FILES(Makefile doc/Makefile)
|
|
Packit |
4e8bc4 |
AC_OUTPUT
|