LittleDemon WebShell


Linux hosting5.siteguarding.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64
Path : /etc/dante-1.4.3/
File Upload :
Command :
Current File : //etc/dante-1.4.3/osdep.m4

case $host in
    *-*-darwin*)
	AC_DEFINE(HAVE_DARWIN, 1, [enable darwin/osx workarounds])
	;;

    *-*-openbsd*)
	AC_DEFINE(HAVE_OPENBSD_BUGS, 1, [bug workaround])
	;;

    *-*-solaris*)
	AC_DEFINE(HAVE_SENDMSG_DEADLOCK, 1, [bug workaround])
	AC_DEFINE(HAVE_SOLARIS_BUGS, 1, [bug workaround])
	AC_DEFINE(SPT_TYPE, SPT_REUSEARGV, [setproctitle replacement type])
	;;

    *-*-linux-*)
	AC_DEFINE(HAVE_LINUX_BUGS, 1, [bug workaround])
	AC_DEFINE(SPT_TYPE, SPT_REUSEARGV, [setproctitle replacement type])
	;;

    *-*-aix*)
	AC_DEFINE(HAVE_SYSTEM_XMSG_MAGIC, 1, [platform workaround])
	;;
esac

dnl Checking variable sizes
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)

dnl Checks for header files.
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(fcntl.h limits.h malloc.h paths.h strings.h syslog.h)
AC_CHECK_HEADERS(unistd.h crypt.h stddef.h sys/file.h sys/ioctl.h sys/time.h)
AC_CHECK_HEADERS(shadow.h ifaddrs.h sys/sem.h netinet/in.h rpc/rpc.h)
AC_CHECK_HEADERS(sys/ipc.h arpa/nameser.h net/if_dl.h execinfo.h sys/pstat.h)
AC_CHECK_HEADERS(sys/shm.h valgrind/valgrind.h netinet/tcp_fsm.h)

#some header dependencies for netinet/ip.h, use compilation test
AC_MSG_CHECKING([for netinet/ip.h])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>

#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
], [], [AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_NETINET_IP_H, 1, [netinet/ip.h header found])],
   [AC_MSG_RESULT(no)])

case $host in
    #XXX only check for priv.h support on Solaris for now
    *-*-solaris*)
	AC_CHECK_HEADERS(priv.h,
	    [AC_DEFINE(HAVE_PRIVILEGES, 1, [Some privilege type supported])
	     AC_DEFINE(HAVE_SOLARIS_PRIVS, 1, [Solaris priv.h support])])
	;;
esac

AC_CHECK_HEADERS([netinet/ip_var.h], [], [], [
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
])

AC_CHECK_HEADERS([resolv.h], [], [], [
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_ARPA_NAMESER_H
#include <arpa/nameser.h>
#endif
])

AC_CHECK_HEADER(sys/sockio.h,
[AC_DEFINE(HAVE_SYS_SOCKIO_H, 1, [sys/sockio.h exists])
 have_sys_sockio_h=t])

dnl Checks for typedefs, structures, and compiler characteristics.
AC_MSG_CHECKING([whether <sys/types.h> defines const])
AC_EGREP_CPP(yes, [
#include <sys/types.h>
#ifdef const
yes
#endif
], [AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)
    check_const="yes"])
if test x$check_const = xyes; then
    AC_C_CONST
fi

#looks for Linux + systems with RTAX_GATEWAY defined in net/route.h
AC_MSG_CHECKING([for supported routing socket communication])
AH_TEMPLATE([HAVE_ROUTE_SOURCE], [routing socket communication supported])
unset no_routeinfo
AC_EGREP_CPP(yes, [
#include <net/route.h>
#ifdef linux
yes
#endif /* linux */
], [AC_DEFINE(HAVE_ROUTE_SOURCE, 1)
    AC_DEFINE(HAVE_ROUTEINFO_LINUX, 1, [Linux type routing socket])
    AC_MSG_RESULT(yes)],
   [AC_EGREP_CPP(yes, [
#include <net/route.h>
#ifdef RTA_GATEWAY
yes
#endif /* RTA_GATEWAY */
],  [AC_DEFINE(HAVE_ROUTE_SOURCE, 1)
     AC_DEFINE(HAVE_ROUTEINFO_BSD, 1, [BSD type routing socket])
     AC_MSG_RESULT(yes)],
     [AC_MSG_RESULT([no, might result in reduced functionality])
      no_routeinfo=t])])

