# Process this file with autoconf to produce a configure script.
AC_INIT()

# AX_SIZEOF_SOCKFUNC(lowercase_funcname, UPPERCASE_FUNCNAME)
# ---------------------------------------------------------
# checks if the function is present in the netinet/in.h file
# and sets SIZEOF_SOCKFUNC if found
AC_DEFUN([AX_SIZEOF_SOCKFUNC],[
AH_TEMPLATE([LOCAL_SIZEOF_$2],[Define size of $1])
AC_MSG_CHECKING([for LOCAL_SIZEOF_$2])
AC_RUN_IFELSE([
#include "confdefs.h"  
#include "defaults.h"
int   
main()
{
  FILE *FP;
  struct $1 sa;
  long my_family_size = sizeof(sa);
  if (FP = fopen("conftest.data", "w")) {
    (void) fprintf(FP,"%ld\n",my_family_size);
    fclose(FP);
    return 0;
  } else
    return 1;
}],
ac_familysize=`cat conftest.data`
AC_MSG_RESULT([is $ac_familysize])
AC_DEFINE_UNQUOTED([LOCAL_SIZEOF_$2],[$ac_familysize],[define family size]),
AC_MSG_RESULT([not defined])
)])

# AX_CHECK_INCLUDE(include/file.name, INCLUDE_FILE_NAME)
# ---------------------------------------------------------
# checks if the include file is present 
# but does not  check if it is usable
AC_DEFUN([AX_CHECK_INCLUDE],[
  AH_TEMPLATE([HAVE_$2],[Define HAVE_$2 to 1 if '<$1>' is useable.])
  AC_CHECK_HEADER([$1],[
    AC_DEFINE([HAVE_$2],[1],[define available include file])
  ],[],[
#include "confdefs.h"
#include "defaults.h"
])])

# AX_IN_STDLIB(lowercase_funcname, UPPERCASE_FUNCNAME)
# ---------------------------------------------------------
# checks if the function is present in the stdlib.h file
# and sets SIZEOF_SOCKFUNC if found
AC_DEFUN([AX_IN_STDLIB],[
AH_TEMPLATE([HAVE_$2_IN_STDLIB],[Define size of $1])
AC_MSG_CHECKING([for $2 in stdlib.h])
AC_COMPILE_IFELSE([
#include <stdlib.h>
int   
main()
{
    void * mem = malloc(8192);
    return 1;
}],
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED([HAVE_$2_IN_STDLIB],[1],[$2 in <stdlib.h>]),
AC_MSG_RESULT([not defined])
)])

AC_CONFIG_HEADER([config.h])

AC_CANONICAL_HOST
AC_MSG_NOTICE([Checking OS type and VERSION])
my_host_version=`uname -r`

