# Process this file with autoconf to produce a configure script. # Mark Ferlatte, # # $Id: configure.ac,v 1.166 2007/11/06 20:32:30 martinp Exp $ # autoconf requirement AC_PREREQ([2.53]) # Init autoconf and automake AC_INIT([monit], [4.10.1], [monit-general@nongnu.org]) # Package info AC_REVISION([$Revision: 1.166 $]) AC_CONFIG_SRCDIR([monitor.c]) # ------------------------------------------------------------------------ # Programs # ------------------------------------------------------------------------ AC_PROG_CC AC_PROG_GCC_TRADITIONAL AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_LEX if test "$LEX" != flex; then AC_MSG_ERROR([monit requires flex, not lex]) fi AC_PROG_YACC if test "x$YACC" = "x"; then AC_MSG_ERROR([monit requires Bison or Yacc]) fi # ------------------------------------------------------------------------ # Libraries # ------------------------------------------------------------------------ # Check for libraries AC_CHECK_LIB([socket], [socket]) AC_CHECK_LIB([inet], [socket]) AC_CHECK_LIB([nsl], [inet_addr]) AC_CHECK_LIB([resolv], [inet_aton]) AC_CHECK_LIB([crypt], [crypt]) # Wacky pthread madness pthread_libs="" AC_CHECK_LIB([pthread], [pthread_create], [pthread_libs="-lpthread"]) AC_CHECK_LIB([c_r], [pthread_create], [pthread_libs="-pthread"]) if test "$pthread_libs" then LIBS="$pthread_libs $LIBS" fi # ------------------------------------------------------------------------ # Header files # ------------------------------------------------------------------------ # Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_STAT AC_HEADER_TIME AC_CHECK_HEADERS([ \ alloca.h \ arpa/inet.h \ asm/page.h \ asm/param.h \ cf.h \ ctype.h \ crypt.h \ dirent.h \ errno.h \ fcntl.h \ getopt.h \ glob.h \ grp.h \ kvm.h \ kstat.h \ limits.h \ loadavg.h \ locale.h \ mach/host_info.h \ mach/mach.h \ mach/mach_host.h \ memory.h \ mntent.h \ netdb.h \ sys/socket.h \ netinet/in.h \ netinet/in_systm.h \ procfs.h \ procinfo.h \ pthread.h \ pwd.h \ regex.h \ setjmp.h \ signal.h \ stdarg.h \ stdio.h \ string.h \ strings.h \ stropts.h \ sys/cfgodm.h \ sys/cfgdb.h \ sys/dkstat.h \ sys/filio.h \ sys/ioctl.h \ sys/loadavg.h \ sys/lock.h \ sys/mnttab.h \ sys/mutex.h \ sys/nlist.h \ sys/param.h \ sys/pstat.h \ sys/queue.h \ sys/resource.h \ sys/statvfs.h \ sys/time.h \ sys/tree.h \ sys/types.h \ sys/un.h \ sys/vmmeter.h \ sys/vfs.h \ syslog.h \ unistd.h \ uvm/uvm.h \ uvm/uvm_extern.h \ vm/vm.h \ ]) AC_CHECK_HEADERS([ \ netinet/ip.h \ ], [], [], [ #ifdef HAVE_SYS_TYPES_H #include #endif #if HAVE_NETINET_IN_SYSTM_H #include #endif #if HAVE_NETINET_IN_SYSTM_H #include #endif ]) AC_CHECK_HEADERS([ \ net/if.h \ netinet/ip_icmp.h \ ], [], [], [ #ifdef HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NETINET_IN_SYSTM_H #include #endif #if HAVE_NETINET_IN_SYSTM_H #include #endif #if HAVE_NETINET_IP_H #include #endif ]) AC_CHECK_HEADERS([ \ sys/sysctl.h \ sys/mount.h \ sys/proc.h \ sys/user.h \ ], [], [], [ #ifdef HAVE_SYS_PARAM_H #include #endif ]) AC_CHECK_HEADERS([ \ machine/vmparam.h \ vm/pmap.h \ machine/pmap.h \ vm/vm_map.h \ vm/vm_object.h \ ], [], [], [ #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_QUEUE_H #include #endif #ifdef HAVE_SYS_LOCK_H #include #endif #ifdef HAVE_SYS_MUTEX_H #include #endif #ifdef HAVE_VM_VM_H #include #endif #ifdef HAVE_VM_PMAP_H #include #endif ]) AC_CHECK_HEADERS([ \ sys/resourcevar.h \ ], [], [], [ #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_RESOURCE_H #include #endif ]) AC_CHECK_HEADERS([ \ uvm/uvm_map.h \ uvm/uvm_pmap.h \ uvm/uvm_object.h \ ], [], [], [ #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_LOCK_H #include #endif #ifdef HAVE_SYS_TREE_H #include #endif #ifdef HAVE_UVM_UVM_EXTERN_H #include #endif ]) # Check for types. AC_TYPE_MODE_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_PID_T AC_TYPE_SIGNAL # Check for structures. AC_STRUCT_TM AC_CHECK_MEMBERS([struct tm.tm_gmtoff]) # ------------------------------------------------------------------------ # Compiler # ------------------------------------------------------------------------ # Compiler characteristics AC_C_CONST AC_C_BIGENDIAN # If the compiler is gcc, turn on warnings if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi # Checks for library functions. AC_FUNC_ERROR_AT_LINE AC_FUNC_FORK AC_FUNC_MALLOC AC_FUNC_STAT AC_FUNC_STRFTIME AC_CHECK_FUNCS(statfs) AC_CHECK_FUNCS(statvfs) AC_CHECK_FUNCS(setlocale) AC_CHECK_FUNCS(getaddrinfo) # Check if we do need external GNU replacements AC_FUNC_GETLOADAVG jm_FUNC_GNU_STRFTIME EXTERNALS="" if test "$jm_cv_func_working_gnu_strftime" = "no"; then # We do not have have a working strftime supporting %z EXTERNALS="$EXTERNALS external/strftime.c" fi AC_SUBST(EXTERNALS) # Check for SOL_IP AC_MSG_CHECKING(for SOL_IP) AC_TRY_COMPILE([ #include #include ], [ int level = SOL_IP; ], [ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_SOL_IP], [1], [Define to 1 if SOL_IP is defined.]) ], [ AC_MSG_RESULT(no) ]) AC_MSG_CHECKING(for va_copy) AC_TRY_LINK([ #include ], [ va_list ap; va_list ap_copy; va_copy(ap, ap_copy); ], [ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_VA_COPY], [1], [Define to 1 if VA_COPY is defined.]) ], [ AC_MSG_RESULT(no) ]) # ------------------------------------------------------------------------ # Paths # ------------------------------------------------------------------------ # Find the right directory to put the root-mode PID file in AC_MSG_CHECKING([pid file location]) if test -d "/var/run" then piddir="/var/run" elif test -d "/etc" then piddir="/etc" fi AC_DEFINE_UNQUOTED([PIDDIR], "$piddir", [Define to the pid storage directory.]) AC_MSG_RESULT([$piddir]) # Test mounted filesystem description file if test -f "/etc/mtab" then AC_DEFINE([HAVE_MTAB], 1, [Define to 1 if you have /etc/mtab]) elif test -f "/etc/mnttab"; then AC_DEFINE([HAVE_MNTTAB], 1, [Define to 1 if you have /etc/mnttab]) fi # ------------------------------------------------------------------------ # Architecture/OS detection # ------------------------------------------------------------------------ # Backward compatibility until we get ride of arch settings if test `uname` = "SunOS" then ARCH="SOLARIS" CFLAGS="$CFLAGS -D _REENTRANT -D_POSIX_PTHREAD_SEMANTICS" test_kstat="true" AC_DEFINE([HAVE_CPU_WAIT], [1], [Define to 1 if CPU wait information is available.]) elif test `uname` = "Linux" then ARCH="LINUX" CFLAGS="$CFLAGS -D _REENTRANT" if test `uname -r | awk -F '.' '{print$1$2}'` -ge "26" then AC_DEFINE([HAVE_CPU_WAIT], [1], [Define to 1 if CPU wait information is available.]) fi elif test `uname` = "HP-UX" then ARCH="HPUX" CFLAGS="$CFLAGS -D _REENTRANT" elif test `uname` = "OpenBSD" then ARCH="OPENBSD" CFLAGS="$CFLAGS -D _REENTRANT" test_kvm="true" elif test `uname` = "FreeBSD" then ARCH="FREEBSD" CFLAGS="$CFLAGS -D _REENTRANT" test_kvm="true" elif test `uname` = "NetBSD" then ARCH="NETBSD" CFLAGS="$CFLAGS -D _REENTRANT" test_kvm="true" elif test `uname` = "Darwin" then ARCH="DARWIN" CFLAGS="$CFLAGS -DREENTRANT -no-cpp-precomp -DNEED_SOCKLEN_T_DEFINED" test_kvm="true" LIBS="$LIBS -framework System -multiply_defined suppress" elif test `uname` = "AIX" then ARCH="AIX" CFLAGS="$CFLAGS -D _REENTRANT" LIBS="$LIBS -lodm" # AIX v. 5.2 LIBS="$LIBS -lcfg" else AC_MSG_WARN([Architecture not supported: `uname`.]) CFLAGS="$CFLAGS -D _REENTRANT" ARCH="UNKNOWN" fi AC_SUBST(ARCH) # ------------------------------------------------------------------------ # Resource code # ------------------------------------------------------------------------ # Check if we want to have resource support AC_MSG_CHECKING([for resource support]) AC_ARG_WITH(resource, [ --without-resource disable resouce monitoring (default: enabled)], [ dnl Check the withvalue if test "x$withval" = "xno" ; then use_resource=0 AC_MSG_RESULT([disabled]) fi if test "x$withval" = "xyes" ; then use_resource=1 AC_MSG_RESULT([enabled]) fi ], [ use_resource=1 AC_MSG_RESULT([enabled]) ] ) # Settings for resource support if test "$use_resource" = 1; then # Test for kvm libs kvm_libs="" if test "$test_kvm"; then AC_CHECK_LIB([kvm], [kvm_open], [kvm_libs="-lkvm"]) if test "$kvm_libs" then LIBS="$LIBS $kvm_libs" fi fi kstat_libs="" if test "$test_kstat"; then AC_CHECK_LIB([kstat], [kstat_open], [kstat_libs="-lkstat"]) if test "$kstat_libs" then LIBS="$LIBS $kstat_libs" fi fi PROCARCH="$ARCH" else PROCARCH="UNKNOWN" fi AC_SUBST(PROCARCH) # ------------------------------------------------------------------------ # Large files code # ------------------------------------------------------------------------ # Check if we want to have large files support AC_MSG_CHECKING([for large files support]) AC_ARG_WITH(largefiles, [ --without-largefiles disable large files support (default: enabled)], [ dnl Check the withvalue if test "x$withval" = "xno" ; then use_largefiles=0 AC_MSG_RESULT([disabled]) fi if test "x$withval" = "xyes" ; then use_largefiles=1 AC_MSG_RESULT([enabled]) fi ], [ use_largefiles=1 AC_MSG_RESULT([enabled]) ] ) # Settings for largefiles support if test "$use_largefiles" = 1; then if test "$use_resource" = 1 -a "$ARCH" = "SOLARIS"; then if ! ( echo $CFLAGS | egrep '(64|v9)' >/dev/null 2>&1); then echo "###############################################################################" echo "### Solaris requires 64-bit support for large files and resource monitoring ###" echo "### enabled. ###" echo "### ###" echo "### You can either: ###" echo "### ###" echo "### 1.) compile monit with 64-bit support (see FAQ.txt question no.8) ###" echo "### ###" echo "### 2.) or disable largefiles support (using configure --without-largefiles ###" echo "### option) monit will be able to monitor files < 2GB and 32-bit ###" echo "### processes resource usage ###" echo "### ###" echo "### 3.) or disable resource monitoring support (using configure ###" echo "### --without-resource option) - monit will be able to monitor ###" echo "### files > 2GB and no processes resource usage ###" echo "### ###" echo "###############################################################################" AC_MSG_ERROR([Solaris requires 64-bit support for large files and resource monitoring enabled]) fi fi AC_SYS_LARGEFILE fi # ------------------------------------------------------------------------ # SSL Code # ------------------------------------------------------------------------ # Check for ssl includes (take from the stunnel project) checksslincldir() { : if test -f "$1/openssl/ssl.h"; then sslincldir="$1" return 0 fi return 1 } # Check for ssl libraries checkssllibdir() { : if test "(" -f "$1/libcrypto.so" -o -f "$1/libcrypto.a" -o -f "$1/libcrypto.dylib" ")" -a \ "(" -f "$1/libssl.so" -o -f "$1/libssl.a" -o -f "$1/libssl.dylib" ")" ; then ssllibdir="$1" return 0 fi return 1 } # Check if we want to have SSL AC_MSG_CHECKING([for SSL support]) AC_ARG_WITH(ssl, [ --without-ssl disable the use of ssl (default: enabled)], [ dnl Check the withvalue if test "x$withval" = "xno" ; then use_ssl=0 AC_MSG_RESULT([disabled]) fi if test "x$withval" = "xyes" ; then use_ssl=1 AC_MSG_RESULT([enabled]) fi ], [ use_ssl=1 AC_MSG_RESULT([enabled]) ] ) # Check for SSL directory (take from the stunnel project) if test "$use_ssl" = "1"; then AC_ARG_WITH(ssl-dir, [ --with-ssl-dir=DIR location of SSL installation], [ dnl Check the specified location only for dir in "$withval" "$withval/include"; do checksslincldir "$dir" done for dir in "$withval" "$withval/lib"; do checkssllibdir "$dir" && break 2 done ] ) AC_MSG_CHECKING([for SSL include directory]) AC_ARG_WITH(ssl-incl-dir, [ --with-ssl-incl-dir=DIR location of installed SSL include files], [ dnl Check the specified location only checksslincldir "$withval" ], [ if test -z "$sslincldir"; then dnl Search default locations of SSL includes for maindir in /usr /usr/local /usr/lib /usr/pkg /var /opt /usr/sfw; do for dir in "$maindir/include"\ "$maindir/include/openssl"\ "$maindir/include/ssl"\ "$maindir/ssl/include"; do checksslincldir $dir && break 2 done done fi ] ) if test -z "$sslincldir"; then AC_MSG_RESULT([Not found]) echo echo "Couldn't find your SSL header files." echo "Use --with-ssl-incl-dir option to fix this problem or disable" echo "the SSL support with --without-ssl" echo exit 1 fi AC_MSG_RESULT([$sslincldir]) AC_MSG_CHECKING([for SSL library directory]) AC_ARG_WITH(ssl-lib-dir, [ --with-ssl-lib-dir=DIR location of installed SSL library files], [ dnl Check the specified location only checkssllibdir "$withval" ], [ if test -z "$ssllibdir"; then dnl Search default locations of SSL libraries for maindir in /usr \ /usr/local \ /usr/pkg \ /var /opt \ /usr/sfw; do for dir in $maindir \ $maindir/openssl \ $maindir/ssl \ $maindir/lib \ $maindir/lib/openssl \ $maindir/lib/ssl \ $maindir/ssl/lib \ $maindir/lib/64 \ $maindir/lib/64/openssl \ $maindir/lib/64/ssl \ $maindir/ssl/lib/64 \ $maindir/lib64 \ $maindir/lib64/openssl \ $maindir/lib64/ssl \ $maindir/ssl/lib64; do checkssllibdir $dir && break 2 done done fi ] ) if test -z "$ssllibdir"; then AC_MSG_RESULT([Not found]) echo echo "Couldn't find your SSL library files." echo "Use --with-ssl-lib-dir option to fix this problem or disable the" echo "SSL support with --without-ssl" echo exit 1 fi AC_MSG_RESULT([$ssllibdir]) AC_DEFINE([HAVE_OPENSSL], 1, [Define to 1 if you have openssl.]) AC_SUBST(sslincldir) AC_SUBST(ssllibdir) fi # Add SSL includes and libraries if test "$sslincldir" -a "$ssllibdir" then if test "x$ARCH" = "xDARWIN"; then # Darwin already knows about ssldirs LIBS="$LIBS -lssl -lcrypto" elif test -f "/usr/kerberos/include/krb5.h"; then # Redhat 9 compilation fix: CFLAGS="$CFLAGS -I$sslincldir -I/usr/kerberos/include" LIBS="$LIBS -L$ssllibdir -lssl -lcrypto" else CFLAGS="$CFLAGS -I$sslincldir" LIBS="$LIBS -L$ssllibdir -lssl -lcrypto" fi fi # ------------------------------------------------------------------------ # Outputs # ------------------------------------------------------------------------ AC_CONFIG_HEADER([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT echo "" echo "monit has been configured with the following options:" echo " Architecture: ${ARCH}" if test "$use_ssl" = "1"; then echo " SSL support: enabled" echo " SSL include directory: ${sslincldir}" echo " SSL library directory: ${ssllibdir}" else echo " SSL support: disabled" fi if test "$use_resource" = "1"; then echo " resource monitoring: enabled" else echo " resource monitoring: disabled" fi echo " resource code: sysdep_$PROCARCH.c" if test "$use_largefiles" = "1"; then echo " large files support: enabled" else echo " large files support: disabled" fi echo " Compiler flags: ${CFLAGS}" echo " Linker flags: ${LIBS}" echo " pid file location: ${piddir}" echo