Code

configure: Disable -Wsign-conversion.
[sysdb.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 dnl This is the SysDB configure script.
4 dnl
5 dnl Copyright (C) 2012 Sebastian 'tokkee' Harl <sh@tokkee.org>
6 dnl All rights reserved.
7 dnl
8 dnl Redistribution and use in source and binary forms, with or without
9 dnl modification, are permitted provided that the following conditions
10 dnl are met:
11 dnl 1. Redistributions of source code must retain the above copyright
12 dnl    notice, this list of conditions and the following disclaimer.
13 dnl 2. Redistributions in binary form must reproduce the above copyright
14 dnl    notice, this list of conditions and the following disclaimer in the
15 dnl    documentation and/or other materials provided with the distribution.
16 dnl
17 dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 dnl ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 dnl TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
21 dnl CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24 dnl OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26 dnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27 dnl ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 AC_INIT([System DataBase],[m4_esyscmd(./version-gen.sh)],
30                 [sh@tokkee.org],
31                 [sysdb],
32                 [http://git.tokkee.org/?p=sysdb.git])
33 PACKAGE_MAINTAINER="Sebastian 'tokkee' Harl <sh@tokkee.org>"
34 AC_DEFINE_UNQUOTED([PACKAGE_MAINTAINER], ["$PACKAGE_MAINTAINER"],
35                 [Define to the name of the maintainer of this package.])
36 AC_CONFIG_SRCDIR([src/sysdb.c])
37 AC_CONFIG_HEADERS([src/config.h])
38 AC_PREFIX_DEFAULT([/opt/sysdb])
40 AM_INIT_AUTOMAKE([foreign subdir-objects -Wall])
42 AC_LANG(C)
44 AC_SYS_LARGEFILE
46 AC_PROG_CC
47 AC_PROG_CPP
48 AC_PROG_INSTALL
49 AC_PROG_LN_S
50 AC_PROG_MAKE_SET
51 AM_PROG_AR
53 AM_PROG_CC_C_O
54 AM_PROG_LEX
55 AC_PROG_YACC
57 m4_ifdef([LT_INIT],
58         [
59          LT_CONFIG_LTDL_DIR([libltdl])
60          LT_INIT([dlopen])
61          LTDL_INIT([convenience])
62         ],
63         # else
64         # (older libtools)
65         [
66          AC_CONFIG_SUBDIRS(libltdl)
67          AC_LIBLTDL_CONVENIENCE
68          AC_SUBST(LTDLINCL)
69          AC_SUBST(LIBLTDL)
70          AC_LIBTOOL_DLOPEN
71         ]
72 )
74 test_cc_flags() {
75         AC_LANG_CONFTEST([AC_LANG_PROGRAM([[ ]], [[ ]])])
76         $CC -c conftest.c $CFLAGS $@ > /dev/null 2> /dev/null
77         ret=$?
78         rm -f conftest.o
79         return $ret
80 }
82 m4_divert_once([HELP_ENABLE], [
83 Build options:])
85 dnl Optionally stick to standard C99 and POSIX:2001 as close as possible.
86 AC_ARG_ENABLE([standards],
87                 AS_HELP_STRING([--enable-standards],
88                                 [C99 / POSIX standards compliance mode @<:@default=no@:>@]),
89                 [enable_standards="$enableval"],
90                 [enable_standards="no"])
92 if test "x$enable_standards" = "xyes"; then
93         AC_DEFINE([_ISOC99_SOURCE], 1,
94                         [Define to enforce ISO/IEC 9899:1999 (C99) compliance.])
95         AC_DEFINE([_POSIX_C_SOURCE], 200112L,
96                         [Define to enforce IEEE 1003.1-2001 (POSIX:2001) compliance.])
97         AC_DEFINE([_XOPEN_SOURCE], 700,
98                         [Define to enforce X/Open 7 (XSI) compliance.])
99         AC_DEFINE([_REENTRANT], 1,
100                         [Define to enable reentrant interfaces.])
101         AC_DEFINE([_THREAD_SAFE], 1,
102                         [Define to enable reentrant interfaces.])
104         dnl GNU libc defines strcasecmp() only when using _BSD_SOURCE even though
105         dnl the function is conforming to POSIX.1-2001 as well. Let's weaken
106         dnl strict standards compliance a bit to work around this.
107         AC_DEFINE([_BSD_SOURCE], 1, [Define to enable 4.3BSD support.])
109         for flag in -std=c99 -pedantic; do
110                 AC_MSG_CHECKING([whether $CC accepts $flag])
112                 if test_cc_flags $flag; then
113                         CFLAGS="$CFLAGS $flag"
114                         AC_MSG_RESULT([yes])
115                 else
116                         AC_MSG_RESULT([no])
117                 fi
118         done
119 fi
121 dnl Hardening (see e.g. http://wiki.debian.org/Hardening for a motivation).
122 AC_DEFINE([_FORTIFY_SOURCE], 2,
123                 [Define to enable protection against static sized buffer overflows.])
124 AC_ARG_ENABLE([hardening],
125                 AS_HELP_STRING([--disable-hardening],
126                                 [hardening options @<:@default=yes@:>@]),
127                 [enable_hardening="$enableval"],
128                 [enable_hardening="yes"])
130 if test "x$enable_hardening" = "xyes"; then
131         hardening=0
132         hardening_tests=0
133         for flag in -Wformat -Wformat-security; do
134                 hardening_tests=$(($hardening_tests + 1))
135                 AC_MSG_CHECKING([whether $CC accepts $flag])
137                 if test_cc_flags $flag; then
138                         CFLAGS="$CFLAGS $flag"
139                         hardening=$(($hardening + 1))
140                         AC_MSG_RESULT([yes])
141                 else
142                         AC_MSG_RESULT([no])
143                 fi
144         done
145         if test $hardening -ne $hardening_tests; then
146                 AC_MSG_WARN(
147                                 [Some hardening options are not supported by your compiler!])
148         fi
149 fi
151 dnl Strict checking for potential problems.
152 AC_ARG_ENABLE([strict-checks],
153                 AS_HELP_STRING([--disable-strict-checks],
154                                 [strict compiler checks @<:@default=yes@:>@]),
155                 [enable_strict_checks="$enableval"],
156                 [enable_strict_checks="yes"])
158 STRICT_CFLAGS=""
159 for flag in -Wall -Werror; do
160         AC_MSG_CHECKING([whether $CC accepts $flag])
162         if test_cc_flags $flag; then
163                 STRICT_CFLAGS="$STRICT_CFLAGS $flag"
164                 AC_MSG_RESULT([yes])
165         else
166                 AC_MSG_RESULT([no])
167         fi
168 done
170 if test "x$enable_strict_checks" = "xyes"; then
171         dnl -Wsign-conversion may cause problems in expanded macros from libc
172         for flag in -Wextra \
173                         -Wbad-function-cast \
174                         -Wcast-align \
175                         -Wcast-qual \
176                         -Wconversion \
177                         -Wno-sign-conversion \
178                         -Wdeclaration-after-statement \
179                         -Wmissing-prototypes \
180                         -Wpointer-arith \
181                         -Wshadow \
182                         -Wstrict-prototypes; do
183                 AC_MSG_CHECKING([whether $CC accepts $flag])
185                 if test_cc_flags $flag; then
186                         STRICT_CFLAGS="$STRICT_CFLAGS $flag"
187                         AC_MSG_RESULT([yes])
188                 else
189                         AC_MSG_RESULT([no])
190                 fi
191         done
192 fi
193 AC_SUBST([STRICT_CFLAGS])
195 AC_ARG_ENABLE([gcov],
196                 AS_HELP_STRING([--enable-gcov],
197                                 [Gcov coverage statistics @<:@default=no@:>@]),
198                 [enable_gcov="$enableval"],
199                 [enable_gcov="no"])
201 dnl $GCC is based on some heuristics which might apply to clang as well.
202 dnl However, clang does not support gcov.
203 cc_is_gcc="no"
204 case "x$CC" in
205         xgcc)
206                 cc_is_gcc="yes"
207                 ;;
208         xgcc-*)
209                 cc_is_gcc="yes"
210                 ;;
211 esac
213 COVERAGE_CFLAGS=""
214 COVERAGE_LDFLAGS=""
215 if test "x$enable_gcov" = "xyes" && test "x$GCC$cc_is_gcc" == "xyesyes"; then
216         COVERAGE_CFLAGS="-O0"
217         cov_flag_have_problem="no"
219         AC_MSG_CHECKING([whether $CC accepts --coverage])
220         if test_cc_flags --coverage; then
221                 COVERAGE_CFLAGS="$COVERAGE_CFLAGS --coverage"
222                 COVERAGE_LDFLAGS="$COVERAGE_LDFLAGS --coverage"
223                 AC_MSG_RESULT([yes])
224         else
225                 AC_MSG_RESULT([no])
226                 cov_flag_have_problem="yes"
227         fi
229         for flag in -fno-inline; do
230                 AC_MSG_CHECKING([whether $CC accepts $flag])
231                 if test_cc_flags $flag; then
232                         COVERAGE_CFLAGS="$COVERAGE_CFLAGS $flag"
233                         AC_MSG_RESULT([yes])
234                 else
235                         AC_MSG_RESULT([no])
236                         cov_flag_have_problem="yes"
237                 fi
238         done
240         if test "x$cov_flag_have_problem" != "xno"; then
241                 AC_MSG_WARN([Some coverage flags are not supported by your compiler!])
242         fi
243 else if test "x$enable_gcov" = "xyes"; then
244         AC_MSG_WARN([Your compiler ($CC) is not known to support Gcov!])
245         enable_gcov="no (requires GCC)"
246 fi; fi
247 AC_SUBST([COVERAGE_CFLAGS])
248 AC_SUBST([COVERAGE_LDFLAGS])
250 m4_divert_once([HELP_ENABLE], [
251 Build dependencies:])
253 dnl Testing.
254 PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
255                 [build_testing="yes"], [build_testing="no"])
257 AC_CHECK_HEADERS(libgen.h)
259 dnl Check for dependencies.
260 AC_ARG_WITH([libdbi],
261                 [AS_HELP_STRING([--with-libdbi], [libdbi support (default: auto)])],
262                 [with_libdbi="$withval"],
263                 [with_libdbi="yes"])
264 if test "x$with_libdbi" = "xyes" || test "x$with_libdbi" = "xauto"; then
265         AC_CHECK_HEADERS([dbi/dbi.h],
266                         [with_libdbi="yes"],
267                         [with_libdbi="no (dbi/dbi.h not found)"])
268 else if test "x$with_libdbi" = "xno"; then
269         with_libdbi="$with_libdbi (disabled on command-line)"
270 else
271         AC_MSG_ERROR([Invalid value for option --with-libdbi=$with_libdbi (expected "yes", "no", or "auto")])
272 fi; fi
273 if test "x$with_libdbi" = "xyes"; then
274         AC_CHECK_LIB([dbi], [dbi_initialize],
275                         [with_libdbi="yes"],
276                         [with_libdbi="no (libdbi or symbol 'dbi_initialize' not found)"])
277 fi
278 AM_CONDITIONAL([BUILD_WITH_LIBDBI], test "x$with_libdbi" = "xyes")
280 dnl Required for mocking FILE related functions.
281 orig_CFLAGS="$CFLAGS"
282 CFLAGS="$CFLAGS -D_GNU_SOURCE"
283 AC_CHECK_FUNCS([fopencookie],
284                 [have_fopencookie="yes"],
285                 [have_fopencookie="no (fopencookie not available)"])
286 CFLAGS="$orig_CFLAGS"
287 AM_CONDITIONAL([BUILD_WITH_FOPENCOOKIE], test "x$have_fopencookie" = "xyes")
288 if test "x$have_fopencookie" = "xyes"; then
289         AC_DEFINE([HAVE_FOPENCOOKIE], 1)
290 fi
292 dnl readline support
293 AC_ARG_WITH([readline],
294                 [AS_HELP_STRING([--with-readline],
295                         [readline support (libedit/libreadline) (default: auto, prefer libedit)])],
296                 [readline_support="$withval"],
297                 [readline_support="auto"])
299 if test "x$readline_support" = "xyes"; then
300         readline_support="auto"
301 else if test "x$readline_support" != "xauto" \
302                 && test "x$readline_support" != "xno" \
303                 && test "x$readline_support" != "xlibedit" \
304                 && test "x$readline_support" != "xlibreadline"; then
305         AC_MSG_ERROR([Invalid value for option --with-readline=$readline_support (expected "yes", "no", "auto", "libedit", or "libreadline")])
306 fi; fi
308 have_libedit="no"
309 if test "x$readline_support" = "xauto" \
310                 || test "x$readline_support" = "xlibedit"; then
311         PKG_CHECK_MODULES([LIBEDIT], [libedit],
312                         [have_libedit="yes"], [have_libedit="no"])
313         if test "x$have_libedit" = "xyes"; then
314                 AC_CHECK_HEADERS([editline/readline.h], [],
315                                 [AC_CHECK_HEADERS([readline.h], [],
316                                                 [have_libedit="no (readline header not found"])])
317         fi
318         if test "x$have_libedit" = "xyes"; then
319                 AC_CHECK_HEADERS([editline/history.h], [],
320                                 [AC_CHECK_HEADERS([history.h], [],
321                                                 [have_libedit="no (history header not found"])])
322         fi
323 else
324         have_libedit="disabled on command-line"
325 fi
327 have_libreadline="no"
328 if test "x$have_libedit" != "xyes"; then
329         if test "x$readline_support" = "xauto" \
330                         || test "x$readline_support" = "xlibreadline"; then
331                 AC_CHECK_LIB([readline], [readline],
332                                 [have_libreadline="yes"],
333                                 [have_libreadline="no (libreadline or symbol 'readline' not found)"])
334         fi
335         if test "x$have_libreadline" = "xyes"; then
336                 AC_CHECK_HEADERS([readline/readline.h], [],
337                                 [AC_CHECK_HEADERS([readline.h], [],
338                                                 [have_libreadline="no (readline header not found"])])
339         fi
340         if test "x$have_libreadline" = "xyes"; then
341                 AC_CHECK_HEADERS([readline/history.h], [],
342                                 [AC_CHECK_HEADERS([history.h], [],
343                                                 [have_libreadline="no (history header not found"])])
344         fi
345 else
346         have_libreadline="unchecked (prefer libedit)"
347 fi
349 if test "x$have_libedit" = "xyes"; then
350         READLINE_LIBS="$LIBEDIT_LIBS"
351         READLINE_CFLAGS="$LIBEDIT_CFLAGS"
352         readline_support="libedit"
353 else if test "x$have_libreadline" = "xyes"; then
354         READLINE_LIBS="-lreadline -lhistory"
355         READLINE_CFLAGS=""
356         readline_support="libreadline"
357 else
358         READLINE_LIBS=""
359         READLINE_CFLAGS=""
360         if test "x$readline_support" = "xno"; then
361                 AC_MSG_WARN([*** readline support disabled; disabling SysDB client])
362         else if test "x$readline_support" = "xauto"; then
363                 AC_MSG_WARN([*** readline not found; disabling SysDB client])
364         else
365                 AC_MSG_ERROR([readline not found])
366         fi; fi
367         readline_support="no"
368 fi; fi
369 AC_SUBST([READLINE_LIBS])
370 AC_SUBST([READLINE_CFLAGS])
371 AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
373 dnl Feature checks.
374 build_documentation="yes"
376 have_xmlto="yes"
377 AC_PATH_PROG([XMLTO], [xmlto])
378 if test "x$XMLTO" = "x"; then
379         have_xmlto="no"
380         build_documentation="no (missing xmlto)"
381 fi
383 have_xsltproc="yes"
384 AC_PATH_PROG([XSLTPROC], [xsltproc])
385 if test "x$XSLTPROC" = "x"; then
386        have_xsltproc="no"
387        build_documentation="no (missing xsltproc)"
388 fi
390 have_a2x="yes"
391 AC_PATH_PROG([A2X], [a2x])
392 if test "x$A2X" = "x"; then
393        have_a2x="no"
394        build_documentation="no (missing a2x)"
395 fi
396 AC_SUBST([A2X])
398 dnl Plugin checks.
399 puppet_storeconfigs_default=$with_libdbi
400 if test "x$puppet_storeconfigs_default" != "xyes"; then
401         puppet_storeconfigs_default="no (requires libdbi)"
402 fi
404 m4_divert_once([HELP_ENABLE], [
405 Backends:])
407 AC_SDB_PLUGIN_INIT
408 AC_SDB_PLUGIN([collectd], [yes],
409                 [backend accessing the system statistics collection daemon])
410 AC_SDB_PLUGIN([mk-livestatus], [yes],
411                 [backend accessing Nagios/Icinga/Shinken using MK Livestatus])
412 AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
413                 [backend accessing the Puppet stored configuration database])
415 m4_divert_once([HELP_ENABLE], [
416 Plugins:])
418 AC_SDB_PLUGIN([cname-dns], [yes],
419                 [canonicalize hostnames by querying DNS])
420 AC_SDB_PLUGIN([syslog], [yes],
421                 [plugin logging to syslog])
423 AM_CONDITIONAL([BUILD_DOCUMENTATION], test "x$build_documentation" = "xyes")
424 AM_CONDITIONAL([BUILD_TESTING], test "x$build_testing" = "xyes")
426 AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile
427                 src/liboconfig/Makefile t/Makefile])
428 AC_OUTPUT
430 BUILD_DATE="`date --utc '+%F %T'` (UTC)"
432 AC_MSG_RESULT()
433 AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
434 AC_MSG_RESULT()
435 AC_MSG_RESULT([Run 'make' to compile the software and use 'make install' to])
436 AC_MSG_RESULT([install the package into $prefix.])
437 AC_MSG_RESULT()
438 AC_MSG_RESULT([Configuration summary:])
439 AC_MSG_RESULT()
440 AC_MSG_RESULT([  package version: $PACKAGE_VERSION])
441 AC_MSG_RESULT([  build date: $BUILD_DATE])
442 AC_MSG_RESULT()
443 AC_MSG_RESULT([  Tools:])
444 AC_MSG_RESULT([    AsciiDoc (a2x): . . . . . . $have_a2x])
445 AC_MSG_RESULT([    xmlto / xsltproc: . . . . . $have_xmlto / $have_xsltproc])
446 AC_MSG_RESULT()
447 AC_MSG_RESULT([  Features:])
448 AC_MSG_RESULT([    documentation:  . . . . . . $build_documentation])
449 AC_MSG_RESULT([    unit testing: . . . . . . . $build_testing])
450 AC_MSG_RESULT([      stdio mocking:  . . . . . $have_fopencookie])
451 AC_MSG_RESULT([    coverage testing: . . . . . $enable_gcov])
452 AC_MSG_RESULT()
453 AC_MSG_RESULT([  Libraries:])
454 AC_MSG_RESULT([    libdbi: . . . . . . . . . . $with_libdbi])
455 AC_MSG_RESULT([    libedit:  . . . . . . . . . $have_libedit])
456 AC_MSG_RESULT([    libreadline:  . . . . . . . $have_libreadline])
457 AC_MSG_RESULT()
458 AC_MSG_RESULT([  Backends:])
459 AC_MSG_RESULT([    collectd: . . . . . . . . . $enable_collectd])
460 AC_MSG_RESULT([    mk-livestatus:  . . . . . . $enable_mk_livestatus])
461 AC_MSG_RESULT([    puppet-storeconfigs:  . . . $enable_puppet_storeconfigs])
462 AC_MSG_RESULT()
463 AC_MSG_RESULT([  Plugins:])
464 AC_MSG_RESULT([    cname::dns: . . . . . . . . $enable_cname_dns])
465 AC_MSG_RESULT([    syslog: . . . . . . . . . . $enable_syslog])
466 AC_MSG_RESULT()
467 AC_MSG_RESULT([This package is maintained by $PACKAGE_MAINTAINER.])
468 AC_MSG_RESULT([Please report bugs to $PACKAGE_BUGREPORT.])
469 AC_MSG_RESULT()
471 dnl vim: set tw=78 sw=4 ts=4 noexpandtab :