configure.in: Add hint for building solaris 64-bit binary.
[collectd.git] / configure.in
index 106fe39..e377fe9 100644 (file)
@@ -65,14 +65,20 @@ then
        AC_SUBST(KERNEL_CFLAGS)
 fi
 
+if test "x$ac_system" = "xSolaris"
+then
+       CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
+fi
+
 #
 # Checks for header files.
 #
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 AC_HEADER_DIRENT
+AC_HEADER_STDBOOL
 
-AC_CHECK_HEADERS(stdio.h stdint.h stdbool.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h sys/isa_defs.h)
+AC_CHECK_HEADERS(stdio.h stdint.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h sys/isa_defs.h)
 
 # For ping library
 AC_CHECK_HEADERS(netinet/in_systm.h, [], [],
@@ -240,7 +246,8 @@ AC_CHECK_HEADERS(IOKit/ps/IOPowerSources.h, [], [],
 ])
 
 # For the swap module
-AC_CHECK_HEADERS(sys/swap.h, [], [],
+have_sys_swap_h="yes"
+AC_CHECK_HEADERS(sys/swap.h vm/anon.h, [], [have_sys_swap_h="no"],
 [
 #if HAVE_SYS_TYPES_H
 #  include <sys/types.h>
@@ -250,6 +257,18 @@ AC_CHECK_HEADERS(sys/swap.h, [], [],
 #endif
 ])
 
+if test "x$have_sys_swap_h$ac_system" = "xnoSolaris"
+then
+       hint_64=""
+       if test "x$GCC" = "xyes"
+       then
+               hint_64="CC='gcc -m64'"
+       else
+               hint_64="CC='cc -xarch=v9'"
+       fi
+       AC_MSG_NOTICE([Solaris detected and sys/swap.h not usable. Try building a 64-bit binary ($hint_64 ./configure).])
+fi
+
 # For load module
 # For the processes plugin
 # For users module
@@ -394,7 +413,7 @@ AC_CHECK_FUNCS(gettimeofday select strdup strtol getaddrinfo getnameinfo strchr
 AC_FUNC_STRERROR_R
 
 AC_CACHE_CHECK([for strtok_r],
-  [have_strtok_r_default],
+  [c_cv_have_strtok_r_default],
   AC_LINK_IFELSE(
     AC_LANG_PROGRAM(
     [[[[
@@ -416,18 +435,18 @@ AC_CACHE_CHECK([for strtok_r],
         printf ("token = %s;\n", token);
       }
     ]]]]),
-    [have_strtok_r_default="yes"],
-    [have_strtok_r_default="no"]
+    [c_cv_have_strtok_r_default="yes"],
+    [c_cv_have_strtok_r_default="no"]
   )
 )
 
-if test "x$have_strtok_r_default" = "xno"
+if test "x$c_cv_have_strtok_r_default" = "xno"
 then
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -D_REENTRANT=1"
 
   AC_CACHE_CHECK([if strtok_r needs _REENTRANT],
-    [have_strtok_r_reentrant],
+    [c_cv_have_strtok_r_reentrant],
     AC_LINK_IFELSE(
       AC_LANG_PROGRAM(
       [[[[
@@ -449,7 +468,7 @@ then
           printf ("token = %s;\n", token);
         }
       ]]]]),
-      [have_strtok_r_reentrant="yes"],
+      [c_cv_have_strtok_r_reentrant="yes"],
       [AC_MSG_FAILURE([strtok_r isn't available. Please file a bugreport!])]
     )
   )
@@ -493,7 +512,7 @@ AC_ARG_WITH(nan-emulation, [AS_HELP_STRING([--with-nan-emulation], [use emulated
 [nan_type="none"])
 if test "x$nan_type" = "xnone"; then
   AC_CACHE_CHECK([whether NAN is defined by default],
-    [have_nan_default],
+    [c_cv_have_nan_default],
     AC_COMPILE_IFELSE(
       AC_LANG_PROGRAM(
       [[
@@ -507,18 +526,18 @@ static float foo = NAN;
        else
        return 1;
       ]]),
-      [have_nan_default="yes"],
-      [have_nan_default="no"]
+      [c_cv_have_nan_default="yes"],
+      [c_cv_have_nan_default="no"]
     )
   )
-  if test "x$have_nan_default" = "xyes"
+  if test "x$c_cv_have_nan_default" = "xyes"
   then
     nan_type="default"
   fi
 fi
 if test "x$nan_type" = "xnone"; then
   AC_CACHE_CHECK([whether NAN is defined by __USE_ISOC99],
-    [have_nan_isoc],
+    [c_cv_have_nan_isoc],
     AC_COMPILE_IFELSE(
       AC_LANG_PROGRAM(
       [[
@@ -533,18 +552,18 @@ static float foo = NAN;
        else
        return 1;
       ]]),
-      [have_nan_isoc="yes"],
-      [have_nan_isoc="no"]
+      [c_cv_have_nan_isoc="yes"],
+      [c_cv_have_nan_isoc="no"]
     )
   )
-  if test "x$have_nan_isoc" = "xyes"
+  if test "x$c_cv_have_nan_isoc" = "xyes"
   then
     nan_type="isoc99"
   fi
 fi
 if test "x$nan_type" = "xnone"; then
   AC_CACHE_CHECK([whether NAN can be defined by 0/0],
-    [have_nan_zero],
+    [c_cv_have_nan_zero],
     AC_RUN_IFELSE(
       AC_LANG_PROGRAM(
       [[
@@ -565,11 +584,11 @@ static float foo = NAN;
        else
        return 1;
       ]]),
-      [have_nan_zero="yes"],
-      [have_nan_zero="no"]
+      [c_cv_have_nan_zero="yes"],
+      [c_cv_have_nan_zero="no"]
     )
   )
-  if test "x$have_nan_zero" = "xyes"
+  if test "x$c_cv_have_nan_zero" = "xyes"
   then
     nan_type="zero"
   fi
@@ -604,7 +623,7 @@ fi; fi; fi
 
 if test "x$fp_layout_type" = "xunknown"; then
   AC_CACHE_CHECK([if doubles are stored in x86 representation],
-    [fp_layout_need_nothing],
+    [c_cv_fp_layout_need_nothing],
     AC_RUN_IFELSE(
       AC_LANG_PROGRAM(
       [[[[
@@ -633,17 +652,17 @@ if test "x$fp_layout_type" = "xunknown"; then
        else
                return (1);
       ]]]]),
-      [fp_layout_need_nothing="yes"],
-      [fp_layout_need_nothing="no"]
+      [c_cv_fp_layout_need_nothing="yes"],
+      [c_cv_fp_layout_need_nothing="no"]
     )
   )
-  if test "x$fp_layout_need_nothing" = "xyes"; then
+  if test "x$c_cv_fp_layout_need_nothing" = "xyes"; then
     fp_layout_type="nothing"
   fi
 fi
 if test "x$fp_layout_type" = "xunknown"; then
   AC_CACHE_CHECK([if endianflip converts to x86 representation],
-    [fp_layout_need_endianflip],
+    [c_cv_fp_layout_need_endianflip],
     AC_RUN_IFELSE(
       AC_LANG_PROGRAM(
       [[[[
@@ -680,17 +699,17 @@ if test "x$fp_layout_type" = "xunknown"; then
        else
                return (1);
       ]]]]),
-      [fp_layout_need_endianflip="yes"],
-      [fp_layout_need_endianflip="no"]
+      [c_cv_fp_layout_need_endianflip="yes"],
+      [c_cv_fp_layout_need_endianflip="no"]
     )
   )
-  if test "x$fp_layout_need_endianflip" = "xyes"; then
+  if test "x$c_cv_fp_layout_need_endianflip" = "xyes"; then
     fp_layout_type="endianflip"
   fi
 fi
 if test "x$fp_layout_type" = "xunknown"; then
   AC_CACHE_CHECK([if intswap converts to x86 representation],
-    [fp_layout_need_intswap],
+    [c_cv_fp_layout_need_intswap],
     AC_RUN_IFELSE(
       AC_LANG_PROGRAM(
       [[[[
@@ -721,11 +740,11 @@ if test "x$fp_layout_type" = "xunknown"; then
        else
                return (1);
       ]]]]),
-      [fp_layout_need_intswap="yes"],
-      [fp_layout_need_intswap="no"]
+      [c_cv_fp_layout_need_intswap="yes"],
+      [c_cv_fp_layout_need_intswap="no"]
     )
   )
-  if test "x$fp_layout_need_intswap" = "xyes"; then
+  if test "x$c_cv_fp_layout_need_intswap" = "xyes"; then
     fp_layout_type="intswap"
   fi
 fi
@@ -764,10 +783,9 @@ fi
 
 if test "x$have_getmntent" = "xc"; then
        AC_CACHE_CHECK([whether getmntent takes one argument],
-               [have_one_getmntent],
+               [c_cv_have_one_getmntent],
                AC_COMPILE_IFELSE(
                        AC_LANG_PROGRAM([[AC_INCLUDES_DEFAULT
-#include <mntent.h>
 #include "$srcdir/src/utils_mount.h"]],
                                [[
                                 FILE *fh;
@@ -776,15 +794,14 @@ if test "x$have_getmntent" = "xc"; then
                                 me = getmntent (fh);
                                ]]
                        ),
-                       [have_one_getmntent="yes"],
-                       [have_one_getmntent="no"]
+                       [c_cv_have_one_getmntent="yes"],
+                       [c_cv_have_one_getmntent="no"]
                )
        )
        AC_CACHE_CHECK([whether getmntent takes two arguments],
-               [have_two_getmntent],
+               [c_cv_have_two_getmntent],
                AC_COMPILE_IFELSE(
                        AC_LANG_PROGRAM([[AC_INCLUDES_DEFAULT
-#include <sys/mnttab.h>
 #include "$srcdir/src/utils_mount.h"]],
                                [[
                                 FILE *fh;
@@ -794,8 +811,8 @@ if test "x$have_getmntent" = "xc"; then
                                 status = getmntent (fh, &mt);
                                ]]
                        ),
-                       [have_two_getmntent="yes"],
-                       [have_two_getmntent="no"]
+                       [c_cv_have_two_getmntent="yes"],
+                       [c_cv_have_two_getmntent="no"]
                )
        )
 fi
@@ -803,11 +820,11 @@ fi
 # Check for different versions of `getmntent' here..
 
 if test "x$have_getmntent" = "xc"; then
-       if test "x$have_one_getmntent" = "xyes"; then
+       if test "x$c_cv_have_one_getmntent" = "xyes"; then
                AC_DEFINE(HAVE_ONE_GETMNTENT, 1,
                          [Define if the function getmntent exists and takes one argument.])
        fi
-       if test "x$have_two_getmntent" = "xyes"; then
+       if test "x$c_cv_have_two_getmntent" = "xyes"; then
                AC_DEFINE(HAVE_TWO_GETMNTENT, 1,
                          [Define if the function getmntent exists and takes two arguments.])
        fi
@@ -844,6 +861,37 @@ AC_CHECK_MEMBERS([struct net_device_stats.rx_bytes, struct net_device_stats.tx_p
        #include <linux/netdevice.h>
        ])
 
+AC_CHECK_MEMBERS([struct kinfo_proc.ki_pid, struct kinfo_proc.ki_rssize, struct kinfo_proc.ki_rusage],
+       [
+               AC_DEFINE(HAVE_STRUCT_KINFO_PROC_FREEBSD, 1,
+                       [Define if struct kinfo_proc exists in the FreeBSD variant.])
+               have_struct_kinfo_proc_freebsd="yes"
+       ],
+       [
+               have_struct_kinfo_proc_freebsd="no"
+       ],
+       [
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+       ])
+
+AC_CHECK_MEMBERS([struct kinfo_proc.kp_proc, struct kinfo_proc.kp_eproc],
+       [
+               AC_DEFINE(HAVE_STRUCT_KINFO_PROC_OPENBSD, 1,
+                       [Define if struct kinfo_proc exists in the OpenBSD variant.])
+               have_struct_kinfo_proc_openbsd="yes"
+       ],
+       [
+               have_struct_kinfo_proc_openbsd="no"
+       ],
+       [
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <kvm.h>
+       ])
+
 AC_CHECK_MEMBERS([struct udphdr.uh_dport, struct udphdr.uh_sport], [], [],
 [#if HAVE_STDINT_H
 # include <stdint.h>
@@ -1235,12 +1283,42 @@ then
   AC_SUBST(BUILD_WITH_LIBSTATGRAB_LDFLAGS)
 fi
 
-AC_CHECK_LIB(kvm, kvm_getswapinfo, [with_libkvm="yes"], [with_libkvm="no"])
-if test "x$with_libkvm" = "xyes"
+with_libkvm="no"
+AC_CHECK_LIB(kvm, kvm_getprocs, [with_kvm_getprocs="yes"], [with_kvm_getprocs="no"])
+if test "x$with_kvm_getprocs" = "xyes"
 then
-       AC_DEFINE(HAVE_LIBKVM, 1, [Define to 1 if you have the 'kvm' library (-lkvm)])
+       AC_DEFINE(HAVE_LIBKVM_GETPROCS, 1,
+                 [Define to 1 if you have the 'kvm' library with the 'kvm_getprocs' symbol (-lkvm)])
+       with_libkvm="yes"
 fi
-AM_CONDITIONAL(BUILD_WITH_LIBKVM, test "x$with_libkvm" = "xyes")
+AM_CONDITIONAL(BUILD_WITH_LIBKVM_GETPROCS, test "x$with_kvm_getprocs" = "xyes")
+
+AC_CHECK_LIB(kvm, kvm_getswapinfo, [with_kvm_getswapinfo="yes"], [with_kvm_getswapinfo="no"])
+if test "x$with_kvm_getswapinfo" = "xyes"
+then
+       AC_DEFINE(HAVE_LIBKVM_GETSWAPINFO, 1,
+                 [Define to 1 if you have the 'kvm' library with the 'kvm_getswapinfo' symbol (-lkvm)])
+       with_libkvm="yes"
+fi
+AM_CONDITIONAL(BUILD_WITH_LIBKVM_GETSWAPINFO, test "x$with_kvm_getswapinfo" = "xyes")
+
+AC_CHECK_LIB(kvm, kvm_nlist, [with_kvm_nlist="yes"], [with_kvm_nlist="no"])
+if test "x$with_kvm_nlist" = "xyes"
+then
+       AC_DEFINE(HAVE_LIBKVM_NLIST, 1,
+                 [Define to 1 if you have the 'kvm' library with the 'kvm_nlist' symbol (-lkvm)])
+       with_libkvm="yes"
+fi
+AM_CONDITIONAL(BUILD_WITH_LIBKVM_NLIST, test "x$with_kvm_nlist" = "xyes")
+
+AC_CHECK_LIB(kvm, kvm_openfiles, [with_kvm_openfiles="yes"], [with_kvm_openfiles="no"])
+if test "x$with_kvm_openfiles" = "xyes"
+then
+       AC_DEFINE(HAVE_LIBKVM_NLIST, 1,
+                 [Define to 1 if you have the 'kvm' library with the 'kvm_openfiles' symbol (-lkvm)])
+       with_libkvm="yes"
+fi
+AM_CONDITIONAL(BUILD_WITH_LIBKVM_OPENFILES, test "x$with_kvm_openfiles" = "xyes")
 
 with_sensors_cflags=""
 with_sensors_ldflags=""
@@ -1338,12 +1416,24 @@ then
 
        if test $mysql_config_status -ne 0
        then
-               with_libmysql="no"
+               with_libmysql="no ($with_mysql_config failed)"
        else
                SAVE_CPPFLAGS="$CPPFLAGS"
                CPPFLAGS="$CPPFLAGS $with_mysql_cflags"
 
-               AC_CHECK_HEADERS(mysql/mysql.h, [], [with_libmysql="no (mysql/mysql.h not found)"], [])
+               have_mysql_h="no"
+               have_mysql_mysql_h="no"
+               AC_CHECK_HEADERS(mysql.h, [have_mysql_h="yes"])
+
+               if test "x$have_mysql_h" = "xno"
+               then
+                       AC_CHECK_HEADERS(mysql/mysql.h, [have_mysql_mysql_h="yes"])
+               fi
+
+               if test "x$have_mysql_h$have_mysql_mysql_h" = "xnono"
+               then
+                       with_libmysql="no (mysql.h not found)"
+               fi
 
                CPPFLAGS="$SAVE_CPPFLAGS"
        fi
@@ -1355,12 +1445,17 @@ then
 
        if test $mysql_config_status -ne 0
        then
-               with_libmysql="no"
+               with_libmysql="no ($with_mysql_config failed)"
        else
                AC_CHECK_LIB(mysqlclient, mysql_init,
                 [with_libmysql="yes"],
                 [with_libmysql="no (symbol 'mysql_init' not found)"],
                 [$with_mysql_libs])
+
+               AC_CHECK_LIB(mysqlclient, mysql_get_server_version,
+                [with_libmysql="yes"],
+                [with_libmysql="no (symbol 'mysql_get_server_version' not found)"],
+                [$with_mysql_libs])
        fi
 fi
 if test "x$with_libmysql" = "xyes"
@@ -1595,7 +1690,11 @@ AM_CONDITIONAL(BUILD_WITH_LIBESMTP, test "x$with_libesmtp" = "xyes")
 perl_interpreter="perl"
 AC_ARG_WITH(libperl, [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to libperl.])],
 [
-       if test "x$withval" != "xno" && test "x$withval" != "xyes"
+       if test -x "$withval"
+       then
+               perl_interpreter="$withval"
+               with_libperl="yes"
+       else if test "x$withval" != "xno" && test "x$withval" != "xyes"
        then
                LDFLAGS="$LDFLAGS -L$withval/lib"
                CPPFLAGS="$CPPFLAGS -I$withval/include"
@@ -1603,7 +1702,7 @@ AC_ARG_WITH(libperl, [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to l
                with_libperl="yes"
        else
                with_libperl="$withval"
-       fi
+       fi; fi
 ],
 [
        with_libperl="yes"
@@ -1613,7 +1712,7 @@ AC_MSG_CHECKING([for perl])
 perl_interpreter=`which "$perl_interpreter" 2> /dev/null`
 if test -x "$perl_interpreter"
 then
-       AC_MSG_RESULT([yes])
+       AC_MSG_RESULT([yes ($perl_interpreter)])
 else
        perl_interpreter=""
        AC_MSG_RESULT([no])
@@ -1626,32 +1725,34 @@ if test "x$with_libperl" = "xyes" \
 then
   SAVE_CFLAGS=$CFLAGS
   SAVE_LDFLAGS=$LDFLAGS
-  PERL_CFLAGS=`$perl_interpreter -MExtUtils::Embed -e ccopts`
-  PERL_LDFLAGS=`$perl_interpreter -MExtUtils::Embed -e ldopts`
+dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string)
+  PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ccopts`
+  PERL_LDFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts`
   CFLAGS="$CFLAGS $PERL_CFLAGS"
   LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 
   AC_CACHE_CHECK([for libperl],
-    [have_libperl],
+    [c_cv_have_libperl],
     AC_LINK_IFELSE(
       AC_LANG_PROGRAM(
       [[
+#define PERL_NO_GET_CONTEXT
 #include <EXTERN.h>
 #include <perl.h>
 #include <XSUB.h>
       ]],
       [[
-       PerlInterpreter *perl = NULL;
-       Perl_load_module (perl, PERL_LOADMOD_NOIMPORT,
+       dTHX;
+       load_module (PERL_LOADMOD_NOIMPORT,
                         newSVpv ("Collectd::Plugin::FooBar", 24),
                         Nullsv);
       ]]),
-      [have_libperl="yes"],
-      [have_libperl="no"]
+      [c_cv_have_libperl="yes"],
+      [c_cv_have_libperl="no"]
     )
   )
 
-  if test "x$have_libperl" = "xyes"
+  if test "x$c_cv_have_libperl" = "xyes"
   then
          AC_DEFINE(HAVE_LIBPERL, 1, [Define if libperl is present and usable.])
          AC_SUBST(PERL_CFLAGS)
@@ -1664,7 +1765,7 @@ then
   LDFLAGS=$SAVE_LDFLAGS
 else if test -z "$perl_interpreter"; then
   with_libperl="no (no perl interpreter found)"
-  have_libperl="no"
+  c_cv_have_libperl="no"
 fi; fi
 AM_CONDITIONAL(BUILD_WITH_LIBPERL, test "x$with_libperl" = "xyes")
 
@@ -1676,7 +1777,7 @@ then
        LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
 
        AC_CACHE_CHECK([if perl supports ithreads],
-               [have_perl_ithreads],
+               [c_cv_have_perl_ithreads],
                AC_LINK_IFELSE(
                        AC_LANG_PROGRAM(
                        [[
@@ -1689,12 +1790,12 @@ then
 #endif /* !defined(USE_ITHREADS) */
                        ]],
                        [[ ]]),
-                       [have_perl_ithreads="yes"],
-                       [have_perl_ithreads="no"]
+                       [c_cv_have_perl_ithreads="yes"],
+                       [c_cv_have_perl_ithreads="no"]
                )
        )
 
-       if test "x$have_perl_ithreads" = "xyes"
+       if test "x$c_cv_have_perl_ithreads" = "xyes"
        then
                AC_DEFINE(HAVE_PERL_ITHREADS, 1, [Define if Perl supports ithreads.])
        fi
@@ -1836,32 +1937,93 @@ PKG_CHECK_MODULES([LIBNOTIFY], [libnotify],
                [with_libnotify="yes"],
                [with_libnotify="no ($LIBNOTIFY_PKG_ERRORS)"])
 
-with_libupsclient="no (pkg-config isn't available)"
+with_libupsclient_config=""
 with_libupsclient_cflags=""
 with_libupsclient_libs=""
-if test "x$PKG_CONFIG" != "x"
-then
-       pkg-config --exists 'libupsclient' 2>/dev/null
-       if test "$?" = "0"
+AC_ARG_WITH(libupsclient, [AS_HELP_STRING([--with-libupsclient@<:@=PREFIX@:>@], [Path to the Net-SNMPD library.])],
+[
+       if test "x$withval" = "xno"
+       then
+               with_libupsclient="no"
+       else if test "x$withval" = "xyes"
        then
-               with_libupsclient="yes"
+               with_libupsclient="use_pkgconfig"
        else
+               if test -x "$withval"
+               then
+                       with_libupsclient_config="$withval"
+                       with_libupsclient="use_libupsclient_config"
+               else if test -x "$withval/bin/libupsclient-config"
+               then
+                       with_libupsclient_config="$withval/bin/net-snmp-config"
+                       with_libupsclient="use_libupsclient_config"
+               else
+                       AC_MSG_NOTICE([Not checking for libupsclient: Manually configured])
+                       with_libupsclient_cflags="-I$withval/include"
+                       with_libupsclient_libs="-L$withval/lib -lupsclient"
+                       with_libupsclient="yes"
+               fi; fi
+       fi; fi
+],
+[with_libupsclient="use_pkgconfig"])
+
+# configure using libupsclient-config
+if test "x$with_libupsclient" = "xuse_libupsclient_config"
+then
+       AC_MSG_NOTICE([Checking for libupsclient using $with_libupsclient_config])
+       with_libupsclient_cflags="`$with_libupsclient_config --cflags`"
+       if test $? -ne 0
+       then
+               with_libupsclient="no ($with_libupsclient_config failed)"
+       fi
+       with_libupsclient_libs="`$with_libupsclient_config --libs`"
+       if test $? -ne 0
+       then
+               with_libupsclient="no ($with_libupsclient_config failed)"
+       fi
+fi
+if test "x$with_libupsclient" = "xuse_libupsclient_config"
+then
+       with_libupsclient="yes"
+fi
+
+# configure using pkg-config
+if test "x$with_libupsclient" = "xuse_pkgconfig"
+then
+       if test "x$PKG_CONFIG" = "x"
+       then
+               with_libupsclient="no (Don't have pkg-config)"
+       fi
+fi
+if test "x$with_libupsclient" = "xuse_pkgconfig"
+then
+       AC_MSG_NOTICE([Checking for libupsclient using $PKG_CONFIG])
+       $PKG_CONFIG --exists 'libupsclient' 2>/dev/null
+       if test $? -ne 0
+       then
                with_libupsclient="no (pkg-config doesn't know library)"
        fi
 fi
-if test "x$with_libupsclient" = "xyes"
+if test "x$with_libupsclient" = "xuse_pkgconfig"
 then
-       with_libupsclient_cflags="`pkg-config --cflags 'libupsclient'`"
+       with_libupsclient_cflags="`$PKG_CONFIG --cflags 'libupsclient'`"
        if test $? -ne 0
        then
-               with_libupsclient="no"
+               with_libupsclient="no ($PKG_CONFIG failed)"
        fi
-       with_libupsclient_libs="`pkg-config --libs 'libupsclient'`"
+       with_libupsclient_libs="`$PKG_CONFIG --libs 'libupsclient'`"
        if test $? -ne 0
        then
-               with_libupsclient="no"
+               with_libupsclient="no ($PKG_CONFIG failed)"
        fi
 fi
+if test "x$with_libupsclient" = "xuse_pkgconfig"
+then
+       with_libupsclient="yes"
+fi
+
+# with_libupsclient_cflags and with_libupsclient_libs are set up now, let's do
+# the actual checks.
 if test "x$with_libupsclient" = "xyes"
 then
        SAVE_CPPFLAGS="$CPPFLAGS"
@@ -2453,7 +2615,13 @@ AC_DEFUN(
     ])
     if test "x$enable_plugin" = "xyes"
     then
-           AC_DEFINE([HAVE_PLUGIN_]my_toupper([$1]), 1, [Define to 1 if the $1 plugin is enabled.])
+           if test "x$2" = "xyes"
+           then
+                   AC_DEFINE([HAVE_PLUGIN_]my_toupper([$1]), 1, [Define to 1 if the $1 plugin is enabled.])
+           else # User passed "yes" but dependency checking yielded "no" => Dependency problem.
+                   dependency_error="yes"
+                   enable_plugin="no (dependency error)"
+           fi
     fi
     AM_CONDITIONAL([BUILD_PLUGIN_]my_toupper([$1]), test "x$enable_plugin" = "xyes")
     enable_$1="$enable_plugin"
@@ -2467,6 +2635,7 @@ AC_COLLECTD([debug],     [enable],  [feature], [debugging])
 AC_COLLECTD([daemon],    [disable], [feature], [daemon mode])
 AC_COLLECTD([getifaddrs],[enable],  [feature], [getifaddrs under Linux])
 
+dependency_error="no"
 plugin_ascent="no"
 plugin_battery="no"
 plugin_cpu="no"
@@ -2542,10 +2711,14 @@ then
        plugin_disk="yes"
        plugin_interface="yes"
        plugin_memory="yes"
-       plugin_swap="yes"
        plugin_tape="yes"
 fi
 
+if test "x$have_sys_swap_h$with_kstat$ac_system" = "xyesyesSolaris"
+then
+       plugin_swap="yes"
+fi
+
 # libstatgrab
 if test "x$with_libstatgrab" = "xyes"
 then
@@ -2579,14 +2752,40 @@ then
        plugin_tcpconns="yes"
 fi
 
-if test "x$have_statfs" = "xyes"
+# Df plugin: Check if we know how to determine mount points first.
+#if test "x$have_listmntent" = "xyes"; then
+#      plugin_df="yes"
+#fi
+if test "x$have_getvfsstat" = "xyes" || test "x$have_getfsstat" = "xyes"
 then
        plugin_df="yes"
 fi
-if test "x$have_statvfs" = "xyes"
+if test "x$c_cv_have_two_getmntent" = "xyes" || test "x$have_getmntent" = "xgen" || test "x$have_getmntent" = "xsun"
 then
        plugin_df="yes"
 fi
+#if test "x$have_getmntent" = "xseq"
+#then
+#      plugin_df="yes"
+#fi
+if test "x$c_cv_have_one_getmntent" = "xyes"
+then
+       plugin_df="yes"
+fi
+
+# Df plugin: Check if we have either `statfs' or `statvfs' second.
+if test "x$plugin_df" = "xyes"
+then
+       plugin_df="no"
+       if test "x$have_statfs" = "xyes"
+       then
+               plugin_df="yes"
+       fi
+       if test "x$have_statvfs" = "xyes"
+       then
+               plugin_df="yes"
+       fi
+fi
 
 if test "x$have_getifaddrs" = "xyes"
 then
@@ -2603,7 +2802,7 @@ then
        plugin_load="yes"
 fi
 
-if test "x$have_libperl$have_perl_ithreads" = "xyesyes"
+if test "x$c_cv_have_libperl$c_cv_have_perl_ithreads" = "xyesyes"
 then
        plugin_perl="yes"
 fi
@@ -2624,12 +2823,21 @@ then
        plugin_processes="yes"
 fi
 
-if test "x$with_libkvm" = "xyes"
+if test "x$with_kvm_getprocs" = "xyes" && test "x$have_struct_kinfo_proc_freebsd" = "xyes"
 then
        plugin_processes="yes"
+fi
+
+if test "x$with_kvm_getswapinfo" = "xyes"
+then
        plugin_swap="yes"
 fi
 
+if test "x$with_kvm_openfiles$with_kvm_nlist" = "xyesyes"
+then
+       plugin_tcpconns="yes"
+fi
+
 if test "x$have_getutent" = "xyes"
 then
        plugin_users="yes"
@@ -2659,6 +2867,7 @@ AC_PLUGIN([dns],         [$with_libpcap],      [DNS traffic analysis])
 AC_PLUGIN([email],       [yes],                [EMail statistics])
 AC_PLUGIN([entropy],     [$plugin_entropy],    [Entropy statistics])
 AC_PLUGIN([exec],        [yes],                [Execution of external programs])
+AC_PLUGIN([filecount],   [yes],                [Count files in directories])
 AC_PLUGIN([hddtemp],     [yes],                [Query hddtempd])
 AC_PLUGIN([interface],   [$plugin_interface],  [Interface traffic statistics])
 AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters])
@@ -2686,7 +2895,6 @@ AC_PLUGIN([ping],        [$with_liboping],     [Network latency statistics])
 AC_PLUGIN([postgresql],  [$with_libpq],        [PostgreSQL database statistics])
 AC_PLUGIN([powerdns],    [yes],                [PowerDNS statistics])
 AC_PLUGIN([processes],   [$plugin_processes],  [Process statistics])
-AC_PLUGIN([qmail],       [yes],                [QMail queue statistics])
 AC_PLUGIN([rrdtool],     [$with_rrdtool],      [RRDTool output plugin])
 AC_PLUGIN([sensors],     [$with_lm_sensors],   [lm_sensors statistics])
 AC_PLUGIN([serial],      [$plugin_serial],     [serial port traffic])
@@ -2826,6 +3034,7 @@ Configuration:
     email . . . . . . . . $enable_email
     entropy . . . . . . . $enable_entropy
     exec  . . . . . . . . $enable_exec
+    filecount . . . . . . $enable_filecount
     hddtemp . . . . . . . $enable_hddtemp
     interface . . . . . . $enable_interface
     iptables  . . . . . . $enable_iptables
@@ -2854,7 +3063,6 @@ Configuration:
     postgresql  . . . . . $enable_postgresql
     powerdns  . . . . . . $enable_powerdns
     processes . . . . . . $enable_processes
-    qmail . . . . . . . . $enable_qmail
     rrdtool . . . . . . . $enable_rrdtool
     sensors . . . . . . . $enable_sensors
     serial  . . . . . . . $enable_serial
@@ -2875,3 +3083,7 @@ Configuration:
     xmms  . . . . . . . . $enable_xmms
 
 EOF
+
+if test "x$dependency_error" = "xyes"; then
+       AC_MSG_ERROR("Some plugins are missing dependencies - see above summary for details")
+fi