<NME> configure.ac
<BEF> AC_INIT([yara], [4.2.1], [vmalvarez@virustotal.com])

AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR([cli/yara.c])

AC_CONFIG_AUX_DIR([build-aux])

AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])

AC_CONFIG_MACRO_DIR([m4])

# AC_PROG_CC sets CFLAGS to "-g -O2" if it wasn't previously set. Let's set
# an empty CFLAGS.
: ${CFLAGS=""}

no_std_allocator="-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"

# automake 1.12 seems to require AM_PROG_AR, but automake 1.11 doesn't
# recognize it.
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])

AC_PROG_CC
AC_PROG_CC_C99
AM_PROG_CC_C_O
AM_PROG_LEX
AC_PROG_YACC

# If the C compiler supports the keyword inline, do nothing. Otherwise define
# inline to __inline__ or __inline if it accepts one of those, otherwise define
# inline to be empty.
AC_C_INLINE
# Defines WORDS_BIGENDIAN if building in a big-endian host.
AC_C_BIGENDIAN

# Arrange for 64-bit file offsets.
AC_SYS_LARGEFILE

LT_INIT
AC_CANONICAL_HOST

case $host_alias in
     i?86-*-mingw*) CFLAGS="$CFLAGS -D__MINGW_USE_VC2005_COMPAT" ;;
esac

case $host_os in
    darwin*) CFLAGS="$CFLAGS -I/opt/local/include"
             # Starting with Mac OS X 10.11 (El Capitan) the OpenSSL headers
             # are in /usr/local/opt/openssl/include
             CFLAGS="$CFLAGS -DUSE_MACH_PROC -I/usr/local/opt/openssl/include"
             LDFLAGS="$LDFLAGS -L/usr/local/opt/openssl/lib"
             posix=true
             proc_interface=mach
             jemalloc_prefix=je_ ;;
    mingw*|cygwin*) CFLAGS="$CFLAGS -DUSE_WINDOWS_PROC"
            proc_interface=windows
            jemalloc_prefix= ;;
    linux*|netbsd*|dragonfly*|kfreebsd*)
            CFLAGS="$CFLAGS -DUSE_LINUX_PROC"
            posix=true
            proc_interface=linux
            jemalloc_prefix= ;;
    freebsd*)
            CFLAGS="$CFLAGS -DUSE_FREEBSD_PROC"
            posix=true
            proc_interface=freebsd
            jemalloc_prefix= ;;
    openbsd*)
            CFLAGS="$CFLAGS -DUSE_OPENBSD_PROC"
            CFLAGS="$CFLAGS -I/usr/local/include -L/usr/local/lib"
            posix=true
            proc_interface=openbsd
            jemalloc_prefix= ;;
    *)
            CFLAGS="$CFLAGS -DUSE_NO_PROC"
            proc_interface=none
            jemalloc_prefix= ;;
esac

ACX_PTHREAD(
    [LIBS="$PTHREAD_LIBS $LIBS"
     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
     CC="$PTHREAD_CC"],
    [AC_MSG_ERROR([pthread API support is required.])])

AC_CHECK_LIB(m, isnan)
AC_CHECK_LIB(m, log2)
AS_IF([test "ac_cv_lib_m_isnan" = yes || test "$ac_cv_lib_m_log2" = yes],
    [PC_LIBS_PRIVATE="$PC_LIBS_PRIVATE -lm"])
AC_CHECK_FUNCS([strlcpy strlcat memmem timegm _mkgmtime clock_gettime])
AC_CHECK_HEADERS([stdbool.h])

AC_ARG_ENABLE([debug],
  [AS_HELP_STRING([--enable-debug], [compiles with -g option])],
  [if test x$enableval = xyes; then
    debug=true
  fi])

AC_ARG_ENABLE([gcov],
  [AS_HELP_STRING([--enable-gcov], [compiles with -O0 -g -ftest-coverage -fprofile-arcs])],
  [if test x$enableval = xyes; then
    gcov=true
  fi])

AC_ARG_ENABLE([optimization],
  [AS_HELP_STRING([--disable-optimization], [disable compiler optimizations with -O0])],
  [if test x$enableval = xyes; then
    optimization=false
  fi],
  [optimization=true])

AC_ARG_ENABLE([address-sanitizer],
  [AS_HELP_STRING([--enable-address-sanitizer], [compiles with -fsanitize=address])],
  [if test x$enableval = xyes; then
    address_sanitizer=true
  fi])