#XXXsys/socket.h?
AC_MSG_CHECKING([for struct ip_opts in <netinet/in.h>])
AC_EGREP_CPP([struct.*ipoption], [
#include <netinet/ip_var.h>
], [AC_DEFINE(HAVE_STRUCT_IPOPTS, 1, [ip_opts defined in netinet/in.h])
    AC_MSG_RESULT(yes)],
   AC_MSG_RESULT(no))

AC_MSG_CHECKING([for struct tcp_info in <netinet/tcp.h>])
AC_EGREP_CPP([struct.*tcp_info], [
#include <netinet/tcp.h>
], [AC_DEFINE(HAVE_TCP_INFO, 1, [tcp_info struct found in netinet/tcp.h])
    AC_MSG_RESULT(yes)

    # check which values are found in the tcp_info struct
    # (limitations in autoconf makes it necessary to list each name explicitly
    #  and not use a list stored in a variable)

    #values not present on some older linux versions
    L_TCPINFOCHECK(tcpi_rcv_rtt)
    L_TCPINFOCHECK(tcpi_rcv_space)
    L_TCPINFOCHECK(tcpi_total_retrans)

    #values not present on freebsd
    L_TCPINFOCHECK(tcpi_advmss)
    L_TCPINFOCHECK(tcpi_ato)
    L_TCPINFOCHECK(tcpi_backoff)
    L_TCPINFOCHECK(tcpi_ca_state)
    L_TCPINFOCHECK(tcpi_fackets)
    L_TCPINFOCHECK(tcpi_last_ack_recv)
    L_TCPINFOCHECK(tcpi_last_ack_sent)
    L_TCPINFOCHECK(tcpi_last_data_recv)
    L_TCPINFOCHECK(tcpi_last_data_sent)
    L_TCPINFOCHECK(tcpi_lost)
    L_TCPINFOCHECK(tcpi_pmtu)
    L_TCPINFOCHECK(tcpi_probes)
    L_TCPINFOCHECK(tcpi_rcv_rtt)
    L_TCPINFOCHECK(tcpi_rcv_ssthresh)
    L_TCPINFOCHECK(tcpi_reordering)
    L_TCPINFOCHECK(tcpi_retrans)
    L_TCPINFOCHECK(tcpi_retransmits)
    L_TCPINFOCHECK(tcpi_sacked)
    L_TCPINFOCHECK(tcpi_unacked)],
   [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([whether <sys/types.h> defines inline])
AC_EGREP_CPP(yes, [
#include <sys/types.h>
#ifdef inline
yes
#endif
], [AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)
    check_inline="yes"])
if test x"${check_inline}" = xyes; then
    AC_C_INLINE
fi

AC_TYPE_UID_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME

AC_SYS_LARGEFILE

AC_MSG_CHECKING([for in6_addr])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
], [
struct in6_addr sin6;
], [AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_IN6_ADDR, 1, [in6_addr defined])],
   [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([to see if openlog accepts LOG_PERROR])
AC_EGREP_CPP(yes, [
#include <syslog.h>
#ifdef LOG_PERROR
yes
#endif
], [AC_DEFINE(HAVE_OPENLOG_LOG_PERROR, 1, [openlog supports LOG_PERROR])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))

AC_MSG_CHECKING([to see if stdlib.h defines EXIT_FAILURE])
AC_EGREP_CPP(yes, [
#include <stdlib.h>
#ifdef EXIT_FAILURE
yes
#endif
], [AC_MSG_RESULT(yes)],
   [AC_DEFINE(NEED_EXIT_FAILURE, 1, [EXIT_FAILURE not defined in stdlib.h])
    AC_MSG_RESULT(no)])

#XXX actually checks if AF_UNIX should be used instead of AF_LOCAL
AC_MSG_CHECKING([whether <sys/socket.h> uses AF_UNIX])
AC_EGREP_CPP(yes, [
#include <sys/types.h>
#include <sys/socket.h>
#ifdef AF_LOCAL
#else
#ifdef AF_UNIX
yes
#endif
#endif
], [AC_DEFINE(NEED_AF_LOCAL, 1, [need AF_LOCAL definition])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))

AC_MSG_CHECKING([for SIGINFO])
AC_EGREP_CPP(yes, [
#include <signal.h>
#ifdef SIGINFO
yes
#endif
], [AC_DEFINE(HAVE_SIGNAL_SIGINFO, 1, [signal.h defined SIGINFO])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))

AC_MSG_CHECKING([to see if MSG_WAITALL exists])
AC_EGREP_CPP(yes, [
#include <sys/socket.h>
#ifdef MSG_WAITALL
yes
#endif
], [AC_DEFINE(HAVE_MSG_WAITALL, 1, [sys/socket.h defines MSG_WAITALL])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))

AC_MSG_CHECKING([whether realloc with a NULL pointer calls malloc])
AC_TRY_RUN([
#include <stdlib.h>
#ifndef NULL
#define NULL (char *)0
#endif

int main()
{
	/* will assume this test doesn\'t fail because of lack of memory */
	if (realloc(NULL, 1) == NULL)
		return 1;
	else
		return 0;
}], [AC_MSG_RESULT(yes)],
    [AC_DEFINE(HAVE_NOMALLOC_REALLOC, 1, [realloc never calls malloc])
     AC_MSG_RESULT(no)],
    [dnl assume malloc is not called when cross-compiling
     AC_DEFINE(HAVE_NOMALLOC_REALLOC, 1, [realloc never calls malloc])
     AC_MSG_RESULT(no)])

# AC_MSG_CHECKING([whether free can be called with NULL])
# AC_TRY_RUN([
# #include <stdlib.h>
# #ifndef NULL
# #define NULL (char *)0
# #endif

# int main()
# {
#	/* will assume core dump/seg fault if it doesn\'t work */
#	free(NULL);
#	return 0;
# }], [AC_MSG_RESULT(yes)],
#     [AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter])
#      AC_MSG_RESULT(no)],
#     [dnl assume NULL is not accepted when cross-compiling
#      AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter])
#      AC_MSG_RESULT(no)])
#XXX always set for now
AC_DEFINE(HAVE_NONULL_FREE, 1, [free does not accept NULL parameter])

AC_MSG_CHECKING([if getsockopt needs cast])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int, int, int, char *, int *);
], [ 1 ],
 [AC_DEFINE(NEED_GETSOCKOPT_CAST, 1, [getsockopt needs cast])
  AC_MSG_RESULT(yes)],
  AC_MSG_RESULT(no))

