1 dnl Process this file with autoconf to produce a configure script.
3 AC_INIT([foobar],[m4_esyscmd(./version-gen.sh)],
4 [Sebastian Harl <sh@tokkee.org>])
5 AC_CONFIG_SRCDIR([src/foobar.c])
6 AC_CONFIG_HEADERS([src/config.h])
7 AC_PREFIX_DEFAULT([/opt/foobar])
9 AM_INIT_AUTOMAKE([foreign -Wall])
11 AC_LANG(C)
13 AC_SYS_LARGEFILE
15 AC_PROG_CC
16 AC_PROG_CPP
17 AC_PROG_INSTALL
18 AC_PROG_LN_S
19 AC_PROG_MAKE_SET
21 AM_PROG_CC_C_O
23 AC_PROG_LIBTOOL
25 test_cc_flags() {
26 AC_LANG_CONFTEST([int main() {}])
27 $CC -c conftest.c $CFLAGS $@ > /dev/null 2> /dev/null
28 ret=$?
29 rm -f conftest.o
30 return $ret
31 }
33 dnl Optionally stick to standard C99 and POSIX.1 2001 as close as possible.
34 AC_ARG_ENABLE([standards],
35 AS_HELP_STRING([--enable-standards],
36 [Enable standards compliance mode]),
37 [enable_standards="$enableval"],
38 [enable_standards="no"])
40 if test "x$enable_standards" = "xyes"; then
41 AC_DEFINE([_ISOC99_SOURCE], 1,
42 [Define to enforce ISO/IEC 9899:1999 (C99) compliance.])
43 AC_DEFINE([_POSIX_C_SOURCE], 200112L,
44 [Define to enforce IEEE 1003.1-2001 (POSIX:2001) compliance.])
45 AC_DEFINE([_XOPEN_SOURCE], 600,
46 [Define to enforce X/Open 6 (XSI) compliance.])
47 AC_DEFINE([_REENTRANT], 1,
48 [Define to enable reentrant interfaces.])
49 AC_DEFINE([_THREAD_SAFE], 1,
50 [Define to enable reentrant interfaces.])
52 for flag in -std=c99 -pedantic; do
53 AC_MSG_CHECKING([whether $CC accepts $flag])
55 if test_cc_flags $flag; then
56 CFLAGS="$CFLAGS $flag"
57 AC_MSG_RESULT([yes])
58 else
59 AC_MSG_RESULT([no])
60 fi
61 done
62 fi
64 dnl Hardening (see e.g. http://wiki.debian.org/Hardening for a motivation).
65 AC_DEFINE([_FORTIFY_SOURCE], 2,
66 [Define to enable protection against static sized buffer overflows.])
67 AC_ARG_ENABLE([hardening],
68 AS_HELP_STRING([--disable-hardening],
69 [Disable hardening options]),
70 [enable_hardening="$enableval"],
71 [enable_hardening="yes"])
73 if test "x$enable_hardening" = "xyes"; then
74 hardening=0
75 hardening_tests=0
76 for flag in -Wformat -Wformat-security; do
77 hardening_tests=$(($hardening_tests + 1))
78 AC_MSG_CHECKING([whether $CC accepts $flag])
80 if test_cc_flags $flag; then
81 CFLAGS="$CFLAGS $flag"
82 hardening=$(($hardening + 1))
83 AC_MSG_RESULT([yes])
84 else
85 AC_MSG_RESULT([no])
86 fi
87 done
88 if test $hardening -ne $hardening_tests; then
89 AC_MSG_WARN(
90 [Some hardening options are not supported by your compiler!])
91 fi
92 fi
94 dnl Strict checking for potential problems.
95 AC_ARG_ENABLE([strict-checks],
96 AS_HELP_STRING([--disable-strict-checks],
97 [Disable strict compiler checks]),
98 [enable_strict_checks="$enableval"],
99 [enable_strict_checks="yes"])
101 STRICT_CFLAGS=""
102 for flag in -Wall -Werror; do
103 AC_MSG_CHECKING([whether $CC accepts $flag])
105 if test_cc_flags $flag; then
106 STRICT_CFLAGS="$STRICT_CFLAGS $flag"
107 AC_MSG_RESULT([yes])
108 else
109 AC_MSG_RESULT([no])
110 fi
111 done
113 if test "x$enable_strict_checks" = "xyes"; then
114 for flag in -Wextra \
115 -Wbad-function-cast \
116 -Wcast-align \
117 -Wcast-qual \
118 -Wconversion \
119 -Wdeclaration-after-statement \
120 -Wmissing-prototypes \
121 -Wpointer-arith \
122 -Wshadow \
123 -Wstrict-prototypes \
124 -Wunreachable-code \
125 -Wvla; do
126 AC_MSG_CHECKING([whether $CC accepts $flag])
128 if test_cc_flags $flag; then
129 STRICT_CFLAGS="$STRICT_CFLAGS $flag"
130 AC_MSG_RESULT([yes])
131 else
132 AC_MSG_RESULT([no])
133 fi
134 done
135 fi
136 AC_SUBST([STRICT_CFLAGS])
138 build_date="`date --utc '+%F %T'` (UTC)"
139 AC_DEFINE_UNQUOTED([BUILD_DATE], ["$build_date"],
140 [Define to the date the package has been built on.])
142 dnl Version information provided by fb_features.h.
143 FB_VERSION_MAJOR=`echo $PACKAGE_VERSION | cut -d'.' -f1`
144 FB_VERSION_MINOR=`echo $PACKAGE_VERSION | cut -d'.' -f2`
145 FB_VERSION_PATCH=`echo $PACKAGE_VERSION | cut -d'.' -f3`
146 FB_VERSION_EXTRA=`echo $PACKAGE_VERSION | cut -d'.' -f4-`
147 FB_VERSION_STRING="$FB_VERSION_MAJOR.$FB_VERSION_MINOR.$FB_VERSION_PATCH"
149 AC_SUBST(FB_VERSION_MAJOR)
150 AC_SUBST(FB_VERSION_MINOR)
151 AC_SUBST(FB_VERSION_PATCH)
152 AC_SUBST(FB_VERSION_EXTRA)
153 AC_SUBST(FB_VERSION_STRING)
155 AC_CHECK_HEADERS(libgen.h)
157 AC_CONFIG_FILES([Makefile src/Makefile src/fb_features.h])
158 AC_OUTPUT
160 cat <<EOF;
162 $PACKAGE_NAME has been configured successfully.
164 Run 'make' to compile the software and use 'make install' to
165 install the package into $prefix.
167 Configuration summary:
169 package version: $PACKAGE_VERSION
170 build date: $build_date
172 Please report bugs to $PACKAGE_BUGREPORT.
174 EOF