Files

206 lines
6.7 KiB
Plaintext

AC_PREREQ([2.60])
AC_INIT(
[libinjection],
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
[https://github.com/libinjection/libinjection/issues],
[libinjection],
[https://github.com/libinjection/libinjection])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([build-aux/m4])
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE([1.11 check-news foreign silent-rules subdir-objects
-Wall -Werror])
AM_MAINTAINER_MODE
# Checks for programs.
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_MKDIR_P
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_MALLOC
AC_CHECK_FUNCS([memchr memset strchr strstr])
AX_COMPILER_VERSION
AX_COMPILER_VENDOR
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_DEFINE([__STDC_FORMAT_MACROS], [], [Description])
PKG_PROG_PKG_CONFIG
dnl Enable gprof suport.
AC_ARG_ENABLE([gprof],
AS_HELP_STRING([--enable-gprof],
[build binaries with gprof support]),
[use_gprof=$enableval], [use_gprof=no])
if test "$use_gprof" = yes; then
CFLAGS="$CFLAGS -O2 -pg"
LDFLAGS="$LDFLAGS -pg"
fi
AM_CONDITIONAL([GPROF], [test "$use_gprof" = yes])
dnl Enable gcov suport.
AC_ARG_ENABLE([gcov],
AS_HELP_STRING([--enable-gcov],
[build binaries with gcov support]),
[use_gcov=$enableval], [use_gcov=no])
if test "$use_gcov" = yes; then
CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
LDFLAGS="$LDFLAGS -fprofile-arcs"
fi
AM_CONDITIONAL([GCOV], [test "$use_gcov" = yes])
dnl Enable hardened build.
AC_ARG_ENABLE([hardened],
AS_HELP_STRING([--enable-hardened],
[build hardened binaries]),
[use_hardened=$enableval], [use_hardened=no])
dnl Enable debug build.
AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug],
[enable debugging. If CFLAGS are set, this
option will not change them]),
[], [enable_debug=no])
dnl Enable optimizations.
AC_ARG_ENABLE([optimize],
AS_HELP_STRING([--enable-optimize],
[enable optimizations. If CFLAGS are set,
this option will not change them]),
[], [enable_optimize=no])
dnl Enable sanitizers.
AC_ARG_ENABLE([sanitizers],
AS_HELP_STRING([--enable-sanitizers],
[enable ASAN ans UBSAN. If CFLAGS are set,
this option will not change them]),
[], [enable_sanitizers=no])
dnl Enable fuzzers.
AC_ARG_ENABLE([fuzzers],
AS_HELP_STRING([--enable-fuzzers],
[enable fuzzers; you must use clang compiler]),
[], [enable_fuzzers=no])
LT_INIT
AC_SUBST([LIBTOOL_DEPS])
AC_PATH_TOOL(CLANG, clang)
AC_PATH_TOOL(GCOV, gcov)
AC_PATH_PROG(LCOV, lcov)
AC_PATH_PROG(GENHTML, genhtml)
AC_PATH_TOOL(CPPCHECK, cppcheck)
AC_PATH_TOOL(VALGRIND, valgrind)
###############################################################################
# Debug/Optimization checks.
###############################################################################
# Check if we should enable debugging, optimization. Note we only
# update CFLAGS if none are provided.
AM_CONDITIONAL([DEBUG], [test x"$enable_debug" = "xyes"])
AM_CONDITIONAL([OPTIMIZE], [test x"$enable_optimize" = "xyes"])
debug_flags="-g1"
if test "x$enable_debug" = "xyes"; then
debug_flags="-g -fno-omit-frame-pointer"
elif test "x$enable_optimize" = "xyes"; then
debug_flags=""
fi
if test "x$enable_optimize" = "xyes"; then
optimize_flags="-O3"
else
optimize_flags="-O0"
fi
###############################################################################
# Hardening.
###############################################################################
AM_CONDITIONAL([HARDENED], [test x"$enable_hardened" = "xyes"])
if test "$use_hardened" = yes; then
hardened_flags="-g -fPIE -pie -ansi -fPIC -fstack-protector \
--param ssp-buffer-size=4 -Wextra -Wformat -Wformat-security \
-Werror=format-security -Wcast-align -Wshadow -Wpointer-arith \
-Wcast-qual -Wstack-protector -D_FORTIFY_SOURCE=2 -pedantic"
fi
compiler_flags="-g -fpic -Weverything -Wno-unused-macros -Wno-padded \
-Wno-covered-switch-default \
-Wno-disabled-macro-expansion -Wno-unused-local-typedefs"
###############################################################################
# Sanitizers.
###############################################################################
AM_CONDITIONAL([SANITIZERS], [test x"$enable_sanitizers" = "xyes"])
if test "$enable_sanitizers" = yes; then
sanitizers_flags="-fsanitize=address,undefined -fno-omit-frame-pointer"
sanitizers_link_flags="-fsanitize=address,undefined"
fi
###############################################################################
# Fuzzing.
###############################################################################
AM_CONDITIONAL([FUZZERS], [test x"$enable_fuzzers" = "xyes"])
if test "$enable_fuzzers" = yes; then
AX_CHECK_COMPILE_FLAG([-fsanitize=fuzzer],,[AC_MSG_ERROR("Fuzzing not supported by the compiler; you must use clang")])
LIB_FUZZING_ENGINE=-fsanitize=fuzzer
BUILD_FUZZTARGETS=1
fi
AM_CONDITIONAL([BUILD_FUZZTARGETS], [test "x$enable_fuzzers" = "xyes"])
AC_SUBST(BUILD_FUZZTARGETS)
AC_SUBST(LIB_FUZZING_ENGINE)
# Now that we have all flags, check them
AS_IF([test "x${ac_cv_env_CFLAGS_set}" = "x"],
[
AX_APPEND_COMPILE_FLAGS([$debug_flags $compiler_flags $optimize_flags $hardened_flags $sanitizers_flags $fuzzers_flags],
[CFLAGS], [])
])
AS_IF([test "x${ac_cv_env_LDFLAGS_set}" = "x"],
[
AX_APPEND_LINK_FLAGS([$sanitizers_link_flags],
[LDFLAGS], [])
])
if test x$use_gcov = xyes; then
if test x$LCOV = x; then
AC_MSG_ERROR("lcov testing requested but lcov not found")
fi
if test x$GCOV = x; then
AC_MSG_ERROR("lcov testing requested but gcov not found")
fi
if test x$GENHTML = x; then
AC_MSG_ERROR("lcov testing requested but genhtml not found")
fi
LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
GENHTML="$GENHTML --branch-coverage"
AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
[AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
fi
# Libinjection version to allow embedding
AC_DEFINE_UNQUOTED([LIBINJECTION_VERSION], [["$PACKAGE_VERSION"]])
# Output files
AC_CONFIG_FILES([
Makefile
src/Makefile
src/fuzz/Makefile
libinjection.pc
])
AC_OUTPUT