Code

Adding check_mysql_query, using new ranges and threshold checking
[nagiosplug.git] / configure.in
index c9c92d75f80ea20e9d5307acd3edadf5afe3fc35..6a0418523817c344d978211798854d4633dc0113 100644 (file)
@@ -1,10 +1,10 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_REVISION ($Revision$)
-AC_PREREQ(2.50)
-AC_INIT(nagios-plugins,1.3.99)
-AC_CONFIG_SRCDIR(Helper.pm)
+AC_PREREQ(2.58)
+AC_INIT(nagios-plugins,1.4.2)
+AC_CONFIG_SRCDIR(NPTest.pm)
 AM_INIT_AUTOMAKE
-AM_CONFIG_HEADER(plugins/config.h)
+AM_CONFIG_HEADER(config.h)
 AC_CANONICAL_HOST
 
 RELEASE=1
@@ -16,18 +16,24 @@ dnl Figure out how to invoke "install" and what install options to use.
 AC_PROG_INSTALL
 AC_SUBST(INSTALL)
 
-AC_GNU_SOURCE
+dnl Must come very early on due to coreutils requirement
+dnl Takes care of AC_GNU_SOURCE, AC_AIX and AC_MINIX
+gl_USE_SYSTEM_EXTENSIONS
+
 AC_PROG_CC
 AC_PROG_CPP
 AC_PROG_GCC_TRADITIONAL
 AC_PROG_RANLIB
-AC_AIX
-AC_MINIX
 
 AC_PROG_MAKE_SET
 AC_PROG_AWK
 
-AC_FUNC_GETLOADAVG($topdir/lib)
+AC_FUNC_MALLOC
+AC_FUNC_REALLOC
+AC_FUNC_ERROR_AT_LINE
+
+AC_CONFIG_LIBOBJ_DIR(lib)
+AC_FUNC_GETLOADAVG([lib])
 
 ifdef([AC_FUNC_STRTOD],[AC_FUNC_STRTOD],[AM_FUNC_STRTOD])
 dnl AM_WITH_REGEX
@@ -68,6 +74,17 @@ AC_SUBST(with_nagios_group)
 INSTALL_OPTS="-o $with_nagios_user -g $with_nagios_group"
 AC_SUBST(INSTALL_OPTS)
 
