blob: 6da02067cde15bba7df66bb593b7ef210498009b [file] [log] [blame]
# Copyright (C) Tildeslash Ltd. All rights reserved.
AC_PREREQ([2.53])
AC_INIT([libmonit], [1.0], [monit-dev@tildeslash.com])
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src])
# ---------------------------------------------------------------------------
# Programs
# ---------------------------------------------------------------------------
AC_PROG_CC
# ---------------------------------------------------------------------------
# Libtool
# ---------------------------------------------------------------------------
AC_PROG_LIBTOOL
# ---------------------------------------------------------------------------
# Build options
# ---------------------------------------------------------------------------
AC_ARG_ENABLE(optimized,
AS_HELP_STRING([--enable-optimized],
[Build software optimized]),
[
CFLAGS=`echo $CFLAGS|sed 's/-O.//'`
if test "x$enableval" = "xyes" ; then
CFLAGS=`echo $CFLAGS|sed 's/-g//'`
CFLAGS="$CFLAGS -O3"
OPTIMIZED=1
else
OPTIMIZED=0
fi
],
[
OPTIMIZED=0
]
)
AC_ARG_ENABLE(profiling,
AS_HELP_STRING([--enable-profiling],
[Build with debug and profiling options]),
[
if test "x$enableval" = "xyes" ; then
CFLAGS="$CFLAGS -g -pg"
profile="true"
fi
],
[
profile="false"
]
)
AC_ARG_ENABLE([openssl],
AS_HELP_STRING([--enable-openssl(=<path>)],
[Link Monit with openssl. An optional path argument may
be given to specify the top-level directory to search for
openssl to link with]),
[
openssl="true"
if test "x$enableval" = "xyes"; then
AC_CHECK_LIB([ssl], [SSL_library_init], [], [AC_MSG_ERROR([libssl not found])])
AC_CHECK_LIB([crypto], [SHA1_Init], [], [AC_MSG_ERROR([libcrypto not found])])
else
AC_MSG_CHECKING([for openssl in $enableval])
LDFLAGS="-L$enableval/lib -lssl -lcrypto $LDFLAGS "
CPPFLAGS="-I$enableval/include $CPPFLAGS"
if test -r "$enableval/lib/libssl.a" -a -r "$enableval/lib/libcrypto.a"; then
AC_MSG_RESULT([ok])
else
AC_MSG_ERROR([openssl not found in $enableval])
fi
fi
],[openssl="false"])
# ---------------------------------------------------------------------------
# Libraries
# ---------------------------------------------------------------------------
AC_CHECK_LIB([pthread], [pthread_create], [], [AC_MSG_ERROR([POSIX thread library is required])])
# ---------------------------------------------------------------------------
# Header files
# ---------------------------------------------------------------------------
AC_HEADER_STDC
AC_CHECK_HEADERS([ctype.h errno.h fcntl.h limits.h pthread.h setjmp.h \
signal.h stdarg.h stdio.h string.h string.h strings.h \
sys/socket.h sys/time.h sys/types.h unistd.h execinfo.h \
sys/sendfile.h sys/dirent.h poll.h sys/poll.h sys/event.h \
stropts.h sys/ioctl.h sys/filio.h])
# ------------------------------------------------------------------------
# Functions
# ------------------------------------------------------------------------
# Require a working setjmp
AC_CACHE_CHECK([setjmp is available],
[libmonit_cv_setjmp_available],
[AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[#include <setjmp.h>]],
[[jmp_buf env; setjmp(env);]])],
[AC_MSG_RESULT(yes)],
[AC_MSG_FAILURE([setjmp is required])],
[AC_MSG_ERROR(cross-compiling: please set 'libmonit_cv_setjmp_available=[yes|no]')])])
# Require that we have vsnprintf that conforms to c99. I.e. does bounds check
AC_CACHE_CHECK([vsnprintf is c99 conformant],
[libmonit_cv_vsnprintf_c99_conformant],
[AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[#include <stdarg.h>
#include <stdio.h>]],
[[char t[1]; va_list ap; int n = vsnprintf(t, 1, "hello", ap); if(n == 5) return 0;return 1;]])],
[AC_MSG_RESULT(yes)],
[AC_MSG_FAILURE([vsnprintf does not conform to c99])],
[AC_MSG_ERROR(cross-compiling: please set 'libmonit_cv_vsnprintf_c99_conformant=[yes|no]')])])
# ------------------------------------------------------------------------
# Architecture/OS
# ------------------------------------------------------------------------
architecture=`uname`
if test "$architecture" = "Linux"
then
CFLAGS="$CFLAGS -D _REENTRANT"
AC_DEFINE([LINUX], 1, [Define to 1 if the system is Linux])
elif test "$architecture" = "FreeBSD"
then
CFLAGS="$CFLAGS -D _REENTRANT"
AC_DEFINE([FREEBSD], 1, [Define to 1 if the system is FreeBSD])
elif test "$architecture" = "GNU/kFreeBSD"
then
CFLAGS="$CFLAGS -D _REENTRANT"
AC_DEFINE([FREEBSD], 1, [Define to 1 if the system is FreeBSD])
elif test "$architecture" = "OpenBSD"
then
CFLAGS="$CFLAGS -D _REENTRANT"
AC_DEFINE([OPENBSD], 1, [Define to 1 if the system is OpenBSD])
elif test "$architecture" = "Darwin"
then
CFLAGS="$CFLAGS -DREENTRANT"
AC_DEFINE([DARWIN], 1, [Define to 1 if the system is OSX])
elif test "$architecture" = "SunOS"
then
LIBS="$LIBS -lsocket -lnsl"
CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -D__EXTENSIONS__ -m64"
LDFLAGS="$LDFLAGS -m64"
if test `uname -m` != "i86pc"
then
CFLAGS="$CFLAGS -mtune=v9"
LDFLAGS="$LDFLAGS -mtune=v9"
fi
AC_DEFINE([SOLARIS], 1, [Define to 1 if the system is SOLARIS])
elif test "$architecture" = "HP-UX"
then
CFLAGS="$CFLAGS -D_REENTRANT"
AC_DEFINE([HPUX], 1, [Define to 1 if the system is HPUX])
elif test "$architecture" = "NetBSD"
then
CFLAGS="$CFLAGS -D_REENTRANT"
AC_DEFINE([NETBSD], 1, [Define to 1 if the system is NETBSD])
elif test "$architecture" = "AIX"
then
CFLAGS="$CFLAGS -D_THREAD_SAFE -D_REENTRANT"
AC_DEFINE([AIX], 1, [Define to 1 if the system is AIX])
else
AC_MSG_ERROR([Architecture not supported: ${architecture}])
fi
# ---------------------------------------------------------------------------
# Compiler
# ---------------------------------------------------------------------------
# Compiler characteristics
AC_C_CONST
AC_C_BIGENDIAN
# If the compiler is gcc, tune warnings and make the char type unsigned
# and enable C99 support
if test "x$GCC" = "xyes"; then
CFLAGS="$CFLAGS -Wall -Wunused -Wno-unused-label -funsigned-char";
# Add C99 support
CFLAGS="$CFLAGS -D_GNU_SOURCE -std=c99"
# does this compiler support -Wno-pointer-sign ?
svd_CFLAGS="$CFLAGS"
CFLAGS="-Wno-pointer-sign $CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0;])], [], [CFLAGS="$svd_CFLAGS"])
# does this compiler support -Wno-address ?
svd_CFLAGS="$CFLAGS"
CFLAGS="-Wno-address $CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0;])], [], [CFLAGS="$svd_CFLAGS"])
fi
# ------------------------------------------------------------------------
# Atomic support
# ------------------------------------------------------------------------
# AC_MSG_CHECKING(for Atomic support)
# if test `uname` = "Darwin" -o `uname` = "FreeBSD"
# then
# AC_MSG_RESULT(yes)
# elif test `uname` = "SunOS"
# then
# AC_CHECK_HEADER([atomic.h],
# [AC_MSG_RESULT(yes)],
# [AC_MSG_ERROR([atomic.h is required for atomic support])])
# else
# AC_RUN_IFELSE([AC_LANG_PROGRAM([],[
# #if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)))
# return 0;
# #else
# return 1;
# #endif
# ])],
# [AC_MSG_RESULT(yes)],
# [AC_MSG_FAILURE([GCC version > 4.1 is required for atomic support])])
# fi
# ------------------------------------------------------------------------
# IPv6 Support
# ------------------------------------------------------------------------
AC_MSG_CHECKING(for IPv6 support)
AC_CACHE_VAL(ac_cv_ipv6,
AC_TRY_RUN([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
/* Make sure the definitions for AF_INET6 and struct sockaddr_in6
* are defined, and that we can actually create an IPv6 TCP socket.*/
main()
{
int fd;
struct sockaddr_in6 foo;
fd = socket(AF_INET6, SOCK_STREAM, 0);
exit(fd >= 0 ? 0 : 1);
}],
ac_cv_ipv6=yes,
ac_cv_ipv6=no,
ac_cv_ipv6=no))
AC_MSG_RESULT($ac_cv_ipv6)
if test $ac_cv_ipv6 = yes ; then
AC_DEFINE([IPV6], 1, [Define to 1 if the system supports IPv6])
fi
# ---------------------------------------------------------------------------
# Functions
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Outputs
# ---------------------------------------------------------------------------
AM_CONFIG_HEADER(src/xconfig.h)
AC_CONFIG_FILES([Makefile test/Makefile])
AC_OUTPUT
cat <<EOT
+------------------------------------------------------------+
| License: |
| This is Open Source Software and use is subject to the GNU |
| AFFERO GENERAL PUBLIC LICENSE version 3, available in this |
| distribution in the file COPYING. |
| |
| By continuing this installation process, you are bound by |
| the terms of this license agreement. If you do not agree |
| with the terms of this license, you must abort the |
| installation process at this point. |
+------------------------------------------------------------+
| Libmonit is configured as follows: |
| |
EOT
if test "x1" = "x$OPTIMIZED"; then
echo "| Optimized: ENABLED |"
else
echo "| Optimized: DISABLED |"
fi
if test "xfalse" = "x$profile"; then
echo "| Profiling: DISABLED |"
else
echo "| Profiling: ENABLED |"
fi
if test "xtrue" = "x$openssl"; then
echo "| Openssl: ENABLED |"
fi
echo "+------------------------------------------------------------+"