diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..b22b2d6 --- /dev/null +++ b/configure.ac @@ -0,0 +1,397 @@ +dnl Process this -*-m4-*- file with autoconf to produce a configure script. + +dnl Disable caching +define([AC_CACHE_LOAD],) +define([AC_CACHE_SAVE],) + +m4_include([build-aux/custom_help.m4]) +AC_INIT([nrpe],[newdate],[nagios-users@lists.sourceforge.net],[nrpe],[https://www.nagios.org/downloads/nagios-core-addons/]) +AC_CONFIG_SRCDIR([src/nrpe.c]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_PREFIX_DEFAULT(/usr/local/nagios) + +PKG_NAME=nrpe +PKG_VERSION="3.2.1" +PKG_HOME_URL="http://www.nagios.org/" +PKG_REL_DATE="2017-09-01" +RPM_RELEASE=1 + +LANG=C +LC_ALL=C +LC_COLLATE=C +LC_CTYPE=C +LC_MESSAGES=C +LC_MONETARY=C +LC_NUMERIC=C +LC_TIME=C + +AC_SUBST(PKG_NAME) +AC_SUBST(PKG_VERSION) +AC_SUBST(PKG_HOME_URL) +AC_SUBST(PKG_REL_DATE) +AC_SUBST(RPM_RELEASE) +AC_SUBST(INSTALL) +AC_SUBST(SNPRINTF_O) +AC_SUBST(LDFLAGS) +AC_SUBST(OTHERLIBS) +AC_SUBST(SOCKETLIBS) +AC_SUBST(LIBWRAPLIBS) +AC_SUBST(NRPE_INSTALL_OPTS) +AC_SUBST(log_facility) +AC_SUBST(nrpe_user) +AC_SUBST(nrpe_group) +AC_SUBST(nrpe_port) +AC_SUBST(nagios_user) +AC_SUBST(nagios_group) +AC_SUBST(NAGIOS_INSTALL_OPTS) +AC_SUBST(TARGET_VER) +AC_SUBST(TARGET_OS) +AC_SUBST(TARGET_ARCH) +AC_SUBST(TARGET_PLATFORM) + +dnl Figure out how to invoke "install" and what install options to use. +AC_PROG_INSTALL + +dnl Get O/S, Distribution, init, inetd, system-specific directories +AC_NAGIOS_GET_OS +AC_NAGIOS_GET_DISTRIB_TYPE +AC_NAGIOS_GET_INIT +AC_NAGIOS_GET_INETD +AC_NAGIOS_GET_PATHS +AC_NAGIOS_GET_FILES + +if test "$dist_type" = solaris -a "$dist_ver" = 10; then + AC_DEFINE(SOLARIS_10,yes) +fi + +dnl Do they just want to see where things will go? +if test x${showdirs_only} = xyes; then + AC_CONFIG_FILES([paths]) + AC_OUTPUT() + chmod 755 paths + ./paths + exit 0 +fi + +AC_CONFIG_HEADERS([include/config.h]) +AC_CONFIG_FILES([Makefile + src/Makefile + nrpe.spec + uninstall + sample-config/nrpe.cfg + startup/bsd-init + startup/debian-init + startup/default-init + startup/default-inetd + startup/default-service + startup/default-socket + startup/default-socket-svc + startup/default-xinetd + startup/mac-init.plist + startup/mac-inetd.plist + startup/newbsd-init + startup/openbsd-init + startup/openrc-conf + startup/openrc-init + startup/solaris-init.xml + startup/solaris-inetd.xml + startup/tmpfile.conf + startup/upstart-init + startup/rh-upstart-init + include/common.h +]) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_MAKE_SET + +dnl Checks for header files. +AC_HEADER_STDC +AC_HEADER_TIME +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h getopt.h grp.h inttypes.h) +AC_CHECK_HEADERS(netdb.h pwd.h signal.h stdint.h strings.h string.h syslog.h) +AC_CHECK_HEADERS(tcpd.h unistd.h arpa/inet.h netinet/in.h socket.h sys/types.h) +AC_CHECK_HEADERS(sys/time.h sys/resource.h sys/wait.h sys/socket.h sys/stat.h) +AC_CHECK_HEADERS(paths.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_STRUCT_TM +AC_TYPE_MODE_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SIGNAL +AC_TYPE_GETGROUPS + +dnl Check lengths for later tests of u_int32_t and int32_t +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(long) + +dnl Define u_int32_t if we don't have it already (Solaris, etc.) +AC_CHECK_TYPE(uint32_t,unsigned int) +AC_CHECK_TYPE(u_int32_t,unsigned int) +if test "$ac_cv_type_u_int32_t" = no ; then + if test "$ac_cv_type_u_int32_t" = yes ; then + AC_DEFINE(U_INT32_T_IS_UINT32_T,[1],[u_int32_t is uint32_t]) + else + if test "$ac_cv_sizeof_int" = 4 ; then + AC_DEFINE(U_INT32_T_IS_UINT,[1],[u_int32_t is uint]) + else + if test "$ac_cv_sizeof_long" = 4 ; then + AC_DEFINE(U_INT32_T_IS_ULONG,[1],[u_int32_t is ulong]) + else + if test "$ac_cv_sizeof_short" = 4 ; then + AC_DEFINE(U_INT32_T_IS_USHORT,[1],[u_int32_t is ushort]) + fi + fi + fi + fi +fi + +dnl Define int32_t if we don't have it already +AC_CHECK_TYPE(int32_t,int) +if test "$ac_cv_type_int32_t" = no ; then + if test "$ac_cv_sizeof_int" = 4 ; then + AC_DEFINE(INT32_T_IS_UINT,[1],[int32_t is uint]) + else + if test "$ac_cv_sizeof_long" = 4 ; then + AC_DEFINE(INT32_T_IS_ULONG,[1],[int32_t is ulong]) + else + if test "$ac_cv_sizeof_short" = 4 ; then + AC_DEFINE(INT32_T_IS_USHORT,[1],[int32_t is ushort]) + fi + fi + fi +fi + +dnl Check for struct sockaddr_storate +AC_CHECK_TYPES([struct sockaddr_storage],[],[],[#include <sys/socket.h>]) + +dnl Should we use seteuid() or setresuid()? +AC_CHECK_FUNC(seteuid, + AC_DEFINE(SETEUID(id),[seteuid(id)]), + AC_DEFINE(SETEUID(id),[setresuid((uid_t) -1, id, (uid_t) -1)]) +) + +dnl Check for asprintf() and friends... +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]) +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_FUNC(vsnprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(snprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(asprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(vasprintf,,SNPRINTF_O=./snprintf.o) + +AC_CACHE_CHECK([for C99 vsnprintf],ac_cv_HAVE_C99_VSNPRINTF,[ +AC_TRY_RUN([ +#include <sys/types.h> +#include <stdarg.h> +void foo(const char *format, ...) { + va_list ap; + int len; + char buf[5]; + + va_start(ap, format); + len = vsnprintf(buf, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + va_start(ap, format); + len = vsnprintf(0, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); + + exit(0); +} +main() { foo("hello"); } +], +ac_cv_HAVE_C99_VSNPRINTF=yes,ac_cv_HAVE_C99_VSNPRINTF=no,ac_cv_HAVE_C99_VSNPRINTF=cross)]) +if test x"$ac_cv_HAVE_C99_VSNPRINTF" = x"yes"; then + AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Define if system has C99 compatible vsnprintf]) +fi + +dnl AC_CHECK_FUNC(snprintf,AC_DEFINE(HAVE_SNPRINTF),SNPRINTF_O=./snprintf.o) + +dnl Check for getopt_long (Solaris) +AC_CHECK_FUNCS([getopt_long],,AC_CHECK_LIB([iberty],[getopt_long],OTHERLIBS="$OTHERLIBS -liberty")) + +dnl Checks for library functions. +AC_CHECK_LIB(nsl,main,SOCKETLIBS="$SOCKETLIBS -lnsl") +AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket") +AC_CHECK_LIB(wrap,main,[ + LIBWRAPLIBS="$LIBWRAPLIBS -lwrap" + AC_DEFINE(HAVE_LIBWRAP,[1],[Have the TCP wrappers library]) + AC_TRY_LINK([#include <tcpd.h> + ],[int a = rfc931_timeout;],AC_DEFINE(HAVE_RFC931_TIMEOUT)) + ]) +AC_CHECK_FUNCS(strdup strstr strtoul strtok_r initgroups closesocket sigaction scandir) + +dnl socklen_t check - from curl +AC_CHECK_TYPE([socklen_t], ,[ + AC_MSG_CHECKING([for socklen_t equivalent]) + AC_CACHE_VAL([curl_cv_socklen_t_equiv], + [ + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + curl_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ + #ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> + #endif + #ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> + #endif + + int getpeername (int, $arg2 *, $t *); + ],[ + $t len; + getpeername(0,0,&len); + ],[ + curl_cv_socklen_t_equiv="$t" + break + ]) + done + done + + if test "x$curl_cv_socklen_t_equiv" = x; then + AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) + fi + ]) + AC_MSG_RESULT($curl_cv_socklen_t_equiv) + AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined])], + [#include <sys/types.h> +#include <sys/socket.h>]) + + +AC_MSG_CHECKING(for type of socket size) +AC_TRY_COMPILE([#include <stdlib.h> +#include <sys/types.h> +#include <sys/socket.h> +], +[int a = send(1, (const void *)0, (size_t *) 0, (int *) 0);], +[AC_DEFINE(SOCKET_SIZE_TYPE, size_t, [Socket Size Type]) AC_MSG_RESULT(size_t)], +[AC_DEFINE(SOCKET_SIZE_TYPE, int, [Socket Size Type]) AC_MSG_RESULT(int)]) + +dnl Does user want to check for SSL? +AC_ARG_ENABLE([ssl], + AS_HELP_STRING([--disable-ssl],[disables native SSL support @<:@default=check@:>@]),[ + if test x$enableval = xyes; then + check_for_ssl=yes + else + check_for_ssl=no + fi + ],check_for_ssl=yes) + +need_dh=yes +AC_ARG_WITH([need_dh], + AS_HELP_STRING([--with-need-dh],[set to 'no' to not include Diffie-Hellman SSL logic]), + [need_dh=$withval], + [nrpe_group=need_dh]) + +dnl Optional SSL library and include paths +if test x$check_for_ssl = xyes; then + # need_dh should only be set for NRPE + #need_dh=yes + AC_NAGIOS_GET_SSL +fi + +AC_ARG_WITH([log_facility], + AS_HELP_STRING([--with-log-facility=<facility>], + [sets NRPE syslog facility]), + [log_facility=$withval], + [log_facility=daemon]) +AC_DEFINE_UNQUOTED(NRPE_LOG_FACILITY,["$log_facility"],[NRPE syslog facility]) + +AC_ARG_WITH([nrpe_user], + AS_HELP_STRING([--with-nrpe-user=<user>],[sets user name to run NRPE]), + [nrpe_user=$withval], + [nrpe_user=nagios]) + +AC_ARG_WITH([nrpe_group], + AS_HELP_STRING([--with-nrpe-group=<group>],[sets group name to run NRPE]), + [nrpe_group=$withval], + [nrpe_group=nagios]) + +AC_ARG_WITH([nrpe_port], + AS_HELP_STRING([--with-nrpe-port=<port>], + [sets port number for NRPE to listen on]), + [nrpe_port=$withval], + [nrpe_port=5666]) +NRPE_INSTALL_OPTS="-o $nrpe_user -g $nrpe_group" +AC_DEFINE_UNQUOTED(DEFAULT_SERVER_PORT,$nrpe_port,[Default port for NRPE daemon]) + +AC_ARG_WITH([nagios_user], + AS_HELP_STRING([--with-nagios-user=<user>], + [sets user name for file permissions]), + [nagios_user=$withval], + [nagios_user=nagios]) +AC_ARG_WITH([nagios_group], + AS_HELP_STRING([--with-nagios-group=<grp>], + [sets group name file permissions]), + [nagios_group=$withval], + [nagios_group=nagios]) +NAGIOS_INSTALL_OPTS="-o $nagios_user -g $nagios_group" + + dnl On HP-UX the compile will fail with a 'Duplicate symbol "setenv"' error + dnl in '/usr/local/lib/libwrap.a(setenv.o)' and '/usr/local/lib/libiberty.a(setenv.o)' + dnl so allow duplicate symbols, and use the first one + if test "`uname -s`" = "HP-UX" ; then + LDFLAGS="$LDFLAGS -Wl,+allowdups"; + fi + +AC_ARG_ENABLE([command-args], + AS_HELP_STRING([--enable-command-args],[allows clients to specify command arguments. *** THIS IS A SECURITY RISK! *** Read the SECURITY file before using this option!]), + AC_DEFINE_UNQUOTED(ENABLE_COMMAND_ARGUMENTS,[1],[Enable command-line arguments])) + +AC_ARG_ENABLE([bash-command-substitution], + AS_HELP_STRING([--enable-bash-command-substitution],[allows clients to pass bash command substitutions of the form $(command). *** THIS IS A HIGH SECURITY RISK! *** Read the SECURITY file before using this option!]), + AC_DEFINE_UNQUOTED(ENABLE_BASH_COMMAND_SUBSTITUTION,[1],[Enable bash command substitution])) + + +AC_PATH_PROG(PERL,perl) +AC_OUTPUT() + +dnl Review options +echo "" +echo "" +AC_MSG_RESULT([*** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:]) + +echo "";\ +echo " General Options:";\ +echo " -------------------------" + +AC_MSG_RESULT([ NRPE port: $nrpe_port]) +AC_MSG_RESULT([ NRPE user: $nrpe_user]) +AC_MSG_RESULT([ NRPE group: $nrpe_group]) +AC_MSG_RESULT([ Nagios user: $nagios_user]) +AC_MSG_RESULT([ Nagios group: $nagios_group]) + + +echo "";\ +echo "";\ +echo "Review the options above for accuracy. If they look okay,";\ +echo "type 'make all' to compile the NRPE daemon and client";\ +echo "or type 'make' to get a list of make options.";\ +echo "" |