Add --enable-asan configure option
[babeltrace.git] / configure.ac
index 24a2d212a2f09afca0d75ff411ec120e471cfefe..85f422a11af946a6dc443ab737e16e1654fda187 100644 (file)
@@ -69,7 +69,7 @@ AS_CASE([$host_os],
     ],
   [freebsd*],
     [
-       DEFAULT_ENABLE_DEBUG_INFO=no
+       AE_FEATURE_DISABLE([debug-info])
     ],
   [cygwin*],
     [
@@ -93,7 +93,8 @@ AC_SUBST(LT_NO_UNDEFINED)
 ##                   ##
 
 # Choose the c compiler
-AC_PROG_CC_STDC
+AC_PROG_CC
+m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
 
 # Make sure the c compiler supports C99
 AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])])
@@ -128,6 +129,14 @@ AC_TYPE_UINT8_T
 AC_CHECK_TYPES([ptrdiff_t])
 
 
+##                     ##
+## C++ compiler checks ##
+##                     ##
+
+# Require a C++11 compiler without GNU extensions (-std=c++11)
+AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
+
+
 ##               ##
 ## Header checks ##
 ##               ##
@@ -218,7 +227,9 @@ detection.
 AM_CONDITIONAL([HAVE_BISON], [test "x$have_bison" = "xyes"])
 
 # check for flex
