X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=configure.ac;h=420021f628ab81d61a4e898fe1acdc6c3d173f2a;hp=dde772705dc6a913524116a4e4399dd044f0b823;hb=982bbbce08caed783b941ad8141596caf01079c6;hpb=2e2e989712ec5991526b3aaeec011440adb5bf7e diff --git a/configure.ac b/configure.ac index dde7727..420021f 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,7 @@ AC_CONFIG_SRCDIR([src/sysdb.c]) AC_CONFIG_HEADERS([src/config.h]) 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 +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,11 +169,13 @@ 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 \ @@ -184,6 +193,64 @@ 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]) + +m4_divert_once([HELP_ENABLE], [ +Build dependencies:]) + dnl Testing. PKG_CHECK_MODULES([CHECK], [check >= 0.9.4], [build_testing="yes"], [build_testing="no"]) @@ -195,11 +262,15 @@ 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"; then +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"]) -fi + [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"], @@ -219,6 +290,87 @@ 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" @@ -260,10 +412,14 @@ 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]) -AC_SDB_PLUGIN([syslog], [yes], - [plugin logging to syslog]) + +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([BUILD_TESTING], test "x$build_testing" = "xyes") @@ -293,9 +449,12 @@ AC_MSG_RESULT([ Features:]) AC_MSG_RESULT([ documentation: . . . . . . $build_documentation]) AC_MSG_RESULT([ unit testing: . . . . . . . $build_testing]) AC_MSG_RESULT([ stdio mocking: . . . . . $have_fopencookie]) +AC_MSG_RESULT([ coverage testing: . . . . . $enable_gcov]) 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]) @@ -304,6 +463,7 @@ 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.])