|  | @@ -1,6 +1,9 @@
 | 
	
		
			
				|  |  |  PHP_ARG_ENABLE(grpc, whether to enable grpc support,
 | 
	
		
			
				|  |  |  [  --enable-grpc           Enable grpc support])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +PHP_ARG_ENABLE(coverage, whether to include code coverage symbols,
 | 
	
		
			
				|  |  | +[  --enable-coverage       Enable coverage support], no, no)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  if test "$PHP_GRPC" != "no"; then
 | 
	
		
			
				|  |  |    dnl Write more examples of tests here...
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -75,3 +78,66 @@ if test "$PHP_GRPC" != "no"; then
 | 
	
		
			
				|  |  |      channel_credentials.c completion_queue.c timeval.c server.c \
 | 
	
		
			
				|  |  |      server_credentials.c php_grpc.c, $ext_shared, , -Wall -Werror -std=c11)
 | 
	
		
			
				|  |  |  fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +if test "$PHP_COVERAGE" = "yes"; then
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if test "$GCC" != "yes"; then
 | 
	
		
			
				|  |  | +    AC_MSG_ERROR([GCC is required for --enable-coverage])
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  dnl Check if ccache is being used
 | 
	
		
			
				|  |  | +  case `$php_shtool path $CC` in
 | 
	
		
			
				|  |  | +    *ccache*[)] gcc_ccache=yes;;
 | 
	
		
			
				|  |  | +    *[)] gcc_ccache=no;;
 | 
	
		
			
				|  |  | +  esac
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
 | 
	
		
			
				|  |  | +    AC_MSG_ERROR([ccache must be disabled when --enable-coverage option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  lcov_version_list="1.5 1.6 1.7 1.9 1.10 1.11"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  AC_CHECK_PROG(LCOV, lcov, lcov)
 | 
	
		
			
				|  |  | +  AC_CHECK_PROG(GENHTML, genhtml, genhtml)
 | 
	
		
			
				|  |  | +  PHP_SUBST(LCOV)
 | 
	
		
			
				|  |  | +  PHP_SUBST(GENHTML)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if test "$LCOV"; then
 | 
	
		
			
				|  |  | +    AC_CACHE_CHECK([for lcov version], php_cv_lcov_version, [
 | 
	
		
			
				|  |  | +      php_cv_lcov_version=invalid
 | 
	
		
			
				|  |  | +      lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'` #'
 | 
	
		
			
				|  |  | +      for lcov_check_version in $lcov_version_list; do
 | 
	
		
			
				|  |  | +        if test "$lcov_version" = "$lcov_check_version"; then
 | 
	
		
			
				|  |  | +          php_cv_lcov_version="$lcov_check_version (ok)"
 | 
	
		
			
				|  |  | +        fi
 | 
	
		
			
				|  |  | +      done
 | 
	
		
			
				|  |  | +    ])
 | 
	
		
			
				|  |  | +  else
 | 
	
		
			
				|  |  | +    lcov_msg="To enable code coverage reporting you must have one of the following LCOV versions installed: $lcov_version_list"      
 | 
	
		
			
				|  |  | +    AC_MSG_ERROR([$lcov_msg])
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  case $php_cv_lcov_version in
 | 
	
		
			
				|  |  | +    ""|invalid[)]
 | 
	
		
			
				|  |  | +      lcov_msg="You must have one of the following versions of LCOV: $lcov_version_list (found: $lcov_version)."
 | 
	
		
			
				|  |  | +      AC_MSG_ERROR([$lcov_msg])
 | 
	
		
			
				|  |  | +      LCOV="exit 0;"
 | 
	
		
			
				|  |  | +      ;;
 | 
	
		
			
				|  |  | +  esac
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if test -z "$GENHTML"; then
 | 
	
		
			
				|  |  | +    AC_MSG_ERROR([Could not find genhtml from the LCOV package])
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  PHP_ADD_MAKEFILE_FRAGMENT
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  dnl Remove all optimization flags from CFLAGS
 | 
	
		
			
				|  |  | +  changequote({,})
 | 
	
		
			
				|  |  | +  CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9s]*//g'`
 | 
	
		
			
				|  |  | +  CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O[0-9s]*//g'`
 | 
	
		
			
				|  |  | +  changequote([,])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  dnl Add the special gcc flags
 | 
	
		
			
				|  |  | +  CFLAGS="$CFLAGS -O0 -ggdb -fprofile-arcs -ftest-coverage"
 | 
	
		
			
				|  |  | +  CXXFLAGS="$CXXFLAGS -ggdb -O0 -fprofile-arcs -ftest-coverage"
 | 
	
		
			
				|  |  | +fi
 |