AC_INIT([pfring.c], 1.0)

AC_PROG_CC
AC_CONFIG_FILES(Makefile)

AC_CHECK_HEADERS([linux/net_tstamp.h librdi.h])

CFLAGS=""
SYS_LIBS=""

GCC_VERSION=`$CC --version |grep ^gcc |sed 's/^.* //g'`
if test -n "$GCC_VERSION"; then
  ARCH=`uname -m`
  if test "$ARCH" = "x86_64"; then
    GCCMAJOR=`echo $GCC_VERSION |cut -d'.' -f1`
    GCCMINOR=`echo $GCC_VERSION |cut -d'.' -f2`
    if test "$GCCMAJOR" -eq 4 && test "$GCCMINOR" -ge 6; then
      CPUSSE42=`grep -m 1 flags /proc/cpuinfo | grep -o sse4_2`
      if test "$CPUSSE42" = "sse4_2"; then
        CPUAVX=`grep -m 1 flags /proc/cpuinfo | grep -o avx`
        if test "$CPUAVX" = "avx"; then
          CFLAGS="-march=corei7-avx -mtune=corei7-avx $CFLAGS"
          LIBARCH="_corei7-avx"
	else
          CFLAGS="-march=corei7 -mtune=corei7 $CFLAGS"
          LIBARCH="_corei7"
        fi
      fi
    fi
  fi
fi

if test -z "$MACHINE"; then
  MACHINE=`uname -m`
fi
ZERO_LIB="libs/libpfring_zero_$MACHINE$LIBARCH.a"
DNA_LIB="libs/libpfring_dna_$MACHINE$LIBARCH.a"
VIRTUAL_LIB="libs/libpfring_mod_virtual_$MACHINE.a"
VIRTUAL_HDR="pfring_mod_virtual.h"

dnl> Check for a modern pthread library
AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np]))

if test "x$ac_cv_lib_pthread_pthread_setaffinity_np" = xyes; then :
AC_MSG_CHECKING([Zero support])
if test -f $ZERO_LIB; then
  HAVE_ZERO="-D HAVE_ZERO"
  ZERO_OBJS=`ar t $ZERO_LIB | grep -F .o | tr '\n' ' '`
  ZERO_DEP="extract_zero_lib"
  AC_MSG_RESULT(yes)
else
  ZERO_LIB=""
  AC_MSG_RESULT(no)
fi

dnl> R/W locks are broken on some BSD releases
if test "$IS_FREEBSD" != "1"; then
AC_MSG_CHECKING([if r/w locks are supported])
AC_TRY_RUN([
#include <pthread.h>

int main()
{
        pthread_rwlock_t t;
        return 0;
}

]
, [ AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(HAVE_RW_LOCK, 1, [pthread has rw locks]) ], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(no)]
)
fi

AC_MSG_CHECKING([DNA support])
if test -f $DNA_LIB; then
  HAVE_DNA="-D HAVE_DNA"
  DNA_OBJS=`ar t $DNA_LIB | tr '\n' ' '`
  DNA_OBJS="pfring_mod_dna.o "$DNA_OBJS
  DNA_DEP="extract_dna_lib"
  AC_MSG_RESULT(yes)
else
  DNA_LIB=""
  AC_MSG_RESULT(no)
fi

AC_MSG_CHECKING([machine name])
AC_MSG_RESULT($(MACHINE))

AC_MSG_CHECKING([Virtual support])
if test -f $VIRTUAL_LIB && test -f $VIRTUAL_HDR; then
  HAVE_VIRTUAL="-D HAVE_VIRTUAL"
  VIRTUAL_OBJS=`ar t $VIRTUAL_LIB | tr '\n' ' '`
  VIRTUAL_DEP="extract_virtual_lib"
  AC_MSG_RESULT(yes)
else
  VIRTUAL_LIB=""
  AC_MSG_RESULT(no)
fi

dnl> end of pthread_setaffinity_np check
fi

AC_CHECK_HEADERS([librdi.h])

dnl> Silicom Redirector NIC - Default enabled
AC_ARG_ENABLE([rdi], AS_HELP_STRING([--disable-rdi], [Disable Silicom Redirector support in PF_RING]))