AC_ARG_ENABLE([undefined-behaviour-sanitizer],
  [AS_HELP_STRING([--enable-undefined-behaviour-sanitizer], [compiles with -fsanitize=undefined])],
  [if test x$enableval = xyes; then
    undefined_behaviour_sanitizer=true
        AC_MSG_WARN([
*******************************************************************************
  Could not find OpenSSL library. The "hash" module and some features in "pe"
  module has been disabled. If you want to enable all features please install
  it and run this script again.
*******************************************************************************
        ])
    CFLAGS="$CFLAGS -DYR_PROFILING_ENABLED"
  fi])

AC_ARG_WITH([debug-verbose],
  [AS_HELP_STRING([--with-debug-verbose=[[NUM]]], [Turn on runtime debugging information])],
  [if test $withval -gt 0; then
    AC_DEFINE_UNQUOTED([YR_DEBUG_VERBOSITY], [$withval])
   else
    AC_MSG_ERROR([debug verbosity must be greater than 0])
  fi])

AC_ARG_ENABLE([cuckoo],
  [AS_HELP_STRING([--enable-cuckoo], [enable cuckoo module])],
  [if test x$enableval = xyes; then
    build_cuckoo_module=true
    AC_CHECK_HEADERS([jansson.h],,
      AC_MSG_ERROR([please install Jansson library]))
    AC_CHECK_LIB(jansson, json_loadb,,
      AC_MSG_ERROR([please install Jansson library]))
    CFLAGS="$CFLAGS -DCUCKOO_MODULE"
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE jansson"
  fi])

AC_ARG_ENABLE([magic],
  [AS_HELP_STRING([--enable-magic], [enable magic module])],
  [if test x$enableval = xyes; then
    build_magic_module=true
    AC_CHECK_HEADERS([magic.h],,
      AC_MSG_ERROR([please install libmagic library]))
    AC_CHECK_LIB(magic, magic_open,,
      AC_MSG_ERROR([please install libmagic library]))
    CFLAGS="$CFLAGS -DMAGIC_MODULE"
    PC_LIBS_PRIVATE="$PC_LIBS_PRIVATE -lmagic"
  fi])

AC_ARG_ENABLE([macho],
  [AS_HELP_STRING([--enable-macho], [enable macho module])],
  [if test x$enableval = xyes; then
    build_macho_module=true
    CFLAGS="$CFLAGS -DMACHO_MODULE"
  fi])

AC_ARG_ENABLE([dex],
  [AS_HELP_STRING([--enable-dex], [enable dex module])],
  [if test x$enableval = xyes; then
    build_dex_module=true
    CFLAGS="$CFLAGS -DDEX_MODULE"
  fi])

AC_ARG_ENABLE([debug-dex],
  [AS_HELP_STRING([--enable-debug-dex], [enable dex module debugging])],
  [if test x$enableval = xyes; then
    debug_dex_module=true
    CFLAGS="$CFLAGS -DDEBUG_DEX_MODULE"
  fi])

AC_ARG_ENABLE([pb-tests],
  [AS_HELP_STRING([--enable-pb-tests], [enable protobuf test module])],
  [if test x$enableval = xyes; then
    build_pb_tests_module=true
    AC_CHECK_PROG(PROTOC, protoc, protoc)
    AS_IF([test "x${PROTOC}" == "x"],
        [AC_MSG_ERROR([protobuf compiler "protoc" not found])])
    # AC_CHECK_PROG(PROTOC_GEN_YARA, protoc-gen-yara, protoc-gen-yara)
    # AS_IF([test "x${PROTOC_GEN_YARA}" == "x"],
    #    [AC_MSG_ERROR([please install https://github.com/VirusTotal/protoc-gen-yara])])
    PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 1.0.0])
    AC_CHECK_LIB([protobuf-c], protobuf_c_message_unpack,,
      AC_MSG_ERROR([please install libprotobuf-c library]))
    CFLAGS="$CFLAGS -DPB_TESTS_MODULE"
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE libprotobuf-c"
  fi])

