Code

Merged branch 'master' of git://git.tokkee.org/sysdb.
[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 m4_divert_once([HELP_ENABLE], [
189 Build dependencies:])
191 dnl Testing.
192 PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
193                 [build_testing="yes"], [build_testing="no"])
195 AC_CHECK_HEADERS(libgen.h)
197 dnl Check for dependencies.
198 AC_ARG_WITH([libdbi],
199                 [AS_HELP_STRING([--with-libdbi], [libdbi support (default: auto)])],
200                 [with_libdbi="$withval"],
201                 [with_libdbi="yes"])
202 if test "x$with_libdbi" = "xyes"; then
203         AC_CHECK_HEADERS([dbi/dbi.h],
204                         [with_libdbi="yes"],
205                         [with_libdbi="no (dbi/dbi.h) not found"])
206 fi
207 if test "x$with_libdbi" = "xyes"; then
208         AC_CHECK_LIB([dbi], [dbi_initialize],
209                         [with_libdbi="yes"],
210                         [with_libdbi="no (libdbi or symbol 'dbi_initialize' not found)"])
211 fi
212 AM_CONDITIONAL([BUILD_WITH_LIBDBI], test "x$with_libdbi" = "xyes")
214 dnl Required for mocking FILE related functions.
215 orig_CFLAGS="$CFLAGS"
216 CFLAGS="$CFLAGS -D_GNU_SOURCE"
217 AC_CHECK_FUNCS([fopencookie],
218                 [have_fopencookie="yes"],
219                 [have_fopencookie="no (fopencookie not available)"])
220 CFLAGS="$orig_CFLAGS"
221 AM_CONDITIONAL([BUILD_WITH_FOPENCOOKIE], test "x$have_fopencookie" = "xyes")
222 if test "x$have_fopencookie" = "xyes"; then
223         AC_DEFINE([HAVE_FOPENCOOKIE], 1)
224 fi
226 dnl readline support
227 AC_ARG_WITH([readline],
228                 [AS_HELP_STRING([--with-readline],
229                         [readline support (libedit/libreadline) (default: auto, prefer libedit)])],
230                 [readline_support="$withval"],
231                 [readline_support="auto"])
233 if test "x$readline_support" = "xyes"; then
234         readline_support="auto"
235 fi
237 have_libedit="no"
238 if test "x$readline_support" = "xauto" \
239                 || test "x$readline_support" = "xlibedit"; then
240         PKG_CHECK_MODULES([LIBEDIT], [libedit],
241                         [have_libedit="yes"], [have_libedit="no"])
242         if test "x$have_libedit" = "xyes"; then
243                 AC_CHECK_HEADERS([editline/readline.h], [],
244                                 [AC_CHECK_HEADERS([readline.h], [],
245                                                 [have_libedit="no (readline header not found"])])
246         fi
247         if test "x$have_libedit" = "xyes"; then
248                 AC_CHECK_HEADERS([editline/history.h], [],
249                                 [AC_CHECK_HEADERS([history.h], [],
250                                                 [have_libedit="no (history header not found"])])
251         fi
252 else
253         have_libedit="disabled on command-line"
254 fi
256 have_libreadline="no"
257 if test "x$have_libedit" = "xno"; then
258         if test "x$readline_support" = "xauto" \
259                         || test "x$readline_support" = "xlibreadline"; then
260                 AC_CHECK_LIB([readline], [readline],
261                                 [have_libreadline="yes"],
262                                 [have_libreadline="no (libreadline or symbol 'readline' not found)"])
263         fi
264         if test "x$have_libreadline" = "xyes"; then
265                 AC_CHECK_HEADERS([readline/readline.h], [],
266                                 [AC_CHECK_HEADERS([readline.h], [],
267                                                 [have_libreadline="no (readline header not found"])])
268         fi
269         if test "x$have_libreadline" = "xyes"; then
270                 AC_CHECK_HEADERS([readline/history.h], [],
271                                 [AC_CHECK_HEADERS([history.h], [],
272                                                 [have_libreadline="no (history header not found"])])
273         fi
274 else
275         have_libreadline="unchecked (prefer libedit)"
276 fi
278 if test "x$have_libedit" = "xyes"; then
279         READLINE_LIBS="$LIBEDIT_LIBS"
280         READLINE_CFLAGS="$LIBEDIT_CFLAGS"
281         readline_support="libedit"
282 else if test "x$have_libreadline" = "xyes"; then
283         READLINE_LIBS="-lreadline -lhistory"
284         READLINE_CFLAGS=""
285         readline_support="libreadline"
286 else
287         READLINE_LIBS=""
288         READLINE_CFLAGS=""
289         if test "x$readline_support" = "xno"; then
290                 AC_MSG_WARN([*** readline support disabled; disabling SysDB client])
291         else if test "x$readline_support" = "xauto"; then
292                 AC_MSG_WARN([*** readline not found; disabling SysDB client])
293         else
294                 AC_MSG_ERROR([readline not found])
295         fi; fi
296         readline_support="no"
297 fi; fi
298 AC_SUBST([READLINE_LIBS])
299 AC_SUBST([READLINE_CFLAGS])
300 AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
302 dnl Feature checks.
303 build_documentation="yes"
305 have_xmlto="yes"
306 AC_PATH_PROG([XMLTO], [xmlto])
307 if test "x$XMLTO" = "x"; then
308         have_xmlto="no"
309         build_documentation="no (missing xmlto)"
310 fi
312 have_xsltproc="yes"
313 AC_PATH_PROG([XSLTPROC], [xsltproc])
314 if test "x$XSLTPROC" = "x"; then
315        have_xsltproc="no"
316        build_documentation="no (missing xsltproc)"
317 fi
319 have_a2x="yes"
320 AC_PATH_PROG([A2X], [a2x])
321 if test "x$A2X" = "x"; then
322        have_a2x="no"
323        build_documentation="no (missing a2x)"
324 fi
325 AC_SUBST([A2X])
327 dnl Plugin checks.
328 puppet_storeconfigs_default=$with_libdbi
329 if test "x$puppet_storeconfigs_default" != "xyes"; then
330         puppet_storeconfigs_default="no (requires libdbi)"
331 fi
333 m4_divert_once([HELP_ENABLE], [
334 Backends:])
336 AC_SDB_PLUGIN_INIT
337 AC_SDB_PLUGIN([collectd], [yes],
338                 [backend accessing the system statistics collection daemon])
339 AC_SDB_PLUGIN([mk-livestatus], [yes],
340                 [backend accessing Nagios/Icinga/Shinken using MK Livestatus])
341 AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
342                 [backend accessing the Puppet stored configuration database])
343 AC_SDB_PLUGIN([syslog], [yes],
344                 [plugin logging to syslog])
345 AC_SDB_PLUGIN([cname-dns], [yes],
346                 [canonicalize hostnames by querying DNS])
348 AM_CONDITIONAL([BUILD_DOCUMENTATION], test "x$build_documentation" = "xyes")
349 AM_CONDITIONAL([BUILD_TESTING], test "x$build_testing" = "xyes")
351 AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile
352                 src/liboconfig/Makefile t/Makefile])
353 AC_OUTPUT
355 BUILD_DATE="`date --utc '+%F %T'` (UTC)"
357 AC_MSG_RESULT()
358 AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
359 AC_MSG_RESULT()
360 AC_MSG_RESULT([Run 'make' to compile the software and use 'make install' to])
361 AC_MSG_RESULT([install the package into $prefix.])
362 AC_MSG_RESULT()
363 AC_MSG_RESULT([Configuration summary:])
364 AC_MSG_RESULT()
365 AC_MSG_RESULT([  package version: $PACKAGE_VERSION])
366 AC_MSG_RESULT([  build date: $BUILD_DATE])
367 AC_MSG_RESULT()
368 AC_MSG_RESULT([  Tools:])
369 AC_MSG_RESULT([    AsciiDoc (a2x): . . . . . . $have_a2x])
370 AC_MSG_RESULT([    xmlto / xsltproc: . . . . . $have_xmlto / $have_xsltproc])
371 AC_MSG_RESULT()
372 AC_MSG_RESULT([  Features:])
373 AC_MSG_RESULT([    documentation:  . . . . . . $build_documentation])
374 AC_MSG_RESULT([    unit testing: . . . . . . . $build_testing])
375 AC_MSG_RESULT([      stdio mocking:  . . . . . $have_fopencookie])
376 AC_MSG_RESULT()
377 AC_MSG_RESULT([  Libraries:])
378 AC_MSG_RESULT([    libdbi: . . . . . . . . . . $with_libdbi])
379 AC_MSG_RESULT([    libedit:  . . . . . . . . . $have_libedit])
380 AC_MSG_RESULT([    libreadline:  . . . . . . . $have_libreadline])
381 AC_MSG_RESULT()
382 AC_MSG_RESULT([  Backends:])
383 AC_MSG_RESULT([    collectd: . . . . . . . . . $enable_collectd])
384 AC_MSG_RESULT([    mk-livestatus:  . . . . . . $enable_mk_livestatus])
385 AC_MSG_RESULT([    puppet-storeconfigs:  . . . $enable_puppet_storeconfigs])
386 AC_MSG_RESULT()
387 AC_MSG_RESULT([  Plugins:])
388 AC_MSG_RESULT([    cname::dns: . . . . . . . . $enable_cname_dns])
389 AC_MSG_RESULT()
390 AC_MSG_RESULT([This package is maintained by $PACKAGE_MAINTAINER.])
391 AC_MSG_RESULT([Please report bugs to $PACKAGE_BUGREPORT.])
392 AC_MSG_RESULT()
394 dnl vim: set tw=78 sw=4 ts=4 noexpandtab :