if test "x$enable_rdi" != "xno"; then :
  if test "x$ac_cv_header_librdi_h" = x""yes; then :
    AC_CHECK_LIB( [rdi], [rdi_init])

    AC_MSG_CHECKING([Silicom Redirector support])
    if test "x$ac_cv_lib_rdi_rdi_init" = x""yes; then :
      HAVE_REDIRECTOR="-D HAVE_REDIRECTOR"
      SILICOM_LIBS="-lrdi"
      AC_MSG_RESULT(yes)
    else
      AC_MSG_RESULT(no)
    fi
  fi
fi

AC_CHECK_LIB([hiredis], [redisCommand])
if test "x$ac_cv_lib_hiredis_redisCommand" = xyes; then :
REDIS_LIB="-lhiredis"
AC_DEFINE_UNQUOTED(HAVE_REDIS, 1, [redis is present])
else
REDIS_LIB=""
fi

AC_CHECK_LIB( [nl], [nl_handle_alloc], [SYSLIBS="$SYSLIBS -lnl"])

AC_CHECK_LIB( [dag], 
              [dag_get_stream_erf_types], 
              [HAVE_DAG="-D HAVE_DAG"; DAG_OBJS="pfring_mod_dag.o"; DAG_LIB="-L/usr/local/lib -ldag"], 
              [], [] )

dnl BPF - Default disabled
dnl AC_ARG_ENABLE([bpf], AS_HELP_STRING([--enable-bpf], [Enable BPF support in PF_RING]))
dnl AS_IF([test "x$enable_bpf" = "xyes"], [HAVE_BPF="-D ENABLE_BPF"; BPF_INCLUDE="-I../libpcap"; BPF_LIB="-L../libpcap -lpcap"])

dnl BPF - Default enabled
AC_ARG_ENABLE([bpf], AS_HELP_STRING([--disable-bpf], [Disable BPF support in PF_RING]))
AS_IF([test "x$enable_bpf" != "xno"], [HAVE_BPF="-D ENABLE_BPF"; BPF_INCLUDE="-I../libpcap"; BPF_LIB="-L../libpcap -lpcap"])

dnl BPF - Dynamic
dnl AC_CHECK_LIB( [pcap], 
dnl               [pcap_compile_nopcap], 
dnl               [HAVE_BPF="-D ENABLE_BPF"], 
dnl               [], [] )

if test "x$ac_cv_header_linux_net_tstamp_h" = x""yes; then :
  HAVE_HW_TIMESTAMP="-D ENABLE_HW_TIMESTAMP"
fi

if test ".${prefix}" = ".NONE"; then
   INSTALL_PREFIX=${ac_default_prefix};
else
   INSTALL_PREFIX=${prefix};
fi

AC_SUBST(CFLAGS)
AC_SUBST(HAVE_ZERO)
AC_SUBST(ZERO_LIB)
AC_SUBST(ZERO_OBJS)
AC_SUBST(ZERO_DEP)
AC_SUBST(HAVE_DNA)
AC_SUBST(DNA_LIB)
AC_SUBST(DNA_OBJS)
AC_SUBST(DNA_DEP)
AC_SUBST(DAG_LIB)
AC_SUBST(HAVE_VIRTUAL)
AC_SUBST(VIRTUAL_LIB)
AC_SUBST(VIRTUAL_OBJS)
AC_SUBST(VIRTUAL_DEP)
AC_SUBST(HAVE_DAG)
AC_SUBST(DAG_OBJS)
AC_SUBST(HAVE_BPF)
AC_SUBST(BPF_INCLUDE)
AC_SUBST(BPF_LIB)
AC_SUBST(REDIS_LIB)
AC_SUBST(SYSLIBS)
AC_SUBST(INSTALL_PREFIX)
AC_SUBST(SILICOM_LIBS)
AC_SUBST(HAVE_REDIRECTOR)
AC_SUBST(HAVE_HW_TIMESTAMP)

dnl> AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([../examples/Makefile])
AC_CONFIG_FILES([../test/Makefile])
AC_CONFIG_FILES([../c++/Makefile])

AC_CONFIG_HEADERS(config.h)
AC_OUTPUT