+AC_ARG_WITH(libtap-srcdir,
+       ACX_HELP_STRING([--with-libtap-srcdir=path],
+               [full path to a compiled libtap srcdir]),
+       EXTRA_TEST=test_utils
+       EXTRA_TAPOBJ=$withval/tap.o
+       AC_SUBST(EXTRA_TEST)
+       AC_SUBST(EXTRA_TAPOBJ)
+       LDFLAGS="$LDFLAGS -L$withval"
+       CPPFLAGS="$CPPFLAGS -I$withval"
+       )
+
 AC_ARG_WITH(trusted_path,
        ACX_HELP_STRING([--with-trusted-path=PATH],
                [sets trusted path for executables called by scripts (default=/bin:/sbin:/usr/bin:/usr/sbin)]),
@@ -95,12 +112,42 @@ AC_SUBST(REV_TIMESTAMP)
 
 dnl Checks for programs.
 AC_PATH_PROG(PYTHON,python)
-AC_PATH_PROG(PERL,perl)
 AC_PATH_PROG(SH,sh)
-
+AC_PATH_PROG(PERL,perl)
+AC_PATH_PROG(LIBGNUTLS_CONFIG,libgnutls-config)
 AC_PATH_PROG(HOSTNAME,hostname)
 AC_PATH_PROG(BASENAME,basename)
 
+dnl allow them to override the path of perl
+AC_ARG_WITH(perl,
+        ACX_HELP_STRING([--with-perl=PATH],
+                       [sets path to perl executable]),
+                       with_perl=$withval,with_perl=$PERL)
+AC_SUBST(PERL, $with_perl)
+
+dnl openssl/gnutls
+AC_ARG_WITH(openssl,
+            AC_HELP_STRING([--with-openssl=DIR], 
+                           [path to openssl installation]),)
+
+AC_ARG_WITH(gnutls,
+            ACX_HELP_STRING([--with-gnutls=PATH],
+                            [path to gnutls installation root]),)
+
+dnl you can only have one or the other
+if test ! "$with_openssl" = "" && test ! "$with_openssl" = "no"; then
+       with_gnutls="no"
+fi
+if test ! "$with_gnutls" = "" && test ! "$with_gnutls" = "no"; then
+       with_openssl="no"
+fi
+
+dnl list of possible dirs to try to autodetect openssl
+dnl if $dir/include exists, we consider it found
+dnl the order should allow locally installed versions to override distros' ones
+OPENSSL_DIRS="/usr /usr/local /usr/slocal /usr/local/openssl /usr/local/ssl \
+              /opt /opt/openssl"
+
 dnl
 dnl Check for miscellaneous stuff
 dnl 
@@ -124,6 +171,12 @@ AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket")
 AC_CHECK_LIB(resolv,main,SOCKETLIBS="$SOCKETLIBS -lresolv")
 AC_SUBST(SOCKETLIBS)
 
+dnl
+dnl check for math-related functions needing -lm
+AC_CHECK_HEADERS(math.h)
+AC_CHECK_LIB(m,floor,MATHLIBS="-lm")
+AC_SUBST(MATHLIBS)
+
 dnl Check for PostgreSQL libraries
 _SAVEDLIBS="$LIBS"
 _SAVEDCPPFLAGS="$CPPFLAGS"
@@ -198,6 +251,7 @@ if test "$ac_cv_lib_ldap_main" = "yes"; then
   AC_SUBST(LDAPINCLUDE)
   AC_CHECK_FUNCS(ldap_set_option)
   EXTRAS="$EXTRAS check_ldap"
+       AC_CHECK_FUNCS(ldap_init ldap_set_option ldap_get_option ldap_start_tls_s)
 else
   AC_MSG_WARN([Skipping LDAP plugin])
   AC_MSG_WARN([install LDAP libs to compile this plugin (see REQUIREMENTS).])
@@ -233,7 +287,7 @@ fi
 if test "$ac_cv_lib_mysqlclient_mysql_init" = "yes" -o "$ac_cv_lib_mysqlclient_mysql_close" = "yes"; then
   AC_CHECK_HEADERS(mysql/mysql.h mysql/errmsg.h, MYSQLINCLUDE="-I$MYSQL/include" )
   if test "$ac_cv_header_mysql_mysql_h" = "yes" -a "$ac_cv_header_mysql_errmsg_h" = "yes"; then
-    EXTRAS="$EXTRAS check_mysql"
+    EXTRAS="$EXTRAS check_mysql check_mysql_query"
     AC_SUBST(MYSQLINCLUDE)
     AC_SUBST(MYSQLLIBS)
     AC_SUBST(check_mysql_LDFLAGS)
@@ -245,31 +299,9 @@ else
   AC_MSG_WARN([Skipping mysql plugin])
   AC_MSG_WARN([install mysql client libs to compile this plugin (see REQUIREMENTS).])
 fi
-CPPFLAGS="$_SAVEDCPPFLAGS"
+CPPFLAGS="$_SAVEDCPPFLAGS $MYSQLINCLUDE"
 LIBS="$_SAVEDLIBS"
 
-dnl Check for OpenSSL location
-AC_PATH_PROG(OPENSSL,openssl)
-if test "$OPENSSL" = "/usr/bin/openssl"; then
-  OPENSSL=/usr
-elif test "$OPENSSL" = "/usr/sbin/openssl"; then
-  OPENSSL=/usr
-elif test "$OPENSSL" = "/opt/bin/openssl"; then
-  OPENSSL=/opt
-elif test "$OPENSSL" = "/opt/openssl/bin/openssl"; then
-  OPENSSL=/opt/openssl
-elif test "$OPENSSL" = "/usr/slocal/bin/openssl"; then
-  OPENSSL=/usr/slocal
-elif test "$OPENSSL" = "/usr/local/bin/openssl"; then
-  OPENSSL=/usr/local
-elif test "$OPENSSL" = "/usr/local/ssl/bin/openssl"; then
-  OPENSSL=/usr/local/ssl
-fi
-AC_ARG_WITH(openssl,
-       ACX_HELP_STRING([--with-openssl=DIR],
-               [sets path to openssl installation]),
-       OPENSSL=$withval,)
-
 AC_CHECK_HEADERS(unistd.h)
 
 dnl Check for AF_INET6 support - unistd.h required for Darwin
@@ -396,6 +428,7 @@ if test x"$enable_emulate_getaddrinfo" != xno ; then
 
 fi
 
+dnl Checks for Kerberos. Must come before openssl checks for Redhat EL 3
 AC_CHECK_HEADERS(krb5.h,FOUNDINCLUDE=yes,FOUNDINCLUDE=no)
 if test "$FOUNDINCLUDE" = "no"; then
   _SAVEDCPPFLAGS="$CPPFLAGS"
@@ -411,46 +444,99 @@ if test "$FOUNDINCLUDE" = "no"; then
   CPPFLAGS="$_SAVEDCPPFLAGS"
 fi
 
-dnl Check for OpenSSL header files
-unset FOUNDINCLUDE
-_SAVEDCPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I$OPENSSL/include"
-AC_CHECK_HEADERS(openssl/ssl.h openssl/x509.h openssl/rsa.h openssl/pem.h openssl/crypto.h openssl/err.h,
-                 SSLINCLUDE="-I$OPENSSL/include"
-                 FOUNDINCLUDE=yes,
-                 FOUNDINCLUDE=no)
-if test "$FOUNDINCLUDE" = "no"; then
-  AC_CHECK_HEADERS(ssl.h x509.h rsa.h pem.h crypto.h err.h,
-                   SSLINCLUDE="-I$OPENSSL/include"
-                   FOUNDINCLUDE=yes,
-                   FOUNDINCLUDE=no)
-fi
-AC_SUBST(SSLINCLUDE)
-if test "$FOUNDINCLUDE" = "no"; then
-  CPPFLAGS="$_SAVEDCPPFLAGS"
-fi
 
-dnl Check for crypto lib
-_SAVEDLIBS="$LIBS"
-AC_CHECK_LIB(crypto,CRYPTO_lock,,,-L$OPENSSL/lib)
-if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
-  dnl Check for SSL lib
-  AC_CHECK_LIB(ssl,main,LDFLAGS="$LDFLAGS -L$OPENSSL/lib" SSLLIBS="-lssl -lcrypto",AC_CHECK_LIB(ssl,main,LDFLAGS="$LDFLAGS -L$OPENSSL/lib" SSLLIBS="-lssl -lcrypto"),-L$OPENSSL/lib -lcrypto)
+dnl openssl detection/configuration
+if ! test "$with_openssl" = "no"; then
+       dnl Check for OpenSSL location if it wasn't already specified
+       if ! test -d "$with_openssl"; then
+               for d in $OPENSSL_DIRS; do
+                       if test -x ${d}/bin/openssl || test -x ${d}/sbin/openssl ; then
+                               with_openssl=$d
+                       fi
+               done
+       fi
+
+       _SAVEDCPPFLAGS="$CPPFLAGS"
+       _SAVEDLDFLAGS="$LDFLAGS"
+       dnl Check for OpenSSL header files
+       unset FOUNDINCLUDE
+       CPPFLAGS="$CPPFLAGS -I$OPENSSL/include"
+       LDFLAGS="$LDFLAGS -R$OPENSSL/lib"
+
+       dnl check for openssl in $dir/include/openssl
+       AC_CHECK_HEADERS(openssl/ssl.h openssl/x509.h openssl/rsa.h openssl/pem.h openssl/crypto.h openssl/err.h,
+                        SSLINCLUDE="-I$OPENSSL/include"
+                        FOUNDINCLUDE=yes,
+                        FOUNDINCLUDE=no)
+       dnl else check to see if $dir/include has it
+       if test "$FOUNDINCLUDE" = "no"; then
+               AC_CHECK_HEADERS(ssl.h x509.h rsa.h pem.h crypto.h err.h,
+                                SSLINCLUDE="-I$OPENSSL/include"
+                                FOUNDINCLUDE=yes,
+                                FOUNDINCLUDE=no)
+       fi
+       AC_SUBST(SSLINCLUDE)
+       dnl if we didn't find it, reset CPPFLAGS
+       if test "$FOUNDINCLUDE" = "no"; then
+               CPPFLAGS="$_SAVEDCPPFLAGS"
+               LDFLAGS="$_SAVEDLDFLAGS"
+       fi
+
+       dnl Check for crypto lib
+       _SAVEDLIBS="$LIBS"
+       LIBS="-L${with_openssl}/lib"
+       AC_CHECK_LIB(crypto,CRYPTO_lock)
+       if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
+               dnl Check for SSL lib
+               AC_CHECK_LIB(ssl,main, SSLLIBS="-lssl -lcrypto",,-lcrypto)
+       fi
+       LIBS="$_SAVEDLIBS"
+
+       dnl test headers and libs to decide whether check_http should use SSL
+       if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
+               if test "$ac_cv_lib_ssl_main" = "yes"; then
+                       if test "$FOUNDINCLUDE" = "yes"; then
+                               FOUNDOPENSSL="yes"
+                       fi
+               fi
+       fi
 fi
-LIBS="$_SAVEDLIBS"
 
-dnl test headers and libs to decide whether check_http should use SSL
-if test "$ac_cv_lib_crypto_CRYPTO_lock" = "yes"; then
-  if test "$ac_cv_lib_ssl_main" = "yes"; then
-    if test "$FOUNDINCLUDE" = "yes"; then
-      check_tcp_ssl="check_simap check_spop"
-      AC_SUBST(check_tcp_ssl)
-      AC_SUBST(SSLLIBS)
-      AC_DEFINE(HAVE_SSL,1,[Define if SSL libraries are found])
-    fi
-  fi
+
+dnl check for gnutls if openssl isn't found (or is disabled)
+if test ! "$FOUNDOPENSSL" = "yes" && test ! "$with_gnutls" = "no"; then
+       if test ! "$with_gnutls" = ""; then
+               CPPFLAGS="$CPPFLAGS -I${with_gnutls}/include"
+       elif test ! "$LIBGNUTLS_CONFIG" = ""; then
+               CPPFLAGS="$CPPFLAGS -I`$LIBGNUTLS_CONFIG --prefix`"
+       fi
+       AC_CHECK_HEADERS([gnutls/openssl.h],FOUNDGNUTLS="yes",)
+       if test "$FOUNDGNUTLS" = "yes"; then
+               AC_CHECK_LIB(gnutls-openssl,main,SSLLIBS="-lgnutls-openssl")
+       fi
+fi
+dnl end check for gnutls
+
+if test "$FOUNDOPENSSL" = "yes" || test "$FOUNDGNUTLS" = "yes"; then
+       check_tcp_ssl="check_simap check_spop check_jabber check_nntps check_ssmtp"
+       AC_SUBST(check_tcp_ssl)
+       AC_SUBST(SSLLIBS)
+       AC_DEFINE(HAVE_SSL,1,[Define if SSL libraries are found])
+       if test "$FOUNDOPENSSL" = "yes"; then
+               AC_DEFINE(USE_OPENSSL,1,[Define if using OpenSSL libraries])
+               with_openssl="yes"
+               with_gnutls="no"
+       else
+               AC_DEFINE(USE_GNUTLS,1,[Define if using gnutls libraries])
+               with_gnutls="yes"
+               with_openssl="no"
+       fi
+else
+       dnl else deliberately disabled or no ssl support available
+       AC_MSG_WARN([OpenSSL or GnuTLS libs could not be found or were disabled])
+       with_openssl="no"
+       with_gnutls="no"
 fi
-CPPFLAGS="$_SAVEDCPPFLAGS"
 
 dnl
 dnl Checks for header files.
@@ -459,51 +545,8 @@ dnl
 AC_HEADER_STDC
 AC_HEADER_TIME
 AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(signal.h strings.h string.h syslog.h uio.h errno.h regex.h sys/types.h sys/time.h sys/socket.h sys/loadavg.h)
+AC_CHECK_HEADERS(signal.h strings.h string.h syslog.h uio.h errno.h regex.h sys/types.h sys/time.h sys/socket.h sys/loadavg.h sys/un.h)
 AC_CHECK_HEADERS(features.h stdarg.h sys/unistd.h ctype.h stdlib.h)
-AC_CHECK_HEADERS(limits.h sys/param.h sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h fcntl.h sys/statfs.h sys/dustat.h sys/statvfs.h)
-
-# Define HAVE_INTTYPES_H if <inttypes.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
-[AC_TRY_COMPILE(
-  [#include <sys/types.h>
-#include <inttypes.h>],
-  [uintmax_t i = (uintmax_t) -1;],
-  jm_ac_cv_header_inttypes_h=yes,
-  jm_ac_cv_header_inttypes_h=no)])
-
-if test $jm_ac_cv_header_inttypes_h = yes; then
-  AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
-[Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
-   and declares uintmax_t. ])
-fi
-
-# Check for SunOS statfs brokenness wrt partitions 2GB and larger.
-# If <sys/vfs.h> exists and struct statfs has a member named f_spare,
-# enable the work-around code in fsusage.c.
-AC_MSG_CHECKING([for statfs that truncates block counts])
-AC_CACHE_VAL(fu_cv_sys_truncating_statfs,
-[AC_TRY_COMPILE([
-#if !defined(sun) && !defined(__sun)
-choke -- this is a workaround for a Sun-specific problem
-#endif
-#include <sys/types.h>
-#include <sys/vfs.h>],
-[struct statfs t; long c = *(t.f_spare);],
-fu_cv_sys_truncating_statfs=yes
-AC_MSG_RESULT(yes),
-fu_cv_sys_truncating_statfs=no
-AC_MSG_RESULT(no),
-)])
-if test $fu_cv_sys_truncating_statfs = yes; then
-  AC_DEFINE(STATFS_TRUNCATES_BLOCK_COUNTS, 1,
-[  Define if the block counts reported by statfs may be truncated to 2GB
-   and the correct values may be stored in the f_spare array.
-   (SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem.
-   SunOS 4.1.1 seems not to be affected.)])
-fi
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -512,35 +555,22 @@ AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_TYPE_SIGNAL
 
-AC_CHECK_SIZEOF(int,cross)
-AC_CHECK_SIZEOF(long,cross)
-AC_CHECK_SIZEOF(short,cross)
-
-AC_CACHE_CHECK([for long long],ac_cv_have_longlong,[
-AC_TRY_RUN([#include <stdio.h>
-main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
-ac_cv_have_longlong=yes,ac_cv_have_longlong=no,ac_cv_have_longlong=cross)])
-if test x"$ac_cv_have_longlong" = x"yes"; then
-    AC_DEFINE(HAVE_LONGLONG,1,[Define if system has long long type])
-fi
-
-#
-# Check if the compiler supports the LL prefix on long long integers.
-# AIX needs this.
-
-AC_CACHE_CHECK([for LL suffix on long long integers],ac_cv_compiler_supports_ll, [
-    AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
-        ac_cv_compiler_supports_ll=yes,ac_cv_compiler_supports_ll=no)])
-if test x"$ac_cv_compiler_supports_ll" = x"yes"; then
-   AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Define if compiler support long long])
-fi
-
-AC_CACHE_CHECK([for __va_copy],ac_cv_HAVE_VA_COPY,[
+AC_CACHE_CHECK([for va_copy],ac_cv_HAVE_VA_COPY,[
 AC_TRY_LINK([#include <stdarg.h>
-va_list ap1,ap2;], [__va_copy(ap1,ap2);],
-ac_cv_HAVE_VA_COPY=yes,ac_cv_HAVE_VA_COPY=no)])
+va_list ap1,ap2;], [va_copy(ap1,ap2);],
+ac_cv_HAVE_VA_COPY=yes,
+ac_cv_HAVE_VA_COPY=no)])
 if test x"$ac_cv_HAVE_VA_COPY" = x"yes"; then
