Files
yara/configure.ac
T
Wesley Shields 37bee583c2 Expose YR_DEBUG_VERBOSITY in configure script. (#1542)
Add a --with-debug-verbose option to the configure script which takes a number
greater than 0 as an argument. This gives us the flexibility to make verbosity
of this useful debugging information greater than it's current maximum (2)
without needing to modify the configure script.

Currently the maximum is 2, which gets you a lot of useful runtime debugging
information. A value of 1 is only used in tests. It may be worth it to consider
reworking this system so the numbers describe how much information you want.
For example, 1 could just be function entry and exit, 2 could add arguments to
it. I'll leave changing that up to a future diff if it is desired.

While here, fix a warning in the scanner from using an incorrect format string:

scan.c:644:7: warning: format specifies type 'long long' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat]
      match_offset,
      ^~~~~~~~~~~~~
./include/yara/globals.h:100:29: note: expanded from macro 'YR_DEBUG_FPRINTF'
    fprintf(STREAM, FORMAT, __VA_ARGS__);                      \
                    ~~~~~~  ^~~~~~~~~~~
1 warning generated.
2021-08-23 09:50:05 +02:00

356 lines
12 KiB
Plaintext

AC_INIT([yara], [4.1.1], [[email protected]])
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([profiling],
[AS_HELP_STRING([--enable-profiling], [enable rules profiling support])],
[if test x$enableval = xyes; then
profiling_enabled=true
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([dotnet],
[AS_HELP_STRING([--enable-dotnet], [enable dotnet module])],
[if test x$enableval = xyes; then
build_dotnet_module=true
CFLAGS="$CFLAGS -DDOTNET_MODULE"
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])
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_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([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([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])])
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