# "dotnet" module is enabled by default. It can be disabled with --disable-dotnet.
AC_ARG_ENABLE([dotnet],
  [AS_HELP_STRING([--disable-dotnet], [disable dotnet module])],
  [if test x$enableval = xyes; then
        AC_MSG_WARN([
*****************************************************************
  The dotnet module is enabled by default now. No need to specify
  --enable-dotnet. To disable this module please use
  --disable-dotnet.
*****************************************************************
])
    build_dotnet_module=true
    CFLAGS="$CFLAGS -DDOTNET_MODULE"
  else
    build_dotnet_module=false
  fi],
  [
    build_dotnet_module=true
    CFLAGS="$CFLAGS -DDOTNET_MODULE"
  ] )

AC_ARG_WITH([jemalloc],
  [AS_HELP_STRING([--with-jemalloc],
    [use jemalloc to debug heap-related issues])],
  [if test x$withval = xyes; then
    mallctl=mallctl
    malloc_stats_print=malloc_stats_print
    AC_CHECK_LIB(jemalloc, $jemalloc_prefix$mallctl,,
      AC_MSG_ERROR([please install jemalloc library]))
    CFLAGS="$CFLAGS -DJEMALLOC -Dmallctl=$jemalloc_prefix$mallctl -Dmalloc_stats_print=$jemalloc_prefix$malloc_stats_print $no_std_allocator"
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE jemalloc"
  fi])