#include both <sys/ioctl.h> and <sys/sockio.h>?
if test x$have_sys_sockio_h = xt; then
	AC_MSG_CHECKING([to see if <sys/sockio.h> should be included])
	AC_EGREP_CPP(yes, [
#include <sys/ioctl.h>
#ifdef SIOCATMARK
#else
#include <sys/sockio.h>
#ifdef SIOCATMARK
yes
#endif
#endif
], [AC_DEFINE(NEED_SYS_SOCKIO_H, 1, [sys/sockio.h must be included])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))
fi

#XXX should be more generic, check if nonexistent
#SV_INTERRUPT, but not SA_RESTART defined?
AC_MSG_CHECKING([to see if SV_INTERRUPT should be used])
AC_EGREP_CPP(yes, [
#include <signal.h>
#ifdef SA_RESTART
#else
# ifdef SV_INTERRUPT
yes
# endif
#endif
], [AC_DEFINE(NEED_SA_RESTART, 1, [use SA_RESTART, not SV_INTERRUPT])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))

#XXX seems to be supported on Solaris2.6, but there might be some
#defines that need to be set (should _XOPEN_SOURCE be defined on all
#platforms?)
AC_MSG_CHECKING([if cmsghdr exists in <sys/socket.h>])
case $host in
    *)
	AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
], [struct cmsghdr foo = {1,1,1};
 struct msghdr bar;
 foo.cmsg_len = 0;
 foo.cmsg_type = SCM_RIGHTS;
 foo.cmsg_level = SOL_SOCKET;
 bar.msg_controllen = 1;
], [AC_DEFINE(HAVE_CMSGHDR, 1, [struct cmsghdr exists])
    AC_MSG_RESULT(yes)],
    AC_MSG_RESULT(no))
	;;
