206 lines
6.7 KiB
Plaintext
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
|