AC_ARG_WITH([tcmalloc],
  [AS_HELP_STRING([--with-tcmalloc],
    [use tcmalloc as the default heap allocator])],
  [if test x$withval = xyes; then
    if test "x$with_jemalloc" = "xyes"; then
      AC_MSG_ERROR([Cannot compile with both tcmalloc and jemalloc])
    fi
    AC_CHECK_LIB(tcmalloc, tc_cfree,,
      AC_MSG_ERROR([please install https://github.com/gperftools/gperftools]))
    CFLAGS="$CFLAGS -DTCMALLOC $no_std_allocator"
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE tcmalloc"
  fi])

AC_ARG_WITH([cpu-profiler],
  [AS_HELP_STRING([--with-cpu-profiler],
    [compile with CPU profiling support])],
  [if test x$withval = xyes; then
    AC_CHECK_LIB(profiler, ProfilerStart,,
      AC_MSG_ERROR([please install https://github.com/gperftools/gperftools]))
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE libprofiler"
  fi])

AC_ARG_WITH([crypto],
  AS_HELP_STRING([--without-crypto],
    [ignore presence of OpenSSL and disable it]))

AS_IF([test "x$with_crypto" != "xno"],
  [
    AC_CHECK_HEADERS([openssl/md5.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/sha.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/asn1.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/crypto.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/bio.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/pkcs7.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/x509.h],, [have_crypto=no])
    AC_CHECK_HEADERS([openssl/safestack.h],, [have_crypto=no])
    AC_CHECK_LIB(crypto, MD5_Init,, [have_crypto=no])
    AC_CHECK_LIB(crypto, MD5_Update,, [have_crypto=no])
    AC_CHECK_LIB(crypto, MD5_Final,, [have_crypto=no])
    AC_CHECK_LIB(crypto, SHA256_Init,, [have_crypto=no])
    AC_CHECK_LIB(crypto, SHA256_Update,, [have_crypto=no])
    AC_CHECK_LIB(crypto, SHA256_Final,, [have_crypto=no])
  ],
  [
    have_crypto=no
  ])


AS_IF([test "x$have_crypto" = "xno"],
  [
    AS_IF([test "x$with_crypto" = "xyes"],
      [
        AC_MSG_ERROR([please install OpenSSL library])
      ],
      [
        AC_MSG_WARN([

*****************************************************************
  Could not find OpenSSL library. Some features in "pe" module
  have been disabled. If you want to enable all features please
  install OpenSSL and run this script again.
*****************************************************************
])
	      AC_MSG_CHECKING([for Microsoft Crypto API])
        AC_CHECK_HEADERS([wincrypt.h],
          [
	          AC_MSG_RESULT([The "hash" module functions will be provided through the Microsoft Crypto API])
            # FIXME: Add PC_LIBS_PRIVATE entries?
            build_hash_module=true
          ],
          [],
          [#include <windows.h>])
	      AC_MSG_CHECKING([for MacOSX Common Crypto API])
        AC_CHECK_HEADERS([CommonCrypto/CommonCrypto.h],
          [
	          AC_MSG_RESULT([
*****************************************************************
  As an alternative to OpenSSL the "hash" module functions will
  be provided through the MacOSX Common Crypto API.
*****************************************************************
])
            # FIXME: Add PC_LIBS_PRIVATE entries?
            build_hash_module=true
          ])
        AS_IF([test x$build_hash_module = xtrue],
          [
            build_hash_module=true
            CFLAGS="$CFLAGS -DHASH_MODULE"
          ],
          [
            AC_MSG_WARN([

*****************************************************************
  Could not find alternative APIs for hash functions. The "hash"
  module has been disabled.
*****************************************************************
            ])
          ])
      ])
  ],
  [
    build_authenticode_module=true # Authenticode relies on openssl
    build_hash_module=true
    CFLAGS="$CFLAGS -DHASH_MODULE"
    PC_REQUIRES_PRIVATE="$PC_REQUIRES_PRIVATE libcrypto"
  ])



AM_CONDITIONAL([GCC], [test "x$GCC" = xyes])
AM_CONDITIONAL([PROTOC], [test "x${PROTOC}" != "x"])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
AM_CONDITIONAL([GCOV], [test x$gcov = xtrue])
AM_CONDITIONAL([POSIX], [test x$posix = xtrue])
AM_CONDITIONAL([PROFILING_ENABLED], [test x$profiling_enabled = xtrue])
AM_CONDITIONAL([OPTIMIZATION], [test x$optimization = xtrue])
AM_CONDITIONAL([ADDRESS_SANITIZER], [test x$address_sanitizer = xtrue])
AM_CONDITIONAL([UB_SANITIZER], [test x$undefined_behaviour_sanitizer = xtrue])
AM_CONDITIONAL([CUCKOO_MODULE], [test x$build_cuckoo_module = xtrue])
AM_CONDITIONAL([MAGIC_MODULE], [test x$build_magic_module = xtrue])
AM_CONDITIONAL([HASH_MODULE], [test x$build_hash_module = xtrue])
AM_CONDITIONAL([AUTHENTICODE_MODULE], [test x$build_authenticode_module = xtrue])
AM_CONDITIONAL([DOTNET_MODULE], [test x$build_dotnet_module = xtrue])
AM_CONDITIONAL([MACHO_MODULE], [test x$build_macho_module = xtrue])
AM_CONDITIONAL([PB_TESTS_MODULE], [test x$build_pb_tests_module = xtrue])
AM_CONDITIONAL([DEX_MODULE], [test x$build_dex_module = xtrue])
AM_CONDITIONAL([DEBUG_DEX_MODULE], [test x$debug_dex_module = xtrue])

AM_CONDITIONAL([USE_WINDOWS_PROC], [test x$proc_interface = xwindows ])
AM_CONDITIONAL([USE_LINUX_PROC], [test x$proc_interface = xlinux ])
AM_CONDITIONAL([USE_FREEBSD_PROC], [test x$proc_interface = xfreebsd ])
AM_CONDITIONAL([USE_OPENBSD_PROC], [test x$proc_interface = xopenbsd ])
AM_CONDITIONAL([USE_MACH_PROC], [test x$proc_interface = xmach ])
AM_CONDITIONAL([USE_NO_PROC], [test x$proc_interface = xnone ])
AS_IF(
  [test x$proc_interface != xnone],[AC_DEFINE([HAVE_SCAN_PROC_IMPL],[1])],
  [test x$proc_interface = xnone],[AC_DEFINE([HAVE_SCAN_PROC_IMPL],[0])])

# Configure TLSH function
CFLAGS="$CFLAGS -DBUCKETS_128=1 -DCHECKSUM_1B=1"

AC_SUBST([PC_REQUIRES_PRIVATE])
AC_SUBST([PC_LIBS_PRIVATE])

AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([libyara/Makefile])
AC_CONFIG_FILES([libyara/yara.pc])

AC_OUTPUT

<MSG> Merge pull request #571 from Neo23x0/patch-2

Minor grammar error - singular / plural
<DFF> @@ -121,7 +121,7 @@ AS_IF([test "x$have_crypto" = "xno"],
         AC_MSG_WARN([
 *******************************************************************************
   Could not find OpenSSL library. The "hash" module and some features in "pe"
-  module has been disabled. If you want to enable all features please install
+  module have been disabled. If you want to enable all features please install
   it and run this script again.
 *******************************************************************************
         ])

{'addition_count': 1, 'commit_subject': 'Merge pull request #571 from Neo23x0/patch-2', 'deletion_count': 1, 'file_extension': '.ac', 'lang': 'ac', 'license': 'bsd-3-clause', 'repo_name': 'VirusTotal/yara'}