case $host_os in
    alpha*)
	AH_TEMPLATE([__ni_ALPHA],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_ALPHA],[$my_host_version],[OS name defined to version])
	;;
    aix*)
	AH_TEMPLATE([__ni_AIX],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_AIX],[$my_host_version],[OS name defined to version])
	;;
    beos*)
	AH_TEMPLATE([__ni_BEOS],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_BEOS],[$my_host_version],[OS name defined to version])
	;;
    *bsd*)
	AH_TEMPLATE([__ni_BSD],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_BSD],[$my_host_version],[OS name defined to version])
	;;
    cygwin*)
	AH_TEMPLATE([__ni_Cygwin],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Cygwin],[$my_host_version],[OS name defined to version])
	;;
    darwin*)
	AH_TEMPLATE([__ni_Darwin],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Darwin],[$my_host_version],[OS name defined to version])
	;;
    dgux*)
	AH_TEMPLATE([__ni_DGUX],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_DGUX],[$my_host_version],[OS name defined to version])
	;;
    dragonfly*)
	AH_TEMPLATE([__ni_DragonFly],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_DragonFly],[$my_host_version],[OS name defined to version])
	;;
    hpux*)
	AH_TEMPLATE([__ni_HPUX],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_HPUX],[$my_host_version],[OS name defined to version])
	;;
    freebsd*)
	AH_TEMPLATE([__ni_FreeBSD],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_FreeBSD],[$my_host_version],[OS name defined to version])
	;;
    interix*)
	AH_TEMPLATE([__ni_Interix],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Interix],[$my_host_version],[OS name defined to version])
	;;
    irix*)
	AH_TEMPLATE([__ni_IRIX],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_IRIX],[$my_host_version],[OS name defined to version])
	;;
    linux*)
	AH_TEMPLATE([__ni_Linux],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Linux],[$my_host_version],[OS name defined to version])
	;;
    machten*)
	AH_TEMPLATE([__ni_MachTen],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_MachTen],[$my_host_version],[OS name defined to version])
	;;
    mingw*)
	AH_TEMPLATE([__ni_MingW],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_MingW],[$my_host_version],[OS name defined to version])
	;;
    msdos* | go32* | windows*)
	AH_TEMPLATE([__ni_Windows],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Windows],[$my_host_version],[OS name defined to version])
	;;
    netbsd*)
	AH_TEMPLATE([__ni_NetBSD],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_NetBSD],[$my_host_version],[OS name defined to version])
	;;
    next2*)
	AH_TEMPLATE([__ni_Next2],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Next2],[$my_host_version],[OS name defined to version])
	;;
    nextstep*)
	AH_TEMPLATE([__ni_NextStep],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_NextStep],[$my_host_version],[OS name defined to version])
	;;
    openbsd*)
	AH_TEMPLATE([__ni_OpenBSD],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_OpenBSD],[$my_host_version],[OS name defined to version])
	;;
    osf*)
	AH_TEMPLATE([__ni_OSF],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_OSF],[$my_host_version],[OS name defined to version])
	;;
    qnx*)
	AH_TEMPLATE([__ni_QNX4],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_QNX4],[$my_host_version],[OS name defined to version])
	;;
    sco*)
	AH_TEMPLATE([__ni_SCO],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_SCO],[$my_host_version],[OS name defined to version])
	;;
    solaris*)
	AH_TEMPLATE([__ni_SunOS],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_SunOS],[$my_host_version],[OS name defined to version])
	;;
    sunos*)
	AH_TEMPLATE([__ni_SUNOS],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_SUNOS],[$my_host_version],[OS name defined to version])
	;;
    sysv4*)
	AH_TEMPLATE([__ni_SRV4],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_SRV4],[$my_host_version],[OS name defined to version])
	;;
    sysv5uw*)
	AH_TEMPLATE([__ni_Unixware],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Unixware],[$my_host_version],[OS name defined to version])
	;;
    unixware*)
	AC_DEFINE_UNQUOTED([__ni_Unixware],[$my_host_version],[OS name defined to version])
	;;
    ultrix*)
	AH_TEMPLATE([__ni_Ultrix],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Ultrix],[$my_host_version],[OS name defined to version])
	;;
    win32*)
	AH_TEMPLATE([__ni_Win32],[OS name defined to version])
	AC_DEFINE_UNQUOTED([__ni_Win32],[$my_host_version],[OS name defined to version])
	;;
    *)
     echo ""
     echo "*************************************************************"
     echo "configure does not currently recognize your operating system,"
     echo "therefore you must do a manual configuration of:"
     echo "Checking host system type... $host_os"
     echo "Please contact miker@cpan.org"
     echo "including the above 'checking host system type...' line "
     echo "*************************************************************"
     echo ""
     exit;;
esac

AC_MSG_CHECKING([Operating system of this host is])

# Checks for programs.
AC_PROG_CC

# Checks for library functions.
AC_HEADER_STDC

