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

MACHINE=`uname -m`
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([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([../c++/Makefile])

AC_CONFIG_HEADERS(config.h)
AC_OUTPUT
