X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=configure.ac;h=b94b2a0e0fca679d3f55f697649f177d39e64e51;hp=fe9331df053cb85ef664fa5d3c1c452ef2b4bb27;hb=56b97a180a53aecbfe9f7162b8ece3faae973cf9;hpb=bf3b8e60b2fdc493c4e04b05ce67abf69ca9a4ff diff --git a/configure.ac b/configure.ac index fe9331d..b94b2a0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl This is the syscollector configure script. +dnl This is the SysDB configure script. dnl dnl Copyright (C) 2012 Sebastian 'tokkee' Harl dnl All rights reserved. @@ -26,18 +26,18 @@ dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR dnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF dnl ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -AC_INIT([system collector],[m4_esyscmd(./version-gen.sh)], - [sh@tokkee.org], - [syscollector], - [http://git.tokkee.org/?p=syscollector.git]) -PACKAGE_MAINTAINER="Sebastian 'tokkee' Harl " +AC_INIT([System DataBase],[m4_esyscmd(./version-gen.sh)], + [sysdb@sysdb.io], + [sysdb], + [http://sysdb.io/]) +PACKAGE_MAINTAINER="Sebastian 'tokkee' Harl " AC_DEFINE_UNQUOTED([PACKAGE_MAINTAINER], ["$PACKAGE_MAINTAINER"], [Define to the name of the maintainer of this package.]) -AC_CONFIG_SRCDIR([src/syscollector.c]) +AC_CONFIG_SRCDIR([src/sysdb.c]) AC_CONFIG_HEADERS([src/config.h]) -AC_PREFIX_DEFAULT([/opt/syscollector]) +AC_PREFIX_DEFAULT([/opt/sysdb]) -AM_INIT_AUTOMAKE([foreign -Wall]) +AM_INIT_AUTOMAKE([foreign subdir-objects -Wall]) AC_LANG(C) @@ -48,6 +48,7 @@ AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET +m4_ifdef([AM_PROG_AR],[AM_PROG_AR],[]) AM_PROG_CC_C_O AM_PROG_LEX @@ -78,6 +79,8 @@ test_cc_flags() { return $ret } +STRICT_CFLAGS="" + m4_divert_once([HELP_ENABLE], [ Build options:]) @@ -93,18 +96,23 @@ if test "x$enable_standards" = "xyes"; then [Define to enforce ISO/IEC 9899:1999 (C99) compliance.]) AC_DEFINE([_POSIX_C_SOURCE], 200112L, [Define to enforce IEEE 1003.1-2001 (POSIX:2001) compliance.]) - AC_DEFINE([_XOPEN_SOURCE], 600, - [Define to enforce X/Open 6 (XSI) compliance.]) + AC_DEFINE([_XOPEN_SOURCE], 700, + [Define to enforce X/Open 7 (XSI) compliance.]) AC_DEFINE([_REENTRANT], 1, [Define to enable reentrant interfaces.]) AC_DEFINE([_THREAD_SAFE], 1, [Define to enable reentrant interfaces.]) - for flag in -std=c99 -pedantic; do + dnl GNU libc defines strcasecmp() only when using _BSD_SOURCE even though + dnl the function is conforming to POSIX.1-2001 as well. Let's weaken + dnl strict standards compliance a bit to work around this. + AC_DEFINE([_BSD_SOURCE], 1, [Define to enable 4.3BSD support.]) + + for flag in -std=c99; do AC_MSG_CHECKING([whether $CC accepts $flag]) if test_cc_flags $flag; then - CFLAGS="$CFLAGS $flag" + STRICT_CFLAGS="$STRICT_CFLAGS $flag" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) @@ -129,7 +137,7 @@ if test "x$enable_hardening" = "xyes"; then AC_MSG_CHECKING([whether $CC accepts $flag]) if test_cc_flags $flag; then - CFLAGS="$CFLAGS $flag" + STRICT_CFLAGS="$STRICT_CFLAGS $flag" hardening=$(($hardening + 1)) AC_MSG_RESULT([yes]) else @@ -149,7 +157,6 @@ AC_ARG_ENABLE([strict-checks], [enable_strict_checks="$enableval"], [enable_strict_checks="yes"]) -STRICT_CFLAGS="" for flag in -Wall -Werror; do AC_MSG_CHECKING([whether $CC accepts $flag]) @@ -162,17 +169,18 @@ for flag in -Wall -Werror; do done if test "x$enable_strict_checks" = "xyes"; then + dnl -Wsign-conversion may cause problems in expanded macros from libc for flag in -Wextra \ -Wbad-function-cast \ -Wcast-align \ -Wcast-qual \ -Wconversion \ + -Wno-sign-conversion \ -Wdeclaration-after-statement \ -Wmissing-prototypes \ -Wpointer-arith \ -Wshadow \ - -Wstrict-prototypes \ - -Wunreachable-code; do + -Wstrict-prototypes; do AC_MSG_CHECKING([whether $CC accepts $flag]) if test_cc_flags $flag; then @@ -185,37 +193,280 @@ if test "x$enable_strict_checks" = "xyes"; then fi AC_SUBST([STRICT_CFLAGS]) +AC_ARG_ENABLE([gcov], + AS_HELP_STRING([--enable-gcov], + [Gcov coverage statistics @<:@default=no@:>@]), + [enable_gcov="$enableval"], + [enable_gcov="no"]) + +dnl $GCC is based on some heuristics which might apply to clang as well. +dnl However, clang does not support gcov. +cc_is_gcc="no" +case "x$CC" in + xgcc) + cc_is_gcc="yes" + ;; + xgcc-*) + cc_is_gcc="yes" + ;; +esac + +COVERAGE_CFLAGS="" +COVERAGE_LDFLAGS="" +if test "x$enable_gcov" = "xyes" && test "x$GCC$cc_is_gcc" == "xyesyes"; then + COVERAGE_CFLAGS="-O0" + cov_flag_have_problem="no" + + AC_MSG_CHECKING([whether $CC accepts --coverage]) + if test_cc_flags --coverage; then + COVERAGE_CFLAGS="$COVERAGE_CFLAGS --coverage" + COVERAGE_LDFLAGS="$COVERAGE_LDFLAGS --coverage" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + cov_flag_have_problem="yes" + fi + + for flag in -fno-inline; do + AC_MSG_CHECKING([whether $CC accepts $flag]) + if test_cc_flags $flag; then + COVERAGE_CFLAGS="$COVERAGE_CFLAGS $flag" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + cov_flag_have_problem="yes" + fi + done + + if test "x$cov_flag_have_problem" != "xno"; then + AC_MSG_WARN([Some coverage flags are not supported by your compiler!]) + fi +else if test "x$enable_gcov" = "xyes"; then + AC_MSG_WARN([Your compiler ($CC) is not known to support Gcov!]) + enable_gcov="no (requires GCC)" +fi; fi +AC_SUBST([COVERAGE_CFLAGS]) +AC_SUBST([COVERAGE_LDFLAGS]) + +AC_ARG_ENABLE([gprof], + AS_HELP_STRING([--enable-gprof], + [Gprof profiling @<:@default=no@:>@]), + [enable_gprof="$enableval"], + [enable_gprof="no"]) + +PROFILING_CFLAGS="" +PROFILING_LDFLAGS="" +if test "x$enable_gprof" = "xyes"; then + PROFILING_CFLAGS="-O0" + profiling_flag_have_problem="no" + + AC_MSG_CHECKING([whether $CC accepts -pg]) + if test_cc_flags -pg; then + PROFILING_CFLAGS="$PROFILING_CFLAGS -pg" + PROFILING_LDFLAGS="$PROFILING_LDFLAGS -pg" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + profiling_flag_have_problem="yes" + fi + + for flag in -fprofile-arcs; do + AC_MSG_CHECKING([whether $CC accepts $flag]) + if test_cc_flags $flag; then + PROFILING_CFLAGS="$PROFILING_CFLAGS $flag" + AC_MSG_RESULT([yes]) + fi + # else: this is not a serious problem + done + + if test "x$profiling_flag_have_problem" != "xno"; then + AC_MSG_WARN([Some profiling flags are not supported by your compiler!]) + fi +fi +AC_SUBST([PROFILING_CFLAGS]) +AC_SUBST([PROFILING_LDFLAGS]) + +m4_divert_once([HELP_ENABLE], [ +Build dependencies:]) + +dnl Testing. +PKG_CHECK_MODULES([CHECK], [check >= 0.9.4], + [unit_tests="yes"], [unit_tests="no"]) + AC_CHECK_HEADERS(libgen.h) dnl Check for dependencies. +AC_ARG_WITH([libdbi], + [AS_HELP_STRING([--with-libdbi], [libdbi support (default: auto)])], + [with_libdbi="$withval"], + [with_libdbi="yes"]) +if test "x$with_libdbi" = "xyes" || test "x$with_libdbi" = "xauto"; then + AC_CHECK_HEADERS([dbi/dbi.h], + [with_libdbi="yes"], + [with_libdbi="no (dbi/dbi.h not found)"]) +else if test "x$with_libdbi" = "xno"; then + with_libdbi="$with_libdbi (disabled on command-line)" +else + AC_MSG_ERROR([Invalid value for option --with-libdbi=$with_libdbi (expected "yes", "no", or "auto")]) +fi; fi +if test "x$with_libdbi" = "xyes"; then + AC_CHECK_LIB([dbi], [dbi_initialize], + [with_libdbi="yes"], + [with_libdbi="no (libdbi or symbol 'dbi_initialize' not found)"]) +fi +AM_CONDITIONAL([BUILD_WITH_LIBDBI], test "x$with_libdbi" = "xyes") + +dnl Required for mocking FILE related functions. +orig_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -D_GNU_SOURCE" +AC_CHECK_FUNCS([fopencookie], + [have_fopencookie="yes"], + [have_fopencookie="no (fopencookie not available)"]) +CFLAGS="$orig_CFLAGS" +AM_CONDITIONAL([BUILD_WITH_FOPENCOOKIE], test "x$have_fopencookie" = "xyes") +if test "x$have_fopencookie" = "xyes"; then + AC_DEFINE([HAVE_FOPENCOOKIE], 1) +fi + +dnl readline support +AC_ARG_WITH([readline], + [AS_HELP_STRING([--with-readline], + [readline support (libedit/libreadline) (default: auto, prefer libedit)])], + [readline_support="$withval"], + [readline_support="auto"]) + +if test "x$readline_support" = "xyes"; then + readline_support="auto" +else if test "x$readline_support" != "xauto" \ + && test "x$readline_support" != "xno" \ + && test "x$readline_support" != "xlibedit" \ + && test "x$readline_support" != "xlibreadline"; then + AC_MSG_ERROR([Invalid value for option --with-readline=$readline_support (expected "yes", "no", "auto", "libedit", or "libreadline")]) +fi; fi + +have_libedit="no" +if test "x$readline_support" = "xauto" \ + || test "x$readline_support" = "xlibedit"; then + PKG_CHECK_MODULES([LIBEDIT], [libedit], + [have_libedit="yes"], [have_libedit="no"]) + if test "x$have_libedit" = "xyes"; then + AC_CHECK_HEADERS([editline/readline.h], [], + [AC_CHECK_HEADERS([readline.h], [], + [have_libedit="no (readline header not found"])]) + fi + if test "x$have_libedit" = "xyes"; then + AC_CHECK_HEADERS([editline/history.h], [], + [AC_CHECK_HEADERS([history.h], [], + [have_libedit="no (history header not found"])]) + fi +else + have_libedit="disabled on command-line" +fi + +have_libreadline="no" +if test "x$have_libedit" != "xyes"; then + if test "x$readline_support" = "xauto" \ + || test "x$readline_support" = "xlibreadline"; then + AC_CHECK_LIB([readline], [readline], + [have_libreadline="yes"], + [have_libreadline="no (libreadline or symbol 'readline' not found)"]) + fi + if test "x$have_libreadline" = "xyes"; then + AC_CHECK_HEADERS([readline/readline.h], [], + [AC_CHECK_HEADERS([readline.h], [], + [have_libreadline="no (readline header not found"])]) + fi + if test "x$have_libreadline" = "xyes"; then + AC_CHECK_HEADERS([readline/history.h], [], + [AC_CHECK_HEADERS([history.h], [], + [have_libreadline="no (history header not found"])]) + fi +else + have_libreadline="unchecked (prefer libedit)" +fi + +if test "x$have_libedit" = "xyes"; then + READLINE_LIBS="$LIBEDIT_LIBS" + READLINE_CFLAGS="$LIBEDIT_CFLAGS" + readline_support="libedit" +else if test "x$have_libreadline" = "xyes"; then + READLINE_LIBS="-lreadline -lhistory" + READLINE_CFLAGS="" + readline_support="libreadline" +else + READLINE_LIBS="" + READLINE_CFLAGS="" + if test "x$readline_support" = "xno"; then + AC_MSG_WARN([*** readline support disabled; disabling SysDB client]) + else if test "x$readline_support" = "xauto"; then + AC_MSG_WARN([*** readline not found; disabling SysDB client]) + else + AC_MSG_ERROR([readline not found]) + fi; fi + readline_support="no" +fi; fi +AC_SUBST([READLINE_LIBS]) +AC_SUBST([READLINE_CFLAGS]) +AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no") + +dnl Feature checks. build_documentation="yes" -have_xsltproc="yes" -AC_PATH_PROG([XSLTPROC], [xsltproc]) -if test "x$XSLTPROC" = "x"; then - have_xsltproc="no" - build_documentation="no (missing xsltproc)" +have_xmlto="yes" +AC_PATH_PROG([XMLTO], [xmlto]) +if test "x$XMLTO" = "x"; then + have_xmlto="no" + build_documentation="no (missing xmlto)" +fi +AC_SUBST([XMLTO]) + +have_asciidoc="yes" +AC_PATH_PROG([ASCIIDOC], [asciidoc]) +if test "x$ASCIIDOC" = "x"; then + have_asciidoc="no" + build_documentation="no (missing asciidoc)" fi +AC_SUBST([ASCIIDOC]) + +AC_ARG_VAR([ADOCFLAGS], [AsciiDoc flags]) -have_a2x="yes" -AC_PATH_PROG([A2X], [a2x]) -if test "x$A2X" = "x"; then - have_a2x="no" - build_documentation="no (missing a2x)" +integration_tests="yes" +AC_PATH_PROG([VALGRIND], [valgrind]) +if test "x$VALGRIND" = "x"; then + integration_tests="no (missing valgrind)" +fi +AM_CONDITIONAL([INTEGRATION_TESTING], test "x$integration_tests" = "xyes") + +dnl Plugin checks. +puppet_storeconfigs_default=$with_libdbi +if test "x$puppet_storeconfigs_default" != "xyes"; then + puppet_storeconfigs_default="no (requires libdbi)" fi -AC_SUBST([A2X]) m4_divert_once([HELP_ENABLE], [ Backends:]) -AC_SC_PLUGIN_INIT -AC_SC_PLUGIN([collectd], [yes], +AC_SDB_PLUGIN_INIT +AC_SDB_PLUGIN([collectd], [yes], [backend accessing the system statistics collection daemon]) +AC_SDB_PLUGIN([mk-livestatus], [yes], + [backend accessing Nagios/Icinga/Shinken using MK Livestatus]) +AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default], + [backend accessing the Puppet stored configuration database]) + +m4_divert_once([HELP_ENABLE], [ +Plugins:]) + +AC_SDB_PLUGIN([cname-dns], [yes], + [canonicalize hostnames by querying DNS]) +AC_SDB_PLUGIN([syslog], [yes], + [plugin logging to syslog]) AM_CONDITIONAL([BUILD_DOCUMENTATION], test "x$build_documentation" = "xyes") +AM_CONDITIONAL([UNIT_TESTING], test "x$unit_tests" = "xyes") AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile - src/liboconfig/Makefile]) + src/liboconfig/Makefile t/Makefile]) AC_OUTPUT BUILD_DATE="`date --utc '+%F %T'` (UTC)" @@ -232,16 +483,33 @@ AC_MSG_RESULT([ package version: $PACKAGE_VERSION]) AC_MSG_RESULT([ build date: $BUILD_DATE]) AC_MSG_RESULT() AC_MSG_RESULT([ Tools:]) -AC_MSG_RESULT([ AsciiDoc (a2x): . . . . . . $have_a2x]) -AC_MSG_RESULT([ xsltproc: . . . . . . . . . $have_xsltproc]) +AC_MSG_RESULT([ AsciiDoc: . . . . . . . . . $have_asciidoc]) +AC_MSG_RESULT([ xmlto: . . . . . . . . . . $have_xmlto]) AC_MSG_RESULT() AC_MSG_RESULT([ Features:]) AC_MSG_RESULT([ documentation: . . . . . . $build_documentation]) +AC_MSG_RESULT([ unit testing: . . . . . . . $unit_tests]) +AC_MSG_RESULT([ stdio mocking: . . . . . $have_fopencookie]) +AC_MSG_RESULT([ coverage testing: . . . . . $enable_gcov]) +AC_MSG_RESULT([ integration testing: . . . $integration_tests]) +AC_MSG_RESULT([ profiling: . . . . . . . . $enable_gprof]) +AC_MSG_RESULT() +AC_MSG_RESULT([ Libraries:]) +AC_MSG_RESULT([ libdbi: . . . . . . . . . . $with_libdbi]) +AC_MSG_RESULT([ libedit: . . . . . . . . . $have_libedit]) +AC_MSG_RESULT([ libreadline: . . . . . . . $have_libreadline]) AC_MSG_RESULT() AC_MSG_RESULT([ Backends:]) AC_MSG_RESULT([ collectd: . . . . . . . . . $enable_collectd]) +AC_MSG_RESULT([ mk-livestatus: . . . . . . $enable_mk_livestatus]) +AC_MSG_RESULT([ puppet-storeconfigs: . . . $enable_puppet_storeconfigs]) +AC_MSG_RESULT() +AC_MSG_RESULT([ Plugins:]) +AC_MSG_RESULT([ cname::dns: . . . . . . . . $enable_cname_dns]) +AC_MSG_RESULT([ syslog: . . . . . . . . . . $enable_syslog]) AC_MSG_RESULT() AC_MSG_RESULT([This package is maintained by $PACKAGE_MAINTAINER.]) AC_MSG_RESULT([Please report bugs to $PACKAGE_BUGREPORT.]) AC_MSG_RESULT() +dnl vim: set tw=78 sw=4 ts=4 noexpandtab :