esac

AC_MSG_CHECKING([for CMSG_SPACE in sys/socket.h])
AC_TRY_LINK([
#include <sys/types.h>
#include <sys/socket.h>
], [int d = CMSG_SPACE(4);
   return 0;
], [AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_CMSG_SPACE, 1, CMSG_SPACE exists)],
   [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([for CMSG_LEN in sys/socket.h])
AC_TRY_LINK([
#include <sys/types.h>
#include <sys/socket.h>
], [int d = CMSG_LEN(4);
    return 0;
], [AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_CMSG_LEN, 1, [CMSG_LEN exists])],
   [AC_MSG_RESULT(no)])

unset have_sa_len
AC_MSG_CHECKING([for sa_len in sockaddr])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
], [struct sockaddr sa;
sa.sa_len = 0;
], [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [sa_len exists in sockaddr])
    have_sa_len=t
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])

if test x"${have_sa_len}" != x; then
   AC_MSG_CHECKING([for sa_len type])
   oCFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS${CFLAGS:+ }$FAILWARN"
   unset sa_len_type_found
   for type in uint8_t "unsigned char"; do
       AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>], [
struct sockaddr sa;
$type *sa_len_ptr;
sa_len_ptr = &sa.sa_len;
sa_len_ptr++; /* use to avoid warning/error */],
       [AC_DEFINE_UNQUOTED(sa_len_type, [$type], [sa_len type])
        sa_len_type_found=t
        break])
   done
   CFLAGS="$oCFLAGS"

   if test x"${sa_len_type_found}" != x; then
       AC_MSG_RESULT([yes])
   else
       AC_MSG_RESULT([no])
       AC_MSG_WARN([unable to obtain sa_len type, exiting])
       exit 1
   fi
else
   AC_DEFINE(sa_len_type, [socklen_t], [sa_len type])
fi

unset have_ss_len
AC_MSG_CHECKING([for sockaddr_storage ss_len in sockaddr])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
], [struct sockaddr_storage ss;
ss.ss_len = 0;
], [AC_DEFINE(HAVE_SOCKADDR_STORAGE_SS_LEN, 1, [ss_len exists in sockaddr_storage])
    have_ss_len=t
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([for __res_state options type])
oCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS${CFLAGS:+ }$FAILWARN"
unset res_options_type_found
for type in "unsigned int" u_long; do
    AC_TRY_COMPILE([
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>], [
struct __res_state res;
$type *res_options_ptr;
res_options_ptr = &res.options;
res_options_ptr++;],
    [AC_DEFINE_UNQUOTED(res_options_type_t, [$type], [resolver options type])
     res_options_type_found=t
     break])
done
CFLAGS="$oCFLAGS"
if test x"${res_options_type_found}" != x; then
    AC_MSG_RESULT([yes])
else
    AC_MSG_RESULT([no])
    AC_MSG_WARN([unable to obtain __res_state options type, setting to unsigned long])
    AC_DEFINE_UNQUOTED(res_options_type_t, [unsigned long], [resolver options type])
fi

#AIX 6.1 needs sys/select.h, but can be problematic on other platforms
AC_MSG_CHECKING([if sys/select.h is needed])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/time.h>
#include <string.h>
#include <unistd.h>
], [fd_set *fdp;
    size_t p;
    fdp = NULL;
    p = NFDBITS * sizeof(fd_mask);
], [AC_MSG_RESULT(no)],
   [dnl compilation failure, try with sys/select.h (ignore if this fails)
    AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/time.h>
#include <sys/select.h>
#include <string.h>
#include <unistd.h>
], [fd_set *fdp;
    size_t p;
    fdp = NULL;
    p = NFDBITS * sizeof(fd_mask);],
    [AC_DEFINE(HAVE_SYS_SELECT_H, 1, [sys/select.h needed])
     AC_MSG_RESULT(yes)],
    [AC_MSG_RESULT(no)])])