AX_CHECK_INCLUDE([stdio.h],[STDIO_H])
AX_CHECK_INCLUDE([sys/socket.h],[SYS_SOCKET_H])
AX_CHECK_INCLUDE([linux/rtnetlink.h],[LINUX_RTNETLINK_H])
AX_CHECK_INCLUDE([linux/netlink.h],[LINUX_NETLINK_H])
AX_CHECK_INCLUDE([netinet/ip.h],[NETINET_IP_H])

AC_PROG_GCC_TRADITIONAL

AC_FUNC_MALLOC
AC_FUNC_REALLOC
AX_IN_STDLIB([malloc],[MALLOC]);

# Checks for header files.
AX_CHECK_INCLUDE([asm/types.h],[ASM_TYPES_H])
AX_CHECK_INCLUDE([features.h],[FEATURES_H])
AX_CHECK_INCLUDE([sys/param.h],[SYS_PARAM_H])
AX_CHECK_INCLUDE([sys/un.h],[SYS_UN_H])
AX_CHECK_INCLUDE([neteconet/ec.h],[NETECONET_EC_H])
AX_CHECK_INCLUDE([linux/atalk.h],[LINUX_ATALK_H])
AX_CHECK_INCLUDE([netinet/if_fddi.h],[NETINET_IF_FDDI_H])
AX_CHECK_INCLUDE([linux/if_fddi.h],[LINUX_IF_FDDI_H])
AX_CHECK_INCLUDE([linux/if_tr.h],[LINUX_IF_TR_H])
AX_CHECK_INCLUDE([net/if_arp.h],[NET_IF_ARP_H])
AX_CHECK_INCLUDE([linux/if_ether.h],[LINUX_IF_ETHER_H])
AX_CHECK_INCLUDE([endian.h],[ENDIAN_H])
AX_CHECK_INCLUDE([byteswap.h],[BYTESWAP_H])
AX_CHECK_INCLUDE([alloca.h],[ALLOCA_H])
AX_CHECK_INCLUDE([sys/sockio.h],[SYS_SOCKIO_H])
AX_CHECK_INCLUDE([sys/sysctl.h],[SYS_SYSCTL_H])
AX_CHECK_INCLUDE([sys/time.h],[SYS_TIME_H])
AX_CHECK_INCLUDE([sys/module.h],[SYS_MODULE_H])
AX_CHECK_INCLUDE([sys/linker.h],[SYS_LINKER_H])
AX_CHECK_INCLUDE([sys/mac.h],[SYS_MAC_H])
AX_CHECK_INCLUDE([netax25/ax25.h],[NETAX25_AX25_H])
AX_CHECK_INCLUDE([linux/ax25.h],[LINUX_AX25_H])
AX_CHECK_INCLUDE([linux/types.h],[LINUX_TYPES_H])
AX_CHECK_INCLUDE([linux/if_strip.h],[LINUX_IF_STRIP_H])
AX_CHECK_INCLUDE([linux/x25.h],[LINUX_X25_H])
AX_CHECK_INCLUDE([linux/if_arp.h],[LINUX_IF_ARP_H])
AX_CHECK_INCLUDE([sys/ioctl.h],[SYS_IOCTL_H])
AX_CHECK_INCLUDE([libc-internal.h],[LIBC_INTERNAL_H])
AX_CHECK_INCLUDE([signal.h],[SIGNAL_H])
AX_CHECK_INCLUDE([net/if.h],[NET_IF_H])
AX_CHECK_INCLUDE([netatalk/at.h],[NETATALK_AT_H])
AX_CHECK_INCLUDE([net/pfvar.h],[NET_PFVAR_H])
AX_CHECK_INCLUDE([net/if_pfsync.h],[NET_IF_PFSYNC_H])
AX_CHECK_INCLUDE([netpacket/packet.h],[NETPACKET_PACKET_H])
AX_CHECK_INCLUDE([stdbool.h],[STDBOOL_H])
AX_CHECK_INCLUDE([time.h],[TIME_H])
AX_CHECK_INCLUDE([netinet/in.h],[NETINET_IN_H])
AX_CHECK_INCLUDE([net/if_var.h],[NET_IF_VAR_H])
AX_CHECK_INCLUDE([netinet/in_var.h],[NETINET_IN_VAR_H])
AX_CHECK_INCLUDE([netipx/ipx.h],[NETIPX_IPX_H])
AX_CHECK_INCLUDE([netipx/ipx_if.h],[NETIPX_IPX_IF_H])
AX_CHECK_INCLUDE([net/if_dl.h],[NET_IF_DL_H])
AX_CHECK_INCLUDE([net/if_types.h],[NET_IF_TYPES_H])
AX_CHECK_INCLUDE([net/route.h],[NET_ROUTE_H])
AX_CHECK_INCLUDE([netinet/ether.h],[NETINET_ETHER_H])
AX_CHECK_INCLUDE([netinet/if_ether.h],[NETINET_IF_ETHER_H])
AX_CHECK_INCLUDE([linux/if_slip.h],[LINUX_IF_SLIP_H])
AX_CHECK_INCLUDE([ctype.h],[CTYPE_H])
AX_CHECK_INCLUDE([netinet/ip_carp.h],[NETINET_IP_CARP_H])
AX_CHECK_INCLUDE([net/if_media.h],[NET_IF_MEDIA_H])
AX_CHECK_INCLUDE([net80211/ieee80211.h],[NET80211_IEEE80211_H])
AX_CHECK_INCLUDE([net80211/ieee80211_crypto.h],[NET80211_IEEE80211_CRYPTO_H])
AX_CHECK_INCLUDE([net80211/ieee80211_ioctl.h],[NET80211_IEEE80211_IOCTL_H])
AX_CHECK_INCLUDE([net/if_lagg.h],[NET_IF_LAGG_H])
AX_CHECK_INCLUDE([net/if_vlan_var.h],[NET_IF_VLAN_VAR_H])
AX_CHECK_INCLUDE([net/ethernet.h],[NET_ETHERNET_H])
AX_CHECK_INCLUDE([ifaddrs.h],[IFADDRS_H])
AX_CHECK_INCLUDE([netdb.h],[NETDB_H])
AX_CHECK_INCLUDE([netinet6/nd6.h],[NETINET6_ND6_H])
AX_CHECK_INCLUDE([stdarg.h],[STDARG_H])
AX_CHECK_INCLUDE([net80211/ieee80211_freebsd.h],[NET80211_IEEE80211_FREEBSD_H])
AX_CHECK_INCLUDE([linux/rose.h],[LINUX_ROSE_H])
AX_CHECK_INCLUDE([fcntl.h],[FCNTL_H])
AX_CHECK_INCLUDE([malloc.h],[MALLOC_H])
AX_CHECK_INCLUDE([arpa/inet.h],[ARPA_INET_H])

