1dnl ===========================================================================
2dnl
3dnl LCOV
4dnl
5cairo_has_lcov=no
6AC_ARG_ENABLE(gcov,
7  AS_HELP_STRING([--enable-gcov],
8		 [Enable gcov]),
9  [use_gcov=$enableval], [use_gcov=no])
10
11if test "x$use_gcov" = "xyes"; then
12  dnl we need gcc:
13  if test "$GCC" != "yes"; then
14    AC_MSG_ERROR([GCC is required for --enable-gcov])
15  fi
16
17  dnl Check if ccache is being used
18  AC_CHECK_PROG(SHTOOL, shtool, shtool)
19  case `$SHTOOL path $CC` in
20    *ccache*[)] gcc_ccache=yes;;
21    *[)] gcc_ccache=no;;
22  esac
23
24  if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
25    AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
26  fi
27
28  ltp_version_list="1.7 1.6 1.5 1.4"
29  AC_CHECK_PROG(LTP, lcov, lcov)
30  AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
31
32  if test "$LTP"; then
33    AC_CACHE_CHECK([for ltp version], cairo_cv_ltp_version, [
34      cairo_cv_ltp_version=invalid
35      ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
36      for ltp_check_version in $ltp_version_list; do
37        if test "$ltp_version" = "$ltp_check_version"; then
38          cairo_cv_ltp_version="$ltp_check_version (ok)"
39        fi
40      done
41    ])
42  fi
43
44  case $cairo_cv_ltp_version in
45    ""|invalid[)]
46      ;;
47    *)
48      cairo_has_lcov=yes
49      ;;
50  esac
51
52  if test "x$cairo_has_lcov" != "xyes"; then
53    AC_MSG_ERROR([[To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list.
54Please install the Linux Test Project [http://ltp.sourceforge.net/], and try again.]])
55   fi
56
57  if test -z "$LTP_GENHTML"; then
58    AC_MSG_ERROR([[Could not find genhtml from the LTP package.
59Please install the Linux Test Project [http://ltp.sourceforge.net/], and try again.]])
60  fi
61
62  AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
63dnl  PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.gcov, $abs_srcdir)
64
65  dnl Remove all optimization flags from CFLAGS
66  changequote({,})
67  CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
68  CAIRO_CFLAGS=`echo "$CAIRO_CFLAGS" | $SED -e 's/-O[0-9]*//g'`
69  changequote([,])
70
71  dnl Add the special gcc flags
72  dnl In order to workaround a debian bug in libtool where they strip
73  dnl $dependency_libs from the link line and CFLAGS, we need to pass
74  dnl --coverage via LDFLAGS.
75  CAIRO_CC_TRY_FLAG([--coverage],,
76		    [
77		    CAIRO_CFLAGS="$CAIRO_CFLAGS -O0 --coverage"
78		    CAIRO_LDFLAGS="$CAIRO_LDFLAGS -O0 --coverage"
79		    ])
80fi
81AM_CONDITIONAL(CAIRO_HAS_LCOV, test "x$cairo_has_lcov" = "xyes")
82
83dnl ===========================================================================
84dnl Check for some custom valgrind modules
85AC_ARG_ENABLE(valgrind,
86  AS_HELP_STRING([--disable-valgrind],
87		 [Disable valgrind support]),
88  [use_valgrind=$enableval], [use_valgrind=yes])
89
90if test "x$use_valgrind" = "xyes"; then
91    PKG_CHECK_MODULES(VALGRIND, valgrind, [
92	    _save_CFLAGS="$CFLAGS"
93	    _save_CPPFLAGS="$CPPFLAGS"
94	    CFLAGS="$CFLAGS $VALGRIND_CFLAGS"
95	    CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
96	    AC_CHECK_HEADER([valgrind.h], [AC_DEFINE([HAVE_VALGRIND], [1],
97			    [Define to 1 if you have Valgrind])])
98	    AC_CHECK_HEADER([lockdep.h], [AC_DEFINE([HAVE_LOCKDEP], [1],
99			    [Define to 1 if you have the Valgrind lockdep tool])])
100	    AC_CHECK_HEADER([memfault.h], [AC_DEFINE([HAVE_MEMFAULT], [1],
101			    [Define to 1 if you have the Valgrind memfault tool])])
102	    CAIRO_CFLAGS="$VALGRIND_CFLAGS $CAIRO_CFLAGS"
103	    CFLAGS="$_save_CFLAGS"
104	    CPPFLAGS="$_save_CPPFLAGS"
105	], AC_MSG_RESULT(no))
106fi
107