AC_MSG_CHECKING([to see if malloc_options exists])
AC_TRY_LINK([extern char *malloc_options;],
[ malloc_options = 0; ],
[AC_DEFINE(HAVE_MALLOC_OPTIONS, 1, [support for malloc debugging])
 AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])

AC_MSG_CHECKING([to see if __progname exists])
AC_TRY_LINK([extern char *__progname;],
[ __progname = 0; ],
[AC_DEFINE(HAVE_PROGNAME, 1, [programe name symbol exists])
 AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])

dnl Checks for libraries.
AC_SEARCH_LIBS(crypt, crypt)

#HP-UX 11.00
AC_SEARCH_LIBS(getspnam, sec)

#FreeBSD has setproctitle in -lutil
AC_SEARCH_LIBS(setproctitle, util)

#expected select behavior?
unset nb_select_err
L_UNCON_SELECT([],
 [nb_select_err=t])

if test x"${nb_select_err}" = xt; then
   AC_MSG_WARN([socksify operations on nonblocking sockets might fail on this platform])
fi

#Linux (RedHat 5.2) defines socklen_t in <socketbits.h>, which is
#included by <sys/socket.h>.  check for this first.
AC_MSG_CHECKING([for socklen_t])
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
], [socklen_t foo = 1;],
   [AC_MSG_RESULT(yes)
    socklen_found=t],
   [AC_MSG_RESULT(no)
    socklen_found=""])

AH_TEMPLATE([socklen_t], [platform workaround])
if test x"$socklen_found" = x; then
    case $host in
	alpha*-dec-osf* | *-*-aix*)
	    AC_DEFINE(socklen_t, size_t)
	    ;;

	*)
	    AC_DEFINE(socklen_t, int)
	    ;;
    esac
fi

#sig_atomic_t
AC_MSG_CHECKING([for sig_atomic_t in <signal.h>])
AC_EGREP_CPP(sig_atomic_t, [
#include <signal.h>
], [AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, [sig_atomic_t defined in signal.h])
    case $host in
	*-*-aix*)
	    AC_DEFINE(HAVE_VOLATILE_SIG_ATOMIC_T, 1, [platform workaround])
	;;
    esac
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])

#try to identify number of valid signal values
SIGDEFAULT=128
unset sigmax
AC_MSG_CHECKING([for number of valid signal values])
AC_TRY_RUN([
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   FILE *fp;
   int minval = 0;
   int i;

   for (i = 1; i < 1000; i++) {
      if (i == SIGKILL || i == SIGSTOP)
         continue;
      if (signal(i, SIG_DFL) == SIG_ERR) {
         perror("signal");
         break;
      }
   }
   minval = i;
   fprintf(stderr, "notice: signal() based value: %d\n", minval);

#ifdef NSIG
   if (NSIG > minval) {
      minval = NSIG;
      fprintf(stderr, "notice: NSIG based value: %d\n", minval);
   }
#endif /* NSIG */

#ifdef SIGRTMAX
   /* note: this value might be changed at runtime (e.g., Linux) */
   if (SIGRTMAX > minval) {
      minval = SIGRTMAX;
      fprintf(stderr, "notice: SIGRTMAX based value: %d\n", minval);
   }
#endif /* SIGRTMAX */

   /* get base 2 value */
   for (i = 0; i < 10; i++) {
      int n = 1 << i;
      if (n > minval) {
         minval = n;
         fprintf(stderr, "notice: base 2 based increase: %d\n", minval);
	 break;
      }
   }

   fprintf(stderr, "notice: setting signal max value to %d\n", minval);
   if ((fp = fopen("conftest.out", "w")) == NULL) {
      perror("fopen");
      exit(1);
   }
   /* write zero for no special handling needed */
   fprintf(fp, "%ld\n", minval);
   fclose(fp);
   exit(0);

   return 0;
}], [sigmax=`test -s conftest.out && cat conftest.out`],
[],
[dnl set a large value when cross-compiling
 sigmax=128
 AC_MSG_RESULT([cross-compiling, setting to $sigmax])
])
if test x"$sigmax" = x; then
   sigmax=$SIGDEFAULT
   AC_MSG_RESULT([got no value, setting to $sigmax])
