Restore pre-IPv6 localip_update() code for systems without ifaddrs.h
[darkstat] / configure.ac
index 44f3e7c..c9b68ab 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT(darkstat, 3.0.0-git)
+AC_INIT(darkstat, 3.0.0-git, , , http://unix4lyfe.org/darkstat/)
 AC_CONFIG_SRCDIR([darkstat.c])
 AC_CONFIG_HEADER([config.h])
 
@@ -7,21 +7,24 @@ 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)]),
- [_chd="$withval"],
+ [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 - what a shitty Unix)
+   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])
+    AC_MSG_ERROR([please specify --with-chroot-dir=/path/to/darkstat/chroot])
    fi
   fi])
 AC_DEFINE_UNQUOTED(CHROOT_DIR, "$_chd", [Default chroot directory.])
@@ -37,6 +40,31 @@ AC_DEFINE_UNQUOTED(PRIVDROP_USER, "$_pdu", [User to privdrop to.])
 AC_PROG_INSTALL
 AC_PROG_CC
 
+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
 
@@ -50,17 +78,120 @@ else
  CFLAGS="$save_cflags"
 fi
 
-AC_ARG_WITH(mad-warnings, AS_HELP_STRING([--with-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(mad-warnings, AS_HELP_STRING([--enable-mad-warnings],
  [turn on lots of compile-time warnings, this needs GCC and is only
  really useful for development]),
- [if test "$withval" = yes ; then
+ [if test "x$enableval" = "xyes" ; then
    AC_MSG_CHECKING(if your C compiler throws mad warnings)
    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 -fdiagnostics-show-option \
+-Wabi \
+-Waddress \
+-Waggregate-return \
+-Wall \
+-Warray-bounds \
+-Wbad-function-cast \
+-Wcast-align \
+-Wcast-qual \
+-Wchar-subscripts \
+-Wclobbered \
+-Wcomment \
+-Wcoverage-mismatch \
+-Wdeclaration-after-statement \
+-Wdisabled-optimization \
+-Wempty-body \
+-Wextra \
+-Wfloat-equal \
+-Wformat \
+-Wformat=2 \
+-Wformat-nonliteral \
+-Wformat-security \
+-Wformat-y2k \
+-Wignored-qualifiers \
+-Wimplicit \
+-Wimplicit-function-declaration \
+-Wimplicit-int \
+-Winit-self \
+-Winline \
+-Winvalid-pch \
+-Wlogical-op \
+-Wlong-long \
+-Wmain \
+-Wmissing-braces \
+-Wmissing-declarations \
+-Wmissing-field-initializers \
+-Wmissing-format-attribute \
+-Wmissing-include-dirs \
+-Wmissing-noreturn \
+-Wmissing-parameter-type \
+-Wmissing-prototypes \
+-Wnested-externs \
+-Wnonnull \
+-Wold-style-declaration \
+-Wold-style-definition \
+-Wpacked \
+-Wpacked-bitfield-compat \
+-Wparentheses \
+-Wpointer-arith \
+-Wpointer-sign \
+-Wredundant-decls \
+-Wreturn-type \
+-Wsequence-point \
+-Wshadow \
+-Wsign-compare \
+-Wstrict-aliasing -fstrict-aliasing \
+-Wstrict-overflow=5 -fstrict-overflow \
+-Wstrict-prototypes \
+-Wswitch \
+-Wswitch-default \
+-Wswitch-enum \
+-Wsync-nand \
+-Wtrigraphs \
+-Wtype-limits \
+-Wundef \
+-Wuninitialized \
+-Wunknown-pragmas \
+-Wunsafe-loop-optimizations \
+-Wunused \
+-Wunused-function \
+-Wunused-label \
+-Wunused-parameter \
+-Wunused-value \
+-Wunused-variable \
+-Wvariadic-macros \
+-Wvla \
+-Wvolatile-register-var \
+-Wwrite-strings \
+"
+
+# the above are valid for gcc version 4.4.3
+# we skip:
+#-pedantic
+#-Wc++-compat
+#-Wconversion
+#-Wfatal-errors
+#-Wpadded
+#-Wsign-conversion
+#-Wstack-protector
+#-Wsystem-headers
+#-Wtraditional
+#-Wtraditional-conversion
+#-Wunreachable-code
+
    if (eval $ac_link) 2>/dev/null; then
     AC_MSG_RESULT(sure does)
    else
@@ -94,11 +225,24 @@ 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(inet_aton, [resolv], [],
+  [AC_MSG_ERROR([inet_aton() not found])])
+
+# Solaris need sys/filio.h for FIONBIO
+AC_CHECK_HEADERS(sys/filio.h)
+
+# GNU/kfreebsd needs net/if_ether.h for ETH_P_IPV6
+AC_CHECK_HEADERS(net/if_ether.h)
 
+# This is the modern way.  Older systems use the ioctl method.
+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],
@@ -157,24 +301,19 @@ fi
 
 
 # A real OS will have setproctitle()
-AC_CHECK_LIB(c, setproctitle,
+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)
-
-# Some OSes (Solaris) need sys/filio.h for FIONBIO
-AC_CHECK_HEADERS(sys/filio.h)
 
-AC_CONFIG_FILES(Makefile)
+AC_CONFIG_FILES([Makefile darkstat.8])
 AC_OUTPUT