Replace --with-mad-warnings with --enable-mad-warnings.
[darkstat] / configure.ac
1 AC_INIT(darkstat, 3.0.0-git)
2 AC_CONFIG_SRCDIR([darkstat.c])
3 AC_CONFIG_HEADER([config.h])
4
5 RULE="------------------------------------------------------------"
6
7 # Let user specify CHROOT_DIR, or else autodetect it, or else die.
8 AC_ARG_WITH(chroot-dir, AS_HELP_STRING([--with-chroot-dir],
9  [specify the chroot directory (default: /var/empty)]),
10  [if test "x$withval" = "xyes"; then
11    AC_MSG_ERROR([please specify --with-chroot-dir=/path/to/darkstat/chroot])
12   fi
13   _chd="$withval"],
14  [# Find an "empty" directory to serve as the chroot.
15   _chd="/var/empty"
16   AC_MSG_CHECKING([for $_chd])
17   if test -d $_chd ; then
18    AC_MSG_RESULT(found it)
19   else
20    AC_MSG_RESULT(not there)
21    _chd="/var/lib/empty"
22    AC_MSG_CHECKING([for $_chd])
23    if test -d $_chd ; then
24     AC_MSG_RESULT(found it)
25    else
26     AC_MSG_RESULT(not there either)
27     AC_MSG_ERROR([please specify --with-chroot-dir=/path/to/darkstat/chroot])
28    fi
29   fi])
30 AC_DEFINE_UNQUOTED(CHROOT_DIR, "$_chd", [Default chroot directory.])
31
32 # Allow configure-time override of PRIVDROP_USER.
33 AC_ARG_WITH(privdrop-user, AS_HELP_STRING([--with-privdrop-user],
34  [specify which user to drop privileges to (default: nobody)]),
35  [_pdu="$withval"],
36  [_pdu="nobody"])
37 AC_DEFINE_UNQUOTED(PRIVDROP_USER, "$_pdu", [User to privdrop to.])
38
39 # Checks for programs.
40 AC_PROG_INSTALL
41 AC_PROG_CC
42
43 # Augment CFLAGS for fun.
44 echo "int main(void){return 1;}" > conftest.$ac_ext
45
46 AC_MSG_CHECKING(if your C compiler wants a hit off the pipe)
47 save_cflags="$CFLAGS"
48 CFLAGS="-pipe $CFLAGS"
49 if (eval $ac_link) 2>/dev/null; then
50  AC_MSG_RESULT(sure does)
51 else
52  AC_MSG_RESULT(no)
53  CFLAGS="$save_cflags"
54 fi
55
56 AC_ARG_ENABLE(mad-warnings, AS_HELP_STRING([--enable-mad-warnings],
57  [turn on lots of compile-time warnings, this needs GCC and is only
58  really useful for development]),
59  [if test "x$enableval" = "xyes" ; then
60    AC_MSG_CHECKING(if your C compiler throws mad warnings)
61    save_cflags="$CFLAGS"
62    CFLAGS="$CFLAGS -fdiagnostics-show-option \
63 -Wabi \
64 -Waddress \
65 -Waggregate-return \
66 -Wall \
67 -Warray-bounds \
68 -Wbad-function-cast \
69 -Wcast-align \
70 -Wcast-qual \
71 -Wchar-subscripts \
72 -Wclobbered \
73 -Wcomment \
74 -Wcoverage-mismatch \
75 -Wdeclaration-after-statement \
76 -Wdisabled-optimization \
77 -Wempty-body \
78 -Wextra \
79 -Wfloat-equal \
80 -Wformat \
81 -Wformat=2 \
82 -Wformat-nonliteral \
83 -Wformat-security \
84 -Wformat-y2k \
85 -Wignored-qualifiers \
86 -Wimplicit \
87 -Wimplicit-function-declaration \
88 -Wimplicit-int \
89 -Winit-self \
90 -Winline \
91 -Winvalid-pch \
92 -Wlogical-op \
93 -Wlong-long \
94 -Wmain \
95 -Wmissing-braces \
96 -Wmissing-declarations \
97 -Wmissing-field-initializers \
98 -Wmissing-format-attribute \
99 -Wmissing-include-dirs \
100 -Wmissing-noreturn \
101 -Wmissing-parameter-type \
102 -Wmissing-prototypes \
103 -Wnested-externs \
104 -Wnonnull \
105 -Wold-style-declaration \
106 -Wold-style-definition \
107 -Wpacked \
108 -Wpacked-bitfield-compat \
109 -Wparentheses \
110 -Wpointer-arith \
111 -Wpointer-sign \
112 -Wredundant-decls \
113 -Wreturn-type \
114 -Wsequence-point \
115 -Wshadow \
116 -Wsign-compare \
117 -Wstrict-aliasing -fstrict-aliasing \
118 -Wstrict-overflow=5 -fstrict-overflow \
119 -Wstrict-prototypes \
120 -Wswitch \
121 -Wswitch-default \
122 -Wswitch-enum \
123 -Wsync-nand \
124 -Wtrigraphs \
125 -Wtype-limits \
126 -Wundef \
127 -Wuninitialized \
128 -Wunknown-pragmas \
129 -Wunsafe-loop-optimizations \
130 -Wunused \
131 -Wunused-function \
132 -Wunused-label \
133 -Wunused-parameter \
134 -Wunused-value \
135 -Wunused-variable \
136 -Wvariadic-macros \
137 -Wvla \
138 -Wvolatile-register-var \
139 -Wwrite-strings \
140 "
141
142 # the above are valid for gcc version 4.4.3
143 # we skip:
144 #-pedantic
145 #-Wc++-compat
146 #-Wconversion
147 #-Wfatal-errors
148 #-Wpadded
149 #-Wsign-conversion
150 #-Wstack-protector
151 #-Wsystem-headers
152 #-Wtraditional
153 #-Wtraditional-conversion
154 #-Wunreachable-code
155
156    if (eval $ac_link) 2>/dev/null; then
157     AC_MSG_RESULT(sure does)
158    else
159     AC_MSG_RESULT(no)
160     CFLAGS="$save_cflags"
161    fi
162   fi])
163
164 rm -f conftest.$ac_objext conftest.$ac_ext
165
166
167
168 # Check for zlib.
169 AC_CHECK_LIB(z, deflate,, [
170  cat <<END
171 $RULE
172
173 I can't link to zlib.  You really can't have a modern
174 operating system without zlib.
175
176 If you are using a package-based operating system (like
177 something with RPMs), see if there is a zlib-devel package
178 that you can install, to provide the zlib headers and
179 libraries.
180
181 $RULE
182 END
183  AC_MSG_ERROR([can't find usable zlib])])
184
185
186
187 # Check for Solaris.
188 # Must do at least socket and nsl before checking for libpcap.
189 AC_CHECK_LIB(nsl, gethostbyname)
190 AC_CHECK_LIB(socket, socket)
191 AC_CHECK_LIB(resolv, inet_aton)
192
193
194
195 # Check for libpcap
196 AC_ARG_WITH(pcap, AS_HELP_STRING([--with-pcap=DIR],
197  [prefix to libpcap installation]),
198  [if test "$withval" = yes ; then
199    AC_MSG_ERROR([must specify a path, as in --with-pcap=DIR])
200   fi
201   if test "$withval" != no ; then
202    PCAP_HOME="$withval"
203   fi])
204
205 if test -n "$PCAP_HOME" ; then
206  LDFLAGS="$LDFLAGS -L$PCAP_HOME/lib"
207  CPPFLAGS2="$CPPFLAGS -I$PCAP_HOME/include/pcap"
208  CPPFLAGS="$CPPFLAGS -I$PCAP_HOME/include"
209 else
210  CPPFLAGS2="$CPPFLAGS -I/usr/include/pcap"
211 fi
212
213 AC_CHECK_LIB(pcap, pcap_loop,, PCAP_BROKEN="yes")
214
215 if test -z "$PCAP_BROKEN" ; then
216   AC_CHECK_HEADERS(pcap.h,,
217   [# Couldn't find headers, try include/pcap
218    CPPFLAGS="$CPPFLAGS2"
219    AC_MSG_NOTICE([checking in include/pcap])
220    unset ac_cv_header_pcap_h
221    AC_CHECK_HEADERS(pcap.h,
222     AC_MSG_RESULT([I hate you.]),
223     PCAP_BROKEN="yes")])
224 fi
225
226 if test -n "$PCAP_BROKEN" ; then
227  cat <<END_MSG
228 $RULE
229
230 darkstat absolutely requires libpcap to be installed.  If
231 it's installed into a prefix that isn't being picked up by
232 configure, for example /usr/local, re-run configure and add
233 --with-pcap=/usr/local
234
235 If you are using a package-based operating system (like
236 something with RPMs), see if there is a pcap-devel or
237 libpcap-devel package that you can install, to provide the
238 pcap headers and libraries.
239
240 Failing all of the above, go to http://www.tcpdump.org/ and
241 download the source distribution of libpcap and build it
242 yourself.
243
244 $RULE
245 END_MSG
246  AC_MSG_ERROR([can't find usable libpcap])
247 fi
248
249
250
251 # A real OS will have setproctitle()
252 AC_CHECK_LIB(c, setproctitle,
253  AC_DEFINE(HAVE_SETPROCTITLE, 1,
254   [Define to 1 if you have setproctitle().]))
255
256 # A real OS will have safe string functions
257 AC_SEARCH_LIBS(strlcpy, [bsd],
258  AC_DEFINE(HAVE_STRLCPY, 1,
259   [Define to 1 if you have strlcpy().]))
260 AC_SEARCH_LIBS(strlcat, [bsd],
261  AC_DEFINE(HAVE_STRLCAT, 1,
262   [Define to 1 if you have strlcat().]))
263
264 AC_CHECK_LIB(c, strtonum,
265  AC_DEFINE(HAVE_STRTONUM, 1,
266   [Define to 1 if you have strtonum(3).]))
267
268 # Some OSes (Solaris) need sys/sockio.h for SIOCGIFADDR
269 AC_CHECK_HEADERS(sys/sockio.h)
270
271 # Some OSes (Solaris) need sys/filio.h for FIONBIO
272 AC_CHECK_HEADERS(sys/filio.h)
273
274 # GNU/kfreebsd needs net/if_ether.h for ETH_P_IPV6
275 AC_CHECK_HEADERS(net/if_ether.h)
276
277 AC_CONFIG_FILES([Makefile darkstat.8])
278 AC_OUTPUT