else
   AC_MSG_RESULT(setting to $sigmax)
fi
AC_DEFINE_UNQUOTED(SOCKS_NSIG, $sigmax, [Guess at max number of valid signals])

AC_CHECK_TYPES([int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t,
		in_port_t, in_addr_t],
		, ,
[
#include <sys/types.h>
#include <netinet/in.h>
])
AC_CHECK_TYPE(ssize_t, int)

dnl Checks for library functions.
AC_FUNC_MEMCMP
AC_FUNC_SETVBUF_REVERSED
AC_TYPE_SIGNAL
AC_FUNC_STRFTIME
AC_FUNC_UTIME_NULL
AC_FUNC_VPRINTF

#doesn't work if test links with -lsocket (Solaris)
AC_SEARCH_LIBS(inet_addr, nsl)

#NOTE: also test for -lsocket in preload.m4. not really needed there
#      as check is also done here (for checks such as L_PIPETYPE() that
#      might need to link with -lsocket, but also having test there makes
#      code in that file easier to read.
AC_SEARCH_LIBS(getsockopt, socket)

AC_CHECK_FUNCS(getprpwnam getspnam getpwnam_shadow bindresvport)
AC_CHECK_FUNCS(getpass)

AC_MSG_CHECKING([for system V getpwnam])
unset getpwnam_alt
if test x"${ac_cv_func_getprpwnam}" = xyes; then
    getpwnam_alt=t
fi

if test x"${ac_cv_func_getspnam}" = xyes; then
    getpwnam_alt=t
fi

#XXX
if test x"${getpwnam_alt}" = x; then
    AC_DEFINE(HAVE_WORKING_GETPWNAM, 1, [system V getpwnam])
    AC_MSG_RESULT(no)
else
    AC_MSG_RESULT(yes)
fi

#try to determine pipe buffer type
L_PIPETYPE()

#obtain highest valid select() timeout seconds value
L_SELECT_MAXTIMEOUT