-    AC_DEFINE(HAVE_VA_COPY,1,[Define if system has va_copy])
+    AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
+else    
+    AC_CACHE_CHECK([for __va_copy],ac_cv_HAVE___VA_COPY,[
+    AC_TRY_LINK([#include <stdarg.h>
+    va_list ap1,ap2;], [__va_copy(ap1,ap2);],
+    ac_cv_HAVE___VA_COPY=yes,
+    ac_cv_HAVE___VA_COPY=no)])
+    if test x"$ac_cv_HAVE___VA_COPY" = x"yes"; then
+        AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
+    fi
 fi
 
 AC_CHECK_FUNCS(vsnprintf snprintf asprintf vasprintf)
@@ -586,7 +616,7 @@ AC_TRY_COMPILE([#include <sys/time.h>],
                               AC_DEFINE(NEED_GETTIMEOFDAY,1,[Define if gettimeofday is needed])))
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS(memmove select socket strdup strstr strtod strtol strtoul)
+AC_CHECK_FUNCS(memmove select socket strdup strstr strtod strtol strtoul floor)
 
 AC_MSG_CHECKING(return type of socket size)
 AC_TRY_COMPILE([#include <stdlib.h>
@@ -601,8 +631,21 @@ AC_TRY_COMPILE([#include <stdlib.h>
 AC_DEFINE_UNQUOTED(SOCKET_SIZE_TYPE, $ac_cv_socket_size_type ,
        [Define type of socket size])
 
-if test -f "/proc/loadavg"
-then
+AC_ARG_WITH(proc-loadavg,
+            ACX_HELP_STRING([--with-proc-loadavg=PATH],
+                            [path to /proc/loadavg or equivalent]),
+            ac_cv_proc_loadavg=$withval)
+AC_MSG_CHECKING([for /proc/loadavg])
+if test -n "$ac_cv_proc_loadavg"; then
+  AC_MSG_RESULT([(command line) $ac_cv_proc_loadavg])
+elif test -f "/proc/loadavg"; then
+  AC_MSG_RESULT([found /proc/loadavg])
+  ac_cv_proc_loadavg="/proc/loadavg"
+else
+  AC_MSG_RESULT([no])
+fi
+
+if test -n "$ac_cv_proc_loadavg"; then
   AC_DEFINE(HAVE_PROC_LOADAVG,1,[Define if /proc/loadavg or similar exists])
   AC_DEFINE_UNQUOTED(PROC_LOADAVG,"/proc/loadavg",[Location of /proc/loadavg])
 fi
@@ -612,56 +655,132 @@ dnl #### Process table test
 AC_PATH_PROG(PATH_TO_PS,ps)
 
 AC_MSG_CHECKING(for ps syntax)
+AC_ARG_WITH(ps_command,
+            ACX_HELP_STRING([--with-ps-command=PATH], 
+                            [Verbatim command to execute for ps]),
+            PS_COMMAND=$withval)
+AC_ARG_WITH(ps_format,
+            ACX_HELP_STRING([--with-ps-format=FORMAT],
+                            [Format string for scanning ps output]),
+            PS_FORMAT=$withval)
+AC_ARG_WITH(ps_cols,
+            ACX_HELP_STRING([--with-ps-cols=NUM], 
+                            [Number of columns in ps command]),
+            PS_COLS=$withval)
+AC_ARG_WITH(ps_varlist,
+            ACX_HELP_STRING([--with-ps-varlist=LIST],
+                            [Variable list for sscanf of 'ps' output]),
+            PS_VARLIST=$withval)
+
+AM_CONDITIONAL(WANT_PST3, false)
+
+if test -n "$PS_COMMAND" && test -n "$PS_FORMAT" && test -n "$PS_COLS" && test -n "$PS_VARLIST"; then 
+       ac_cv_ps_command="$PS_COMMAND"
+       ac_cv_ps_format="$PS_FORMAT"
+       ac_cv_ps_varlist="$PS_VARLIST"
+       ac_cv_ps_cols="$PS_COLS"
+       AC_MSG_RESULT([(command-line) $ac_cv_ps_command])
+
+dnl Now using the pst3/kmem hack for solaris systems to avoid truncation
+elif test "$ac_cv_uname_s" = "SunOS"; then
+       #
+       # this is a very, very ugly hack, to hardcode the location for plugins
+       #
+       if test "$libexecdir" = '${exec_prefix}/libexec'; then
+               if test "$exec_prefix" = "NONE"; then
+                       if test "$prefix" = "NONE"; then
+                               pst3="$ac_default_prefix/libexec/pst3"
+                       else
+                               pst3="$prefix/libexec/pst3"
+                       fi
+               else
+                       pst3="$exec_prefix/libexec/pst3"
+               fi
+       else
+               pst3="$libexecdir/pst3"
+       fi
+       ac_cv_ps_command="$pst3"
+       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
+       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_cols=8
+       AC_MSG_RESULT([using nagios-plugins internal ps for solaris])
+       AM_CONDITIONAL(WANT_PST3, true)
+
+dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo.
+dnl so test for this first...
+elif ps axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \
+       egrep -i ["^ *STAT +[UCOMAND]+ +VSZ +RSS +USER +UID +PID +PPID +COMMAND"] > /dev/null
+then
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS axwo 'stat uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
+       AC_MSG_RESULT([$ac_cv_ps_command])
+
 dnl For OpenBSD 3.2 & 3.3. Must come before ps -weo
+dnl Should also work for FreeBSD 5.2.1 and 5.3
 dnl  STAT UCOMM              VSZ   RSS USER      PPID COMMAND
-if ps -axwo 'stat comm vsz rss user uid ppid args' 2>/dev/null | \
-       egrep -i ["^ *STAT +UCOMM +VSZ +RSS +USER +UID +PPID +COMMAND"] > /dev/null
+elif ps -axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \
+       egrep -i ["^ *STAT +[UCOMAND]+ +VSZ +RSS +USER +UID +PID +PPID +COMMAND"] > /dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -axwo 'stat uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -axwo 'stat uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
+       AC_MSG_RESULT([$ac_cv_ps_command])
+
+dnl Some *BSDs have different format for ps. This is mainly to catch FreeBSD 4. 
+dnl Limitation: Only first 16 chars returned for ucomm field
+dnl Must come before ps -weo
+elif ps -axwo 'stat uid pid ppid vsz rss pcpu ucomm command' 2>/dev/null | \
+       egrep -i ["^ *STAT +UID +PID +PPID +VSZ +RSS +%CPU +UCOMM +COMMAND"] > /dev/null
+then
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -axwo 'stat uid pid ppid vsz rss pcpu ucomm command'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl  STAT UCOMM              VSZ   RSS USER       UID  PPID COMMAND
-elif ps -weo 'stat comm vsz rss user uid ppid args' 2>/dev/null | \
-       egrep -i ["^ *S[TAUES]* +[UCOMDNA]+ +[VSIZE]+ +R[S]+ +U[SER]+ +U[ID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
+elif ps -weo 'stat comm vsz rss user uid pid ppid etime args' 2>/dev/null | \
+       egrep -i ["^ *S[TAUES]* +[UCOMDNA]+ +[VSIZE]+ +R[S]+ +U[SER]+ +U[ID]+ +P[ID]+ +P[PID]+ +[ELAPSD]+ +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -weo 'stat uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procetime,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -weo 'stat uid pid ppid vsz rss pcpu etime comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %s %n"
+       ac_cv_ps_cols=10
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl FreeBSD
-elif ps waxco 'state command vsz rss uid user ppid' 2>/dev/null | \
-       egrep -i ["^STAT +COMMAND +VSZ +RSS +UID +USER +PPID"] >/dev/null
+elif ps waxco 'state command vsz rss uid user pid ppid' 2>/dev/null | \
+       egrep -i ["^STAT +COMMAND +VSZ +RSS +UID +USER +PID +PPID"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS waxco 'state uid ppid vsz rss pcpu command command'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS waxco 'state uid pid ppid vsz rss pcpu command command'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl BSD-like mode in RH 6.1
-elif ps waxno 'state comm vsz rss uid user ppid args' 2>/dev/null | \
-       egrep -i ["^S +COMMAND +VSZ +RSS +UID +USER +PPID +[RGSCOMDNA]+"] >/dev/null
+elif ps waxno 'state comm vsz rss uid user pid ppid args' 2>/dev/null | \
+       egrep -i ["^S +COMMAND +VSZ +RSS +UID +USER +PID +PPID +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS waxno 'state uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS waxno 'state uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl SunOS 4.1.3:
 dnl  F  UID  PID  PPID  CP  PRI  NI  SZ  RSS  WCHAN  STAT  TT  TIME  COMMAND
-elif ps -laxnwww 2>/dev/null | \
+dnl Need the head -1 otherwise test will work because arguments are found
+elif ps -laxnwww 2>/dev/null | head -1 | \
        egrep -i ["^ *F(LAGS)? +UID +PID +PPID +CP +PRI +NI +(SZ)|(VSZ)|(SIZE) +RSS +WCHAN +STAT? +TTY? +TIME +COMMAND"] >/dev/null
 then
-       ac_cv_ps_varlist="[&procuid,&procppid,&procvsz,&procrss,procstat,&pos,procprog]"
+       ac_cv_ps_varlist="[&procuid,&procpid,&procppid,&procvsz,&procrss,procstat,&pos,procprog]"
        ac_cv_ps_command="$PATH_TO_PS -laxnwww"
-       ac_cv_ps_format="%*s %d %*s %d %*s %*s %*s %d %d %*s %s %*s %*s %n%s"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_format="%*s %d %d %d %*s %*s %*s %d %d %*s %s %*s %*s %n%s"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl Debian Linux / procps v1.2.9:
@@ -671,94 +790,112 @@ dnl
 elif ps laxnwww 2>/dev/null | \
        egrep -i ["^ *F(LAGS)? +UID +PID +PPID +PRI +NI +(VSZ)|(SIZE) +RSS +WCHAN +STAT? TTY +TIME +COMMAND"] >/dev/null
 then
-       ac_cv_ps_varlist="[&procuid,&procppid,procstat,&procvsz,&procrss,&pos,procprog]"
+       ac_cv_ps_varlist="[&procuid,&procpid,&procppid,procstat,&procvsz,&procrss,&pos,procprog]"
        ac_cv_ps_command="$PATH_TO_PS laxnwww"
-       ac_cv_ps_format="%*s %d %*s %d %*s %*s %d %d %*s %s %*s %*s %n%s"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_format="%*s %d %d %d %*s %*s %d %d %*s %s %*s %*s %n%s"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl OpenBSD (needs to come early because -exo appears to work, but does not give all procs)
-elif ps -axo 'stat comm vsz rss user uid ppid args' 2>/dev/null | \
-       egrep -i ["^ *S[TAUES]* +[UCOMDNA]+ +[VSIZE]+ +R[S]+ +U[SER]+ +U[ID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
+elif ps -axo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \
+       egrep -i ["^ *S[TAUES]* +[UCOMDNA]+ +[VSIZE]+ +R[S]+ +U[SER]+ +U[ID]+ +P[PID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -axo 'stat uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -axo 'stat uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
-dnl AIX 4.3.3 - needs verification. This works for Tru64 - needs %*[ +] in PS_FORMAT
-elif ps -ao 'stat comm vsz rss user uid ppid args' 2>/dev/null | \
-       egrep -i ["^ *S[TAUES]* +[UCOMDNA]+ +[VSIZE]+ +R[S]+ +U[SER]+ +U[ID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
+dnl Tru64 - needs %*[ +<>] in PS_FORMAT. 
+dnl Has /usr/bin/ps and /sbin/ps - force sbin version
+dnl Can't use vsize and rssize because comes back with text (eg, 1.5M instead 
+dnl of 1500). Will need big changes to check_procs to support
+elif /sbin/ps -eo 'stat uid pid ppid pcpu etime comm args' 2>/dev/null | \
+       egrep -i ["^ *S +[UID]+ +[PID]+ +[PID]+ +[%CPU]+ +[ELAPSD]+ +[COMMAND]+ +[COMMAND]+"] > /dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -ao 'stat uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="[["%s%*[ +] %d %d %d %d %f %s %n"]]"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procpcpu,procetime,procprog,&pos]"
+       ac_cv_ps_command="/sbin/ps -eo 'stat uid pid ppid pcpu etime comm args'"
+       ac_cv_ps_format=["%s%*[ +<>] %d %d %d %f %s %s %n"]
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
-elif ps -eo 's comm vsz rss user uid ppid args' 2>/dev/null | \
-       egrep -i ["^S[TAUES]* +C[OMDNA]+ +[VSIZE]+ +U[SER]+ +U[ID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
+elif ps -eo 's comm vsz rss user uid pid ppid args' 2>/dev/null | \
+       egrep -i ["^S[TAUES]* +C[OMDNA]+ +[VSIZE]+ +U[SER]+ +U[ID]+ +P[PID]+ +P[PID]+ +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -eo 's uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -eo 's uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
-elif ps -Ao 's comm vsz rss uid user ppid args' 2>/dev/null | \
-       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PPID +[RGSCOMDNA]+"] >/dev/null
+dnl AIX 4.3.3 and 5.1 do not have an rss field
+elif ps -eo 'stat uid pid ppid vsz pcpu comm args' 2>/dev/null | \
+       egrep -i ["^ *S[TAUES]* +UID +PID +PPID +VSZ +%CPU +COMMAND +COMMAND"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -Ao 's uid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -eo 'stat uid pid ppid vsz pcpu comm args'"
        ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_cols=8
+       AC_MSG_RESULT([$ac_cv_ps_command - with no RSS])
+
+dnl Solaris 2.6
+elif ps -Ao 's comm vsz rss uid user pid ppid args' 2>/dev/null | \
+       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PID +PPID +[RGSCOMDNA]+"] >/dev/null
+then
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -Ao 's uid pid ppid vsz rss pcpu comm args'"
+       # There must be no space between the %s and %n due to a wierd problem in sscanf where
+       # it will return %n as longer than the line length
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s%n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
-elif ps -Ao 'status comm vsz rss uid user ppid args' 2>/dev/null | \
-       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PPID +[RGSCOMDNA]+"] >/dev/null
+elif ps -Ao 'status comm vsz rss uid user pid ppid args' 2>/dev/null | \
+       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PID +PPID +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -Ao 'status uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -Ao 'status uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
-elif ps -Ao 'state comm vsz rss uid user ppid args' 2>/dev/null | \
-       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PPID +[RGSCOMDNA]+"] >/dev/null
+elif ps -Ao 'state comm vsz rss uid user pid ppid args' 2>/dev/null | \
+       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PID +PPID +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -Ao 'state uid ppid vsz rss pcpu comm args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -Ao 'state uid pid ppid vsz rss pcpu comm args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=9
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl wonder who takes state instead of stat
-elif ps -ao 'state command vsz rss user ppid args' 2>/dev/null | \
-       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PPID +[RGSCOMDNA]+"] >/dev/null
+elif ps -ao 'state command vsz rss user pid ppid args' 2>/dev/null | \
+       egrep -i ["^S[TAUES]* +C[OMDNA]+ +V[SIZE]+ +RSS +UID +USER +PID +PPID +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
-       ac_cv_ps_command="$PATH_TO_PS -ao 'state uid ppid vsz rss pcpu command args'"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
+       ac_cv_ps_command="$PATH_TO_PS -ao 'state uid pid ppid vsz rss pcpu command args'"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl IRIX 53
 elif ps -el 2>/dev/null | \
        egrep -i ["^ *F +S +UID +PID +PPID +C +PRI +NI +P +SZ +RSS +WCHAN +TTY +TIME +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&procvsz,&procrss,&pos,procprog]"
-       ac_cv_ps_command="$PATH_TO_PS -el"
-       ac_cv_ps_format="%*s %s %d %*s %d %*s %*s %*s %*s %d %d %*s %*s %*s %n%s"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&pos,procprog]"
+       ac_cv_ps_command="$PATH_TO_PS -el (IRIX 53)"
+       ac_cv_ps_format="%*s %s %d %d %d %*s %*s %*s %*s %d %d %*s %*s %*s %n%s"
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl IRIX 63
 elif ps -el 2>/dev/null | \
        egrep -i ["^ *F +S +UID +PID +PPID +C +PRI +NI +P +ADDR +SZ +RSS +WCHAN +TTY +TIME +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&pos,procprog]"
-       ac_cv_ps_command="$PATH_TO_PS -el"
-       ac_cv_ps_format="%*s %s %d %*s %d %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&pos,procprog]"
+       ac_cv_ps_command="$PATH_TO_PS -el (IRIX 63)"
+       ac_cv_ps_format="%*s %s %d %d %d %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
+       ac_cv_ps_cols=6
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl AIX 4.1:
@@ -767,18 +904,20 @@ dnl    303 A        0     0     0 120  16 -- 1c07  20   24              -  0:45
 elif ps -el 2>/dev/null | \
        egrep -i ["^ *F +S +UID +PID +PPID +C +PRI +NI +ADDR +SZ +WCHAN +TTY +TIME +[RGSCOMDNA]+"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&pos,procprog]"
-       ac_cv_ps_command="$PATH_TO_PS -el"
-       ac_cv_ps_format="%*s %s %d %*s %d %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&pos,procprog]"
+       ac_cv_ps_command="$PATH_TO_PS -el (AIX 4.1 and HP-UX)"
+       ac_cv_ps_format="%*s %s %d %d %d %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
+       ac_cv_ps_cols=6
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl AIX?
 elif ps glaxen 2>/dev/null | \
        egrep -i ["^ *F +UID +PID +PPID +PRI +NI +VSZ +RSS +WCHAN +STAT +TTY +TIME +COMMAND"] >/dev/null
 then
-       ac_cv_ps_varlist="[&procuid,&procppid,&procvsz,&procrss,procstat,&pos,procprog]"
+       ac_cv_ps_varlist="[&procuid,&procpid,&procppid,&procvsz,&procrss,procstat,&pos,procprog]"
        ac_cv_ps_command="$PATH_TO_PS glaxen"
-       ac_cv_ps_format="%*s %d %*s %d %*s %*s %d %d %*s %s %*s %*s %n%s"
+       ac_cv_ps_format="%*s %d %d %d %*s %*s %d %d %*s %s %*s %*s %n%s"
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl MacOSX / Darwin
@@ -786,85 +925,45 @@ dnl TODO: MacOSX has commands with spaces which will cause problems to PS_FORMAT
 dnl Some truncation will happen in UCOMM column
 dnl STAT      VSZ    RSS   UID  PPID %CPU UCOMM            COMMAND
 dnl Ss      52756  22496   501     1   6.9 Window Manager   /System/Library/CoreServices/WindowServer -daemon
-elif ps wwaxo 'state vsz rss uid ppid pcpu ucomm command' 2>/dev/null | \
+elif ps wwaxo 'state vsz rss uid pid ppid pcpu ucomm command' 2>/dev/null | \
        egrep -i ["^STAT +VSZ +RSS +UID +PPID +%CPU +UCOMM +COMMAND"] >/dev/null
 then
-       ac_cv_ps_command="$PATH_TO_PS wwaxo 'state vsz rss uid ppid pcpu ucomm command'"
-       ac_cv_ps_varlist="[procstat,&procvsz,&procrss,&procuid,&procppid,&procpcpu,procprog,&pos]"
-       ac_cv_ps_format="%s %d %d %d %d %f %s %n"
-       EXTRAS="$EXTRAS check_nagios"
+       ac_cv_ps_command="$PATH_TO_PS wwaxo 'state vsz rss uid pid ppid pcpu ucomm command'"
+       ac_cv_ps_varlist="[procstat,&procvsz,&procrss,&procuid,&procpid,&procppid,&procpcpu,procprog,&pos]"
+       ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 dnl UnixWare 
 elif ps -Al 2>/dev/null | \
        egrep -i ["^ *F +S +UID +PID +PPID +CLS +PRI +NI +C +ADDR +SZ +WCHAN +TTY +TIME +COMD"] >/dev/null
 then
-       ac_cv_ps_varlist="[procstat,&procuid,&procppid,&pos,procprog]"
+       ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&pos,procprog]"
        ac_cv_ps_command="$PATH_TO_PS -Al"
-       ac_cv_ps_format="%*s %s %d %*s %d %*s %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
-       #if ps -Ao 'vsz comm' 2>/dev/null | \
-       #       egrep -i ["^ *VSZ +COMMAND"] >/dev/null
-       #then
-       #       ac_cv_vsz_command="$PATH_TO_PS -Ao 'vsz comm'"
-       #       ac_cv_vsz_format="%*s %d"
-       #fi
+       ac_cv_ps_format="%*s %s %d %d %d %*s %*s %*s %*s %*s %*s %*s %*s %*s %n%s"
+       ac_cv_ps_cols=8
        AC_MSG_RESULT([$ac_cv_ps_command])
 
 else
-       AC_MSG_WARN([unable to find usable ps syntax])
+       AC_MSG_WARN([unable to find usable ps syntax - check_procs and check_nagios will not be compiled])
 fi
 
-AC_DEFINE_UNQUOTED(PS_VARLIST,$ac_cv_ps_varlist,
-       [Variable list for sscanf of 'ps' output])
-AC_DEFINE_UNQUOTED(PS_COMMAND,"$ac_cv_ps_command",
-       [Verbatim command to execute for ps in check_procs])
-AC_DEFINE_UNQUOTED(PS_FORMAT,"$ac_cv_ps_format",
-       [Format string for scanning ps output in check_procs])
-
-AC_PATH_PROG(PATH_TO_DF,df)
-AC_PATH_PROG(PATH_TO_BDF,bdf)
-
-AC_ARG_WITH(df_command,
-       ACX_HELP_STRING([--with-df-command=SYNTAX],
-               [sets syntax for df]),
-       with_df_command=$withval,)
-
-AC_MSG_CHECKING(for df syntax)
-if test -n "$with_df_command"
-then
-       AC_MSG_RESULT([$with_df_command])
-
-elif df -Pk 2>/dev/null | egrep -i ["^(/dev/|[a-zA-Z]:)[a-z0-9/\\]+ +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+% +/[a-z0-9/\\]*"] >/dev/null
-then
-       with_df_command="$PATH_TO_DF -Pk"
-       AC_MSG_RESULT([$with_df_command])
-
-elif df -k 2>/dev/null | egrep -i ["^/dev/[a-z0-9/]+ +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+% +/[a-z0-9/]*"] >/dev/null
-then
-       with_df_command="$PATH_TO_DF -k"
-       AC_MSG_RESULT([$with_df_command])
-
-elif df 2>/dev/null | egrep -i ["^/dev/[a-z0-9/]+ +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+% +/[a-z0-9/]*"] >/dev/null
-then
-       with_df_command="$PATH_TO_DF"
-       AC_MSG_RESULT([$with_df_command])
-
-elif bdf 2>/dev/null | egrep -i ["^/dev/[a-z0-9/]+ +[0-9]+ +[0-9]+ +[0-9]+ +[0-9]+% +/[a-z0-9/]*"] >/dev/null
-then
-       with_df_command="$PATH_TO_BDF"
-       AC_MSG_RESULT([$with_df_command])
-
-else
-       AC_MSG_WARN([unable to find usable df syntax])
+if test -n "$ac_cv_ps_varlist" ; then
+       AC_DEFINE_UNQUOTED(PS_VARLIST,$ac_cv_ps_varlist,
+               [Variable list for sscanf of 'ps' output])
+       AC_DEFINE_UNQUOTED(PS_COMMAND,"$ac_cv_ps_command",
+               [Verbatim command to execute for ps in check_procs])
+       AC_DEFINE_UNQUOTED(PS_FORMAT,"$ac_cv_ps_format",
+               [Format string for scanning ps output in check_procs])
+       AC_DEFINE_UNQUOTED(PS_COLS,$ac_cv_ps_cols,
+               [Number of columns in ps command])
+       EXTRAS="$EXTRAS check_procs check_nagios"
+       if echo "$ac_cv_ps_varlist" | grep -q "procetime"; then
+               AC_DEFINE(PS_USES_PROCETIME,"yes",
+                         [Whether the ps utility uses the "procetime" field])
+       fi
 fi
 
-AC_DEFINE_UNQUOTED(DF_COMMAND,"$with_df_command",[path and args for df command])
-
-dnl jm_AFS
-jm_LIST_MOUNTED_FILESYSTEMS([list_mounted_fs=yes], [list_mounted_fs=no])
-jm_FSTYPENAME
-jm_FILE_SYSTEM_USAGE([space=yes], [space=no])
-
 AC_PATH_PROG(PATH_TO_PING,ping)
 AC_PATH_PROG(PATH_TO_PING6,ping6)
 
@@ -875,12 +974,14 @@ AC_ARG_WITH(ping_command,
 
 AC_MSG_CHECKING(for ICMP ping syntax)
 ac_cv_ping_packets_first=no
+ac_cv_ping_has_timeout=no
 if test -n "$with_ping_command"
 then
        AC_MSG_RESULT([(command-line) $with_ping_command])
        if test -n "$ac_cv_ping_packets_first"
        then
                ac_cv_ping_packets_first=yes
+               ac_cv_ping_has_timeout=yes
        fi
 
 elif [[ "z$ac_cv_uname_s" = "zUnixWare" ]] && \
@@ -891,6 +992,14 @@ then
        ac_cv_ping_packets_first=yes
        AC_MSG_RESULT([$with_ping_command])
 
+elif $PATH_TO_PING -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \
+       egrep -i "^round-trip|^rtt" >/dev/null
+then
+        with_ping_command="$PATH_TO_PING -n -U -w %d -c %d %s"
+       ac_cv_ping_packets_first=yes
+  ac_cv_ping_has_timeout=yes
+       AC_MSG_RESULT([$with_ping_command])
+
 elif $PATH_TO_PING -n -U -c 1 127.0.0.1 2>/dev/null | \
        egrep -i "^round-trip|^rtt" >/dev/null
 then
@@ -956,6 +1065,12 @@ then
                [Define if packet count must precede host])
 fi
 
+if test "x$ac_cv_ping_has_timeout" != "xno"
+then
+       AC_DEFINE(PING_HAS_TIMEOUT,1,
+               [Define if ping has its own timeout option that should be set])
+fi
+
 AC_ARG_WITH(ping6_command,
        ACX_HELP_STRING([--with-ping6-command=SYNTAX],
                [sets syntax for ICMPv6 ping]),
@@ -981,6 +1096,14 @@ elif test "x$PATH_TO_PING6" != "x"; then
                ac_cv_ping6_packets_first=yes
                AC_MSG_RESULT([$with_ping6_command])
 
+       elif $PATH_TO_PING6 -n -U -w 10 -c 1 ::1 2>/dev/null | \
+               egrep -i "^round-trip|^rtt" >/dev/null
+       then
+               with_ping6_command="$PATH_TO_PING6 -n -U -w %d -c %d %s"
+               ac_cv_ping6_packets_first=yes
+               ac_cv_ping_has_timeout=yes
+               AC_MSG_RESULT([$with_ping6_command])
+
        elif $PATH_TO_PING6 -n -U -c 1 ::1 2>/dev/null | \
                egrep -i "^round-trip|^rtt" >/dev/null
        then
@@ -1113,29 +1236,37 @@ if test "x$ac_cv_ping6_packets_first" != "xno"; then
 fi
 fi
 
-AC_PATH_PROG(PATH_TO_NSLOOKUP,nslookup)
 
 AC_MSG_CHECKING(for nslookup syntax)
-if test -n "$PATH_TO_NSLOOKUP"
-then
-       if $PATH_TO_NSLOOKUP -sil 127.0.0.1 2>&1 | grep ["Invalid option: sil"] >/dev/null
+AC_ARG_WITH(nslookup_command,
+            ACX_HELP_STRING([--with-nslookup-command=PATH],
+                            [sets path to nslookup executable]),
+            ac_cv_nslookup_command=$withval)
+if test -n "$ac_cv_nslookup_command"; then
+       AC_MSG_RESULT([(command line) $ac_cv_nslookup_command])
+else
+       AC_PATH_PROG(PATH_TO_NSLOOKUP,nslookup)
+       if test -n "$PATH_TO_NSLOOKUP"
        then
-               ac_cv_nslookup_command="$PATH_TO_NSLOOKUP"
-               AC_MSG_RESULT([$ac_cv_nslookup_command])
+               if $PATH_TO_NSLOOKUP -sil 127.0.0.1 2>&1 | grep ["Invalid option: sil"] >/dev/null
+               then
+                       ac_cv_nslookup_command="$PATH_TO_NSLOOKUP"
+                       AC_MSG_RESULT([$ac_cv_nslookup_command])
 
-       else
-               ac_cv_nslookup_command="$PATH_TO_NSLOOKUP -sil"
-               AC_MSG_RESULT([$ac_cv_nslookup_command])
+               else
+                       ac_cv_nslookup_command="$PATH_TO_NSLOOKUP -sil"
+                       AC_MSG_RESULT([$ac_cv_nslookup_command])
 
+               fi
+       else
+               AC_MSG_WARN([nslookup command not found])
        fi
-       EXTRAS="$EXTRAS check_dns"
-
-else
-       AC_MSG_WARN([nslookup command not found])
 fi
 
-AC_DEFINE_UNQUOTED(NSLOOKUP_COMMAND,"$ac_cv_nslookup_command",
-       [path and args for nslookup])
+if test -n "$ac_cv_nslookup_command"; then
+       EXTRAS="$EXTRAS check_dns"
+       AC_DEFINE_UNQUOTED(NSLOOKUP_COMMAND,"$ac_cv_nslookup_command", [path and args for nslookup])
+fi
 
 AC_PATH_PROG(PATH_TO_HOST,host)
 if test -n "$ac_cv_path_PATH_TO_HOST"
@@ -1144,15 +1275,24 @@ then
 fi
 
 AC_PATH_PROG(PATH_TO_UPTIME,uptime)
+AC_ARG_WITH(uptime_command,
+            ACX_HELP_STRING([--with-uptime-command=PATH],
+                            [sets path to uptime]), PATH_TO_UPTIME=$withval)
 AC_DEFINE_UNQUOTED(PATH_TO_UPTIME,"$PATH_TO_UPTIME",[path to uptime binary])
 
 AC_PATH_PROG(PATH_TO_RPCINFO,rpcinfo)
+AC_ARG_WITH(rpcinfo_command,
+            ACX_HELP_STRING([--with-rpcinfo-command=PATH],
+                            [sets path to rpcinfo]), PATH_TO_RPCINFO=$withval)
 AC_DEFINE_UNQUOTED(PATH_TO_RPCINFO,"$PATH_TO_RPCINFO",[path to rpcinfo binary])
 
 AC_PATH_PROG(PATH_TO_NTPDATE,ntpdate)
+AC_ARG_WITH(ntpdate_command,
+            ACX_HELP_STRING([--with-ntpdate-command=PATH],
+                            [sets path to ntpdate]), PATH_TO_NTPDATE=$withval)
 AC_PATH_PROGS(PATH_TO_NTPDC,ntpdc xntpdc)
 AC_PATH_PROGS(PATH_TO_NTPQ,ntpq)
-if (test -x "$PATH_TO_NTPDATE" || test -x "$PATH_TO_NTPQ")
+if (test -n "$PATH_TO_NTPDATE" || test -n "$PATH_TO_NTPQ")
 then
        AC_DEFINE_UNQUOTED(PATH_TO_NTPQ,"$PATH_TO_NTPQ",[path to ntpq binary])
        AC_DEFINE_UNQUOTED(PATH_TO_NTPDATE,"$PATH_TO_NTPDATE",[path to ntpdate binary])
@@ -1169,7 +1309,11 @@ else
 fi
 
 AC_PATH_PROG(PATH_TO_SMBCLIENT,smbclient)
-if test -x "$PATH_TO_SMBCLIENT"
+AC_ARG_WITH(smbclient_command,
+            ACX_HELP_STRING([--with-smbclient-command=PATH],
+                            [sets path to smbclient]), 
+            PATH_TO_SMBCLIENT=$withval)
+if test -n "$PATH_TO_SMBCLIENT"
 then
        AC_DEFINE_UNQUOTED(PATH_TO_SMBCLIENT,"$PATH_TO_SMBCLIENT",[path to smbclient binary])
 else
@@ -1190,7 +1334,11 @@ AC_DEFINE_UNQUOTED(WHO_COMMAND,"$ac_cv_path_to_who",
        [path and arguments for invoking 'who'])
 
 AC_PATH_PROG(PATH_TO_SNMPGET,snmpget)
-if test -x "$PATH_TO_SNMPGET"
+AC_ARG_WITH(snmpget_command,
+            ACX_HELP_STRING([--with-snmpget-command=PATH],
+                            [Path to snmpget command]),
+            PATH_TO_SNMPGET=$withval)
+if test -n "$PATH_TO_SNMPGET"
 then
        AC_DEFINE_UNQUOTED(PATH_TO_SNMPGET,"$PATH_TO_SNMPGET",[path to snmpget binary])
        EXTRAS="$EXTRAS check_hpjd check_snmp"
@@ -1199,7 +1347,11 @@ else
 fi
 
 AC_PATH_PROG(PATH_TO_SNMPGETNEXT,snmpgetnext)
-if test -x "$PATH_TO_SNMPGETNEXT"
+AC_ARG_WITH(snmpgetnext_command,
+            ACX_HELP_STRING([--with-snmpgetnext-command=PATH],
+                            [Path to snmpgetnext command]),
+            PATH_TO_SNMPGETNEXT=$withval)
+if test -n "$PATH_TO_SNMPGETNEXT"
 then
        AC_DEFINE_UNQUOTED(PATH_TO_SNMPGETNEXT,"$PATH_TO_SNMPGETNEXT",[path to snmpgetnext binary])
 fi
@@ -1214,13 +1366,16 @@ fi
 
 AC_PATH_PROG(PATH_TO_QUAKESTAT,quakestat)
 AC_PATH_PROG(PATH_TO_QSTAT,qstat)
+AC_ARG_WITH(qstat_command,
+            ACX_HELP_STRING([--with-qstat-command=PATH], 
+                            [Path to qstat command]), PATH_TO_QSTAT=$withval)
 
 if test -x "$PATH_TO_QUAKESTAT"
 then
        ac_cv_path_to_qstat="$PATH_TO_QUAKESTAT"
        EXTRAS="$EXTRAS check_game"
 
-elif test -x "$PATH_TO_QSTAT"
+elif test -n "$PATH_TO_QSTAT"
 then
        ac_cv_path_to_qstat="$PATH_TO_QSTAT"
        EXTRAS="$EXTRAS check_game"
@@ -1235,7 +1390,10 @@ then
 fi
 
 AC_PATH_PROG(PATH_TO_FPING,fping)
-if test -x "$PATH_TO_FPING"
+AC_ARG_WITH(fping_command,
+            ACX_HELP_STRING([--with-fping-command=PATH],
+                            [Path to fping command]), PATH_TO_FPING=$withval)
+if test -n "$PATH_TO_FPING"
 then
        AC_DEFINE_UNQUOTED(PATH_TO_FPING,"$PATH_TO_FPING",[path to fping])
        EXTRAS="$EXTRAS check_fping"
@@ -1244,8 +1402,10 @@ else
 fi
 
 AC_PATH_PROG(PATH_TO_SSH,ssh)
-
-if test -x "$PATH_TO_SSH"
+AC_ARG_WITH(ssh_command,
+            ACX_HELP_STRING([--with-ssh-command=PATH],
+                            [sets path for ssh]), PATH_TO_SSH=$withval)
+if test -n "$PATH_TO_SSH"
 then
        AC_DEFINE_UNQUOTED(SSH_COMMAND,"$PATH_TO_SSH",[path to ssh binary])
        EXTRAS="$EXTRAS check_by_ssh"
@@ -1255,7 +1415,10 @@ fi
 
 
 AC_PATH_PROG(PATH_TO_MAILQ,mailq)
-if test -x "$PATH_TO_MAILQ"
+AC_ARG_WITH(mailq_command,
+            ACX_HELP_STRING([--with-mailq-command=PATH],
+                            [sets path to mailq]), PATH_TO_MAILQ=$withval)
+if test -n "$PATH_TO_MAILQ"
 then
        AC_DEFINE_UNQUOTED(PATH_TO_MAILQ,"$PATH_TO_MAILQ",[path to mailq])
 else
@@ -1273,23 +1436,11 @@ fi
 dnl SWAP info required is amount allocated/available and amount free
 dnl The plugin works through all the swap devices and adds up the total swap
 dnl available.
-
-dnl dunno why this does not work below - use hack (kbd)
-dnl fine on linux, broken on solaris
-dnl if /bin/test -e "/proc/meminfo"
-
 AC_PATH_PROG(PATH_TO_SWAP,swap)
-AC_PATH_PROG(PATH_TO_SWAPINFO,swapinfo)
-
-AC_MSG_CHECKING(for how to check memory)
-if [cat /proc/meminfo > /dev/null 2>&1]
+if (test -n "$PATH_TO_SWAP")
 then
-       AC_MSG_RESULT([found /proc/meminfo])
-       AC_DEFINE(HAVE_PROC_MEMINFO,1,[Define if we have /proc/meminfo])
-       AC_DEFINE_UNQUOTED(PROC_MEMINFO,"/proc/meminfo",[path to /proc/meminfo if name changes])
-       EXTRAS="$EXTRAS check_swap"
-
-elif [$PATH_TO_SWAP -l 2>&1 >/dev/null]
+AC_MSG_CHECKING([for $PATH_TO_SWAP format])
+if [$PATH_TO_SWAP -l 2>&1 >/dev/null]
 then
        ac_cv_have_swap=yes
        ac_cv_swap_command="$PATH_TO_SWAP -l"
@@ -1297,50 +1448,159 @@ then
                egrep -i "^lswap +path +pri +swaplo +blocks +free +maxswap" \
                >/dev/null]
        then
-               ac_cv_swap_format=[" %*d %*s %*d,%*d %*d %*d %d %d"]
+               ac_cv_swap_format=[" %*d %*s %*d,%*d %*d %*d %f %f"]
                ac_cv_swap_conv=2048
                AC_MSG_RESULT([using IRIX format swap])
 
-       elif [$PATH_TO_SWAP -l 2>/dev/null | egrep -i "^swapfile +dev +swaplo +blocks +free" >/dev/null]
-       then
-               ac_cv_swap_format=["%*s %*[0-9,-] %*d %d %d"]
-               ac_cv_swap_conv=2048
-               AC_MSG_RESULT([using Solaris format swap])
-
        elif [$PATH_TO_SWAP -l 2>/dev/null | egrep -i "^path +dev +swaplo +blocks +free" >/dev/null]
        then
-               ac_cv_swap_format=["%*s %*[0-9,-] %*d %d %d"]
+               ac_cv_swap_format=["%*s %*[0-9,-] %*d %f %f"]
                ac_cv_swap_conv=2048
                AC_MSG_RESULT([using Unixware format swap])
-
+       else
+               dnl if we don't know what format swap's output is
+               dnl we might as well pretend we didn't see it
+               ac_cv_have_swap=""
+               ac_cv_swap_command=""
        fi
-       EXTRAS="$EXTRAS check_swap"
+fi
+dnl end if for PATH_TO_SWAP
+fi
 
-elif [$PATH_TO_SWAPINFO -k 2>&1 | egrep -i "^Device" >/dev/null]
+AC_PATH_PROG(PATH_TO_SWAPINFO,swapinfo)
+if (test -n "$PATH_TO_SWAPINFO")
+then
+AC_MSG_CHECKING([for $PATH_TO_SWAPINFO format])
+if [$PATH_TO_SWAPINFO -k 2>&1 | egrep -i "^Device" >/dev/null]
 then
        ac_cv_have_swap=yes
        ac_cv_swap_command="$PATH_TO_SWAPINFO -k"
 
        if [$PATH_TO_SWAPINFO -k 2>/dev/null | egrep -i "^Device +1K-blocks +Used +Avail" >/dev/null]
        then
-               ac_cv_swap_format=["%*s %d %*d %d"]
+               ac_cv_swap_format=["%*s %f %*d %f"]
                ac_cv_swap_conv=1024
                AC_MSG_RESULT([using FreeBSD format swapinfo])
        fi
-       EXTRAS="$EXTRAS check_swap"
 
 elif [$PATH_TO_SWAPINFO -dfM 2>/dev/null | egrep -i "^TYPE +AVAIL +USED +FREE" >/dev/null]
 then
        ac_cv_have_swap=yes
        ac_cv_swap_command="$PATH_TO_SWAPINFO -dfM",
-       ac_cv_swap_format=["%*s %d %*d %d"]
+       ac_cv_swap_format=["%*s %f %*d %f"]
        ac_cv_swap_conv=1024
        AC_MSG_RESULT([using HP-UX format swapinfo])
 fi
+dnl end if for PATH_TO_SWAPINFO
+fi
+
+AC_PATH_PROG(PATH_TO_LSPS,lsps)
+if (test -n "$PATH_TO_LSPS")
+then
+AC_MSG_CHECKING([for $PATH_TO_LSPS format])
+if [$PATH_TO_LSPS -a 2>/dev/null | egrep -i "^Page Space" > /dev/null]
+then
+       ac_cv_have_swap=yes
+       ac_cv_swap_command="$PATH_TO_LSPS -a"
+       ac_cv_swap_format=["%*s %*s %*s %f%*s %f %*s"]
+       ac_cv_swap_conv=1
+       AC_MSG_RESULT([using AIX lsps])
+fi
+dnl end if for PATH_TO_SWAPINFO
+fi
+
+dnl
+dnl test for swapctl system call, both the 2-arg and 3-arg variants
+dnl fwict, the 2-arg is an SVR4 standard, whereas the 3-arg is shared
+dnl in the various BSD's
+dnl
+
+AC_CHECK_HEADERS([sys/stat.h sys/param.h])
+AC_CHECK_HEADERS([sys/swap.h], [], [], [
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+])
+AC_CHECK_DECLS([swapctl],,,[
+               #include <unistd.h>
+               #include <sys/types.h>
+              #include <sys/param.h>
+               #include <sys/stat.h>
+               #include <sys/swap.h>
+               ])
+AC_CHECK_TYPES([swaptbl_t, swapent_t],,,[
+               #include <sys/types.h>
+              #include <sys/param.h>
+               #include <sys/stat.h>
+               #include <sys/swap.h>
+               ])
+AC_CHECK_MEMBERS([struct swapent.se_nblks],,,[
+               #include <unistd.h>
+               #include <sys/types.h>
+              #include <sys/param.h>
+               #include <sys/stat.h>
+               #include <sys/swap.h>
+               ])
+
+if test "$ac_cv_have_decl_swapctl" = "yes"; 
+then
+       EXTRAS="$EXTRAS check_swap"
+       AC_MSG_CHECKING([for 2-arg (SVR4) swapctl])
+       if test "$ac_cv_type_swaptbl_t" = "yes" -a \
+               "$ac_cv_type_swapent_t" = "yes"; 
+       then
+               AC_MSG_RESULT([yes])
+               ac_cv_check_swap_swapctl_svr4="1";
+               AC_DEFINE([CHECK_SWAP_SWAPCTL_SVR4],1,
+                         [Define if 2-argument SVR4 swapctl exists])
+       else
+               AC_MSG_RESULT([no])
+               AC_MSG_CHECKING([for 3-arg (*BSD) swapctl])
+               if test "$ac_cv_member_struct_swapent_se_nblks" = "yes"; 
+               then
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE([CHECK_SWAP_SWAPCTL_BSD],1,
+                                 [Define if 3-argument BSD swapctl exists])
+               else
+                       AC_MSG_RESULT([no])
+               fi
+       fi
+       AC_MSG_CHECKING([for whether swapctl uses blocks or pages])
+       if test "$ac_cv_check_swap_swapctl_svr4" = "1";
+       then
+               dnl
+               dnl the SVR4 spec returns values in pages
+               dnl
+               AC_MSG_RESULT([page])
+               AC_CHECK_DECLS([sysconf])
+               AC_MSG_CHECKING([for system page size])
+               if test "$ac_cv_have_decl_sysconf" = "yes";
+               then
+                       AC_MSG_RESULT([determined by sysconf(3)])
+                       ac_cv_swap_conv="(1048576/sysconf(_SC_PAGESIZE))"
+               else
+                       AC_MSG_WARN([don't know. guessing 4096k])
+                       ac_cv_swap_conv=256
+               fi
+       else
+               dnl
+               dnl the BSD spec returns values in blocks
+               dnl
+               AC_MSG_RESULT([blocks (assuming 512b)])
+               ac_cv_swap_conv=2048
+       fi
+       AC_DEFINE_UNQUOTED(SWAP_CONVERSION,$ac_cv_swap_conv,
+               [Conversion factor to MB])
+fi
+dnl
+dnl end tests for the swapctl system calls
+dnl
+
 
 if test "x$ac_cv_have_swap" != "x" 
 then
        AC_DEFINE(HAVE_SWAP,1,[Define if swap/swapinfo command is found])
+       EXTRAS="$EXTRAS check_swap"
 fi
 if test "x$ac_cv_swap_command" != "x" 
 then
@@ -1352,10 +1612,36 @@ then
                [Conversion factor to MB])
 fi
 
+AC_ARG_WITH(proc-meminfo,
+            ACX_HELP_STRING([--with-proc-meminfo=PATH],
+                            [path to /proc/meminfo or equivalent]),
+                            ac_cv_proc_meminfo=$withval)
+dnl dunno why this does not work below - use hack (kbd)
+dnl fine on linux, broken on solaris
+dnl if /bin/test -e "/proc/meminfo"
+AC_MSG_CHECKING([for /proc/meminfo])
+if test -n "$ac_cv_proc_meminfo"; then
+       AC_MSG_RESULT([(command line) $ac_cv_proc_meminfo])
+elif [cat /proc/meminfo > /dev/null 2>&1]; then
+       AC_MSG_RESULT([found /proc/meminfo])
+       ac_cv_proc_meminfo="/proc/meminfo"
+else
+       AC_MSG_RESULT([no])
+fi
+
+if test -n "$ac_cv_proc_meminfo"; then
+       AC_DEFINE(HAVE_PROC_MEMINFO,1,[Define if we have /proc/meminfo])
+       AC_DEFINE_UNQUOTED(PROC_MEMINFO,"$ac_cv_proc_meminfo",[path to /proc/meminfo if name changes])
+       EXTRAS="$EXTRAS check_swap"
+fi
+
 AC_PATH_PROG(PATH_TO_DIG,dig)
-AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present])
+AC_ARG_WITH(dig_command,
+            ACX_HELP_STRING([--with-dig-command=PATH],
+                            [Path to dig command]), PATH_TO_DIG=$withval)
 if test -n "$PATH_TO_DIG"; then
        EXTRAS="$EXTRAS check_dig"
+       AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present])
 fi
 
 if test -f plugins/check_nt.c ; then
@@ -1378,22 +1664,113 @@ AC_TRY_COMPILE([#ifdef __STDC__
                [AC_MSG_RESULT(yes)],
                [NEED_VA_LIST=-DNEED_VA_LIST AC_SUBST(NEED_VA_LIST) AC_MSG_RESULT(no)])
 
+case $host in
+       *bsd*)
+               AC_DEFINE(__bsd__,1,[bsd specific code in check_dhcp.c])
+       ;;
+       *linux*)
+               AC_DEFINE(__linux__,1,[sun specific code in check_dhcp.c])
+       ;;
+       *sun* | solaris*)
+               AC_DEFINE(__sun__,1,[sun specific code in check_dhcp.c])
+       ;;
+       *hpux*)  
+               AC_DEFINE(__hpux__,1,[hpux specific code in check_dhcp.c])
+       ;;
+esac
+
 AC_SUBST(EXTRAS)
 AC_SUBST(EXTRA_NETOBJS)
 AC_SUBST(DEPLIBS)
 
+AM_GNU_GETTEXT([no-libtool], [need-ngettext])
 AM_GNU_GETTEXT_VERSION(0.11.5)
-AM_GNU_GETTEXT
 
-AC_OUTPUT(Makefile lib/Makefile plugins/Makefile plugins-scripts/Makefile plugins-scripts/subst plugins-scripts/utils.pm plugins-scripts/utils.sh command.cfg test.pl pkg/solaris/pkginfo intl/Makefile po/Makefile.in )
+dnl Check for Redhat spopen problem
+dnl Wierd problem where ECHILD is returned from a wait call in error
+dnl Only appears to affect nslookup and dig calls. Only affects redhat around
+dnl 2.6.9-11 (okay in 2.6.9-5). Redhat investigating root cause
+dnl We patch plugins/popen.c
+dnl Need to add smp because uname different on those
+dnl Can force patch to be applied with --enable-redhat-pthread-workaround
+AC_ARG_ENABLE(redhat-pthread-workaround, 
+       AC_HELP_STRING([--enable-redhat-pthread-workaround], 
+               [force Redhat patch to be applied (default: test system)]),
+       [ac_cv_enable_redhat_pthread_workaround=$enableval],
+       [ac_cv_enable_redhat_pthread_workaround=test])
+if test "$ac_cv_enable_redhat_pthread_workaround" = "test" ; then
+       if echo $ac_cv_uname_r | egrep "\.EL(smp)?$" >/dev/null 2>&1 ; then
+               AC_MSG_CHECKING(for redhat spopen problem)
+               ( cd config_test && make && make test ) > /dev/null 2>&1
+               if test $? -eq 0 ; then
+                       AC_MSG_RESULT(okay)
+               else
+                       AC_MSG_RESULT(error)
+                       AC_DEFINE(REDHAT_SPOPEN_ERROR, 1, [Workaround on redhat in spopen])
+               fi
+       fi
+elif test "$ac_cv_enable_redhat_pthread_workaround" = "yes" ; then
+       AC_DEFINE(REDHAT_SPOPEN_ERROR, 1, [Forced workaround on redhat in spopen])
+fi
 
-ACX_FEATURE([with],[cgiurl])
-ACX_FEATURE([with],[nagios-user])
-ACX_FEATURE([with],[nagios-group])
-ACX_FEATURE([with],[trusted-path])
-ACX_FEATURE([with],[df-command])
-ACX_FEATURE([with],[ping-command])
+dnl External libraries - see ACKNOWLEDGEMENTS
+np_COREUTILS
+np_CURL
+
+AC_OUTPUT(
+  Makefile 
+  lib/Makefile 
+  m4/Makefile 
+  plugins/Makefile 
+  plugins/tests/Makefile
+  plugins-root/Makefile
+  plugins-scripts/Makefile 
+  plugins-scripts/subst 
+  plugins-scripts/utils.pm 
+  plugins-scripts/utils.sh 
+  command.cfg 
+  test.pl 
+  pkg/solaris/pkginfo 
+  intl/Makefile
+  po/Makefile.in 
+)
+
+
+dnl the ones below that are commented out need to be cleaned up 
+dnl in the configure code above to use with_foo instead of ac_cv_foo
+dnl if we want them to show up here.  it'd also make the code cleaner.
+dnl i'll get to that on another rainy day :) -sf
+dnl ACX_FEATURE([with],[dig-command])
+dnl ACX_FEATURE([with],[fping-command])
+dnl ACX_FEATURE([with],[mailq-command])
+dnl ACX_FEATURE([with],[nslookup-command])
+dnl ACX_FEATURE([with],[ntpdate-command])
 ACX_FEATURE([with],[ping6-command])
+ACX_FEATURE([with],[ping-command])
+dnl ACX_FEATURE([with],[qstat-command])
+dnl ACX_FEATURE([with],[rpcinfo-command])
+dnl ACX_FEATURE([with],[smbclient-command])
+dnl ACX_FEATURE([with],[snmpget-command])
+dnl ACX_FEATURE([with],[snmpgetnext-command])
+dnl ACX_FEATURE([with],[ssh-command])
+dnl ACX_FEATURE([with],[uptime-command])
+
+dnl ACX_FEATURE([with],[proc-loadavg])
+dnl ACX_FEATURE([with],[proc-meminfo])
+dnl ACX_FEATURE([with],[ps-command])
+dnl ACX_FEATURE([with],[ps-format])
+dnl ACX_FEATURE([with],[ps-cols])
+dnl ACX_FEATURE([with],[ps-varlist])
+
 ACX_FEATURE([with],[lwres])
 ACX_FEATURE([with],[ipv6])
+ACX_FEATURE([with],[openssl])
+ACX_FEATURE([with],[gnutls])
 ACX_FEATURE([enable],[emulate-getaddrinfo])
+ACX_FEATURE([with],[perl])
+ACX_FEATURE([with],[cgiurl])
+ACX_FEATURE([with],[nagios-user])
+ACX_FEATURE([with],[nagios-group])
+ACX_FEATURE([with],[trusted-path])
+
+