AC_INIT(evolplugin, 1.0, akaras@inbox.ru)
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_SRCDIR(src)
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
#AC_PROG_CXX
AC_PROG_CC
AM_PROG_CC_C_O
LT_INIT
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_DISABLE_STATIC
AC_ARG_ENABLE(
[sanitize],
AC_HELP_STRING(
[--enable-sanitize],
[
Enables or Disables Sanitize Address Checking (SANITIZE is disabled by default)
]
),
[
enable_sanitize="$enableval"
case $enableval in
"no");;
"yes")
if test -n "$CC"; then
case `($CC --version) 2>/dev/null` in
*gcc*4.4*| \
*gcc*4.5*| \
*gcc*4.6*| \
*gcc*4.7*| \
*gcc*4.8*)
enable_sanitize="no"
;;
*);;
esac
fi
;;
*) AC_MSG_ERROR([[invalid argument --enable-sanitize=$disableval... stopping]]);;
esac
],
[enable_sanitize="no"]
)
AM_CONDITIONAL(ENABLE_SANITIZE, test x$enable_sanitize = xyes)
AC_ARG_ENABLE(
[static-build],
AC_HELP_STRING(
[--enable-static-build],
[
Enables or Disables Statick Linking (STATIC is disabled by default)
]
),
[
enable_static_build="$enableval"
case $enableval in
"no");;
"yes");;
*) AC_MSG_ERROR([[invalid argument --enable-static-build=$disableval... stopping]]);;
esac
],
[enable_static_build="no"]
)
AM_CONDITIONAL(ENABLE_STATIC_BUILD, test x$enable_static_build = xyes)
AC_ARG_ENABLE(
[gprof],
AC_HELP_STRING(
[--enable-gprof],
[
Enables or Disables Gprof (disabled by default)
]
),
[
enable_gprof="$enableval"
case $enableval in
"no");;
"yes");;
*) AC_MSG_ERROR([[invalid argument --enable-gprof=$disableval... stopping]]);;
esac
],
[enable_gprof="no"]
)
AM_CONDITIONAL(ENABLE_GPROF, test x$enable_gprof = xyes)
AC_ARG_ENABLE(
[werror],
AC_HELP_STRING(
[--enable-werror],
[
Fail build if warning present]
]
),
[
enable_werror="$enableval"
case $enableval in
"no");;
"yes");;
*) AC_MSG_ERROR([[invalid argument --enable-werror=$disableval... stopping]]);;
esac
],
[enable_werror="no"]
)
AM_CONDITIONAL(ENABLE_WERROR, test x$enable_werror = xyes)
AC_ARG_ENABLE(
[lto],
AC_HELP_STRING(
[--enable-lto],
[
Enables or Disables Linktime Code Optimization (LTO is disabled by default)
]
),
[
enable_lto="$enableval"
case $enableval in
"no");;
"yes");;
*) AC_MSG_ERROR([[invalid argument --enable-lto=$enableval... stopping]]);;
esac
],
[enable_lto="no"]
)
OLD_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -rdynamic"
AC_MSG_CHECKING([whether $CC accepts -rdynamic])
AC_LINK_IFELSE(
[AC_LANG_SOURCE([
int main(int argc, char **argv)
{
return 0;
}
])],
[
AC_MSG_RESULT([yes])
],
[
AC_MSG_RESULT([no])
LDFLAGS="$OLD_LDFLAGS"
],
[
AC_MSG_RESULT([guessing no])
]
)
AC_DEFUN([AC_CHECK_COMPILER_WFLAG],
[
AC_MSG_CHECKING([whether $CC supports -W$1])
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -W$1"
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([int foo;])],
[
AC_MSG_RESULT([yes])
CFLAGS="$OLD_CFLAGS -W$1"
# Optionally, run a test
if test "x$2" != "x"; then
AC_MSG_CHECKING([whether $CC can actually use -W$1])
CFLAGS="$OLD_CFLAGS -Werror -W$1"
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([$2])],
[
AC_MSG_RESULT([no])
CFLAGS="$OLD_CFLAGS"
]
[
AC_MSG_RESULT([yes])
CFLAGS="$OLD_CFLAGS -W$1"
],
)
fi
],
[
AC_MSG_RESULT([no])
CFLAGS="$OLD_CFLAGS"
]
)
]
)
if test "$enable_lto" != "no" ; then
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -flto -ffat-lto-objects"
OLD_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -flto -ffat-lto-objects"
AC_MSG_CHECKING([whether $CC supports -flto])
AC_RUN_IFELSE(
[AC_LANG_SOURCE([
int main(int argc, char **argv){
return 0;
}
])],
[
if test -n "$CC"; then
case `($CC --version) 2>/dev/null` in
*gcc*4.9-*| \
*gcc*4.9.0*| \
*gcc*4.9.1*| \
*gcc*4.9.2*)
AC_MSG_RESULT([no])
CFLAGS="$OLD_CFLAGS"
LDFLAGS="$OLD_LDFLAGS"
;;
*)
AC_MSG_RESULT([yes])
esac
fi
],
[
AC_MSG_RESULT([no])
CFLAGS="$OLD_CFLAGS"
LDFLAGS="$OLD_LDFLAGS"
],
[
AC_MSG_RESULT([guessing no])
]
)
fi
AC_DEFUN([AC_CHECK_SANITIZER_FLAG],
[
AC_MSG_CHECKING([whether $CC supports -fsanitize=$1])
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fsanitize=$1"
OLD_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -fsanitize=$1"
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([int foo;])],
[
AC_MSG_RESULT([yes])
],
[
AC_MSG_RESULT([no])
AC_MSG_CHECKING([whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=$1])
CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([int foo;])],
[
AC_MSG_RESULT([yes])
],
[
AC_MSG_RESULT([no])
CFLAGS="$OLD_CFLAGS"
LDFLAGS="$OLD_LDFLAGS"
]
)
],
[
AC_MSG_RESULT([guessing no])
CFLAGS="$OLD_CFLAGS"
LDFLAGS="$OLD_LDFLAGS"
]
)
]
)
if test "$enable_sanitize" != "no" ; then
AC_CHECK_SANITIZER_FLAG(address)
# skipped because server have multiple issues: -fsanitize=alignment
AC_CHECK_SANITIZER_FLAG(shift)
AC_CHECK_SANITIZER_FLAG(integer-divide-by-zero)
AC_CHECK_SANITIZER_FLAG(unreachable)
AC_CHECK_SANITIZER_FLAG(vla-bound)
AC_CHECK_SANITIZER_FLAG(null)
AC_CHECK_SANITIZER_FLAG(return)
AC_CHECK_SANITIZER_FLAG(signed-integer-overflow)
AC_CHECK_SANITIZER_FLAG(bounds)
AC_CHECK_SANITIZER_FLAG(bounds-strict)
AC_CHECK_SANITIZER_FLAG(object-size)
AC_CHECK_SANITIZER_FLAG(float-divide-by-zero)
AC_CHECK_SANITIZER_FLAG(float-cast-overflow)
AC_CHECK_SANITIZER_FLAG(nonnull-attribute)
AC_CHECK_SANITIZER_FLAG(returns-nonnull-attribute)
AC_CHECK_SANITIZER_FLAG(bool)
AC_CHECK_SANITIZER_FLAG(enum)
AC_CHECK_SANITIZER_FLAG(vptr)
fi
AC_CHECK_COMPILER_WFLAG(empty-body)
AC_CHECK_COMPILER_WFLAG(newline-eof)
AC_CHECK_COMPILER_WFLAG(int-conversion)
AC_CHECK_COMPILER_WFLAG(init-self)
AC_CHECK_COMPILER_WFLAG(pointer-arith)
AC_CHECK_COMPILER_WFLAG(switch-bool)
AC_CHECK_COMPILER_WFLAG(enum-conversion)
AC_CHECK_COMPILER_WFLAG(shorten-64-to-32)
AC_CHECK_COMPILER_WFLAG(constant-conversion)
AC_CHECK_COMPILER_WFLAG(bool-conversion)
AC_CHECK_COMPILER_WFLAG(format-security)
AC_CHECK_COMPILER_WFLAG(format)
AC_CHECK_COMPILER_WFLAG(format-signedness)
AC_CHECK_COMPILER_WFLAG(format-y2k)
AC_CHECK_COMPILER_WFLAG(missing-include-dirs)
AC_CHECK_COMPILER_WFLAG(suggest-attribute=noreturn)
AC_CHECK_COMPILER_WFLAG(undef)
# disabled for now
#AC_CHECK_COMPILER_WFLAG(cast-qual)
AC_CHECK_COMPILER_WFLAG(logical-op)
AC_CHECK_COMPILER_WFLAG(nested-externs)
AC_CHECK_COMPILER_WFLAG(old-style-definition)
AC_CHECK_COMPILER_WFLAG(overlength-strings)
AC_CHECK_COMPILER_WFLAG(redundant-decls)
#AC_CHECK_COMPILER_WFLAG(unused)
AC_CHECK_COMPILER_WFLAG(unused-but-set-parameter)
AC_CHECK_COMPILER_WFLAG(unused-but-set-variable)
AC_CHECK_COMPILER_WFLAG(unreachable-code)
AC_CHECK_COMPILER_WFLAG(unused-const-variable=2)
AC_CHECK_COMPILER_WFLAG(unused-function)
AC_CHECK_COMPILER_WFLAG(unused-local-typedefs)
AC_CHECK_COMPILER_WFLAG(unused-macros)
AC_CHECK_COMPILER_WFLAG(unused-parameter)
AC_CHECK_COMPILER_WFLAG(unused-result)
AC_CHECK_COMPILER_WFLAG(unused-value)
AC_CHECK_COMPILER_WFLAG(unused-variable)
#AC_CHECK_COMPILER_WNOFLAG(format-nonliteral)
#AC_CHECK_COMPILER_WNOFLAG(switch)
#AC_CHECK_COMPILER_WNOFLAG(missing-field-initializers)
AC_CHECK_FUNC([strnlen],[CFLAGS="$CFLAGS -DHAVE_STRNLEN"])
AC_CHECK_FUNC([setrlimit],[CLAGS="$CFLAGS -DHAVE_SETRLIMIT"])
AC_MSG_CHECKING([PCRE library])
AC_CHECK_HEADER([pcre.h], [], [AC_MSG_ERROR([PCRE header not found])])
AC_SEARCH_LIBS([pcre_study], [pcre], [], AC_MSG_ERROR([PCRE not found or incompatible]))
#
# OpenSSL library
#
AC_MSG_CHECKING([OpenSSL library])
dnl Order matters!
if test "$PORTNAME" != "win32"; then
AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
FOUND_SSL_LIB="no"
AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
else
AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
FOUND_SSL_LIB="no"
AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
fi
AC_OUTPUT(Makefile src/Makefile)