diff --git a/configure.ac b/configure.ac
index 10c18c9add8aa80b8e2ff60fb132958722242d50..897112ef97192f7ffa847b3fc7b4ad2c842ecd8e 100644 (file)
--- a/configure.ac
+++ b/configure.ac
PACKAGE_MAINTAINER="Sebastian 'tokkee' Harl <tokkee@sysdb.io>"
AC_DEFINE_UNQUOTED([PACKAGE_MAINTAINER], ["$PACKAGE_MAINTAINER"],
[Define to the name of the maintainer of this package.])
PACKAGE_MAINTAINER="Sebastian 'tokkee' Harl <tokkee@sysdb.io>"
AC_DEFINE_UNQUOTED([PACKAGE_MAINTAINER], ["$PACKAGE_MAINTAINER"],
[Define to the name of the maintainer of this package.])
+if test "x$PACKAGE_URL" = "x"; then
+ PACKAGE_URL="https://sysdb.io/"
+ AC_DEFINE_UNQUOTED([PACKAGE_URL], ["$PACKAGE_URL"],
+ [Define to the home page for this package.])
+fi
+
AC_CONFIG_SRCDIR([src/sysdb.c])
AC_CONFIG_HEADERS([src/config.h])
AC_PREFIX_DEFAULT([/opt/sysdb])
AC_CONFIG_SRCDIR([src/sysdb.c])
AC_CONFIG_HEADERS([src/config.h])
AC_PREFIX_DEFAULT([/opt/sysdb])
done
fi
done
fi
+dnl We need C++11 for facter.
+AC_MSG_CHECKING([whether $CXX accepts -std=c++11])
+if test_cxx_flags -std=c++11; then
+ CXXFLAGS="$CXXFLAGS -std=c++11"
+ AC_MSG_RESULT([yes])
+else
+ # Oh well, the header check will determine if it works anyway.
+ AC_MSG_RESULT([no])
+fi
+
dnl Hardening (see e.g. http://wiki.debian.org/Hardening for a motivation).
AC_DEFINE([_FORTIFY_SOURCE], 2,
[Define to enable protection against static sized buffer overflows.])
dnl Hardening (see e.g. http://wiki.debian.org/Hardening for a motivation).
AC_DEFINE([_FORTIFY_SOURCE], 2,
[Define to enable protection against static sized buffer overflows.])
AC_SUBST([PROFILING_CFLAGS])
AC_SUBST([PROFILING_LDFLAGS])
AC_SUBST([PROFILING_CFLAGS])
AC_SUBST([PROFILING_LDFLAGS])
+ieee754_layout="unknown"
+AC_MSG_CHECKING([the memory layout of double precision values])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <string.h>
+#include <inttypes.h>
+ ]],
+ [[
+double d = 3.141592653e130;
+char c[8];
+if (sizeof(d) != 8)
+ return 2;
+memcpy(&c, &d, 8);
+if (c[0] == '\x04' && c[1] == '\x10' && c[2] == '\x1E' && c[3] == '\x66' &&
+ c[4] == '\x40' && c[5] == '\xA9' && c[6] == '\x06' && c[7] == '\x5B')
+ return 0;
+else
+ return 1;
+ ]]
+ )],
+ [ieee754_layout="little-endian"], [ieee754_layout="unknown"])
+if test "x$ieee754_layout" = "xunknown"; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <string.h>
+#include <inttypes.h>
+ ]],
+ [[
+double d = 3.141592653e130;
+char c[8];
+if (sizeof(d) != 8)
+ return 2;
+memcpy(&c, &d, 8);
+if (c[7] == '\x04' && c[6] == '\x10' && c[5] == '\x1E' && c[4] == '\x66' &&
+ c[3] == '\x40' && c[2] == '\xA9' && c[1] == '\x06' && c[0] == '\x5B')
+ return 0;
+else
+ return 1;
+ ]]
+ )],
+ [ieee754_layout="big-endian"], [ieee754_layout="unknown"])
+fi
+AC_MSG_RESULT([IEEE-754 $ieee754_layout])
+
+AC_DEFINE([IEEE754_DOUBLE_LITTLE_ENDIAN], 1234,
+ [Identifier for IEEE-754 little-endian encoding of double precision values])
+AC_DEFINE([IEEE754_DOUBLE_BIG_ENDIAN], 4321,
+ [Identifier for IEEE-754 big-endian encoding of double precision values])
+if test "x$ieee754_layout" = "xlittle-endian"; then
+ AC_DEFINE([IEEE754_DOUBLE_BYTE_ORDER], 1234,
+ [Define to 1 if double precision values use IEEE-754 little-endian encoding])
+else if test "x$ieee754_layout" = "xbig-endian"; then
+ AC_DEFINE([IEEE754_DOUBLE_BYTE_ORDER], 4321,
+ [Define to 1 if double precision values use IEEE-754 little-endian encoding])
+else
+ AC_MSG_ERROR([Unknown memory layout of double precision values])
+fi; fi
+
m4_divert_once([HELP_ENABLE], [
Build dependencies:])
m4_divert_once([HELP_ENABLE], [
Build dependencies:])
+AC_CHECK_HEADERS([ucred.h])
+dnl On OpenBSD, sys/param.h is required for sys/ucred.h.
+AC_CHECK_HEADERS([sys/ucred.h], [], [],
+ [[ #include <sys/param.h> ]])
+
+AC_CHECK_TYPES([struct ucred],
+ [have_struct_ucred="yes"], [have_struct_ucred="no"],
+ [[
+#include <sys/socket.h>
+#include <sys/param.h>
+#if HAVE_UCRED_H
+# include <ucred.h>
+#endif
+ ]])
+
+if test "x$have_struct_ucred" != "xyes"; then
+ AC_MSG_CHECKING([for struct ucred when using _GNU_SOURCE])
+ orig_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -D_GNU_SOURCE"
+ dnl Don't reuse AC_CHECK_HEADERS; for one it'll use the cached value
+ dnl but also, it will print the "checking for" message a second time.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <sys/socket.h>
+#include <sys/param.h>
+#if HAVE_UCRED_H
+# include <ucred.h>
+#endif
+ ]],
+ [if (sizeof(struct ucred)) return 0;]
+ )],
+ [have_struct_ucred="yes"], [have_struct_ucred="no"])
+ CFLAGS="$orig_CFLAGS"
+ if test "x$have_struct_ucred" = "xyes"; then
+ AC_DEFINE([_GNU_SOURCE], 1, [Define to enable GNU features.])
+ fi
+ AC_MSG_RESULT([$have_struct_ucred])
+fi
+
dnl Testing.
PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
[unit_tests="yes"], [unit_tests="no"])
dnl Testing.
PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
[unit_tests="yes"], [unit_tests="no"])
AC_DEFINE([HAVE_FOPENCOOKIE], 1)
fi
AC_DEFINE([HAVE_FOPENCOOKIE], 1)
fi
+dnl OpenSSL support
+PKG_CHECK_MODULES([OPENSSL], [openssl], [have_openssl="yes"], [have_openssl="no"])
+if test "x$have_openssl" != "xyes"; then
+ AC_MSG_ERROR([OpenSSL not found])
+fi
+
dnl readline support
AC_ARG_WITH([readline],
[AS_HELP_STRING([--with-readline],
dnl readline support
AC_ARG_WITH([readline],
[AS_HELP_STRING([--with-readline],
AC_SUBST([READLINE_CFLAGS])
AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
AC_SUBST([READLINE_CFLAGS])
AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
+AC_LANG_PUSH(C++)
+AC_ARG_WITH([libfacter],
+ [AS_HELP_STRING([--with-libfacter], [libfacter support (default: auto)])],
+ [with_libfacter="$withval"],
+ [with_libfacter="yes"])
+if test "x$with_libfacter" = "xyes" || test "x$with_libfacter" = "xauto"; then
+ AC_CHECK_HEADERS([facter/facts/collection.hpp],
+ [have_libfacter="yes"],
+ [have_libfacter="no (facter/facts/collection.hpp not found)"])
+else if test "x$with_libfacter" = "xno"; then
+ have_libfacter="$with_libfacter (disabled on command-line)"
+else
+ AC_MSG_ERROR([Invalid value for option --with-libfacter=$with_libfacter (expected "yes", "no", or "auto")])
+fi; fi
+if test "x$have_libfacter" = "xyes"; then
+ AC_MSG_CHECKING([for facter::facts::collection in -lfacter])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[ #include <facter/facts/collection.hpp> ]],
+ [[
+ facter::facts::collection facts;
+ facts.add_default_facts();
+ ]]
+ )],
+ [TEST_LIBS=$TEST_LIBS -lfacter],
+ [have_libfacter="yes"],
+ [have_libfacter="no (libfacter not found)"])
+ AC_MSG_RESULT([$have_libfacter])
+fi
+AC_LANG_POP(C++)
+
AC_ARG_WITH([librrd],
[AS_HELP_STRING([--with-librrd], [librrd support (default: auto)])],
[with_librrd="$withval"],
AC_ARG_WITH([librrd],
[AS_HELP_STRING([--with-librrd], [librrd support (default: auto)])],
[with_librrd="$withval"],
AM_CONDITIONAL([INTEGRATION_TESTING], test "x$integration_tests" = "xyes")
dnl Plugin checks.
AM_CONDITIONAL([INTEGRATION_TESTING], test "x$integration_tests" = "xyes")
dnl Plugin checks.
+facter_default=$have_libfacter
+if test "x$facter_default" != "xyes"; then
+ facter_default="no (requires libfacter)"
+fi
puppet_storeconfigs_default=$with_libdbi
if test "x$puppet_storeconfigs_default" != "xyes"; then
puppet_storeconfigs_default="no (requires libdbi)"
puppet_storeconfigs_default=$with_libdbi
if test "x$puppet_storeconfigs_default" != "xyes"; then
puppet_storeconfigs_default="no (requires libdbi)"
AC_SDB_PLUGIN_INIT
AC_SDB_PLUGIN([collectd-unixsock], [yes],
[backend accessing the system statistics collection daemon])
AC_SDB_PLUGIN_INIT
AC_SDB_PLUGIN([collectd-unixsock], [yes],
[backend accessing the system statistics collection daemon])
+AC_SDB_PLUGIN([facter], [$facter_default],
+ [backend retrieving local facter facts])
AC_SDB_PLUGIN([mk-livestatus], [yes],
[backend accessing Nagios/Icinga/Shinken using MK Livestatus])
AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
AC_SDB_PLUGIN([mk-livestatus], [yes],
[backend accessing Nagios/Icinga/Shinken using MK Livestatus])
AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
AC_SDB_PLUGIN([timeseries-rrdtool], [$rrdtool_default],
[fetch time-series data from RRD files])
AC_SDB_PLUGIN([timeseries-rrdtool], [$rrdtool_default],
[fetch time-series data from RRD files])
+m4_divert_once([HELP_ENABLE], [
+Store implementations:])
+AC_SDB_PLUGIN([store-memory], [yes],
+ [store objects in a volatile, in-memory database (read/write)])
+AC_SDB_PLUGIN([store-network], [yes],
+ [send stored objects to a remote instance (write only)])
+
m4_divert_once([HELP_ENABLE], [
Plugins:])
m4_divert_once([HELP_ENABLE], [
Plugins:])
BUILD_DATE="`date --utc '+%F %T'` (UTC)"
BUILD_DATE="`date --utc '+%F %T'` (UTC)"
+asciidoc_info="$have_asciidoc"
+if test "x$have_asciidoc" = "xyes"; then
+ asciidoc_info="`$ASCIIDOC --version`"
+fi
+xmlto_info="$have_xmlto"
+if test "x$have_xmlto" = "xyes"; then
+ xmlto_info="`$XMLTO --version`"
+fi
+
+if test "x$unit_tests" = "xyes"; then
+ unit_tests="yes (check `$PKG_CONFIG --modversion check`)"
+fi
+
+openssl_info="$have_openssl"
+if test "x$have_openssl" = "xyes"; then
+ openssl_info="yes (version `$PKG_CONFIG --modversion openssl`)"
+fi
+libedit_info="$have_libedit"
+if test "x$have_libedit" = "xyes"; then
+ libedit_info="yes (version `$PKG_CONFIG --modversion libedit`)"
+fi
+librrd_info="$have_librrd"
+if test "x$have_librrd" = "xyes"; then
+ librrd_info="yes (version `$PKG_CONFIG --modversion librrd`)"
+fi
+
AC_MSG_RESULT()
AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
AC_MSG_RESULT()
AC_MSG_RESULT()
AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
AC_MSG_RESULT()
AC_MSG_RESULT([ build date: $BUILD_DATE])
AC_MSG_RESULT()
AC_MSG_RESULT([ Tools:])
AC_MSG_RESULT([ build date: $BUILD_DATE])
AC_MSG_RESULT()
AC_MSG_RESULT([ Tools:])
-AC_MSG_RESULT([ AsciiDoc: . . . . . . . . . $have_asciidoc])
-AC_MSG_RESULT([ xmlto: . . . . . . . . . . $have_xmlto])
+AC_MSG_RESULT([ AsciiDoc: . . . . . . . . . $asciidoc_info])
+AC_MSG_RESULT([ xmlto: . . . . . . . . . . $xmlto_info])
AC_MSG_RESULT()
AC_MSG_RESULT([ Features:])
AC_MSG_RESULT([ documentation: . . . . . . $build_documentation])
AC_MSG_RESULT()
AC_MSG_RESULT([ Features:])
AC_MSG_RESULT([ documentation: . . . . . . $build_documentation])
AC_MSG_RESULT()
AC_MSG_RESULT([ Libraries:])
AC_MSG_RESULT([ libdbi: . . . . . . . . . . $with_libdbi])
AC_MSG_RESULT()
AC_MSG_RESULT([ Libraries:])
AC_MSG_RESULT([ libdbi: . . . . . . . . . . $with_libdbi])
-AC_MSG_RESULT([ libedit: . . . . . . . . . $have_libedit])
+AC_MSG_RESULT([ libedit: . . . . . . . . . $libedit_info])
+AC_MSG_RESULT([ libopenssl: . . . . . . . . $openssl_info])
AC_MSG_RESULT([ libreadline: . . . . . . . $have_libreadline])
AC_MSG_RESULT([ libreadline: . . . . . . . $have_libreadline])
-AC_MSG_RESULT([ librrd: . . . . . . . . . . $have_librrd])
+AC_MSG_RESULT([ librrd: . . . . . . . . . . $librrd_info])
AC_MSG_RESULT()
AC_MSG_RESULT([ Backends:])
AC_MSG_RESULT([ collectd::unixsock: . . . . $enable_collectd_unixsock])
AC_MSG_RESULT()
AC_MSG_RESULT([ Backends:])
AC_MSG_RESULT([ collectd::unixsock: . . . . $enable_collectd_unixsock])
+AC_MSG_RESULT([ facter . . . . . . . . . . $enable_facter])
AC_MSG_RESULT([ mk-livestatus: . . . . . . $enable_mk_livestatus])
AC_MSG_RESULT([ puppet::storeconfigs: . . . $enable_puppet_storeconfigs])
AC_MSG_RESULT()
AC_MSG_RESULT([ Time-series fetchers:])
AC_MSG_RESULT([ rrdtool: . . . . . . . . . $enable_timeseries_rrdtool])
AC_MSG_RESULT()
AC_MSG_RESULT([ mk-livestatus: . . . . . . $enable_mk_livestatus])
AC_MSG_RESULT([ puppet::storeconfigs: . . . $enable_puppet_storeconfigs])
AC_MSG_RESULT()
AC_MSG_RESULT([ Time-series fetchers:])
AC_MSG_RESULT([ rrdtool: . . . . . . . . . $enable_timeseries_rrdtool])
AC_MSG_RESULT()
+AC_MSG_RESULT([ Store implementations:])
+AC_MSG_RESULT([ memory: . . . . . . . . . . $enable_store_memory])
+AC_MSG_RESULT([ network (writer): . . . . . $enable_store_network])
+AC_MSG_RESULT()
AC_MSG_RESULT([ Plugins:])
AC_MSG_RESULT([ cname::dns: . . . . . . . . $enable_cname_dns])
AC_MSG_RESULT([ syslog: . . . . . . . . . . $enable_syslog])
AC_MSG_RESULT([ Plugins:])
AC_MSG_RESULT([ cname::dns: . . . . . . . . $enable_cname_dns])
AC_MSG_RESULT([ syslog: . . . . . . . . . . $enable_syslog])