Stop using inline, get restrict from autoconf.
[darkstat] / configure.ac
1 # Need at least 2.64 for PACKAGE_URL
2 AC_PREREQ([2.64])
3 AC_INIT(darkstat, 3.0.0-git, , , https://unix4lyfe.org/darkstat/)
4 AC_CONFIG_SRCDIR([darkstat.c])
5 AC_CONFIG_HEADER([config.h])
6
7 RULE="------------------------------------------------------------"
8
9 # Allow configure-time override of PRIVDROP_USER.
10 AC_ARG_WITH(privdrop-user, AS_HELP_STRING([--with-privdrop-user],
11  [specify which user to drop privileges to (default: nobody)]),
12  [_pdu="$withval"],
13  [_pdu="nobody"])
14 AC_DEFINE_UNQUOTED(PRIVDROP_USER, "$_pdu", [User to privdrop to.])
15
16 # Checks for programs.
17 AC_PROG_INSTALL
18 AC_PROG_CC
19
20 # Compiler's language features.
21 AC_C_RESTRICT
22
23 m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
24 AC_ARG_ENABLE([silent-rules],
25 [  --enable-silent-rules          less verbose build output (undo: 'make V=1')
26   --disable-silent-rules         verbose build output (undo: 'make V=0')])
27 case $enable_silent_rules in
28 no)  AM_DEFAULT_VERBOSITY=1;;
29 *)   AM_DEFAULT_VERBOSITY=0;;
30 esac
31 AC_SUBST([AM_DEFAULT_VERBOSITY])
32
33 # Let user disable debugging symbols so we create smaller binaries.
34 AC_MSG_CHECKING(if we want debug code)
35 AC_ARG_ENABLE(debug, AS_HELP_STRING([--disable-debug],
36  [turn off debugging code and asserts]),
37  [if test "x$enableval" = "xno" ; then
38    CFLAGS="$CFLAGS -DNDEBUG -g0"
39    AC_MSG_RESULT(nope)
40   elif test "x$enableval" = "xyes" ; then
41    AC_MSG_RESULT(sure)
42   else
43    CFLAGS="$CFLAGS -g$enableval"
44    AC_MSG_RESULT(sure ($enableval))
45   fi],
46  [AC_MSG_RESULT(sure)])
47
48 # Augment CFLAGS for fun.
49 echo "int main(void){return 1;}" > conftest.$ac_ext
50
51 AC_MSG_CHECKING(if your C compiler wants a hit off the pipe)
52 save_cflags="$CFLAGS"
53 CFLAGS="-pipe $CFLAGS"
54 if (eval $ac_link) 2>/dev/null; then
55  AC_MSG_RESULT(sure does)
56 else
57  AC_MSG_RESULT(no)
58  CFLAGS="$save_cflags"
59 fi
60
61 AC_MSG_CHECKING(if your C compiler has a link-time optimizer)
62 if test x$GCC = xyes; then
63  save_cflags="$CFLAGS"
64  CFLAGS="-flto $CFLAGS"
65  if (eval $ac_link) 2>/dev/null; then
66   AC_MSG_RESULT(sure does)
67  else
68   AC_MSG_RESULT(no)
69   CFLAGS="$save_cflags"
70  fi
71 else
72  AC_MSG_RESULT(skipped)
73 fi
74
75 AC_ARG_ENABLE(warnings, AS_HELP_STRING([--enable-warnings],
76  [turn on lots of compile-time warnings,
77   these are only useful for development]),
78  [if test "x$enableval" = "xyes" ; then
79    AC_MSG_CHECKING(if your C compiler has gcc-like --extra-warnings)
80    save_cflags="$CFLAGS"
81    CFLAGS="$CFLAGS -fdiagnostics-show-option --all-warnings --extra-warnings"
82    if (eval $ac_link) 2>/dev/null; then
83     AC_MSG_RESULT(yes)
84    else
85     AC_MSG_RESULT(no)
86     CFLAGS="$save_cflags"
87    fi
88
89    AC_MSG_CHECKING(if your C compiler has clang-like -Weverything)
90    save_cflags="$CFLAGS"
91    CFLAGS="$CFLAGS -Weverything"
92    if (eval $ac_link) 2>/dev/null; then
93     AC_MSG_RESULT(yes)
94    else
95     AC_MSG_RESULT(no)
96     CFLAGS="$save_cflags"
97    fi
98   fi])
99
100 rm -f conftest.$ac_objext conftest.$ac_ext
101
102
103
104 # Check for zlib.
105 AC_CHECK_LIB(z, deflate,, [
106  cat <<END
107 $RULE
108
109 I can't link to zlib.  You really can't have a modern
110 operating system without zlib.
111
112 If you are using a package-based operating system (like
113 something with RPMs), see if there is a zlib-devel package
114 that you can install, to provide the zlib headers and
115 libraries.
116
117 $RULE
118 END
119  AC_MSG_ERROR([can't find usable zlib])])
120
121
122
123 # Check for Solaris.
124 # Must do at least socket and nsl before checking for libpcap.
125 AC_SEARCH_LIBS(gethostbyname, [nsl], [],
126   [AC_MSG_ERROR([gethostbyname() not found])])
127 AC_SEARCH_LIBS(socket, [socket], [],
128   [AC_MSG_ERROR([socket() not found])])
129 AC_SEARCH_LIBS(hstrerror, [resolv], [],
130   [AC_MSG_ERROR([hstrerror() not found])])
131
132 # Solaris need sys/filio.h for FIONBIO
133 AC_CHECK_HEADERS(sys/filio.h)
134
135 # This is the modern way.  Older systems use the ioctl method.
136 AC_SEARCH_LIBS(getifaddrs, [c],
137   [AC_CHECK_HEADERS(ifaddrs.h)])
138
139
140
141 # Some OSes (Solaris) need sys/sockio.h for SIOCGIFADDR
142 AC_CHECK_HEADERS(sys/sockio.h)
143
144 # Check for libpcap
145 AC_ARG_WITH(pcap, AS_HELP_STRING([--with-pcap=DIR],
146  [prefix to libpcap installation]),
147  [if test "$withval" = yes ; then
148    AC_MSG_ERROR([must specify a path, as in --with-pcap=DIR])
149   fi
150   if test "$withval" != no ; then
151    PCAP_HOME="$withval"
152   fi])
153
154 if test -n "$PCAP_HOME" ; then
155  LDFLAGS="$LDFLAGS -L$PCAP_HOME/lib"
156  CPPFLAGS2="$CPPFLAGS -I$PCAP_HOME/include/pcap"
157  CPPFLAGS="$CPPFLAGS -I$PCAP_HOME/include"
158 else
159  CPPFLAGS2="$CPPFLAGS -I/usr/include/pcap"
160 fi
161
162 AC_CHECK_LIB(pcap, pcap_loop,, PCAP_BROKEN="yes")
163
164 if test -z "$PCAP_BROKEN" ; then
165   AC_CHECK_HEADERS(pcap.h,,
166   [# Couldn't find headers, try include/pcap
167    CPPFLAGS="$CPPFLAGS2"
168    AC_MSG_NOTICE([checking in include/pcap])
169    unset ac_cv_header_pcap_h
170    AC_CHECK_HEADERS(pcap.h,
171     AC_MSG_RESULT([I hate you.]),
172     PCAP_BROKEN="yes")])
173 fi
174
175 if test -n "$PCAP_BROKEN" ; then
176  cat <<END_MSG
177 $RULE
178
179 darkstat absolutely requires libpcap to be installed.  On Debian
180 systems, apt-get install libpcap-dev.  On RPM systems like RedHat, try
181 installing the libpcap-devel package.
182
183 If libpcap is installed into a prefix that isn't being picked up by
184 configure, for example /usr/local, re-run configure and add
185 --with-pcap=/usr/local
186
187 Failing all of the above, go to http://www.tcpdump.org/ and download the
188 source distribution of libpcap and build it yourself.
189
190 $RULE
191 END_MSG
192  AC_MSG_ERROR([can't find usable libpcap])
193 fi
194
195 # If not in libc, we might find these in libbsd.
196 AC_SEARCH_LIBS(setproctitle, [bsd],
197  AC_DEFINE(HAVE_SETPROCTITLE, 1,
198   [Define to 1 if you have setproctitle().]))
199 AC_SEARCH_LIBS(strlcpy, [bsd],
200  AC_DEFINE(HAVE_STRLCPY, 1,
201   [Define to 1 if you have strlcpy().]))
202 AC_SEARCH_LIBS(strlcat, [bsd],
203  AC_DEFINE(HAVE_STRLCAT, 1,
204   [Define to 1 if you have strlcat().]))
205
206 AC_CHECK_HEADERS(bsd/string.h)
207 AC_CHECK_HEADERS(bsd/unistd.h)
208
209 AC_SEARCH_LIBS(clock_gettime, rt)
210
211 AC_CONFIG_FILES([Makefile darkstat.8])
212 AC_OUTPUT