# additional headers
AX_CHECK_INCLUDE([sys/dlpi.h],[SYS_DLPI_H])
AX_CHECK_INCLUDE([stropts.h],[STROPTS_H])
AX_CHECK_INCLUDE([net/nit_if.h],[NET_NIT_IF_H])
AX_CHECK_INCLUDE([netio.h],[NETIO_H])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_TYPE_INT8_T
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_UINT8_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_CHECK_TYPES([caddr_t])

AH_TEMPLATE([LIBS],[Extra libraries needed for this build])
AC_CHECK_FUNCS([memcmp memset memcpy bzero getpagesize memmove getnameinfo])

# my additions
AC_C_BIGENDIAN
AC_CHECK_SIZEOF([uint8_t])
AC_CHECK_SIZEOF([uint16_t])
AC_CHECK_SIZEOF([uint32_t])
AC_CHECK_SIZEOF([uint64_t])
AC_CHECK_SIZEOF([u_int8_t])
AC_CHECK_SIZEOF([u_int16_t])
AC_CHECK_SIZEOF([u_int32_t])
AC_CHECK_SIZEOF([u_int64_t])


AH_TEMPLATE([LOCAL_SIZEOF_POINTER],[Define size of pointer])
AC_MSG_CHECKING([for size of pointer])
AC_RUN_IFELSE([
#include "confdefs.h"  
#include "defaults.h"
int   
main()
{
  FILE *FP;
  long my_pointer_size = sizeof(char *);
  if (FP = fopen("conftest.data", "w")) {
    (void) fprintf(FP,"%ld\n",my_pointer_size);
    fclose(FP);
    return 0;
  } else
    return 1;
}],
# action if true
ac_pointersize=`cat conftest.data`
AC_MSG_RESULT([is $ac_pointersize])
AC_DEFINE_UNQUOTED([LOCAL_SIZEOF_POINTER],[$ac_pointersize],[define pointer size]),[
AC_MSG_RESULT([not defined])
# no action if false
])



