Code

build system: Added --enable-gcov configure option.
[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], 600,
98                         [Define to enforce X/Open 6 (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         for flag in -std=c99 -pedantic; do
105                 AC_MSG_CHECKING([whether $CC accepts $flag])
107                 if test_cc_flags $flag; then
108                         CFLAGS="$CFLAGS $flag"
109                         AC_MSG_RESULT([yes])
110                 else
111                         AC_MSG_RESULT([no])
112                 fi
113         done
114 fi
116 dnl Hardening (see e.g. http://wiki.debian.org/Hardening for a motivation).
117 AC_DEFINE([_FORTIFY_SOURCE], 2,
118                 [Define to enable protection against static sized buffer overflows.])
119 AC_ARG_ENABLE([hardening],
120                 AS_HELP_STRING([--disable-hardening],
121                                 [hardening options @<:@default=yes@:>@]),
122                 [enable_hardening="$enableval"],
123                 [enable_hardening="yes"])
125 if test "x$enable_hardening" = "xyes"; then
126         hardening=0
127         hardening_tests=0
128         for flag in -Wformat -Wformat-security; do
129                 hardening_tests=$(($hardening_tests + 1))
130                 AC_MSG_CHECKING([whether $CC accepts $flag])
132                 if test_cc_flags $flag; then
133                         CFLAGS="$CFLAGS $flag"
134                         hardening=$(($hardening + 1))
135                         AC_MSG_RESULT([yes])
136                 else
137                         AC_MSG_RESULT([no])
138                 fi
139         done
140         if test $hardening -ne $hardening_tests; then
141                 AC_MSG_WARN(
142                                 [Some hardening options are not supported by your compiler!])
143         fi
144 fi
146 dnl Strict checking for potential problems.
147 AC_ARG_ENABLE([strict-checks],
148                 AS_HELP_STRING([--disable-strict-checks],
149                                 [strict compiler checks @<:@default=yes@:>@]),
150                 [enable_strict_checks="$enableval"],
151                 [enable_strict_checks="yes"])
153 STRICT_CFLAGS=""
154 for flag in -Wall -Werror; do
155         AC_MSG_CHECKING([whether $CC accepts $flag])
157         if test_cc_flags $flag; then
158                 STRICT_CFLAGS="$STRICT_CFLAGS $flag"
159                 AC_MSG_RESULT([yes])
160         else
161                 AC_MSG_RESULT([no])
162         fi
163 done
165 if test "x$enable_strict_checks" = "xyes"; then
166         for flag in -Wextra \
167                         -Wbad-function-cast \
168                         -Wcast-align \
169                         -Wcast-qual \
170                         -Wconversion \
171                         -Wdeclaration-after-statement \
172                         -Wmissing-prototypes \
173                         -Wpointer-arith \
174                         -Wshadow \
175                         -Wstrict-prototypes; do
176                 AC_MSG_CHECKING([whether $CC accepts $flag])
178                 if test_cc_flags $flag; then
179                         STRICT_CFLAGS="$STRICT_CFLAGS $flag"
180                         AC_MSG_RESULT([yes])
181                 else
182                         AC_MSG_RESULT([no])
183                 fi
184         done
185 fi
186 AC_SUBST([STRICT_CFLAGS])
188 AC_ARG_ENABLE([gcov],
189                 AS_HELP_STRING([--enable-gcov],
190                                 [Gcov coverage statistics @<:@default=no@:>@]),
191                 [enable_gcov="$enableval"],
192                 [enable_gcov="no"])
194 COVERAGE_CFLAGS=""
195 COVERAGE_LDFLAGS=""
196 if test "x$enable_gcov" = "xyes"; then
197         COVERAGE_CFLAGS="-O0"
198         cov_flag_have_problem="no"
200         AC_MSG_CHECKING([whether $CC accepts --coverage])
201         if test_cc_flags --coverage; then
202                 COVERAGE_CFLAGS="$COVERAGE_CFLAGS --coverage"
203                 COVERAGE_LDFLAGS="$COVERAGE_LDFLAGS --coverage"
204                 AC_MSG_RESULT([yes])
205         else
206                 AC_MSG_RESULT([no])
207                 cov_flag_have_problem="yes"
208         fi
210         for flag in -fno-inline; do
211                 AC_MSG_CHECKING([whether $CC accepts $flag])
212                 if test_cc_flags $flag; then
213                         COVERAGE_CFLAGS="$COVERAGE_CFLAGS $flag"
214                         AC_MSG_RESULT([yes])
215                 else
216                         AC_MSG_RESULT([no])
217                         cov_flag_have_problem="yes"
218                 fi
219         done
221         if test "x$cov_flag_have_problem" != "xno"; then
222                 AC_MSG_WARN([Some coverage flags are not supported by your compiler!])
223         fi
224 fi
225 AC_SUBST([COVERAGE_CFLAGS])
226 AC_SUBST([COVERAGE_LDFLAGS])
228 m4_divert_once([HELP_ENABLE], [
229 Build dependencies:])
231 dnl Testing.
232 PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
233                 [build_testing="yes"], [build_testing="no"])
235 AC_CHECK_HEADERS(libgen.h)
237 dnl Check for dependencies.
238 AC_ARG_WITH([libdbi],
239                 [AS_HELP_STRING([--with-libdbi], [libdbi support (default: auto)])],
240                 [with_libdbi="$withval"],
241                 [with_libdbi="yes"])
242 if test "x$with_libdbi" = "xyes"; then
243         AC_CHECK_HEADERS([dbi/dbi.h],
244                         [with_libdbi="yes"],
245                         [with_libdbi="no (dbi/dbi.h) not found"])
246 fi
247 if test "x$with_libdbi" = "xyes"; then
248         AC_CHECK_LIB([dbi], [dbi_initialize],
249                         [with_libdbi="yes"],
250                         [with_libdbi="no (libdbi or symbol 'dbi_initialize' not found)"])
251 fi
252 AM_CONDITIONAL([BUILD_WITH_LIBDBI], test "x$with_libdbi" = "xyes")
254 dnl Required for mocking FILE related functions.
255 orig_CFLAGS="$CFLAGS"
256 CFLAGS="$CFLAGS -D_GNU_SOURCE"
257 AC_CHECK_FUNCS([fopencookie],
258                 [have_fopencookie="yes"],
259                 [have_fopencookie="no (fopencookie not available)"])
260 CFLAGS="$orig_CFLAGS"
261 AM_CONDITIONAL([BUILD_WITH_FOPENCOOKIE], test "x$have_fopencookie" = "xyes")
262 if test "x$have_fopencookie" = "xyes"; then
263         AC_DEFINE([HAVE_FOPENCOOKIE], 1)
264 fi
266 dnl readline support
267 AC_ARG_WITH([readline],
268                 [AS_HELP_STRING([--with-readline],
269                         [readline support (libedit/libreadline) (default: auto, prefer libedit)])],
270                 [readline_support="$withval"],
271                 [readline_support="auto"])
273 if test "x$readline_support" = "xyes"; then
274         readline_support="auto"
275 fi
277 have_libedit="no"
278 if test "x$readline_support" = "xauto" \
279                 || test "x$readline_support" = "xlibedit"; then
280         PKG_CHECK_MODULES([LIBEDIT], [libedit],
281                         [have_libedit="yes"], [have_libedit="no"])
282         if test "x$have_libedit" = "xyes"; then
283                 AC_CHECK_HEADERS([editline/readline.h], [],
284                                 [AC_CHECK_HEADERS([readline.h], [],
285                                                 [have_libedit="no (readline header not found"])])
286         fi
287         if test "x$have_libedit" = "xyes"; then
288                 AC_CHECK_HEADERS([editline/history.h], [],
289                                 [AC_CHECK_HEADERS([history.h], [],
290                                                 [have_libedit="no (history header not found"])])
291         fi
292 else
293         have_libedit="disabled on command-line"
294 fi
296 have_libreadline="no"
297 if test "x$have_libedit" = "xno"; then
298         if test "x$readline_support" = "xauto" \
299                         || test "x$readline_support" = "xlibreadline"; then
300                 AC_CHECK_LIB([readline], [readline],
301                                 [have_libreadline="yes"],
302                                 [have_libreadline="no (libreadline or symbol 'readline' not found)"])
303         fi
304         if test "x$have_libreadline" = "xyes"; then
305                 AC_CHECK_HEADERS([readline/readline.h], [],
306                                 [AC_CHECK_HEADERS([readline.h], [],
307                                                 [have_libreadline="no (readline header not found"])])
308         fi
309         if test "x$have_libreadline" = "xyes"; then
310                 AC_CHECK_HEADERS([readline/history.h], [],
311                                 [AC_CHECK_HEADERS([history.h], [],
312                                                 [have_libreadline="no (history header not found"])])
313         fi
314 else
315         have_libreadline="unchecked (prefer libedit)"
316 fi
318 if test "x$have_libedit" = "xyes"; then
319         READLINE_LIBS="$LIBEDIT_LIBS"
320         READLINE_CFLAGS="$LIBEDIT_CFLAGS"
321         readline_support="libedit"
322 else if test "x$have_libreadline" = "xyes"; then
323         READLINE_LIBS="-lreadline -lhistory"
324         READLINE_CFLAGS=""
325         readline_support="libreadline"
326 else
327         READLINE_LIBS=""
328         READLINE_CFLAGS=""
329         if test "x$readline_support" = "xno"; then
330                 AC_MSG_WARN([*** readline support disabled; disabling SysDB client])
331         else if test "x$readline_support" = "xauto"; then
332                 AC_MSG_WARN([*** readline not found; disabling SysDB client])
333         else
334                 AC_MSG_ERROR([readline not found])
335         fi; fi
336         readline_support="no"
337 fi; fi
338 AC_SUBST([READLINE_LIBS])
339 AC_SUBST([READLINE_CFLAGS])
340 AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
342 dnl Feature checks.
343 build_documentation="yes"
345 have_xmlto="yes"
346 AC_PATH_PROG([XMLTO], [xmlto])
347 if test "x$XMLTO" = "x"; then
348         have_xmlto="no"
349         build_documentation="no (missing xmlto)"
350 fi
352 have_xsltproc="yes"
353 AC_PATH_PROG([XSLTPROC], [xsltproc])
354 if test "x$XSLTPROC" = "x"; then
355        have_xsltproc="no"
356        build_documentation="no (missing xsltproc)"
357 fi
359 have_a2x="yes"
360 AC_PATH_PROG([A2X], [a2x])
361 if test "x$A2X" = "x"; then
362        have_a2x="no"
363        build_documentation="no (missing a2x)"
364 fi
365 AC_SUBST([A2X])
367 dnl Plugin checks.
368 puppet_storeconfigs_default=$with_libdbi
369 if test "x$puppet_storeconfigs_default" != "xyes"; then
370         puppet_storeconfigs_default="no (requires libdbi)"
371 fi
373 m4_divert_once([HELP_ENABLE], [
374 Backends:])
376 AC_SDB_PLUGIN_INIT
377 AC_SDB_PLUGIN([collectd], [yes],
378                 [backend accessing the system statistics collection daemon])
379 AC_SDB_PLUGIN([mk-livestatus], [yes],
380                 [backend accessing Nagios/Icinga/Shinken using MK Livestatus])
381 AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
382                 [backend accessing the Puppet stored configuration database])
383 AC_SDB_PLUGIN([syslog], [yes],
384                 [plugin logging to syslog])
385 AC_SDB_PLUGIN([cname-dns], [yes],
386                 [canonicalize hostnames by querying DNS])
388 AM_CONDITIONAL([BUILD_DOCUMENTATION], test "x$build_documentation" = "xyes")
389 AM_CONDITIONAL([BUILD_TESTING], test "x$build_testing" = "xyes")
391 AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile
392                 src/liboconfig/Makefile t/Makefile])
393 AC_OUTPUT
395 BUILD_DATE="`date --utc '+%F %T'` (UTC)"
397 AC_MSG_RESULT()
398 AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
399 AC_MSG_RESULT()
400 AC_MSG_RESULT([Run 'make' to compile the software and use 'make install' to])
401 AC_MSG_RESULT([install the package into $prefix.])
402 AC_MSG_RESULT()
403 AC_MSG_RESULT([Configuration summary:])
404 AC_MSG_RESULT()
405 AC_MSG_RESULT([  package version: $PACKAGE_VERSION])
406 AC_MSG_RESULT([  build date: $BUILD_DATE])
407 AC_MSG_RESULT()
408 AC_MSG_RESULT([  Tools:])
409 AC_MSG_RESULT([    AsciiDoc (a2x): . . . . . . $have_a2x])
410 AC_MSG_RESULT([    xmlto / xsltproc: . . . . . $have_xmlto / $have_xsltproc])
411 AC_MSG_RESULT()
412 AC_MSG_RESULT([  Features:])
413 AC_MSG_RESULT([    documentation:  . . . . . . $build_documentation])
414 AC_MSG_RESULT([    unit testing: . . . . . . . $build_testing])
415 AC_MSG_RESULT([      stdio mocking:  . . . . . $have_fopencookie])
416 AC_MSG_RESULT([    coverage testing: . . . . . $enable_gcov])
417 AC_MSG_RESULT()
418 AC_MSG_RESULT([  Libraries:])
419 AC_MSG_RESULT([    libdbi: . . . . . . . . . . $with_libdbi])
420 AC_MSG_RESULT([    libedit:  . . . . . . . . . $have_libedit])
421 AC_MSG_RESULT([    libreadline:  . . . . . . . $have_libreadline])
422 AC_MSG_RESULT()
423 AC_MSG_RESULT([  Backends:])
424 AC_MSG_RESULT([    collectd: . . . . . . . . . $enable_collectd])
425 AC_MSG_RESULT([    mk-livestatus:  . . . . . . $enable_mk_livestatus])
426 AC_MSG_RESULT([    puppet-storeconfigs:  . . . $enable_puppet_storeconfigs])
427 AC_MSG_RESULT()
428 AC_MSG_RESULT([  Plugins:])
429 AC_MSG_RESULT([    cname::dns: . . . . . . . . $enable_cname_dns])
430 AC_MSG_RESULT()
431 AC_MSG_RESULT([This package is maintained by $PACKAGE_MAINTAINER.])
432 AC_MSG_RESULT([Please report bugs to $PACKAGE_BUGREPORT.])
433 AC_MSG_RESULT()
435 dnl vim: set tw=78 sw=4 ts=4 noexpandtab :