AC_INIT([libndpi], [@NDPI_VERSION_SHORT@]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign subdir-objects]) AC_ARG_WITH(llvm_sanitizer, [ --with-llvm-sanitizer Build with support for the LLVM address sanitizer]) AS_IF([test "${with_llvm_sanitizer+set}" = set],[ CFLAGS="${CFLAGS} -g -O2 -Wno-unused-value -fsanitize=address -fno-omit-frame-pointer" LDFLAGS="${LDFLAGS} -fsanitize=address" CC=clang CXX=clang++ ]) LT_INIT AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CXX AC_PROG_CC_STDC AC_LANG_WERROR AX_PTHREAD NDPI_VERSION_SHORT="@NDPI_VERSION_SHORT@" NDPI_MAJOR="@NDPI_MAJOR@" NDPI_MINOR="@NDPI_MINOR@" NDPI_PATCH="@NDPI_PATCH@" AC_DEFINE_UNQUOTED(NDPI_MAJOR_RELEASE, "${NDPI_MAJOR}", [nDPI major release]) AC_DEFINE_UNQUOTED(NDPI_MINOR_RELEASE, "${NDPI_MINOR}", [nDPI minor release]) AC_DEFINE_UNQUOTED(NDPI_PATCH_LEVEL, "${NDPI_PATCH}", [nDPI patch level]) if test -d ".git"; then : GIT_TAG=`git log -1 --format=%h` GIT_DATE=`git log -1 --format=%cd` # # On CentOS 6 `git rev-list HEAD --count` does not work # # GIT_NUM=`git log --pretty=oneline | wc -l | tr -d '[[:space:]]'` GIT_RELEASE="${PACKAGE_VERSION}-${GIT_NUM}-${GIT_TAG}" else GIT_RELEASE="${PACKAGE_VERSION}" GIT_DATE=`date -u -r CHANGELOG.md` fi AC_DEFINE_UNQUOTED(NDPI_GIT_RELEASE, "${GIT_RELEASE}", [GIT Release]) AC_DEFINE_UNQUOTED(NDPI_GIT_DATE, "${GIT_DATE}", [Last GIT change]) AC_CHECK_HEADERS([netinet/in.h stdint.h stdlib.h string.h unistd.h]) ADDITIONAL_LIBS= PCAP_HOME=$HOME/PF_RING/userland DPDK_TARGET= if test -d $HOME/DPDK; then : echo "Enabling DPDK support in ndpiReader" DPDK_TARGET=dpdk else echo "DPDK support disabled (missing $HOME/DPDK)" fi if test -d $PCAP_HOME; then : echo -n "" else PCAP_HOME=`pwd`/../../PF_RING/userland fi SHORT_MACHINE=`uname -m | cut -b1-3` if test $SHORT_MACHINE = "arm"; then LIBNUMA="" else AC_CHECK_LIB([numa], [numa_available], [LIBNUMA="-lnuma"]) fi MACHINE=`uname -m` SYSTEM=`uname -s` if test $SYSTEM = "Darwin"; then CC=clang fi CUSTOM_NDPI= if test -d ../nDPI-custom; then : CUSTOM_NDPI="-DCUSTOM_NDPI_PROTOCOLS" AC_MSG_RESULT([Compiling with custom nDPI protocols]) fi AC_ARG_WITH(hyperscan, [ --with-hyperscan Enable nDPI build with Intel Hyperscan]) AS_IF([test "${with_hyperscan+set}" = set],[ BKP=$LIBS LIBS="$LIBS -lstdc++ -lm" AC_CHECK_LIB([hs], [hs_compile_multi], AC_DEFINE_UNQUOTED(HAVE_HYPERSCAN, 1, [Intel Hyperscan is present])) LIBS=$BKP AS_IF([test "x$ac_cv_lib_hs_hs_compile_multi" = xyes],[ AC_CHECK_LIB([m], [pow]) AC_CHECK_LIB([stdc++], [main]) PKG_CHECK_MODULES([HS],[libhs]) LDFLAGS="$LDFLAGS $HS_LIBS" AC_MSG_RESULT([compiling with Intel Hyperscan]) ],[ AC_MSG_RESULT([Intel Hyperscan not found, exiting. See https://github.com/intel/hyperscan/blob/master/doc/dev-reference/getting_started.rst for install/build instructions]) exit 1 ]) ]) case "$host" in *-*-mingw32*|*-*-msys) CFLAGS="${CFLAGS} -DOS_WIN32" LDFLAGS="${LDFLAGS} -lws2_32 -lucrtbase" ;; *) if test -f $PCAP_HOME/libpcap/libpcap.a; then : echo "Using libpcap from $PCAP_HOME" PCAP_INC="-I $PCAP_HOME/libpcap" PCAP_LIB="$PCAP_HOME/libpcap/libpcap.a $PCAP_HOME/lib/libpfring.a $LIBNUMA `$PCAP_HOME/lib/pfring_config --libs`" AC_CHECK_LIB([rt], [clock_gettime], [PCAP_LIB="$PCAP_LIB -lrt"]) AC_CHECK_LIB([nl], [nl_handle_alloc], [PCAP_LIB="$PCAP_LIB -lnl"]) # The dlopen() function is in libdl on GLIBC-based systems # and in the C library for *BSD systems AC_CHECK_LIB([dl], [dlopen, dlsym], [DL_LIB="-ldl"],[AC_CHECK_LIB([c], [dlopen, dlsym], [DL_LIB="-lc"],[AC_MSG_ERROR([unable to find the dlopen(), dlsym() functions]) ]) ]) else AC_CHECK_LIB([pcap], [pcap_open_live], [PCAP_LIB="-lpcap"]) if test $ac_cv_lib_pcap_pcap_open_live = "no"; then : echo "" echo "ERROR: Missing libpcap(-dev) library required to compile the example application" echo "ERROR: Please install it and try again" exit fi fi ;; esac AC_ARG_ENABLE([debug-messages], AS_HELP_STRING([--enable-debug-messages], [Define NDPI_ENABLE_DEBUG_MESSAGES=1]), [ AC_DEFINE(NDPI_ENABLE_DEBUG_MESSAGES, 1, [Enable ndpi_debug_messages]) ]) AC_ARG_ENABLE(fuzztargets, AS_HELP_STRING([--enable-fuzztargets], [Enable fuzz targets]),[enable_fuzztargets=$enableval],[enable_fuzztargets=no]) AM_CONDITIONAL([BUILD_FUZZTARGETS], [test "x$enable_fuzztargets" = "xyes"]) AS_IF([test "x$enable_fuzztargets" = "xyes"], [ AC_PROG_CXX AC_LANG_PUSH(C++) tmp_saved_flags=$[]_AC_LANG_PREFIX[]FLAGS AS_IF([test "x$LIB_FUZZING_ENGINE" = "x"], [ LIB_FUZZING_ENGINE=-fsanitize=fuzzer AC_SUBST(LIB_FUZZING_ENGINE) ]) _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $LIB_FUZZING_ENGINE" AC_MSG_CHECKING([whether $CXX accepts $LIB_FUZZING_ENGINE]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include extern "C" int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size); extern "C" int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) { (void)Data; (void)Size; return 0; } ]])], [ AC_MSG_RESULT(yes) has_sanitizefuzzer=yes], [ AC_MSG_RESULT(no) ] ) _AC_LANG_PREFIX[]FLAGS=$tmp_saved_flags AC_LANG_POP() ]) AM_CONDITIONAL([HAS_FUZZLDFLAGS], [test "x$has_sanitizefuzzer" = "xyes"]) AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np])) dnl> PCRE AC_ARG_WITH(pcre, [ --with-pcre Enable nDPI build with libpcre]) if test "${with_pcre+set}" = set; then : AC_CHECK_LIB(pcre, pcre_compile, AC_DEFINE_UNQUOTED(HAVE_PCRE, 1, [libpcre(-dev) is present])) if test "x$ac_cv_lib_pcre_pcre_compile" = xyes; then : ADDITIONAL_LIBS=-lpcre fi fi AC_CONFIG_FILES([Makefile example/Makefile example/Makefile.dpdk tests/Makefile libndpi.pc src/include/ndpi_define.h src/lib/Makefile python/Makefile fuzz/Makefile]) AC_CONFIG_HEADERS(src/include/ndpi_config.h) AC_SUBST(GIT_RELEASE) AC_SUBST(NDPI_MAJOR) AC_SUBST(NDPI_MINOR) AC_SUBST(NDPI_PATCH) AC_SUBST(NDPI_VERSION_SHORT) AC_SUBST(SVN_DATE) AC_SUBST(JSON_C_LIB) AC_SUBST(PCAP_INC) AC_SUBST(PCAP_LIB) AC_SUBST(ADDITIONAL_LIBS) AC_SUBST(DL_LIB) AC_SUBST(DPDK_TARGET) AC_SUBST(HAVE_PTHREAD_SETAFFINITY_NP) AC_SUBST(CUSTOM_NDPI) AC_OUTPUT