rsyslog/configure.ac
Rainer Gerhards c374cce103 Merge branch 'v7-stable' into v8-stable
Conflicts:
	ChangeLog
	configure.ac
2014-10-02 08:13:49 +02:00

1716 lines
59 KiB
Plaintext

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT([rsyslog],[8.4.2],[rsyslog@lists.adiscon.com])
AM_INIT_AUTOMAKE([subdir-objects])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_CONFIG_SRCDIR([ChangeLog])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AC_GNU_SOURCE
# check if valgrind is present
AC_CHECK_PROG(have_valgrind, [valgrind], [yes])
AM_CONDITIONAL(HAVE_VALGRIND, test x$have_valgrind = xyes)
# Checks for programs.
AC_PROG_LEX
AC_PROG_YACC
AC_PROG_CC
AM_PROG_CC_C_O
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AC_CANONICAL_HOST
PKG_PROG_PKG_CONFIG
# modules we require
PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.9)
PKG_CHECK_MODULES(LIBLOGGING_STDLOG, liblogging-stdlog >= 1.0.3)
PKG_CHECK_MODULES([JSON_C], [json],, [
PKG_CHECK_MODULES([JSON_C], [json-c],,)
])
# if int64 is supported, use it
AC_CHECK_LIB(json-c, json_object_new_object,,)
AC_CHECK_FUNCS(json_object_new_int64,,)
# look for newer API
AC_CHECK_FUNCS(json_tokener_error_desc,,)
case "${host}" in
*-*-linux*)
AC_DEFINE([OS_LINUX], [1], [Indicator for a Linux OS])
os_type="linux"
;;
*-*-*darwin*|*-*-dragonfly*|*-*-freebsd*|*-*-netbsd*|*-*-openbsd*)
AC_DEFINE([OS_BSD], [1], [Indicator for a BSD OS])
os_type="bsd"
;;
*-*-kfreebsd*)
# kernel is FreeBSD, but userspace is glibc - i.e. like linux
# do not DEFINE OS_BSD
os_type="bsd"
;;
*-*-solaris*)
os_type="solaris"
AC_DEFINE([OS_SOLARIS], [1], [Indicator for a Solaris OS])
AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [1], [Use POSIX pthread semantics])
SOL_LIBS="-lsocket -lnsl"
# Solaris libuuid does not ship with a pkgconfig file so override the appropriate
# variables (but only if they have not been set by the user).
LIBUUID_CFLAGS=${LIBUUID_CFLAGS:= }
LIBUUID_LIBS=${LIBUUID_LIBS:=-luuid}
AC_SUBST(SOL_LIBS)
;;
esac
AC_DEFINE_UNQUOTED([HOSTENV], "$host", [the host environment, can be queried via a system variable])
# Checks for libraries.
save_LIBS=$LIBS
LIBS=
AC_SEARCH_LIBS(clock_gettime, rt)
RT_LIBS=$LIBS
AC_SEARCH_LIBS(mq_getattr, rt)
RT_LIBS="$RT_LIBS $LIBS"
LIBS=
AC_SEARCH_LIBS(dlopen, dl)
DL_LIBS=$LIBS
LIBS=$save_LIBS
AC_SUBST(RT_LIBS)
AC_SUBST(DL_LIBS)
# Checks for header files.
AC_HEADER_RESOLV
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([arpa/inet.h libgen.h malloc.h fcntl.h locale.h netdb.h netinet/in.h paths.h stddef.h stdlib.h string.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h sys/stat.h sys/inotify.h unistd.h utmp.h utmpx.h sys/epoll.h sys/prctl.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_MODE_T
AC_TYPE_UID_T
AC_TYPE_UINT8_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_C_VOLATILE
sa_includes="\
$ac_includes_default
#if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
"
AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,[$sa_includes])
# Checks for library functions.
AC_FUNC_CHOWN
AC_FUNC_FORK
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_FUNC_SELECT_ARGTYPES
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_STRERROR_R
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([flock inotify_init recvmmsg basename alarm clock_gettime gethostbyname gethostname gettimeofday localtime_r memset mkdir regcomp select setsid socket strcasecmp strchr strdup strerror strndup strnlen strrchr strstr strtol strtoul uname ttyname_r getline malloc_trim prctl epoll_create epoll_create1 fdatasync syscall lseek64])
AC_CHECK_TYPES([off64_t])
# getifaddrs is in libc (mostly) or in libsocket (eg Solaris 11) or not defined (eg Solaris 10)
AC_SEARCH_LIBS([getifaddrs], [socket], [AC_DEFINE(HAVE_GETIFADDRS, [1], [set define])])
# the check below is probably ugly. If someone knows how to do it in a better way, please
# let me know! -- rgerhards, 2010-10-06
AC_CHECK_DECL([SCM_CREDENTIALS], [AC_DEFINE(HAVE_SCM_CREDENTIALS, [1], [set define])], [], [#include <sys/types.h>
#include <sys/socket.h>])
AC_CHECK_DECL([SO_TIMESTAMP], [AC_DEFINE(HAVE_SO_TIMESTAMP, [1], [set define])], [], [#include <sys/types.h>
#include <sys/socket.h>])
AC_CHECK_DECL([SYS_gettid], [AC_DEFINE(HAVE_SYS_gettid, [1], [set define])], [], [#include <sys/syscall.h>])
AC_CHECK_MEMBER([struct sysinfo.uptime], [AC_DEFINE(HAVE_SYSINFO_UPTIME, [1], [set define])], [], [#include <sys/sysinfo.h>])
AC_CHECK_DECL([GLOB_NOMAGIC], [AC_DEFINE(HAVE_GLOB_NOMAGIC, [1], [set define])], [], [#include <glob.h>])
# Check for MAXHOSTNAMELEN
AC_MSG_CHECKING(for MAXHOSTNAMELEN)
AC_TRY_COMPILE([
#include <sys/param.h>
], [
return MAXHOSTNAMELEN;
]
,
AC_MSG_RESULT(yes)
,
# note: we use 1024 here, which should be far more than needed by any system. If that's too low, we simply
# life with the need to change it. Most of the code doesn't need it anyways, but there are a few places
# where it actually is needed and it makes no sense to change them.
AC_DEFINE(MAXHOSTNAMELEN, 1024, [Define with a value if your <sys/param.h> does not define MAXHOSTNAMELEN])
AC_MSG_RESULT(no; defined as 64)
)
# Check for __builtin_expect()
AC_MSG_CHECKING([for __builtin_expect()])
AC_LINK_IFELSE([AC_LANG_PROGRAM(, return __builtin_expect(main != 0, 1))],
[AC_DEFINE(HAVE_BUILTIN_EXPECT, 1,
Define to 1 if compiler supports __builtin_expect)
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
# check for availability of atomic operations
RS_ATOMIC_OPERATIONS
RS_ATOMIC_OPERATIONS_64BIT
# fall back to POSIX sems for atomic operations (cpu expensive)
AC_CHECK_HEADERS([semaphore.h sys/syscall.h])
# Additional module directories
AC_ARG_WITH(moddirs,
[AS_HELP_STRING([--with-moddirs=DIRS],[Additional module search paths appended to @<:@$libdir/rsyslog@:>@])],
[_save_IFS=$IFS ; IFS=$PATH_SEPARATOR ; moddirs=""
for w in ${with_moddirs} ;
do
case $w in
"") continue ;; */) ;; *) w="${w}/" ;;
esac
for m in ${moddirs} ;
do
test "x$w" = "x${libdir}/${PACKAGE}/" || \
test "x$w" = "x$m" || test "x$w" = "x/" && \
continue 2
done
case $moddirs in
"") moddirs="$w" ;; *) moddirs="${moddirs}:${w}" ;;
esac
done ; IFS=$_save_IFS],[moddirs=""]
)
AM_CONDITIONAL(WITH_MODDIRS, test x$moddirs != x)
AC_SUBST(moddirs)
# Large file support
# http://www.gnu.org/software/autoconf/manual/html_node/System-Services.html#index-AC_005fSYS_005fLARGEFILE-1028
AC_SYS_LARGEFILE
case "${enable_largefile}" in
no) ;;
*) enable_largefile="yes" ;;
esac
# Regular expressions
AC_ARG_ENABLE(regexp,
[AS_HELP_STRING([--enable-regexp],[Enable regular expressions support @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_regexp="yes" ;;
no) enable_regexp="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-regexp) ;;
esac],
[enable_regexp=yes]
)
AM_CONDITIONAL(ENABLE_REGEXP, test x$enable_regexp = xyes)
if test "$enable_regexp" = "yes"; then
AC_DEFINE(FEATURE_REGEXP, 1, [Regular expressions support enabled.])
fi
# zlib compression
AC_ARG_ENABLE(zlib,
[AS_HELP_STRING([--enable-zlib],[Enable zlib compression support @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_zlib="yes" ;;
no) enable_zlib="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-zlib) ;;
esac],
[enable_zlib=yes]
)
AM_CONDITIONAL(ENABLE_ZLIB, test x$enable_zlib = xyes)
if test "$enable_zlib" = "yes"; then
AC_CHECK_HEADER(zlib.h, [zlib_header="yes"], [zlib_header="no" enable_zlib="false"])
if test "$zlib_header" = "yes"; then
AC_CHECK_LIB(z, deflate,
[AC_DEFINE(USE_NETZIP, 1, [Define if you want to enable zlib support])
ZLIB_LIBS="-lz"
AC_SUBST(ZLIB_LIBS)], enable_zlib="false")
fi
fi
#gssapi
AC_ARG_ENABLE(gssapi_krb5,
[AS_HELP_STRING([--enable-gssapi-krb5],[Enable GSSAPI Kerberos 5 support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_gssapi_krb5="yes" ;;
no) enable_gssapi_krb5="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-gssapi-krb5) ;;
esac],
[enable_gssapi_krb5=no]
)
if test $enable_gssapi_krb5 = yes; then
AC_CHECK_LIB(gssapi_krb5, gss_acquire_cred, [
AC_CHECK_HEADER(gssapi/gssapi.h, [
AC_DEFINE(USE_GSSAPI,,
Define if you want to use GSSAPI)
GSS_LIBS="-lgssapi_krb5"
AC_SUBST(GSS_LIBS)
])
])
fi
AM_CONDITIONAL(ENABLE_GSSAPI, test x$enable_gssapi_krb5 = xyes)
# multithreading via pthreads
AC_CHECK_HEADERS(
[pthread.h],
[
AC_CHECK_LIB(
[pthread],
[pthread_create],
[
AC_DEFINE([USE_PTHREADS], [1], [Multithreading support enabled.])
PTHREADS_LIBS="-lpthread"
case "${os_type}" in
solaris) PTHREADS_CFLAGS="-pthreads" ;;
*) PTHREADS_CFLAGS="-pthread" ;;
esac
AC_SUBST(PTHREADS_LIBS)
AC_SUBST(PTHREADS_CFLAGS)
],
[AC_MSG_FAILURE([pthread is missing])],
[-lpthread]
)
],
[AC_MSG_FAILURE([pthread is missing])]
)
AC_CHECK_FUNCS(
[pthread_setschedparam],
[
rsyslog_have_pthread_setschedparam=yes
],
[
rsyslog_have_pthread_setschedparam=no
]
)
AC_CHECK_HEADERS(
[sched.h],
[
rsyslog_have_sched_h=yes
],
[
rsyslog_have_sched_h=no
]
)
if test "$rsyslog_have_pthread_setschedparam" = "yes" -a "$rsyslog_have_sched_h" = "yes"; then
save_LIBS=$LIBS
LIBS=
AC_SEARCH_LIBS(sched_get_priority_max, rt)
if test "x$ac_cv_search" != "xno"; then
AC_CHECK_FUNCS(sched_get_priority_max)
fi
IMUDP_LIBS=$LIBS
AC_SUBST(IMUDP_LIBS)
LIBS=$save_LIBS
fi
# klog
AC_ARG_ENABLE(klog,
[AS_HELP_STRING([--enable-klog],[Integrated klog functionality @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_klog="yes" ;;
no) enable_klog="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-klog) ;;
esac],
[enable_klog="yes"]
)
AM_CONDITIONAL(ENABLE_IMKLOG, test x$enable_klog = xyes)
AM_CONDITIONAL(ENABLE_IMKLOG_BSD, test x$os_type = xbsd)
AM_CONDITIONAL(ENABLE_IMKLOG_LINUX, test x$os_type = xlinux)
AM_CONDITIONAL(ENABLE_IMKLOG_SOLARIS, test x$os_type = xsolaris)
# kmsg
AC_ARG_ENABLE(kmsg,
[AS_HELP_STRING([--enable-kmsg],[Kmsg structured kernel logs functionality @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_kmsg="yes" ;;
no) enable_kmsg="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-kmsg) ;;
esac],
[enable_kmsg="no"]
)
AM_CONDITIONAL(ENABLE_IMKMSG, test x$enable_kmsg = xyes)
# imjournal
AC_ARG_ENABLE(imjournal,
[AS_HELP_STRING([--enable-imjournal],[Systemd journal message import @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imjournal="yes" ;;
no) enable_imjournal="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imjournal) ;;
esac],
[enable_imjournal="no"]
)
if test "x$enable_imjournal" = "xyes"; then
PKG_CHECK_MODULES([LIBSYSTEMD_JOURNAL], [libsystemd-journal >= 197])
fi
AM_CONDITIONAL(ENABLE_IMJOURNAL, test x$enable_imjournal = xyes)
# inet
AC_ARG_ENABLE(inet,
[AS_HELP_STRING([--enable-inet],[Enable networking support @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_inet="yes" ;;
no) enable_inet="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-inet) ;;
esac],
[enable_inet="yes"]
)
AM_CONDITIONAL(ENABLE_INET, test x$enable_inet = xyes)
if test "$enable_inet" = "yes"; then
AC_DEFINE(SYSLOG_INET, 1, [network support is integrated.])
fi
# jemalloc
AC_ARG_ENABLE(jemalloc,
[AS_HELP_STRING([--enable-jemalloc],[Enable jemalloc support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_jemalloc="yes" ;;
no) enable_jemalloc="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-jemalloc) ;;
esac],
[enable_jemalloc="no"]
)
AM_CONDITIONAL(ENABLE_JEMALLOC, test x$enable_jemalloc = xyes)
if test "$enable_jemalloc" = "yes"; then
AC_CHECK_LIB(
[jemalloc],
[malloc_stats_print],
[RT_LIBS="$RT_LIBS -ljemalloc"
AC_DEFINE(HAVE_JEMALLOC, 1, [jemalloc support is integrated.])
],
[AC_MSG_FAILURE([jemalloc library is missing])],
[]
)
fi
# support for unlimited select() syscall
AC_ARG_ENABLE(unlimited_select,
[AS_HELP_STRING([--enable-unlimited-select],[Enable unlimited select() syscall @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_unlimited_select="yes" ;;
no) enable_unlimited_select="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-unlimited-select) ;;
esac],
[enable_unlimited_select="no"]
)
if test "$enable_unlimited_select" = "yes"; then
AC_DEFINE(USE_UNLIMITED_SELECT, 1, [If defined, the select() syscall won't be limited to a particular number of file descriptors.])
fi
# support for systemd unit files
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
if test "x$with_systemdsystemunitdir" != xno; then
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
fi
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
# debug
AC_ARG_ENABLE(debug,
[AS_HELP_STRING([--enable-debug],[Enable debug mode @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_debug="yes" ;;
no) enable_debug="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
esac],
[enable_debug="no"]
)
if test "$enable_debug" = "yes"; then
AC_DEFINE(DEBUG, 1, [Defined if debug mode is enabled (its easier to check).])
fi
if test "$enable_debug" = "no"; then
AC_DEFINE(NDEBUG, 1, [Defined if debug mode is disabled.])
fi
# runtime instrumentation
AC_ARG_ENABLE(rtinst,
[AS_HELP_STRING([--enable-rtinst],[Enable runtime instrumentation mode @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_rtinst="yes" ;;
no) enable_rtinst="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-rtinst) ;;
esac],
[enable_rtinst="no"]
)
if test "$enable_rtinst" = "yes"; then
AC_DEFINE(RTINST, 1, [Defined if runtime instrumentation mode is enabled.])
fi
# total debugless: highest performance, but no way at all to enable debug
# logging
AC_ARG_ENABLE(debugless,
[AS_HELP_STRING([--enable-debugless],[Enable runtime instrumentation mode @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_debugless="yes" ;;
no) enable_debugless="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-debugless) ;;
esac],
[enable_debugless="no"]
)
if test "$enable_debugless" = "yes"; then
AC_DEFINE(DEBUGLESS, 1, [Defined if debugless mode is enabled.])
fi
# valgrind
AC_ARG_ENABLE(valgrind,
[AS_HELP_STRING([--enable-valgrind],[Enable valgrind support settings @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_valgrind="yes" ;;
no) enable_valgrind="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;;
esac],
[enable_valgrind="no"]
)
if test "$enable_valgrind" = "yes"; then
AC_DEFINE(VALGRIND, 1, [Defined if valgrind support settings are to be enabled (e.g. prevents dlclose()).])
fi
# memcheck
AC_ARG_ENABLE(memcheck,
[AS_HELP_STRING([--enable-memcheck],[Enable extended memory check support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_memcheck="yes" ;;
no) enable_memcheck="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-memcheck) ;;
esac],
[enable_memcheck="no"]
)
if test "$enable_memcheck" = "yes"; then
AC_DEFINE(MEMCHECK, 1, [Defined if memcheck support settings are to be enabled (e.g. prevents dlclose()).])
fi
# compile diagnostic tools (small helpers usually not needed)
AC_ARG_ENABLE(diagtools,
[AS_HELP_STRING([--enable-diagtools],[Enable diagnostic tools @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_diagtools="yes" ;;
no) enable_diagtools="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-diagtools) ;;
esac],
[enable_diagtools=no]
)
AM_CONDITIONAL(ENABLE_DIAGTOOLS, test x$enable_diagtools = xyes)
# compile end-user tools
AC_ARG_ENABLE(usertools,
[AS_HELP_STRING([--enable-usertools],[Enable end user tools @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_usertools="yes" ;;
no) enable_usertools="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-usertools) ;;
esac],
[enable_usertools=no]
)
AM_CONDITIONAL(ENABLE_USERTOOLS, test x$enable_usertools = xyes)
# MySQL support
AC_ARG_ENABLE(mysql,
[AS_HELP_STRING([--enable-mysql],[Enable MySql database support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mysql="yes" ;;
no) enable_mysql="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mysql) ;;
esac],
[enable_mysql=no]
)
if test "x$enable_mysql" = "xyes"; then
AC_CHECK_PROG(
[HAVE_MYSQL_CONFIG],
[mysql_config],
[yes],,,
)
if test "x${HAVE_MYSQL_CONFIG}" != "xyes"; then
AC_MSG_FAILURE([mysql_config not found in PATH - usually a package named mysql-dev, libmysql-dev or similar, is missing - install it to fix this issue])
fi
AC_CHECK_LIB(
[mysqlclient],
[mysql_init],
[MYSQL_CFLAGS=`mysql_config --cflags`
MYSQL_LIBS=`mysql_config --libs`
],
[AC_MSG_FAILURE([MySQL library is missing])],
[`mysql_config --libs`]
)
AC_MSG_CHECKING(if we have mysql_library_init)
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $MYSQL_CFLAGS"
save_LIBS="$LIBS"
LIBS="$LIBS $MYSQL_LIBS"
AC_TRY_LINK(
[#include <mysql.h>
#include <stdio.h>],
[mysql_library_init(0, NULL, NULL)],
[have_mysql_library_init=yes],
[have_mysql_library_init=no])
CFLAGS="$save_CFLAGS"
LIBS="$save_LIBS"
fi
AM_CONDITIONAL(ENABLE_MYSQL, test x$enable_mysql = xyes)
if test "$have_mysql_library_init" = "yes"; then
AC_DEFINE([HAVE_MYSQL_LIBRARY_INIT], [1], [mysql_library_init available])
fi
AC_SUBST(MYSQL_CFLAGS)
AC_SUBST(MYSQL_LIBS)
# PostgreSQL support
AC_ARG_ENABLE(pgsql,
[AS_HELP_STRING([--enable-pgsql],[Enable PostgreSQL database support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pgsql="yes" ;;
no) enable_pgsql="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pgsql) ;;
esac],
[enable_pgsql=no]
)
if test "x$enable_pgsql" = "xyes"; then
AC_CHECK_PROG(
[HAVE_PGSQL_CONFIG],
[pg_config],
[yes],,,
)
if test "x${HAVE_PGSQL_CONFIG}" != "xyes"; then
AC_MSG_FAILURE([pg_config not found in PATH])
fi
AC_CHECK_LIB(
[pq],
[PQconnectdb],
[PGSQL_CFLAGS="-I`pg_config --includedir`"
PGSQL_LIBS="-L`pg_config --libdir` -lpq"
],
[AC_MSG_FAILURE([PgSQL library is missing])],
[-L`pg_config --libdir`]
)
fi
AM_CONDITIONAL(ENABLE_PGSQL, test x$enable_pgsql = xyes)
AC_SUBST(PGSQL_CFLAGS)
AC_SUBST(PGSQL_LIBS)
# oracle (OCI) support
AC_ARG_ENABLE(oracle,
[AS_HELP_STRING([--enable-oracle],[Enable native Oracle database support @<:@default=no@:>@]. (Check your ORACLE_HOME environment variable!))],
[case "${enableval}" in
yes) enable_oracle="yes" ;;
no) enable_oracle="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-oracle) ;;
esac],
[enable_oracle=no]
)
if test "x$enable_oracle" = "xyes"; then
if test -d "$ORACLE_HOME"
then
AC_CHECK_LIB([occi], [OCIEnvCreate],
[ORACLE_CFLAGS=-I$ORACLE_HOME/rdbms/public]
[ORACLE_LIBS=-L$ORACLE_HOME/lib -locci],
[AC_MSG_FAILURE([Oracle (OCI) library is missing: wrong oracle home])],
[-I$ORACLE_HOME/rdbms/public/ -L$ORACLE_HOME/lib -locci -lclntsh ]
)
elif test -d "$ORACLE_LIB_PATH" -a -d "$ORACLE_INCLUDE_PATH"
then
AC_CHECK_LIB([occi], [OCIEnvCreate],
[ORACLE_CFLAGS=-I$ORACLE_INCLUDE_PATH]
[ORACLE_LIBS=-L$ORACLE_LIB_PATH -locci],
[AC_MSG_FAILURE([Oracle (OCI) library is missing: wrong oracle directories])],
[-I$ORACLE_INCLUDE_PATH -L$ORACLE_LIB_PATH -locci -lclntsh ]
)
else
AC_CHECK_PROG(
[HAVE_ORACLE_CONFIG],
[oracle-instantclient-config],
[yes],,,
)
if test "x${HAVE_ORACLE_CONFIG}" != "xyes"; then
AC_MSG_FAILURE([oracle-instantclient-config not found in PATH])
fi
AC_CHECK_LIB(
[occi],
[OCIEnvCreate],
[ORACLE_CFLAGS="`oracle-instantclient-config --cflags`"
ORACLE_LIBS="`oracle-instantclient-config --libs`"
],
[AC_MSG_FAILURE([Oracle (OCI) libraray is missing])],
[`oracle-instantclient-config --libs --cflags`]
)
fi
fi
AM_CONDITIONAL(ENABLE_ORACLE, test x$enable_oracle = xyes)
AC_SUBST(ORACLE_CFLAGS)
AC_SUBST(ORACLE_LIBS)
# libdbi support
AC_ARG_ENABLE(libdbi,
[AS_HELP_STRING([--enable-libdbi],[Enable libdbi database support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_libdbi="yes" ;;
no) enable_libdbi="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-libdbi) ;;
esac],
[enable_libdbi=no]
)
if test "x$enable_libdbi" = "xyes"; then
AC_CHECK_HEADERS(
[dbi/dbi.h],,
[AC_MSG_FAILURE([libdbi is missing])]
)
AC_CHECK_LIB(
[dbi],
[dbi_initialize],
[LIBDBI_CFLAGS=""
LIBDBI_LIBS="-ldbi"
],
[AC_MSG_FAILURE([libdbi library is missing])]
)
AC_CHECK_LIB(
[dbi],
[dbi_initialize_r],
[AC_DEFINE([HAVE_DBI_R], [1], [Define to 1 if libdbi supports the new plugin-safe interface])]
)
AC_CHECK_LIB(
[dbi],
[dbi_conn_transaction_begin],
[AC_DEFINE([HAVE_DBI_TXSUPP], [1], [Define to 1 if libdbi supports transactions])]
)
fi
AM_CONDITIONAL(ENABLE_OMLIBDBI, test x$enable_libdbi = xyes)
AC_SUBST(LIBDBI_CFLAGS)
AC_SUBST(LIBDBI_LIBS)
# SNMP support
AC_ARG_ENABLE(snmp,
[AS_HELP_STRING([--enable-snmp],[Enable SNMP support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_snmp="yes" ;;
no) enable_snmp="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-snmp) ;;
esac],
[enable_snmp=no]
)
if test "x$enable_snmp" = "xyes"; then
AC_CHECK_HEADERS(
[net-snmp/net-snmp-config.h],,
[AC_MSG_FAILURE([Net-SNMP is missing])]
)
AC_CHECK_LIB(
[netsnmp],
[snmp_timeout],
[SNMP_CFLAGS=""
SNMP_LIBS="-lnetsnmp"
],
[AC_MSG_FAILURE([Net-SNMP library is missing])]
)
fi
AM_CONDITIONAL(ENABLE_SNMP, test x$enable_snmp = xyes)
AC_SUBST(SNMP_CFLAGS)
AC_SUBST(SNMP_LIBS)
# uuid support
AC_ARG_ENABLE(uuid,
[AS_HELP_STRING([--enable-uuid],[Enable support for uuid generation @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_uuid="yes" ;;
no) enable_uuid="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-uuid) ;;
esac],
[enable_uuid=yes]
)
if test "x$enable_uuid" = "xyes"; then
PKG_CHECK_MODULES([LIBUUID], [uuid])
AC_DEFINE(USE_LIBUUID, 1, [Define if you want to enable libuuid support])
fi
AM_CONDITIONAL(ENABLE_UUID, test x$enable_uuid = xyes)
# elasticsearch support
AC_ARG_ENABLE(elasticsearch,
[AS_HELP_STRING([--enable-elasticsearch],[Enable elasticsearch output module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_elasticsearch="yes" ;;
no) enable_elasticsearch="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-elasticsearch) ;;
esac],
[enable_elasticsearch=no]
)
if test "x$enable_elasticsearch" = "xyes"; then
PKG_CHECK_MODULES([CURL], [libcurl])
LT_LIB_M
fi
AM_CONDITIONAL(ENABLE_ELASTICSEARCH, test x$enable_elasticsearch = xyes)
# GnuTLS support
AC_ARG_ENABLE(gnutls,
[AS_HELP_STRING([--enable-gnutls],[Enable GNU TLS support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_gnutls="yes" ;;
no) enable_gnutls="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-gnutls) ;;
esac],
[enable_gnutls=no]
)
if test "x$enable_gnutls" = "xyes"; then
PKG_CHECK_MODULES(GNUTLS, gnutls >= 1.4.0)
AC_DEFINE([ENABLE_GNUTLS], [1], [Indicator that GnuTLS is present])
fi
AM_CONDITIONAL(ENABLE_GNUTLS, test x$enable_gnutls = xyes)
# libgcrypt support
AC_ARG_ENABLE(libgcrypt,
[AS_HELP_STRING([--enable-libgcrypt],[Enable log file encryption support (libgcrypt) @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_libgcrypt="yes" ;;
no) enable_libgcrypt="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-libgcrypt) ;;
esac],
[enable_libgcrypt=yes]
)
if test "x$enable_libgcrypt" = "xyes"; then
AC_PATH_PROG([LIBGCRYPT_CONFIG],[libgcrypt-config],[no])
if test "x${LIBGCRYPT_CONFIG}" = "xno"; then
AC_MSG_FAILURE([libgcrypt-config not found in PATH])
fi
AC_CHECK_LIB(
[gcrypt],
[gcry_cipher_open],
[LIBGCRYPT_CFLAGS="`${LIBGCRYPT_CONFIG} --cflags`"
LIBGCRYPT_LIBS="`${LIBGCRYPT_CONFIG} --libs`"
],
[AC_MSG_FAILURE([libgcrypt is missing])],
[`${LIBGCRYPT_CONFIG} --libs --cflags`]
)
AC_DEFINE([ENABLE_LIBGCRYPT], [1], [Indicator that LIBGCRYPT is present])
fi
AM_CONDITIONAL(ENABLE_LIBGCRYPT, test x$enable_libgcrypt = xyes)
AC_SUBST(LIBGCRYPT_CFLAGS)
AC_SUBST(LIBGCRYPT_LIBS)
# support for building the rsyslogd runtime
AC_ARG_ENABLE(rsyslogrt,
[AS_HELP_STRING([--enable-rsyslogrt],[Build rsyslogrt @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_rsyslogrt="yes" ;;
no) enable_rsyslogrt="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-rsyslogrt) ;;
esac],
[enable_rsyslogrt=yes]
)
if test "x$enable_rsyslogrt" = "xyes"; then
RSRT_CFLAGS1="-I\$(top_srcdir)/runtime -I\$(top_srcdir) -I\$(top_srcdir)/grammar"
RSRT_LIBS1="\$(top_builddir)/runtime/librsyslog.la"
fi
AM_CONDITIONAL(ENABLE_RSYSLOGRT, test x$enable_rsyslogrt = xyes)
RSRT_CFLAGS="\$(RSRT_CFLAGS1) \$(LIBESTR_CFLAGS) \$(JSON_C_CFLAGS)"
if test "$GCC" = "yes"
then RSRT_CFLAGS="$RSRT_CFLAGS -W -std=c99 -Wall -Wformat-security -Wshadow -Wcast-align -Wpointer-arith -Wmissing-format-attribute -g"
fi
RSRT_LIBS="\$(RSRT_LIBS1) \$(LIBESTR_LIBS) \$(JSON_C_LIBS)"
AC_SUBST(RSRT_CFLAGS1)
AC_SUBST(RSRT_LIBS1)
AC_SUBST(RSRT_CFLAGS)
AC_SUBST(RSRT_LIBS)
# support for NOT building rsyslogd (useful for source-based packaging systems)
AC_ARG_ENABLE(rsyslogd,
[AS_HELP_STRING([--enable-rsyslogd],[Build rsyslogd @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_rsyslogd="yes" ;;
no) enable_rsyslogd="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-rsyslogd) ;;
esac],
[enable_rsyslogd=yes]
)
AM_CONDITIONAL(ENABLE_RSYSLOGD, test x$enable_rsyslogd = xyes)
# capability to enable an extended testbench. By default, this is off. The reason
# for this switch is that some test simply take too long to execute them on a regular
# basis. So we enable to skip them, while the majority of tests can still be used. The
# idea is that at least "make distcheck" executes the extended testbench, and also
# developers should explicitely enable it after important changes. -- rgerhards, 2010-04-12
AC_ARG_ENABLE(extended_tests,
[AS_HELP_STRING([--enable-extended-tests],[extended testbench @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_rsyslogd="yes" ;;
no) enable_rsyslogd="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-extended-tests) ;;
esac],
[enable_extended_tests=no]
)
AM_CONDITIONAL(ENABLE_EXTENDED_TESTS, test x$enable_extended_tests = xyes)
# capability to enable MySQL testbench tests. This requries that a Syslog database
# with the default schema has been created on the local (127.0.0.1) MySQL server and
# a user "rsyslog" with password "testbench" exists, is able to login with default
# parameters and has sufficient (read: all) privileges on that database.
# rgerhards, 2011-03-09
AC_ARG_ENABLE(mysql_tests,
[AS_HELP_STRING([--enable-mysql-tests],[enable MySQL specific tests in testbench @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mysql_tests="yes" ;;
no) enable_mysql_tests="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mysql-tests) ;;
esac],
[enable_mysql_tests=no]
)
AM_CONDITIONAL(ENABLE_MYSQL_TESTS, test x$enable_mysql_tests = xyes)
# Mail support (so far we do not need a library, but we need to turn this on and off)
AC_ARG_ENABLE(mail,
[AS_HELP_STRING([--enable-mail],[Enable mail support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mail="yes" ;;
no) enable_mail="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mail) ;;
esac],
[enable_mail=no]
)
AM_CONDITIONAL(ENABLE_MAIL, test x$enable_mail = xyes)
# imdiag support
# This is a core testbench tool. You need to enable it if you want to
# use not only a small subset of the testbench.
AC_ARG_ENABLE(imdiag,
[AS_HELP_STRING([--enable-imdiag],[Enable imdiag @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imdiag="yes" ;;
no) enable_imdiag="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imdiag) ;;
esac],
[enable_imdiag=no]
)
if test "x$enable_imdiag" = "xyes"; then
AC_DEFINE([ENABLE_IMDIAG], [1], [Indicator that IMDIAG is present])
fi
AM_CONDITIONAL(ENABLE_IMDIAG, test x$enable_imdiag = xyes)
# mmnormalize
AC_ARG_ENABLE(mmnormalize,
[AS_HELP_STRING([--enable-mmnormalize],[Enable building mmnormalize support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmnormalize="yes" ;;
no) enable_mmnormalize="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmnormalize) ;;
esac],
[enable_mmnormalize=no]
)
if test "x$enable_mmnormalize" = "xyes"; then
PKG_CHECK_MODULES(LIBLOGNORM, lognorm >= 1.0.0)
fi
AM_CONDITIONAL(ENABLE_MMNORMALIZE, test x$enable_mmnormalize = xyes)
# mmnjsonparse
AC_ARG_ENABLE(mmjsonparse,
[AS_HELP_STRING([--enable-mmjsonparse],[Enable building mmjsonparse support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmjsonparse="yes" ;;
no) enable_mmjsonparse="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmjsonparse) ;;
esac],
[enable_mmjsonparse=no]
)
AM_CONDITIONAL(ENABLE_MMJSONPARSE, test x$enable_mmjsonparse = xyes)
# mmaudit
AC_ARG_ENABLE(mmaudit,
[AS_HELP_STRING([--enable-mmaudit],[Enable building mmaudit support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmaudit="yes" ;;
no) enable_mmaudit="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmaudit) ;;
esac],
[enable_mmaudit=no]
)
AM_CONDITIONAL(ENABLE_MMAUDIT, test x$enable_mmaudit = xyes)
# mmanon
AC_ARG_ENABLE(mmanon,
[AS_HELP_STRING([--enable-mmanon],[Enable building mmanon support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmanon="yes" ;;
no) enable_mmanon="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmanon) ;;
esac],
[enable_mmanon=no]
)
AM_CONDITIONAL(ENABLE_MMANON, test x$enable_mmanon = xyes)
# mmutf8fix
AC_ARG_ENABLE(mmutf8fix,
[AS_HELP_STRING([--enable-mmutf8fix],[Enable building mmutf8fix support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmutf8fix="yes" ;;
no) enable_mmutf8fix="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmutf8fix) ;;
esac],
[enable_mmutf8fix=no]
)
AM_CONDITIONAL(ENABLE_MMUTF8FIX, test x$enable_mmutf8fix = xyes)
# mmcount
AC_ARG_ENABLE(mmcount,
[AS_HELP_STRING([--enable-mmcount],[Enable message counting @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmcount="yes" ;;
no) enable_mmcount="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmcount) ;;
esac],
[enable_mmcount=no]
)
AM_CONDITIONAL(ENABLE_MMCOUNT, test x$enable_mmcount = xyes)
# mmsequence
AC_ARG_ENABLE(mmsequence,
[AS_HELP_STRING([--enable-mmsequence],[Enable sequence generator @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmsequence="yes" ;;
no) enable_mmsequence="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmsequence) ;;
esac],
[enable_mmsequence=no]
)
AM_CONDITIONAL(ENABLE_MMSEQUENCE, test x$enable_mmsequence = xyes)
# mmfields
AC_ARG_ENABLE(mmfields,
[AS_HELP_STRING([--enable-mmfields],[Enable building mmfields support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmfields="yes" ;;
no) enable_mmfields="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmfields) ;;
esac],
[enable_mmfields=no]
)
AM_CONDITIONAL(ENABLE_MMFIELDS, test x$enable_mmfields = xyes)
# mmpstrucdata
AC_ARG_ENABLE(mmpstrucdata,
[AS_HELP_STRING([--enable-mmpstrucdata],[Enable building mmpstrucdata support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmpstrucdata="yes" ;;
no) enable_mmpstrucdata="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmpstrucdata) ;;
esac],
[enable_mmpstrucdata=no]
)
AM_CONDITIONAL(ENABLE_MMPSTRUCDATA, test x$enable_mmpstrucdata = xyes)
# mmrfc5424addhmac
AC_ARG_ENABLE(mmrfc5424addhmac,
[AS_HELP_STRING([--enable-mmrfc5424addhmac],[Enable building mmrfc5424addhmac support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmrfc5424addhmac="yes" ;;
no) enable_mmrfc5424addhmac="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmrfc5424addhmac) ;;
esac],
[enable_mmrfc5424addhmac=no]
)
if test "x$enable_mmrfc5424addhmac" = "xyes"; then
PKG_CHECK_MODULES(OPENSSL, openssl >= 0.9.7)
#AC_CHECK_LIB([crypto],[CRYPTO_new_ex_data], [], [AC_MSG_ERROR([OpenSSL libraries required])])
#AC_CHECK_LIB([ssl],[SSL_library_init], [], [AC_MSG_ERROR([OpenSSL libraries required])])
#AC_CHECK_HEADERS([openssl/crypto.h openssl/x509.h openssl/pem.h openssl/ssl.h openssl/err.h],[],[AC_MSG_ERROR([OpenSSL headers required])])
fi
AM_CONDITIONAL(ENABLE_MMRFC5424ADDHMAC, test x$enable_mmrfc5424addhmac = xyes)
# RELP support
AC_ARG_ENABLE(relp,
[AS_HELP_STRING([--enable-relp],[Enable RELP support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_relp="yes" ;;
no) enable_relp="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-relp) ;;
esac],
[enable_relp=no]
)
if test "x$enable_relp" = "xyes"; then
PKG_CHECK_MODULES(RELP, relp >= 1.2.5)
fi
AM_CONDITIONAL(ENABLE_RELP, test x$enable_relp = xyes)
# GuardTime support
AC_ARG_ENABLE(guardtime,
[AS_HELP_STRING([--enable-guardtime],[Enable log file signing support (via GuardTime) @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_guardtime="yes" ;;
no) enable_guardtime="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-guardtime) ;;
esac],
[enable_guardtime=no]
)
if test "x$enable_guardtime" = "xyes"; then
PKG_CHECK_MODULES(GUARDTIME, libgt >= 0.3.1)
fi
AM_CONDITIONAL(ENABLE_GUARDTIME, test x$enable_guardtime = xyes)
# RFC 3195 support
AC_ARG_ENABLE(rfc3195,
[AS_HELP_STRING([--enable-rfc3195],[Enable RFC3195 support @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_rfc3195="yes" ;;
no) enable_rfc3195="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-rfc3195) ;;
esac],
[enable_rfc3195=no]
)
if test "x$enable_rfc3195" = "xyes"; then
PKG_CHECK_MODULES(LIBLOGGING, liblogging-rfc3195 >= 1.0.1)
fi
AM_CONDITIONAL(ENABLE_RFC3195, test x$enable_rfc3195 = xyes)
# enable/disable the testbench (e.g. because some important parts
# are missing)
AC_ARG_ENABLE(testbench,
[AS_HELP_STRING([--enable-testbench],[testbench enabled @<:@default=yes@:>@])],
[case "${enableval}" in
yes) enable_testbench="yes" ;;
no) enable_testbench="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-testbench) ;;
esac],
[enable_testbench=yes]
)
AM_CONDITIONAL(ENABLE_TESTBENCH, test x$enable_testbench = xyes)
# settings for the file input module
AC_ARG_ENABLE(imfile,
[AS_HELP_STRING([--enable-imfile],[file input module enabled @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imfile="yes" ;;
no) enable_imfile="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imfile) ;;
esac],
[enable_imfile=no]
)
AM_CONDITIONAL(ENABLE_IMFILE, test x$enable_imfile = xyes)
# settings for the door input module (under solaris, thus default off)
AC_ARG_ENABLE(imsolaris,
[AS_HELP_STRING([--enable-imsolaris],[solaris input module enabled @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imsolaris="yes" ;;
no) enable_imsolaris="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imsolaris) ;;
esac],
[enable_imsolaris=no]
)
AM_CONDITIONAL(ENABLE_IMSOLARIS, test x$enable_imsolaris = xyes)
# settings for the ptcp input module
AC_ARG_ENABLE(imptcp,
[AS_HELP_STRING([--enable-imptcp],[plain tcp input module enabled @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imptcp="yes" ;;
no) enable_imptcp="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imptcp) ;;
esac],
[enable_imptcp=no]
)
AM_CONDITIONAL(ENABLE_IMPTCP, test x$enable_imptcp = xyes)
# settings for the ttcp input module
AC_ARG_ENABLE(imttcp,
[AS_HELP_STRING([--enable-imttcp],[threaded plain tcp input module enabled @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imttcp="yes" ;;
no) enable_imttcp="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imttcp) ;;
esac],
[enable_imttcp=no]
)
AM_CONDITIONAL(ENABLE_IMTTCP, test x$enable_imttcp = xyes)
# settings for the pstats input module
AC_ARG_ENABLE(impstats,
[AS_HELP_STRING([--enable-impstats],[periodic statistics module enabled @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_impstats="yes" ;;
no) enable_impstats="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-impstats) ;;
esac],
[enable_impstats=no]
)
AM_CONDITIONAL(ENABLE_IMPSTATS, test x$enable_impstats = xyes)
# settings for the omprog output module
AC_ARG_ENABLE(omprog,
[AS_HELP_STRING([--enable-omprog],[Compiles omprog module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omprog="yes" ;;
no) enable_omprog="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omprog) ;;
esac],
[enable_omprog=no]
)
AM_CONDITIONAL(ENABLE_OMPROG, test x$enable_omprog = xyes)
# settings for omudpspoof
AC_ARG_ENABLE(omudpspoof,
[AS_HELP_STRING([--enable-omudpspoof],[Compiles omudpspoof module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omudpspoof="yes" ;;
no) enable_omudpspoof="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omudpspoof) ;;
esac],
[enable_omudpspoof=no]
)
if test "x$enable_omudpspoof" = "xyes"; then
AC_CHECK_HEADERS(
[libnet.h],,
[AC_MSG_FAILURE([libnet is missing])]
)
AC_CHECK_LIB(
[net],
[libnet_init],
[UDPSPOOF_CFLAGS=""
UDPSPOOF_LIBS="-lnet"
],
[AC_MSG_FAILURE([libnet is missing])]
)
fi
AM_CONDITIONAL(ENABLE_OMUDPSPOOF, test x$enable_omudpspoof = xyes)
AC_SUBST(UDPSPOOF_CFLAGS)
AC_SUBST(UDPSPOOF_LIBS)
# settings for omstdout
AC_ARG_ENABLE(omstdout,
[AS_HELP_STRING([--enable-omstdout],[Compiles stdout module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omstdout="yes" ;;
no) enable_omstdout="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omstdout) ;;
esac],
[enable_omstdout=no]
)
AM_CONDITIONAL(ENABLE_OMSTDOUT, test x$enable_omstdout = xyes)
# settings for omjournal
AC_ARG_ENABLE(omjournal,
[AS_HELP_STRING([--enable-omjournal],[Compiles omjournal @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omjournal="yes" ;;
no) enable_omjournal="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omjournal) ;;
esac],
[enable_omjournal=no]
)
if test "x$enable_omjournal" = "xyes"; then
PKG_CHECK_MODULES([LIBSYSTEMD_JOURNAL], [libsystemd-journal >= 197])
fi
AM_CONDITIONAL(ENABLE_OMJOURNAL, test x$enable_omjournal = xyes)
# settings for pmlastmsg
AC_ARG_ENABLE(pmlastmsg,
[AS_HELP_STRING([--enable-pmlastmsg],[Compiles lastmsg parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmlastmsg="yes" ;;
no) enable_pmlastmsg="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmlastmsg) ;;
esac],
[enable_pmlastmsg=no]
)
AM_CONDITIONAL(ENABLE_PMLASTMSG, test x$enable_pmlastmsg = xyes)
# settings for pmcisconames
AC_ARG_ENABLE(pmcisconames,
[AS_HELP_STRING([--enable-pmcisconames],[Compiles cisconames parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmcisconames="yes" ;;
no) enable_pmcisconames="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmcisconames) ;;
esac],
[enable_pmcisconames=no]
)
AM_CONDITIONAL(ENABLE_PMCISCONAMES, test x$enable_pmcisconames = xyes)
# settings for pmciscoios
AC_ARG_ENABLE(pmciscoios,
[AS_HELP_STRING([--enable-pmciscoios],[Compiles ciscoios parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmciscoios="yes" ;;
no) enable_pmciscoios="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmciscoios) ;;
esac],
[enable_pmciscoios=no]
)
AM_CONDITIONAL(ENABLE_PMCISCOIOS, test x$enable_pmciscoios = xyes)
# settings for pmaixforwardedfrom
AC_ARG_ENABLE(pmaixforwardedfrom,
[AS_HELP_STRING([--enable-pmaixforwardedfrom],[Compiles aixforwardedfrom parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmaixforwardedfrom="yes" ;;
no) enable_pmaixforwardedfrom="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmaixforwardedfrom) ;;
esac],
[enable_pmaixforwardedfrom=no]
)
AM_CONDITIONAL(ENABLE_PMAIXFORWARDEDFROM, test x$enable_pmaixforwardedfrom = xyes)
# settings for pmsnare
AC_ARG_ENABLE(pmsnare,
[AS_HELP_STRING([--enable-pmsnare],[Compiles snare parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmsnare="yes" ;;
no) enable_pmsnare="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmsnare) ;;
esac],
[enable_pmsnare=no]
)
AM_CONDITIONAL(ENABLE_PMSNARE, test x$enable_pmsnare = xyes)
# settings for pmrfc3164sd
AC_ARG_ENABLE(pmrfc3164sd,
[AS_HELP_STRING([--enable-pmrfc3164sd],[Compiles rfc3164sd parser module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_pmrfc3164sd="yes" ;;
no) enable_pmrfc3164sd="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pmrfc3164sd) ;;
esac],
[enable_pmrfc3164sd=no]
)
AM_CONDITIONAL(ENABLE_PMRFC3164SD, test x$enable_pmrfc3164sd = xyes)
# settings for omruleset
AC_ARG_ENABLE(omruleset,
[AS_HELP_STRING([--enable-omruleset],[Compiles ruleset forwarding module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omruleset="yes" ;;
no) enable_omruleset="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omruleset) ;;
esac],
[enable_omruleset=no]
)
AM_CONDITIONAL(ENABLE_OMRULESET, test x$enable_omruleset = xyes)
# building the GUI (mostly for diagnostic reasons)
AC_ARG_ENABLE(gui,
[AS_HELP_STRING([--enable-gui],[Enable GUI programs @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_gui="yes" ;;
no) enable_gui="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-gui) ;;
esac],
[enable_gui=no]
)
if test "x$enable_gui" = "xyes"; then
if test x$HAVE_JAVAC = x; then
AC_MSG_ERROR([GUI components need Java, but Java development system is not installed on this system])
fi
fi
AM_CONDITIONAL(ENABLE_GUI, test x$enable_gui = xyes)
# settings for omuxsock
AC_ARG_ENABLE(omuxsock,
[AS_HELP_STRING([--enable-omuxsock],[Compiles omuxsock module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omuxsock="yes" ;;
no) enable_omuxsock="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omuxsock) ;;
esac],
[enable_omuxsock=no]
)
AM_CONDITIONAL(ENABLE_OMUXSOCK, test x$enable_omuxsock = xyes)
# A custom strgen that also serves as a sample of how to do
# SQL-generating strgen's
AC_ARG_ENABLE(sm_cust_bindcdr,
[AS_HELP_STRING([--enable-sm_cust_bindcdr],[Compiles sm_cust_bindcdr module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_sm_cust_bindcdr="yes" ;;
no) enable_sm_cust_bindcdr="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-sm_cust_bindcdr) ;;
esac],
[enable_sm_cust_bindcdr=no]
)
AM_CONDITIONAL(ENABLE_SMCUSTBINDCDR, test x$enable_sm_cust_bindcdr = xyes)
# settings for mmsnmptrapd message modification module
AC_ARG_ENABLE(mmsnmptrapd,
[AS_HELP_STRING([--enable-mmsnmptrapd],[Compiles mmsnmptrapd module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_mmsnmptrapd="yes" ;;
no) enable_mmsnmptrapd="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mmsnmptrapd) ;;
esac],
[enable_mmsnmptrapd=no]
)
AM_CONDITIONAL(ENABLE_MMSNMPTRAPD, test x$enable_mmsnmptrapd = xyes)
# settings for the omhdfs;
AC_ARG_ENABLE(omhdfs,
[AS_HELP_STRING([--enable-omhdfs],[Compiles omhdfs template module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omhdfs="yes" ;;
no) enable_omhdfs="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omhdfs) ;;
esac],
[enable_omhdfs=no]
)
if test "x$enable_omhdfs"; then
AC_CHECK_HEADERS([hdfs.h hadoop/hdfs.h])
fi
AM_CONDITIONAL(ENABLE_OMHDFS, test x$enable_omhdfs = xyes)
#MONGODB SUPPORT
AC_ARG_ENABLE(ommongodb,
[AS_HELP_STRING([--enable-ommongodb],[Compiles ommongodb template module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_ommongodb="yes" ;;
no) enable_ommongodb="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-ommongodb) ;;
esac],
[enable_ommongodb=no]
)
if test "x$enable_ommongodb" = "xyes"; then
PKG_CHECK_MODULES(LIBMONGO_CLIENT, libmongo-client >= 0.1.4)
fi
AM_CONDITIONAL(ENABLE_OMMONGODB, test x$enable_ommongodb = xyes)
# end of mongodb code
# BEGIN ZMQ3 INPUT SUPPORT
AC_ARG_ENABLE(imzmq3,
[AS_HELP_STRING([--enable-imzmq3],[Compiles imzmq3 output module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_imzmq3="yes" ;;
no) enable_imzmq3="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-imzmq3) ;;
esac],
[enable_imzmq3=no]
)
if test "x$enable_imzmq3" = "xyes"; then
PKG_CHECK_MODULES(CZMQ, libczmq >= 1.1.0)
fi
AM_CONDITIONAL(ENABLE_IMZMQ3, test x$enable_imzmq3 = xyes)
# END ZMQ3 INPUT SUPPORT
# BEGIN ZMQ3 OUTPUT SUPPORT
AC_ARG_ENABLE(omzmq3,
[AS_HELP_STRING([--enable-omzmq3],[Compiles omzmq3 output module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omzmq3="yes" ;;
no) enable_omzmq3="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omzmq3) ;;
esac],
[enable_omzmq3=no]
)
if test "x$enable_omzmq3" = "xyes"; then
PKG_CHECK_MODULES(CZMQ, libczmq >= 1.1.0)
fi
AM_CONDITIONAL(ENABLE_OMZMQ3, test x$enable_omzmq3 = xyes)
# END ZMQ3 SUPPORT
# BEGIN RABBITMQ OUTPUT SUPPORT
AC_ARG_ENABLE(omrabbitmq,
[AS_HELP_STRING([--enable-omrabbitmq],[Compiles omrabbitmq output module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omrabbitmq="yes" ;;
no) enable_omrabbitmq="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omrabbitmq) ;;
esac],
[enable_omrabbitmq=no]
)
if test "x$enable_omrabbitmq" = "xyes"; then
PKG_CHECK_MODULES(RABBITMQ, librabbitmq >= 0.2.0)
AC_SUBST(RABBITMQ_CFLAGS)
AC_SUBST(RABBITMQ_LIBS)
fi
AM_CONDITIONAL(ENABLE_OMRABBITMQ, test x$enable_omrabbitmq = xyes)
# END RABBITMQ SUPPORT
# HIREDIS SUPPORT
AC_ARG_ENABLE(omhiredis,
[AS_HELP_STRING([--enable-omhiredis],[Compiles omhiredis template module @<:@default=no@:>@])],
[case "${enableval}" in
yes) enable_omhiredis="yes" ;;
no) enable_omhiredis="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-omhiredis) ;;
esac],
[enable_omhiredis=no]
)
#
if test "x$enable_omhiredis" = "xyes"; then
PKG_CHECK_MODULES(HIREDIS, hiredis >= 0.10.1)
fi
AM_CONDITIONAL(ENABLE_OMHIREDIS, test x$enable_omhiredis = xyes)
# END HIREDIS SUPPORT
AC_CHECKING([if required man pages already exist])
have_to_generate_man_pages="no"
# man pages for libgcrypt module
if test "x$enable_usertools" = "xyes" && test "x$enable_libgcrypt" = "xyes"; then
AC_CHECK_FILES(["tools/rscryutil.1" "tools/rsgtutil.1"],
[],
[have_to_generate_man_pages="yes"]
)
fi
# man pages for GuardTime module
if test "x$enable_usertools" = "xyes" && test "x$enable_guardtime" = "xyes"; then
AC_CHECK_FILES(["tools/rscryutil.1" "tools/rsgtutil.1"],
[],
[have_to_generate_man_pages="yes"]
)
fi
AC_ARG_ENABLE(generate-man-pages,
[AS_HELP_STRING([--enable-generate-man-pages],[Generate man pages from source @<:@default=yes@:>@])],
[case "${enableval}" in
yes) have_to_generate_man_pages="yes" ;;
no) have_to_generate_man_pages="no" ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-generate-man-pages) ;;
esac],
[have_to_generate_man_pages=yes]
)
if test "x$have_to_generate_man_pages" = "xyes"; then
AC_MSG_RESULT([Some man pages are missing or --enable-generate-man-pages given. We need rst2man to generate man pages from source...])
else
AC_MSG_RESULT([All required man pages found. We don't need rst2man!])
fi
if test "x$have_to_generate_man_pages" = "xyes"; then
# We need rst2man to generate our man pages
AC_CHECK_PROGS([RST2MAN], [rst2man rst2man.py], [])
if test -z "$RST2MAN"; then
AC_MSG_ERROR([rst2man is required to build man pages. You can use the release tarball with pregenerated man pages to avoid this depedency. Use the --disable-generate-man-pages configure option in that case.])
fi
fi
AC_CONFIG_FILES([Makefile \
runtime/Makefile \
compat/Makefile \
grammar/Makefile \
tools/Makefile \
plugins/imudp/Makefile \
plugins/imtcp/Makefile \
plugins/im3195/Makefile \
plugins/imgssapi/Makefile \
plugins/imuxsock/Makefile \
plugins/imjournal/Makefile \
plugins/immark/Makefile \
plugins/imklog/Makefile \
plugins/imkmsg/Makefile \
plugins/omhdfs/Makefile \
plugins/omprog/Makefile \
plugins/mmexternal/Makefile \
plugins/omstdout/Makefile \
plugins/omjournal/Makefile \
plugins/pmrfc3164sd/Makefile \
plugins/pmlastmsg/Makefile \
plugins/pmcisconames/Makefile \
plugins/pmciscoios/Makefile \
plugins/pmsnare/Makefile \
plugins/pmaixforwardedfrom/Makefile \
plugins/omruleset/Makefile \
plugins/omuxsock/Makefile \
plugins/imfile/Makefile \
plugins/imsolaris/Makefile \
plugins/imptcp/Makefile \
plugins/imttcp/Makefile \
plugins/impstats/Makefile \
plugins/imrelp/Makefile \
plugins/imdiag/Makefile \
plugins/imzmq3/Makefile \
plugins/omtesting/Makefile \
plugins/omgssapi/Makefile \
plugins/ommysql/Makefile \
plugins/ompgsql/Makefile \
plugins/omrelp/Makefile \
plugins/omlibdbi/Makefile \
plugins/ommail/Makefile \
plugins/omsnmp/Makefile \
plugins/omoracle/Makefile \
plugins/omudpspoof/Makefile \
plugins/ommongodb/Makefile \
plugins/omhiredis/Makefile \
plugins/omzmq3/Makefile \
plugins/omrabbitmq/Makefile \
plugins/mmnormalize/Makefile \
plugins/mmjsonparse/Makefile \
plugins/mmaudit/Makefile \
plugins/mmanon/Makefile \
plugins/mmutf8fix/Makefile \
plugins/mmcount/Makefile \
plugins/mmsequence/Makefile \
plugins/mmfields/Makefile \
plugins/mmpstrucdata/Makefile \
plugins/mmrfc5424addhmac/Makefile \
plugins/omelasticsearch/Makefile \
plugins/sm_cust_bindcdr/Makefile \
plugins/mmsnmptrapd/Makefile \
java/Makefile \
tests/Makefile])
AC_OUTPUT
echo "****************************************************"
echo "rsyslog will be compiled with the following settings:"
echo
echo " Large file support enabled: $enable_largefile"
echo " Networking support enabled: $enable_inet"
echo " Regular expressions support enabled: $enable_regexp"
echo " Zlib compression support enabled: $enable_zlib"
echo " rsyslog runtime will be built: $enable_rsyslogrt"
echo " rsyslogd will be built: $enable_rsyslogd"
echo " GUI components will be built: $enable_gui"
echo " have to generate man pages: $have_to_generate_man_pages"
echo " Unlimited select() support enabled: $enable_unlimited_select"
echo " uuid support enabled: $enable_uuid"
echo " Log file signing support: $enable_guardtime"
echo " Log file encryption support: $enable_libgcrypt"
echo " anonymization support enabled: $enable_mmanon"
echo " message counting support enabled: $enable_mmcount"
echo " mmfields enabled: $enable_mmfields"
echo
echo "---{ input plugins }---"
echo " Klog functionality enabled: $enable_klog ($os_type)"
echo " /dev/kmsg functionality enabled: $enable_kmsg"
echo " plain tcp input module enabled: $enable_imptcp"
echo " threaded plain tcp input module enabled: $enable_imttcp"
echo " imdiag enabled: $enable_imdiag"
echo " file input module enabled: $enable_imfile"
echo " Solaris input module enabled: $enable_imsolaris"
echo " periodic statistics module enabled: $enable_impstats"
echo " imzmq3 input module enabled: $enable_imzmq3"
echo " imjournal input module enabled: $enable_imjournal"
echo
echo "---{ output plugins }---"
echo " Mail support enabled: $enable_mail"
echo " omprog module will be compiled: $enable_omprog"
echo " omstdout module will be compiled: $enable_omstdout"
echo " omjournal module will be compiled: $enable_omjournal"
echo " omhdfs module will be compiled: $enable_omhdfs"
echo " omelasticsearch module will be compiled: $enable_elasticsearch"
echo " omruleset module will be compiled: $enable_omruleset"
echo " omudpspoof module will be compiled: $enable_omudpspoof"
echo " omuxsock module will be compiled: $enable_omuxsock"
echo " omzmq3 module will be compiled: $enable_omzmq3"
echo " omrabbitmq module will be compiled: $enable_omrabbitmq"
echo
echo "---{ parser modules }---"
echo " pmrfc3164sd module will be compiled: $enable_pmrfc3164sd"
echo " pmlastmsg module will be compiled: $enable_pmlastmsg"
echo " pmcisconames module will be compiled: $enable_pmcisconames"
echo " pmciscoios module will be compiled: $enable_pmciscoios"
echo " pmaixforwardedfrom module w.be compiled: $enable_pmaixforwardedfrom"
echo " pmsnare module will be compiled: $enable_pmsnare"
echo
echo "---{ message modification modules }---"
echo " mmnormalize module will be compiled: $enable_mmnormalize"
echo " mmjsonparse module will be compiled: $enable_mmjsonparse"
echo " mmjaduit module will be compiled: $enable_mmaudit"
echo " mmsnmptrapd module will be compiled: $enable_mmsnmptrapd"
echo " mmutf8fix enabled: $enable_mmutf8fix"
echo " mmrfc5424addhmac enabled: $enable_mmrfc5424addhmac"
echo " mmpstrucdata enabled: $enable_mmpstrucdata"
echo " mmsequence enabled: $enable_mmsequence"
echo
echo "---{ strgen modules }---"
echo " sm_cust_bindcdr module will be compiled: $enable_sm_cust_bindcdr"
echo
echo "---{ database support }---"
echo " MySql support enabled: $enable_mysql"
echo " libdbi support enabled: $enable_libdbi"
echo " PostgreSQL support enabled: $enable_pgsql"
echo " mongodb support enabled: $enable_ommongodb"
echo " hiredis support enabled: $enable_omhiredis"
echo " Oracle (OCI) support enabled: $enable_oracle"
echo
echo "---{ protocol support }---"
echo " GnuTLS network stream driver enabled: $enable_gnutls"
echo " GSSAPI Kerberos 5 support enabled: $enable_gssapi_krb5"
echo " RELP support enabled: $enable_relp"
echo " SNMP support enabled: $enable_snmp"
echo
echo "---{ debugging support }---"
echo " Testbench enabled: $enable_testbench"
echo " Extended Testbench enabled: $enable_extended_tests"
echo " MySQL Tests enabled: $enable_mysql_tests"
echo " Debug mode enabled: $enable_debug"
echo " Runtime Instrumentation enabled: $enable_rtinst"
echo " (total) debugless mode enabled: $enable_debugless"
echo " Diagnostic tools enabled: $enable_diagtools"
echo " End-User tools enabled: $enable_usertools"
echo " Enhanced memory checking enabled: $enable_memcheck"
echo " Valgrind support settings enabled: $enable_valgrind"
echo