-AC_PROG_LEX
+# Prior to autoconf 2.70, AC_PROG_FLEX did not take an argument. This is not a
+# problem since the argument is silently ignored by older versions.
+AC_PROG_LEX([noyywrap])
 AX_PROG_FLEX_VERSION([2.5.35], [have_flex=yes])
 
 AS_IF([test "x$have_flex" != "xyes"], [
@@ -393,11 +404,14 @@ AE_FEATURE([built-in-python-plugin-support],[Statically-link Python plugin suppo
 AE_FEATURE_DEFAULT_ENABLE
 AE_FEATURE([man-pages],[Do not build and install man pages (already built in a distributed tarball])
 
-# When given, add -Werror to WARN_CFLAGS.
+# When given, add -Werror to WARN_CFLAGS and WARN_CXXFLAGS.
 # Disabled by default
 AE_FEATURE_DEFAULT_DISABLE
 AE_FEATURE([Werror],[Treat compiler warnings as errors.])
 
+# When given, build with AddressSanitizer.
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([asan],[Build with AddressSanitizer.])
 
 ##                                          ##
 ## Check for conflicting features selection ##
@@ -448,6 +462,7 @@ AM_CONDITIONAL([ENABLE_BUILT_IN_PLUGINS], AE_IS_FEATURE_ENABLED([built-in-plugin
 AM_CONDITIONAL([ENABLE_BUILT_IN_PYTHON_PLUGIN_SUPPORT], AE_IS_FEATURE_ENABLED([built-in-python-plugin-support]))
 AM_CONDITIONAL([ENABLE_MAN_PAGES], AE_IS_FEATURE_ENABLED([man-pages]))
 AM_CONDITIONAL([ENABLE_PYTHON_COMMON_DEPS], AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins]))
+AM_CONDITIONAL([ENABLE_ASAN], AE_IS_FEATURE_ENABLED([asan]))
 
 
 ##                                                                     ##
@@ -465,20 +480,22 @@ AE_IF_FEATURE_ENABLED([built-in-python-plugin-support],
 AE_IF_FEATURE_ENABLED([debug-info], [ENABLE_DEBUG_INFO_VAL=1], [ENABLE_DEBUG_INFO_VAL=0])
 AC_SUBST([ENABLE_DEBUG_INFO_VAL])
 
+AE_IF_FEATURE_ENABLED([asan], [ENABLE_ASAN=1], [ENABLE_ASAN=0])
+AC_SUBST([ENABLE_ASAN])
 
 ##                                           ##
 ## Check for optionnal features dependencies ##
 ##                                           ##
 
 # The Python bindings require SWIG
-AE_IF_FEATURE_ENABLED([python-plugins],
+AE_IF_FEATURE_ENABLED([python-bindings],
   [AX_PKG_SWIG(2.0.0, [], [AC_MSG_ERROR([SWIG 2.0.0 or newer is required to build the python bindings])])]
 )
 
 # Always check for python, we will fail later if some features require it and
 # it's unavailable.
 AM_PATH_PYTHON([3.0], [
-  AM_PATH_PYTHON_MODULES([PYTHON])
+  AE_PATH_PYTHON_MODULES([PYTHON])
 
   # pythondir is the path where extra modules are to be installed
   pythondir=$PYTHON_PREFIX/$PYTHON_MODULES_PATH
@@ -525,7 +542,7 @@ AS_IF([AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python
 
 AE_IF_FEATURE_ENABLED([python-bindings-doc],
   [
-    AM_CHECK_PYTHON_SPHINX([PYTHON])
+    AE_CHECK_PYTHON_SPHINX([PYTHON])
     AS_IF([test "x$PYTHON_SPHINX_EXISTS" = xno], [
       AC_MSG_ERROR([The Sphinx package for Python 3 is required to build the Python bindings documentation])
     ])
@@ -543,7 +560,14 @@ AE_IF_FEATURE_ENABLED([debug-info], [
       dnl PKG_CHECK_MODULES defines ELFUTILS_LIBS
     ],
     [
-      AC_MSG_ERROR([elfutils >= 0.154 is required to use the debug info feature. You can disable this feature using --disable-debug-info.])
+      AC_MSG_WARN([pkg-config was unable to find a valid .pc for libelf/libdw. Set PKG_CONFIG_PATH to specify the pkg-config configuration file location.])
+
+      # Turns out SLES12 doesn't bother shipping .pc file for libelf
+      AC_MSG_WARN([Finding libelf without pkg-config.])
+      AC_CHECK_LIB([elf], [elf_version], [], [AC_MSG_ERROR(Missing libelf (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)])
+      AC_CHECK_LIB([dw], [dwarf_begin], [], [AC_MSG_ERROR(Missing libdw (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)])
+      AE_LIB_ELFUTILS([0], [154], [], [AC_MSG_ERROR(elfutils >= 0.154 is required to use the debug info feature. You can disable this feature using --disable-debug-info.)])
+      ELFUTILS_LIBS="-lelf -ldw"
     ])
 ])
 AC_SUBST([ELFUTILS_LIBS])
@@ -616,12 +640,21 @@ AS_IF([test "x$exec_prefix" = xNONE], [
 
 AC_SUBST(LIBDIR)
 
+# If --enable-asan is used...
+AE_IF_FEATURE_ENABLED([asan], [
+  # ... add -fsanitize=address to the *FLAGS variables.
+  ASAN_CFLAGS="-fsanitize=address"
+  ASAN_CXXFLAGS="-fsanitize=address"
+  ASAN_LDFLAGS="-fsanitize=address"
+])
 
 
 
 # CFLAGS from libraries (the glib ones are needed for the following sizeof
 # test).
-AM_CFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS}"
+AM_CFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CFLAGS}"
+AM_CXXFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CXXFLAGS}"
+AM_LDFLAGS="${ASAN_LDFLAGS}"
 
 # Check that the current size_t matches the size that glib thinks it should
 # be. This catches problems on multi-arch where people try to do a 32-bit
@@ -658,11 +691,10 @@ CFLAGS=${save_CFLAGS}
 
 # Detect C and LD warning flags supported by the compiler.
 
-# Detect warning flags supported by the compiler, append them to WARN_CFLAGS.
+# Detect warning flags supported by the C and C++ compilers and append them to
+# WARN_CFLAGS and WARN_CXXFLAGS.
 #
-# Pass -Werror as an extra flag during the test: this is needed to make the
-# -Wunknown-warning-option diagnostic fatal with clang.
-AX_APPEND_COMPILE_FLAGS([ dnl
+m4_define([WARN_FLAGS_LIST], [ dnl
                -Wall dnl
                -Wextra dnl
                -Wmissing-prototypes dnl
@@ -699,10 +731,16 @@ AX_APPEND_COMPILE_FLAGS([ dnl
                dnl Ref: https://github.com/swig/swig/issues/1259
                -Wno-cast-function-type dnl
                -Wno-missing-field-initializers dnl
-       ],
-       [WARN_CFLAGS],
-       [-Werror])
+       ])
 
+# Pass -Werror as an extra flag during the test: this is needed to make the
+# -Wunknown-warning-option diagnostic fatal with clang.
+AC_LANG([C++])
+AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CXXFLAGS], [-Werror])
+AC_LANG([C])
+AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CFLAGS], [-Werror])
+
+AE_IF_FEATURE_ENABLED([Werror], [WARN_CXXFLAGS="${WARN_CXXFLAGS} -Werror"])
 AE_IF_FEATURE_ENABLED([Werror], [WARN_CFLAGS="${WARN_CFLAGS} -Werror"])
 
 # The test used in AX_APPEND_COMPILE_FLAGS, generated using AC_LANG_PROGRAM, is
@@ -711,14 +749,17 @@ AE_IF_FEATURE_ENABLED([Werror], [WARN_CFLAGS="${WARN_CFLAGS} -Werror"])
 # the test program would not build.
 #
 # Enable them here unconditionally.  They are supported by GCC >= 4.8 and by
-# Clang >= 4.0.
+# Clang >= 3.3 (required by the project) and are only valid for C code.
 WARN_CFLAGS="${WARN_CFLAGS} -Wold-style-definition -Wstrict-prototypes"
 
 # CFLAGS from AX_APPEND_COMPILE_FLAGS.
+AM_CXXFLAGS="${AM_CXXFLAGS} ${WARN_CXXFLAGS}"
 AM_CFLAGS="${AM_CFLAGS} ${WARN_CFLAGS}"
 
-# Done for AM_CFLAGS.
+# Done for AM_CXXFLAGS, AM_CFLAGS and AM_LDFLAGS.
+AC_SUBST(AM_CXXFLAGS)
 AC_SUBST(AM_CFLAGS)
+AC_SUBST(AM_LDFLAGS)
 
 # Set global CPPFLAGS in AM_CPPFLAGS
 AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/src -I\$(top_srcdir)/src -include common/config.h"
@@ -815,6 +856,8 @@ AC_CONFIG_FILES([
        tests/utils/tap/Makefile
 ])
 
+AC_CONFIG_FILES([tests/utils/env.sh],[chmod +x tests/utils/env.sh])
+
 AC_OUTPUT
 
 #
This page took 0.025097 seconds and 4 git commands to generate.