#generate list of errno values
ERRNOSRC="include/errorsymbols_gen.h"
cp /dev/null $ERRNOSRC
ERRVALFILE="errorvals.txt" #for counting unique (numeric) values
cp /dev/null $ERRVALFILE
unset ERRNOVALS
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, E2BIG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EACCES)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADDRINUSE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADDRNOTAVAIL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EADV)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAFNOSUPPORT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAGAIN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EALREADY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EAUTH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADARCH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADEXEC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADF)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADFD)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADMACHO)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADMSG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADRPC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADRQC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBADSLT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBFONT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EBUSY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECANCELED)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECAPMODE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECHILD)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECHRNG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECOMM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNABORTED)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNREFUSED)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECONNRESET)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEADLK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEADLOCK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDESTADDRREQ)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDEVERR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDIRIOCTL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDOM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDOOFUS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDQUOT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EEXIST)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFAULT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFBIG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFTYPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EHOSTDOWN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EHOSTUNREACH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIDRM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EILSEQ)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINPROGRESS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINTR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EINVAL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIO)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EIPSEC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EISCONN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EISDIR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EJUSTRETURN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL2HLT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL2NSYNC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL3HLT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EL3RST)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELAST)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBACC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBBAD)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBEXEC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBMAX)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELIBSCN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELNRNG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELOCKUNMAPPED)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ELOOP)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMEDIUMTYPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMFILE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMLINK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMSGSIZE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMULTIHOP)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENAMETOOLONG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENEEDAUTH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETDOWN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETRESET)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENETUNREACH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENFILE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOANO)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOATTR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOBUFS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOCSI)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENODATA)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENODEV)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOENT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOEXEC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOIOCTL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOLCK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOLINK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMEDIUM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMEM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOMSG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENONET)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPKG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPOLICY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOPROTOOPT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSPC)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSTR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOSYS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTACTIVE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTBLK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTCAPABLE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTCONN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTDIR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTEMPTY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTRECOVERABLE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTSOCK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTSUP)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTTY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTUNIQ)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENXIO)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOPNOTSUPP)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOVERFLOW)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EOWNERDEAD)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPERM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPFNOSUPPORT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPIPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROCLIM)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROCUNAVAIL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROGMISMATCH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROGUNAVAIL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTO)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTONOSUPPORT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPROTOTYPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EPWROFF)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERANGE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EREMCHG)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EREMOTE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERESTART)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EROFS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ERPCMISMATCH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESHLIBVERS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESHUTDOWN)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESOCKTNOSUPPORT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESPIPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESRCH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESRMNT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESTALE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESTRPIPE)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETIME)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETIMEDOUT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETOOMANYREFS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ETXTBSY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EUNATCH)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EUSERS)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWOULDBLOCK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EXDEV)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EXFULL)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECLONEME)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ECORRUPT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDESTADDREQ)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EDIST)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EFORMAT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EMEDIA)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOCONNECT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTEMPTY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTREADY)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ENOTRUST)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESAD)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESOFT)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, ESYSERROR)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWOULDBLOCK)
L_CHECKERRNO(ERRNOVALS, $ERRVALFILE, EWRPROTECT)

if test x"$ERRNOVALS" = x; then
    AC_MSG_FAILURE([error: no errno symbols found])
fi
ERRNOCNT=`echo $ERRNOVALS | wc -w | awk '{ print $1 }'`

AC_MSG_CHECKING([errno symbols])
unset UNIQUEVALS UNIQUESYMBOLS
if test -s $ERRVALFILE; then
    UNIQUEVALS=`sort $ERRVALFILE | uniq | wc -l | awk '{ print $1 }'`
    UNIQUESYMBOLS=`cat $ERRVALFILE | wc -l | awk '{ print $1 }'`
    if test $ERRNOCNT -ne $UNIQUESYMBOLS; then
	AC_MSG_FAILURE([internal error: errno symbol count mismatch])
    fi
    AC_DEFINE_UNQUOTED(UNIQUE_ERRNO_VALUES, $UNIQUEVALS,
	[Number of unique errno numbers])
    AC_MSG_RESULT([unique symbols: $UNIQUESYMBOLS, unique values: $UNIQUEVALS])
else
    AC_MSG_FAILURE([error: unable to determine errno symbol values])
fi

changequote(<<, >>)dnl
echo "/* NOTICE: $ERRNOSRC: Generated from by configure */" >>$ERRNOSRC
echo "" >>$ERRNOSRC
echo "static const errorsymboltable_t errnosymbolv[] = {" >>$ERRNOSRC
changequote([, ])dnl

#generic list
for errno in $ERRNOVALS; do
    echo "   { \"$errno\",	$errno	}," >>$ERRNOSRC
done

#keyword alias list
maxaliaslen=0 #highest number of values for an alias

#errno values that can match 'no-route' keyword (if found on platform)
ERRNO_NOROUTE="ENETUNREACH EHOSTUNREACH ENETDOWN ETIMEDOUT"
keyword="no-route"
keycnt=0
for keyval in ${ERRNO_NOROUTE}; do
    for errno in $ERRNOVALS; do
	if test x"$keyval" = x"$errno"; then
	    echo "   { \"$keyword\",	$errno	}," >>$ERRNOSRC
	    keycnt=`expr $keycnt + 1`
	fi
    done
done

#any-error; alias for all values
keyword="system-any"
keycnt=0
for errno in $ERRNOVALS; do
    echo "   { \"$keyword\",	$errno	}," >>$ERRNOSRC
    keycnt=`expr $keycnt + 1`
