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 dnl $GCC is based on some heuristics which might apply to clang as well.
195 dnl However, clang does not support gcov.
196 cc_is_gcc="no"
197 case "x$CC" in
198 xgcc)
199 cc_is_gcc="yes"
200 ;;
201 xgcc-*)
202 cc_is_gcc="yes"
203 ;;
204 esac
206 COVERAGE_CFLAGS=""
207 COVERAGE_LDFLAGS=""
208 if test "x$enable_gcov" = "xyes" && test "x$GCC$cc_is_gcc" == "xyesyes"; then
209 COVERAGE_CFLAGS="-O0"
210 cov_flag_have_problem="no"
212 AC_MSG_CHECKING([whether $CC accepts --coverage])
213 if test_cc_flags --coverage; then
214 COVERAGE_CFLAGS="$COVERAGE_CFLAGS --coverage"
215 COVERAGE_LDFLAGS="$COVERAGE_LDFLAGS --coverage"
216 AC_MSG_RESULT([yes])
217 else
218 AC_MSG_RESULT([no])
219 cov_flag_have_problem="yes"
220 fi
222 for flag in -fno-inline; do
223 AC_MSG_CHECKING([whether $CC accepts $flag])
224 if test_cc_flags $flag; then
225 COVERAGE_CFLAGS="$COVERAGE_CFLAGS $flag"
226 AC_MSG_RESULT([yes])
227 else
228 AC_MSG_RESULT([no])
229 cov_flag_have_problem="yes"
230 fi
231 done
233 if test "x$cov_flag_have_problem" != "xno"; then
234 AC_MSG_WARN([Some coverage flags are not supported by your compiler!])
235 fi
236 else if test "x$enable_gcov" = "xyes"; then
237 AC_MSG_WARN([Your compiler ($CC) is not known to support Gcov!])
238 enable_gcov="no (requires GCC)"
239 fi; fi
240 AC_SUBST([COVERAGE_CFLAGS])
241 AC_SUBST([COVERAGE_LDFLAGS])
243 m4_divert_once([HELP_ENABLE], [
244 Build dependencies:])
246 dnl Testing.
247 PKG_CHECK_MODULES([CHECK], [check >= 0.9.4],
248 [build_testing="yes"], [build_testing="no"])
250 AC_CHECK_HEADERS(libgen.h)
252 dnl Check for dependencies.
253 AC_ARG_WITH([libdbi],
254 [AS_HELP_STRING([--with-libdbi], [libdbi support (default: auto)])],
255 [with_libdbi="$withval"],
256 [with_libdbi="yes"])
257 if test "x$with_libdbi" = "xyes"; then
258 AC_CHECK_HEADERS([dbi/dbi.h],
259 [with_libdbi="yes"],
260 [with_libdbi="no (dbi/dbi.h not found)"])
261 fi
262 if test "x$with_libdbi" = "xyes"; then
263 AC_CHECK_LIB([dbi], [dbi_initialize],
264 [with_libdbi="yes"],
265 [with_libdbi="no (libdbi or symbol 'dbi_initialize' not found)"])
266 fi
267 AM_CONDITIONAL([BUILD_WITH_LIBDBI], test "x$with_libdbi" = "xyes")
269 dnl Required for mocking FILE related functions.
270 orig_CFLAGS="$CFLAGS"
271 CFLAGS="$CFLAGS -D_GNU_SOURCE"
272 AC_CHECK_FUNCS([fopencookie],
273 [have_fopencookie="yes"],
274 [have_fopencookie="no (fopencookie not available)"])
275 CFLAGS="$orig_CFLAGS"
276 AM_CONDITIONAL([BUILD_WITH_FOPENCOOKIE], test "x$have_fopencookie" = "xyes")
277 if test "x$have_fopencookie" = "xyes"; then
278 AC_DEFINE([HAVE_FOPENCOOKIE], 1)
279 fi
281 dnl readline support
282 AC_ARG_WITH([readline],
283 [AS_HELP_STRING([--with-readline],
284 [readline support (libedit/libreadline) (default: auto, prefer libedit)])],
285 [readline_support="$withval"],
286 [readline_support="auto"])
288 if test "x$readline_support" = "xyes"; then
289 readline_support="auto"
290 fi
292 have_libedit="no"
293 if test "x$readline_support" = "xauto" \
294 || test "x$readline_support" = "xlibedit"; then
295 PKG_CHECK_MODULES([LIBEDIT], [libedit],
296 [have_libedit="yes"], [have_libedit="no"])
297 if test "x$have_libedit" = "xyes"; then
298 AC_CHECK_HEADERS([editline/readline.h], [],
299 [AC_CHECK_HEADERS([readline.h], [],
300 [have_libedit="no (readline header not found"])])
301 fi
302 if test "x$have_libedit" = "xyes"; then
303 AC_CHECK_HEADERS([editline/history.h], [],
304 [AC_CHECK_HEADERS([history.h], [],
305 [have_libedit="no (history header not found"])])
306 fi
307 else
308 have_libedit="disabled on command-line"
309 fi
311 have_libreadline="no"
312 if test "x$have_libedit" != "xyes"; then
313 if test "x$readline_support" = "xauto" \
314 || test "x$readline_support" = "xlibreadline"; then
315 AC_CHECK_LIB([readline], [readline],
316 [have_libreadline="yes"],
317 [have_libreadline="no (libreadline or symbol 'readline' not found)"])
318 fi
319 if test "x$have_libreadline" = "xyes"; then
320 AC_CHECK_HEADERS([readline/readline.h], [],
321 [AC_CHECK_HEADERS([readline.h], [],
322 [have_libreadline="no (readline header not found"])])
323 fi
324 if test "x$have_libreadline" = "xyes"; then
325 AC_CHECK_HEADERS([readline/history.h], [],
326 [AC_CHECK_HEADERS([history.h], [],
327 [have_libreadline="no (history header not found"])])
328 fi
329 else
330 have_libreadline="unchecked (prefer libedit)"
331 fi
333 if test "x$have_libedit" = "xyes"; then
334 READLINE_LIBS="$LIBEDIT_LIBS"
335 READLINE_CFLAGS="$LIBEDIT_CFLAGS"
336 readline_support="libedit"
337 else if test "x$have_libreadline" = "xyes"; then
338 READLINE_LIBS="-lreadline -lhistory"
339 READLINE_CFLAGS=""
340 readline_support="libreadline"
341 else
342 READLINE_LIBS=""
343 READLINE_CFLAGS=""
344 if test "x$readline_support" = "xno"; then
345 AC_MSG_WARN([*** readline support disabled; disabling SysDB client])
346 else if test "x$readline_support" = "xauto"; then
347 AC_MSG_WARN([*** readline not found; disabling SysDB client])
348 else
349 AC_MSG_ERROR([readline not found])
350 fi; fi
351 readline_support="no"
352 fi; fi
353 AC_SUBST([READLINE_LIBS])
354 AC_SUBST([READLINE_CFLAGS])
355 AM_CONDITIONAL([BUILD_CLIENT], test "x$readline_support" != "no")
357 dnl Feature checks.
358 build_documentation="yes"
360 have_xmlto="yes"
361 AC_PATH_PROG([XMLTO], [xmlto])
362 if test "x$XMLTO" = "x"; then
363 have_xmlto="no"
364 build_documentation="no (missing xmlto)"
365 fi
367 have_xsltproc="yes"
368 AC_PATH_PROG([XSLTPROC], [xsltproc])
369 if test "x$XSLTPROC" = "x"; then
370 have_xsltproc="no"
371 build_documentation="no (missing xsltproc)"
372 fi
374 have_a2x="yes"
375 AC_PATH_PROG([A2X], [a2x])
376 if test "x$A2X" = "x"; then
377 have_a2x="no"
378 build_documentation="no (missing a2x)"
379 fi
380 AC_SUBST([A2X])
382 dnl Plugin checks.
383 puppet_storeconfigs_default=$with_libdbi
384 if test "x$puppet_storeconfigs_default" != "xyes"; then
385 puppet_storeconfigs_default="no (requires libdbi)"
386 fi
388 m4_divert_once([HELP_ENABLE], [
389 Backends:])
391 AC_SDB_PLUGIN_INIT
392 AC_SDB_PLUGIN([collectd], [yes],
393 [backend accessing the system statistics collection daemon])
394 AC_SDB_PLUGIN([mk-livestatus], [yes],
395 [backend accessing Nagios/Icinga/Shinken using MK Livestatus])
396 AC_SDB_PLUGIN([puppet-storeconfigs], [$puppet_storeconfigs_default],
397 [backend accessing the Puppet stored configuration database])
398 AC_SDB_PLUGIN([syslog], [yes],
399 [plugin logging to syslog])
400 AC_SDB_PLUGIN([cname-dns], [yes],
401 [canonicalize hostnames by querying DNS])
403 AM_CONDITIONAL([BUILD_DOCUMENTATION], test "x$build_documentation" = "xyes")
404 AM_CONDITIONAL([BUILD_TESTING], test "x$build_testing" = "xyes")
406 AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile
407 src/liboconfig/Makefile t/Makefile])
408 AC_OUTPUT
410 BUILD_DATE="`date --utc '+%F %T'` (UTC)"
412 AC_MSG_RESULT()
413 AC_MSG_RESULT([$PACKAGE_NAME has been configured successfully.])
414 AC_MSG_RESULT()
415 AC_MSG_RESULT([Run 'make' to compile the software and use 'make install' to])
416 AC_MSG_RESULT([install the package into $prefix.])
417 AC_MSG_RESULT()
418 AC_MSG_RESULT([Configuration summary:])
419 AC_MSG_RESULT()
420 AC_MSG_RESULT([ package version: $PACKAGE_VERSION])
421 AC_MSG_RESULT([ build date: $BUILD_DATE])
422 AC_MSG_RESULT()
423 AC_MSG_RESULT([ Tools:])
424 AC_MSG_RESULT([ AsciiDoc (a2x): . . . . . . $have_a2x])
425 AC_MSG_RESULT([ xmlto / xsltproc: . . . . . $have_xmlto / $have_xsltproc])
426 AC_MSG_RESULT()
427 AC_MSG_RESULT([ Features:])
428 AC_MSG_RESULT([ documentation: . . . . . . $build_documentation])
429 AC_MSG_RESULT([ unit testing: . . . . . . . $build_testing])
430 AC_MSG_RESULT([ stdio mocking: . . . . . $have_fopencookie])
431 AC_MSG_RESULT([ coverage testing: . . . . . $enable_gcov])
432 AC_MSG_RESULT()
433 AC_MSG_RESULT([ Libraries:])
434 AC_MSG_RESULT([ libdbi: . . . . . . . . . . $with_libdbi])
435 AC_MSG_RESULT([ libedit: . . . . . . . . . $have_libedit])
436 AC_MSG_RESULT([ libreadline: . . . . . . . $have_libreadline])
437 AC_MSG_RESULT()
438 AC_MSG_RESULT([ Backends:])
439 AC_MSG_RESULT([ collectd: . . . . . . . . . $enable_collectd])
440 AC_MSG_RESULT([ mk-livestatus: . . . . . . $enable_mk_livestatus])
441 AC_MSG_RESULT([ puppet-storeconfigs: . . . $enable_puppet_storeconfigs])
442 AC_MSG_RESULT()
443 AC_MSG_RESULT([ Plugins:])
444 AC_MSG_RESULT([ cname::dns: . . . . . . . . $enable_cname_dns])
445 AC_MSG_RESULT()
446 AC_MSG_RESULT([This package is maintained by $PACKAGE_MAINTAINER.])
447 AC_MSG_RESULT([Please report bugs to $PACKAGE_BUGREPORT.])
448 AC_MSG_RESULT()
450 dnl vim: set tw=78 sw=4 ts=4 noexpandtab :