AC_MSG_CHECKING([for PAGE_SIZE])
AC_RUN_IFELSE([
/* INPUT */
#include "confdefs.h"
#include "defaults.h"
int   
main()
{
#ifdef PAGE_SIZE
  return 0;
#else
  return 1;
#endif   
}],[
# ACTION IF TRUE
# page size is defined
    AC_MSG_RESULT([defined])],[
# ACTION IF FALSE
# page size is not define, run test
    AC_MSG_NOTICE([not defined, trying equivalent...])
    AC_RUN_IFELSE([
/*  INPUT 2 */
#   include "confdefs.h"
#   include "defaults.h"
    int
    main()
    {
      FILE *FP;
      long my_pagesize;
#   if defined (HAVE_UNISTD_H) && (defined(_SC_PAGESIZE) || defined(_SC_PAGE_SIZE) || defined(_SC_MMAP_PAGE_SIZE))
#	if defined(_SC_PAGESIZE)
	  my_pagesize = sysconf(_SC_PAGESIZE);
#	elif defined(_SC_PAGE_SIZE)
	  my_pagesize = sysconf(_SC_PAGE_SIZE);
#	else
	  my_pagesize = sysconf(_SC_MMAP_PAGE_SIZE);
#	endif
#   elif defined HAVE_GETPAGESIZE
      my_pagesize = getpagesize();
#   elif defined(PAGESIZE)
      my_pagesize = PAGESIZE;
#   else
      my_pagesize = 0;
#   endif

      if (FP = fopen("conftest.data", "w")) {
	(void) fprintf(FP,"%ld\n",my_pagesize);
	fclose(FP);
	if (my_pagesize != 0)
	  return 0;
	else
	  return 1;
	}
      return 1;
    }
    ],[
 #  ACTION IF TRUE 2
# managed to find page size, define it in our config file
    ac_pagesize=`cat conftest.data`
    AC_MSG_RESULT([found page size = $ac_pagesize])
    if test $ac_pagesize -gt 0; then
	AC_MSG_RESULT([define PAGE_SIZE $ac_pagesize])
	AC_DEFINE_UNQUOTED([PAGE_SIZE], [$ac_pagesize],[define PAGE_SIZE for this operating system])
    else
 # UGH! could not find a page size definition
	AC_MSG_ERROR([Could not find PAGE_SIZE for this OS])
    fi
    ],[
 #  ACTION IF FALSE 2
    AC_MSG_ERROR([Could not determine PAGE_SIZE for this OS])
    ])]
)

AH_TEMPLATE([HAVE_SOCKET],[Define to 1 if function 'socket' is present])
AC_SEARCH_LIBS([socket],[socket],[
	AC_DEFINE([HAVE_SOCKET])])