done

if test $keycnt -gt $maxaliaslen; then
    maxaliaslen=$keycnt
fi

echo "};" >>$ERRNOSRC

AC_DEFINE_UNQUOTED(MAX_ERRNO_VALUES_FOR_SYMBOL, $maxaliaslen,
    [Max number of errno values matching any alias keyword])


#generate list of getaddrinfo errors
cp /dev/null $ERRVALFILE
unset GAIERRVALS
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_ADDRFAMILY)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_AGAIN)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADFLAGS)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADHINTS)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_FAIL)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_FAMILY)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_MEMORY)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NODATA)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NONAME)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_OVERFLOW)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_PROTOCOL)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SERVICE)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SOCKTYPE)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_SYSTEM)

L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_ALLDONE)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_CANCELED)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_IDN_ENCODE)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_INPROGRESS)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_INTR)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_NOTCANCELED)
L_CHECKGAIERROR(GAIERRVALS, $ERRVALFILE, EAI_BADEXTFLAGS)

if test x"$GAIERRVALS" = x; then
    AC_MSG_FAILURE([error: no getaddrinfo() error symbols found])
fi
ERRNOCNT=`echo $GAIERRVALS | wc -w | awk '{ print $1 }'`

AC_MSG_CHECKING([getaddrinfo() error symbols])
unset UNIQUEVALS UNIQUESYMBOLS
if test -s $ERRVALFILE; then
    UNIQUEVALS=`sort $ERRVALFILE | uniq | wc -l | awk '{ print $1 }'`
    if test $UNIQUEVALS -le 1; then
        AC_MSG_FAILURE([error: getaddrinfo() error value count too low])
    fi
    UNIQUESYMBOLS=`cat $ERRVALFILE | wc -l | awk '{ print $1 }'`
    if test $UNIQUESYMBOLS -le 1; then
        AC_MSG_FAILURE([error: getaddrinfo() error symbol count too low])
    fi

    if test $ERRNOCNT -ne $UNIQUESYMBOLS; then
	AC_MSG_FAILURE([internal error: errno symbol count mismatch])
    fi
    AC_DEFINE_UNQUOTED(UNIQUE_GAIERR_VALUES, $UNIQUEVALS,
	[Number of unique getaddrinfo() error numbers])
    AC_MSG_RESULT([unique symbols: $UNIQUESYMBOLS, unique values: $UNIQUEVALS])
else
    AC_MSG_FAILURE([error: unable to determine getaddrinfo() error symbol values])
fi

changequote(<<, >>)dnl
echo "" >>$ERRNOSRC
echo "static const errorsymboltable_t gaierrsymbolv[] = {" >>$ERRNOSRC
changequote([, ])dnl

#generic list
for errno in $GAIERRVALS; do
    echo "   { \"$errno\",	$errno	}," >>$ERRNOSRC
done

#keyword alias list
maxaliaslen=0 #highest number of values for an alias

#error values that can match 'foo' keyword (if found on platform)
ERRNO_foo="..."
keyword="foo"
keycnt=0
for keyval in ${ERRNO_foo}; do
    for errno in $GAIERRVALS; do
	if test x"$keyval" = x"$errno"; then
	    echo "   { \"$keyword\",	$errno	}," >>$ERRNOSRC
	    keycnt=`expr $keycnt + 1`
	fi
    done
done

#any-error; alias for all values
keyword="dns-any"
keycnt=0
for errno in $GAIERRVALS; do
    echo "   { \"$keyword\",	$errno	}," >>$ERRNOSRC
    keycnt=`expr $keycnt + 1`
done

if test $keycnt -gt $maxaliaslen; then
    maxaliaslen=$keycnt
fi

echo "};" >>$ERRNOSRC

AC_DEFINE_UNQUOTED(MAX_GAIERR_VALUES_FOR_SYMBOL, $maxaliaslen,
    [Max number of gataddrinfo() error values matching any alias keyword])
rm -f $ERRVALFILE

LittleDemon - FACEBOOK
[ KELUAR ]