dnl $id $ dnl Hammerhead autoconf stuff dnl Process this file with autoconf to produce a configure script. AC_REVISION($Revision: 1.3 $)dnl AC_INIT(hammer.mk.in) AC_CONFIG_HEADER(config.h) AC_CANONICAL_SYSTEM dnl first of all; check for gmake AC_PATH_PROG(ac_cv_gmake, gmake, no, $PATH:/bin:/usr/bin:/usr/local/bin) if test $ac_cv_gmake = no ; then MAKE=make AC_SUBST(MAKE) AC_MSG_WARN([gmake not found, will try to use: make]) else MAKE=gmake AC_SUBST(MAKE) fi dnl work out who the cpu, vendor and OS are AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu") AC_DEFINE_UNQUOTED(TARGET_VENDOR, "$target_vendor") AC_DEFINE_UNQUOTED(TARGET_OS, "$target_os") AC_DEFINE_UNQUOTED(CPU_VENDOR_OS, "$target") dnl System properties case "$target_os" in *freebsd*) AC_DEFINE(BSD) AC_DEFINE(USE_BPF) TARGET_OS=FreeBSD AC_SUBST(TARGET_OS) ;; *linux*) AC_DEFINE(LINUX) AC_DEFINE(USE_IFALIAS) AC_DEFINE(USE_SOCKET) dnl SHOULD DO A BETTER TEST FOR THIS !! AC_DEFINE(BROKEN_CMSG_FIELDS) TARGET_OS=Linux AC_SUBST(TARGET_OS) ;; *solaris*) AC_DEFINE(SOLARIS) AC_DEFINE(USE_IFALIAS) AC_DEFINE(USE_DLPI) TARGET_OS=SunOS AC_SUBST(TARGET_OS) ;; *cygwin*) TARGET_OS=Cygwin AC_SUBST(TARGET_OS) ;; *) AC_MSG_ERROR("Unable to determine if separate interfaces required for alias") ;; esac AC_PATH_PROG(ac_cv_route, route, no, $PATH:/sbin:/usr/sbin:/usr/local/sbin) if test $ac_cv_route = no ; then AC_MSG_ERROR("route not found") else AC_DEFINE_UNQUOTED(ROUTE, "$ac_cv_route") fi dnl Checks for library functions. AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_GCC_TRADITIONAL AC_FUNC_VPRINTF AC_CHECK_FUNCS(socket) dnl Checks for libraries. AC_CHECK_LIB(nsl, t_open) AC_CHECK_LIB(socket, socket) dnl dnl crypto also needs openSSL/ssleay dnl dnl OpenSSL stuff SSL_INCLUDE= SSL_LIB_PATH= SSL_LIB= if test -d ${ERL_TOP}/lib/ssl/usr/ssleay; then SSL_LIB_PATH='-L$(ERL_TOP)/ssl/usr/ssleay/$(TARGET)/lib' SSL_INCLUDE='-I$(ERL_TOP)/lib/ssl/usr/ssleay/include' SSL_LIB="-lssl -lcrypto" AC_SUBST(SSL_INCLUDE) AC_SUBST(SSL_LIB_PATH) AC_SUBST(SSL_LIB) AC_DEFINE(HAVE_SSL) else for dir in /usr /usr/pkg /usr/local /usr/local/ssl /usr/lib/ssl /usr/ssl; do AC_CHECK_HEADER($dir/include/openssl/ssl.h, ac_cv_openssl=yes, ac_cv_openssl=no) if test $ac_cv_openssl = yes ; then SSL_LIB_PATH="-L$dir/lib" SSL_INCLUDE="-I$dir/include/openssl -I$dir/include" SSL_LIB="-lssl -lcrypto" AC_SUBST(SSL_INCLUDE) AC_SUBST(SSL_LIB_PATH) AC_SUBST(SSL_LIB) AC_DEFINE(HAVE_SSL) fi done fi AC_SUBST(SSL_INCLUDE) AC_SUBST(SSL_LIB_PATH) AC_SUBST(SSL_LIB) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(malloc.h sys/ioctl.h unistd.h varargs.h strings.h fcntl.h) AC_CHECK_HEADERS(sys/fcntl.h net/if_packet.h net/if_arp.h net/bpf.h) AC_CHECK_HEADERS(netinet/if_ether.h sys/dlpi.h) dnl Check for functions in header files AC_CACHE_CHECK(for stdlib_malloc{}, ac_cv_have_stdlib_malloc, AC_EGREP_HEADER(malloc, stdlib.h, ac_cv_have_stdlib_malloc=yes, ac_cv_have_stdlib_malloc=no)) if test $ac_cv_have_stdlib_malloc = yes ; then AC_DEFINE(STDLIB_MALLOC) fi dnl Check if we have sys_errlist declared AC_CACHE_CHECK(for sys_errlist{}, ac_cv_have_sys_errlist, AC_EGREP_HEADER(sys_errlist, stdio.h, ac_cv_have_sys_errlist=yes, ac_cv_have_sys_errlist=no)) if test $ac_cv_have_sys_errlist = yes ; then AC_DEFINE(HAVE_SYS_ERRLIST) fi dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_T_CHECK(int8_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(u_int8_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(int16_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(u_int16_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(int32_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(u_int32_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(int64_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(u_int64_t, sys/types.h, SYS_TYPES_H) dnl AC_TYPE_T_CHECK(caddr_t, sys/types.h, SYS_TYPES_H) dnl dnl Steven's suggests you check here on SunOS 4.1.x AC_TYPE_T_CHECK(int8_t, sys/bitypes.h, SYS_BITYPES_H) dnl AC_TYPE_BASE(BIT8, '1') dnl AC_TYPE_BASE(BIT16, '2') dnl AC_TYPE_BASE(BIT32, '4') dnl AC_TYPE_BASE(BIT64, '8') dnl dnl structures AC_STRUCT_CHECK(sockaddr, sys/socket.h, SYS_SOCKET_H) AC_STRUCT_CHECK(in_addr, netinet/in.h, NETINET_IN_H) AC_STRUCT_CHECK(sockaddr_in, netinet/in.h, NETINET_IN_H) AC_STRUCT_CHECK(arpreq, net/if_arp.h, NET_IF_ARP_H) AC_STRUCT_CHECK(ether_header, net/ethernet.h, NET_ETHERNET_H) AC_STRUCT_CHECK(ether_header, sys/ethernet.h, SYS_ETHERNET_H) AC_STRUCT_CHECK(ethhdr, net/ethernet.h, NET_ETHERNET_H) dnl Solaris 2.6 lies ... it doesn't really support sockaddr_dl and if_ether is dnl broken case "$target_os" in *solaris*) ;; *) AC_STRUCT_CHECK(sockaddr_dl, net/if_dl.h, NET_IF_DL_H) AC_STRUCT_CHECK(sockaddr_dl, net/if_dl.h, HAVE_sockaddr_dl) AC_STRUCT_CHECK(ether_header, netinet/if_ether.h, NETINET_IF_ETHER_H) ;; esac dnl defines AC_DEFINE_CHECK(ETHER_ADDR_LEN, net/ethernet.h, NET_ETHERNET_H) AC_DEFINE_CHECK(ETHERADDRL, sys/ethernet.h, SYS_ETHERNET_H) AC_DEFINE_CHECK(SIOCGIFCONF, sys/sockio.h, SYS_SOCKIO_H) AC_DEFINE_CHECK(SIOCGIFHWADDR, sys/sockio.h, SYS_SOCKIO_H) AC_DEFINE_CHECK(SIOCGIFHWADDR, sys/socketio.h, SYS_SOCKETIO_H) AC_DEFINE_CHECK(SIOCGIFHWADDR, linux/sockios.h, LINUX_SOCKIOS_H) AC_DEFINE_CHECK(SIOCGARP, sys/sockio.h, SYS_SOCKIO_H) AC_DEFINE_CHECK(DLIOCRAW, sys/dlpi.h, SYS_DLPI_H) dnl fields in structures dnl Check if sockaddr{} has sa_len member. dnl AC_CACHE_CHECK(if sa_len_in_sockaddr{}, ac_cv_sockaddr_has_sa_len, AC_TRY_COMPILE([ # include # include ], [unsigned int i = sizeof(((struct sockaddr *)0)->sa_len)], ac_cv_sockaddr_has_sa_len=yes, ac_cv_sockaddr_has_sa_len=no)) if test $ac_cv_sockaddr_has_sa_len = yes ; then AC_DEFINE(SA_LEN_IN_SOCKADDR) AC_DEFINE(NEED_SYS_TYPES_H) AC_DEFINE(NEED_SYS_SOCKET_H) fi dnl Check if ether_header{} uses ether_addr{}. dnl AC_CACHE_CHECK(if ether_header_uses_ether_addr{}, ac_cv_ether_header_uses_ether_addr, AC_TRY_COMPILE([ # include # include ], [struct ether_addr a; struct ether_header b; a = b.ether_dhost;], ac_cv_ether_header_uses_ether_addr=yes, ac_cv_ether_header_uses_ether_addr=no)) if test $ac_cv_ether_header_uses_ether_addr = yes ; then AC_DEFINE(ETHER_HEADER_USES_ETHER_ADDR) fi dnl CPU_SUP (kernel statistics support) stuff AC_CHECK_HEADER(kstat.h, ac_cv_kstat=yes, ac_cv_kstat=no) if test $ac_cv_kstat = yes ; then CPU_SUP=true AC_SUBST(CPU_SUP) else CPU_SUP=false AC_SUBST(CPU_SUP) fi dnl use pthreads? Processes is better for SMP machines. AC_ARG_WITH(pthreads, --with-pthreads=yes/no pthreads instead of multiple processes (default: no), ac_cv_pthread=yes, ac_cv_pthread=no) if test $ac_cv_pthread = yes ; then AC_DEFINE(USE_PTHREAD) AC_MSG_RESULT([Using pthreads]) else AC_MSG_RESULT([Using multiple processes]) fi AC_OUTPUT(Makefile hammer.mk) case $target_os in *cygwin*) sed -e 's/\/\/\([[a-zA-Z]]\)/\1:/' < hammer.mk > hammer.mk.tmp mv hammer.mk.tmp hammer.mk sed -e 's/\/\/\([[a-zA-Z]]\)/\1:/' < makefile > makefile.tmp mv makefile.tmp makefile ;; esac