AH_TEMPLATE([HAVE_LINK_NTOA],[Define to 1 if function 'link_ntoa' is present])
AC_SEARCH_LIBS([link_ntoa],[socket],[
	AC_DEFINE([HAVE_LINK_NTOA])],[],[-lnsl])

AH_TEMPLATE([HAVE_INET_ATON],[Define to 1 if function 'inet_aton' is present])
AC_SEARCH_LIBS([inet_aton],[socket],[
	AC_DEFINE([HAVE_INET_ATON])],[],[-lnsl])

AH_TEMPLATE([HAVE_INET_PTON],[Define to 1 if function 'inet_pton' is present])
AC_SEARCH_LIBS([inet_pton],[socket],[
	AC_DEFINE([HAVE_INET_PTON])],[],[-lnsl])

AH_TEMPLATE([HAVE_INET_ADDR],[Define to 1 if function 'inet_addr' is present])
AC_SEARCH_LIBS([inet_addr],[socket],[
	AC_DEFINE([HAVE_INET_ADDR])],[],[-lnsl])

AH_TEMPLATE([HAVE_PCAP],[Define to 1 if pcap lib is present])
AC_SEARCH_LIBS([pcap_close],[pcap],[
	AC_DEFINE([HAVE_PCAP])],[],[$LDDLFLAGS])

AC_CHECK_TYPES([struct ifaddrs, struct ifreq, struct if_laddrreq, struct if_data, struct in6_ifreq, struct if_data, struct ifdevea],[],[],[
#include "confdefs.h"
#include "defaults.h"
])


AH_TEMPLATE([NI_LIFREQ_PAD],[Define to size of struct lifreq - struct nifreq])
AH_TEMPLATE([NI_LIFREQ_OFFSET],[Define union offset from start of lifreq])
AC_CHECK_TYPES([struct lifreq],[
	AC_MSG_CHECKING([for sizeof lifreq - nifreq])
	AC_RUN_IFELSE([
#include "confdefs.h"  
#include "defaults.h"
int   
main()
{
  FILE *FP;
  struct lifreq lifr;
  int diffsize = sizeof(lifr.lifr_lifru) + sizeof(lifr.lifr_lifru1) + sizeof(uint_t) + LIFNAMSIZ - IFNAMSIZ;
  if (FP = fopen("conftest.data", "w")) {
    (void) fprintf(FP,"%d\n",diffsize);
    fclose(FP);
    return 0;
  } else
    return 1;
}	],
# action if true
ac_lifreqpad=`cat conftest.data`
	AC_MSG_RESULT([is $ac_lifreqpad])
	AC_DEFINE_UNQUOTED([NI_LIFREQ_PAD],[$ac_lifreqpad],[define lifreq pad size]),[
	AC_MSG_RESULT([not defined])
	])
	AC_MSG_CHECKING([for lifreq union offset])
	AC_RUN_IFELSE([
#include "confdefs.h"  
#include "defaults.h"
int   
main()
{
  FILE *FP;
  struct lifreq lifr;
  int offset = LIFNAMSIZ - IFNAMSIZ + sizeof(lifr.lifr_lifru1) + sizeof(uint_t);
  if (FP = fopen("conftest.data", "w")) {
    (void) fprintf(FP,"%d\n",offset);
    fclose(FP);
    return 0;
  } else
    return 1;
}	],
# action if true
ac_lifreqoffset=`cat conftest.data`
	AC_MSG_RESULT([is $ac_lifreqoffset])
	AC_DEFINE_UNQUOTED([NI_LIFREQ_OFFSET],[$ac_lifreqoffset],[define lifreq union offset]),[
	AC_MSG_RESULT([not defined])
# action if false
	])
],[
	AC_DEFINE_UNQUOTED([NI_LIFREQ_OFFSET],[0],[define lifreq union offset])
],[               
#include "confdefs.h"
#include "defaults.h"
])

