Update portability notes.
[darkstat] / configure.ac
index 1b68124..11ee1bb 100644 (file)
@@ -1,34 +1,11 @@
-AC_INIT(darkstat, 3.0.0-git)
+# Need at least 2.64 for PACKAGE_URL
+AC_PREREQ([2.64])
+AC_INIT(darkstat, 3.0.0-git, , , https://unix4lyfe.org/darkstat/)
 AC_CONFIG_SRCDIR([darkstat.c])
 AC_CONFIG_HEADER([config.h])
 
 RULE="------------------------------------------------------------"
 
-# Let user specify CHROOT_DIR, or else autodetect it, or else die.
-AC_ARG_WITH(chroot-dir, AS_HELP_STRING([--with-chroot-dir],
- [specify the chroot directory (default: /var/empty)]),
- [if test "x$withval" = "xyes"; then
-   AC_MSG_ERROR([please specify --with-chroot-dir=/path/to/darkstat/chroot])
-  fi
-  _chd="$withval"],
- [# Find an "empty" directory to serve as the chroot.
-  _chd="/var/empty"
-  AC_MSG_CHECKING([for $_chd])
-  if test -d $_chd ; then
-   AC_MSG_RESULT(found it)
-  else
-   AC_MSG_RESULT(not there)
-   _chd="/var/lib/empty"
-   AC_MSG_CHECKING([for $_chd])
-   if test -d $_chd ; then
-    AC_MSG_RESULT(found it)
-   else
-    AC_MSG_RESULT(not there either)
-    AC_MSG_ERROR([please specify --with-chroot-dir=/path/to/darkstat/chroot])
-   fi
-  fi])
-AC_DEFINE_UNQUOTED(CHROOT_DIR, "$_chd", [Default chroot directory.])
-
 # Allow configure-time override of PRIVDROP_USER.
 AC_ARG_WITH(privdrop-user, AS_HELP_STRING([--with-privdrop-user],
  [specify which user to drop privileges to (default: nobody)]),
@@ -40,6 +17,34 @@ AC_DEFINE_UNQUOTED(PRIVDROP_USER, "$_pdu", [User to privdrop to.])
 AC_PROG_INSTALL
 AC_PROG_CC
 
+# Compiler's language features.
+AC_C_RESTRICT
+
+m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+AC_ARG_ENABLE([silent-rules],
+[  --enable-silent-rules          less verbose build output (undo: 'make V=1')
+  --disable-silent-rules         verbose build output (undo: 'make V=0')])
+case $enable_silent_rules in
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=0;;
+esac
+AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+# Let user disable debugging symbols so we create smaller binaries.
+AC_MSG_CHECKING(if we want debug code)
+AC_ARG_ENABLE(debug, AS_HELP_STRING([--disable-debug],
+ [turn off debugging code and asserts]),
+ [if test "x$enableval" = "xno" ; then
+   CFLAGS="$CFLAGS -DNDEBUG -g0"
+   AC_MSG_RESULT(nope)
+  elif test "x$enableval" = "xyes" ; then
+   AC_MSG_RESULT(sure)
+  else
+   CFLAGS="$CFLAGS -g$enableval"
+   AC_MSG_RESULT(sure ($enableval))
+  fi],
+ [AC_MSG_RESULT(sure)])
+
 # Augment CFLAGS for fun.
 echo "int main(void){return 1;}" > conftest.$ac_ext
 
@@ -53,19 +58,39 @@ else
  CFLAGS="$save_cflags"
 fi
 
-AC_ARG_WITH(mad-warnings, AS_HELP_STRING([--with-mad-warnings],
- [turn on lots of compile-time warnings, this needs GCC and is only
- really useful for development]),
- [if test "$withval" = yes ; then
-   AC_MSG_CHECKING(if your C compiler throws mad warnings)
+AC_MSG_CHECKING(if your C compiler has a link-time optimizer)
+if test x$GCC = xyes; then
+ save_cflags="$CFLAGS"
+ CFLAGS="-flto $CFLAGS"
+ if (eval $ac_link) 2>/dev/null; then
+  AC_MSG_RESULT(sure does)
+ else
+  AC_MSG_RESULT(no)
+  CFLAGS="$save_cflags"
+ fi
+else
+ AC_MSG_RESULT(skipped)
+fi
+
+AC_ARG_ENABLE(warnings, AS_HELP_STRING([--enable-warnings],
+ [turn on lots of compile-time warnings,
+  these are only useful for development]),
+ [if test "x$enableval" = "xyes" ; then
+   AC_MSG_CHECKING(if your C compiler has gcc-like --extra-warnings)
+   save_cflags="$CFLAGS"
+   CFLAGS="$CFLAGS -fdiagnostics-show-option --all-warnings --extra-warnings"
+   if (eval $ac_link) 2>/dev/null; then
+    AC_MSG_RESULT(yes)
+   else
+    AC_MSG_RESULT(no)
+    CFLAGS="$save_cflags"
+   fi
+
+   AC_MSG_CHECKING(if your C compiler has clang-like -Weverything)
    save_cflags="$CFLAGS"
-   CFLAGS="$CFLAGS -Wall -Wredundant-decls -Wnested-externs \
--Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
--Winline -Wcast-qual -W -Wbad-function-cast -Wcast-align \
--Wchar-subscripts -Wshadow -Wwrite-strings \
--Wuninitialized -Winline"
+   CFLAGS="$CFLAGS -Weverything"
    if (eval $ac_link) 2>/dev/null; then
-    AC_MSG_RESULT(sure does)
+    AC_MSG_RESULT(yes)
    else
     AC_MSG_RESULT(no)
     CFLAGS="$save_cflags"
@@ -84,10 +109,9 @@ $RULE
 I can't link to zlib.  You really can't have a modern
 operating system without zlib.
 
-If you are using a package-based operating system (like
-something with RPMs), see if there is a zlib-devel package
-that you can install, to provide the zlib headers and
-libraries.
+On Debian or a derivative, try: sudo apt-get install zlib1g-dev
+
+On an RPM system, see if there is a zlib-devel package.
 
 $RULE
 END
@@ -97,12 +121,25 @@ END
 
 # Check for Solaris.
 # Must do at least socket and nsl before checking for libpcap.
-AC_CHECK_LIB(nsl, gethostbyname)
-AC_CHECK_LIB(socket, socket)
-AC_CHECK_LIB(resolv, inet_aton)
+AC_SEARCH_LIBS(gethostbyname, [nsl], [],
+  [AC_MSG_ERROR([gethostbyname() not found])])
+AC_SEARCH_LIBS(socket, [socket], [],
+  [AC_MSG_ERROR([socket() not found])])
+AC_SEARCH_LIBS(hstrerror, [resolv], [],
+  [AC_MSG_ERROR([hstrerror() not found])])
+
+# Solaris need sys/filio.h for FIONBIO
+AC_CHECK_HEADERS(sys/filio.h)
+
+# This is the modern way.  Older systems use the ioctl method.
+AC_SEARCH_LIBS(getifaddrs, [c],
+  [AC_CHECK_HEADERS(ifaddrs.h)])
 
 
 
+# Some OSes (Solaris) need sys/sockio.h for SIOCGIFADDR
+AC_CHECK_HEADERS(sys/sockio.h)
+
 # Check for libpcap
 AC_ARG_WITH(pcap, AS_HELP_STRING([--with-pcap=DIR],
  [prefix to libpcap installation]),
@@ -138,46 +175,37 @@ if test -n "$PCAP_BROKEN" ; then
  cat <<END_MSG
 $RULE
 
-darkstat absolutely requires libpcap to be installed.  If
-it's installed into a prefix that isn't being picked up by
+darkstat absolutely requires libpcap to be installed.  On Debian
+systems, apt-get install libpcap-dev.  On RPM systems like RedHat, try
+installing the libpcap-devel package.
+
+If libpcap is installed into a prefix that isn't being picked up by
 configure, for example /usr/local, re-run configure and add
 --with-pcap=/usr/local
 
-If you are using a package-based operating system (like
-something with RPMs), see if there is a pcap-devel or
-libpcap-devel package that you can install, to provide the
-pcap headers and libraries.
-
-Failing all of the above, go to http://www.tcpdump.org/ and
-download the source distribution of libpcap and build it
-yourself.
+Failing all of the above, go to http://www.tcpdump.org/ and download the
+source distribution of libpcap and build it yourself.
 
 $RULE
 END_MSG
  AC_MSG_ERROR([can't find usable libpcap])
 fi
 
-
-
-# A real OS will have setproctitle()
-AC_CHECK_LIB(c, setproctitle,
+# If not in libc, we might find these in libbsd.
+AC_SEARCH_LIBS(setproctitle, [bsd],
  AC_DEFINE(HAVE_SETPROCTITLE, 1,
   [Define to 1 if you have setproctitle().]))
-
-# A real OS will have safe string functions
-AC_CHECK_LIB(c, strlcpy,
+AC_SEARCH_LIBS(strlcpy, [bsd],
  AC_DEFINE(HAVE_STRLCPY, 1,
   [Define to 1 if you have strlcpy().]))
-
-AC_CHECK_LIB(c, strlcat,
+AC_SEARCH_LIBS(strlcat, [bsd],
  AC_DEFINE(HAVE_STRLCAT, 1,
   [Define to 1 if you have strlcat().]))
 
-# Some OSes (Solaris) need sys/sockio.h for SIOCGIFADDR
-AC_CHECK_HEADERS(sys/sockio.h)
+AC_CHECK_HEADERS(bsd/string.h)
+AC_CHECK_HEADERS(bsd/unistd.h)
 
-# Some OSes (Solaris) need sys/filio.h for FIONBIO
-AC_CHECK_HEADERS(sys/filio.h)
+AC_SEARCH_LIBS(clock_gettime, rt)
 
 AC_CONFIG_FILES([Makefile darkstat.8])
 AC_OUTPUT