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