# we do not want multiple thread libraries included as
# extra LIBS so nest thread checks
AC_CHECK_HEADER([pthread.h],[
	AC_DEFINE([HAVE_PTHREAD_H],[1],[Define to 1 if you have <pthread.h>.])
	AC_SEARCH_LIBS([pthread_mutex_init],[pthreads],[],[])
	AC_MSG_NOTICE([...have pthreads, do not check for thread.h])],[
        AC_CHECK_HEADER([thread.h],[
	AC_DEFINE([HAVE_THREAD_H],[1],[Define to 1 if you have <thread.h>.])
	AC_SEARCH_LIBS([mutex_init],[thread],[],[])]
	)
])



AC_SEARCH_LIBS([ioctl],[],[])

AH_TEMPLATE([HAVE_SA_LEN],[Define to 1 if sockaddr has member 'sa_len'])
AC_CHECK_MEMBER([struct sockaddr.sa_len], [
	AC_DEFINE([HAVE_SA_LEN])],[],[
#include "confdefs.h"
#include "defaults.h"
])

AH_TEMPLATE([HAVE_SIN6_SCOPEID],[Define to 1 if sockaddr_in6 has member 'sin6_scopeid'])
AC_CHECK_MEMBER([struct sockaddr_in6.sin6_scopeid], [
	AC_DEFINE([HAVE_SIN6_SCOPEID])],[],[
#include "confdefs.h"
#include "defaults.h"
])
# add socket families as they are identified

AX_SIZEOF_SOCKFUNC([sockaddr],[SOCKADDR])
AX_SIZEOF_SOCKFUNC([sockaddr_storage],[SOCKADDR_STORAGE])
AX_SIZEOF_SOCKFUNC([sockaddr_in],[SOCKADDR_IN])
AX_SIZEOF_SOCKFUNC([sockaddr_at],[SOCKADDR_AT])
AX_SIZEOF_SOCKFUNC([sockaddr_ash],[SOCKADDR_ASH])
AX_SIZEOF_SOCKFUNC([sockaddr_ax25],[SOCKADDR_AX25])
AX_SIZEOF_SOCKFUNC([sockaddr_x25],[SOCKADDR_X25])
AX_SIZEOF_SOCKFUNC([sockaddr_ec],[SOCKADDR_EC])
AX_SIZEOF_SOCKFUNC([sockaddr_in6],[SOCKADDR_IN6])
AX_SIZEOF_SOCKFUNC([sockaddr_ipx],[SOCKADDR_IPX])
AX_SIZEOF_SOCKFUNC([sockaddr_un],[SOCKADDR_UN])
AX_SIZEOF_SOCKFUNC([sockaddr_ll],[SOCKADDR_LL])
AX_SIZEOF_SOCKFUNC([sockaddr_rose],[SOCKADDR_ROSE])
AX_SIZEOF_SOCKFUNC([sockaddr_dl],[SOCKADDR_DL])
AX_SIZEOF_SOCKFUNC([sockaddr_eon],[SOCKADDR_EON])
AX_SIZEOF_SOCKFUNC([sockaddr_inarp],[SOCKADDR_INARP])
AX_SIZEOF_SOCKFUNC([sockaddr_iso],[SOCKADDR_ISO])
AX_SIZEOF_SOCKFUNC([sockaddr_ns],[SOCKADDR_NS])
AX_SIZEOF_SOCKFUNC([sockaddr_atm],[SOCKADDR_ATM])
AX_SIZEOF_SOCKFUNC([sockaddr_dn],[SOCKADDR_DECnet])
AX_SIZEOF_SOCKFUNC([sockaddr_tp],[SOCKADDR_TP])
AX_SIZEOF_SOCKFUNC([sockaddr_ositp],[SOCKADDR_OSITP])    

AC_CONFIG_COMMANDS_PRE([
	if test "$LIBS" != ""; then
	AC_DEFINE_UNQUOTED([LIBS],[$LIBS],[Extra libraries])
	fi
])

AC_OUTPUT