john            Wed Oct 19 20:18:26 2005 EDT

  Added files:                 
    /php-src    Makefile.gcov gen_php_cov 

  Modified files:              
    /php-src    NEWS configure.in 
  Log:
  Implementing C-level Code coverage (--enable-gcov).
   
    o Requires LTP 1.4+ and libgcov
  
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2070&r2=1.2071&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2070 php-src/NEWS:1.2071
--- php-src/NEWS:1.2070 Sat Oct 15 08:54:18 2005
+++ php-src/NEWS        Wed Oct 19 20:18:23 2005
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? ????, PHP 6.0
+- C-level Code Coverage Instrumenting (John)
 - Unicode support. (Andrei, Dmitriy, et al)
 - Changed type hints so that they take "= NULL" as default value. (Marcus,
   Derick)
http://cvs.php.net/diff.php/php-src/configure.in?r1=1.588&r2=1.589&ty=u
Index: php-src/configure.in
diff -u php-src/configure.in:1.588 php-src/configure.in:1.589
--- php-src/configure.in:1.588  Tue Sep 13 17:40:33 2005
+++ php-src/configure.in        Wed Oct 19 20:18:23 2005
@@ -1,4 +1,4 @@
- ## $Id: configure.in,v 1.588 2005/09/13 21:40:33 sniper Exp $ -*- autoconf -*-
+ ## $Id: configure.in,v 1.589 2005/10/20 00:18:23 john Exp $ -*- autoconf -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -597,6 +597,57 @@
 PHP_CONFIGURE_PART(General settings)
 
 PHP_HELP_SEPARATOR([General settings:])
+PHP_ARG_ENABLE(gcov,  whether to include gcov symbols,
+[  --enable-gcov           Enable GCOV code coverage (requires LTP)], no, no)
+
+if test "$PHP_GCOV" = "yes"; then
+  AC_DEFUN([PHP_PROG_LTP],[
+
+    ltp_version_list="1.4"
+
+    AC_CHECK_PROG(LTP, lcov, lcov)
+    AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
+    if test "$LTP"; then
+      AC_CACHE_CHECK([for ltp version], php_cv_ltp_version, [
+        php_cv_ltp_version=invalid
+        ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
+        for ltp_check_version in $ltp_version_list; do
+          if test "$ltp_version" = "$ltp_check_version"; then
+            php_cv_ltp_version="$ltp_check_version (ok)"
+          fi
+        done
+      ])
+    else
+      ltp_msg="To enable code coverage reporting you must have one of the 
following LTP versions installed: $ltp_version_list"      
+      AC_MSG_ERROR([$ltp_msg])
+    fi
+
+    case $php_cv_ltp_version in
+      ""|invalid[)]
+        ltp_msg="You must have one of the following versions of LTP: 
$ltp_version_list (found: $ltp_version)."
+        AC_MSG_ERROR([$ltp_msg])
+        LTP="exit 0;"
+        ;;
+    esac
+
+    if test "$LTP_GENHTML" = ""; then
+       AC_MSG_ERROR([Could not find genhtml from the LTP package])
+    fi
+
+    PHP_SUBST(LTP)
+    PHP_SUBST(LTP_GENHTML)
+  ])
+
+  PHP_PROG_LTP
+  AC_CHECK_LIB(gcov, __gcov_open, [
+    PHP_ADD_LIBRARY(gcov)
+    AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
+    CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
+    PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.gcov,$abs_srcdir)
+  ], [
+    AC_MSG_ERROR([Problem with enabling gcov. Please check config.log for 
details.])
+  ])
+fi
 
 PHP_ARG_ENABLE(debug, whether to include debugging symbols,
 [  --enable-debug          Compile with debugging symbols], no, no)

http://cvs.php.net/co.php/php-src/Makefile.gcov?r=1.1&p=1
Index: php-src/Makefile.gcov
+++ php-src/Makefile.gcov
.php_cov_info.ltpdata:
        @mkdir -p .cov/; \
        find . -name \*.gcda -o -name \*.gcno | sed -e 's/^\.\/\.cov\/.*//' | 
xargs --replace cp {} .cov/; \
        find . -name \*.gcda -o -name \*.gcno | sed -e 's/^\.\/\.cov\/.*//' | 
sed -e 's/^\.\///' | xargs --max-args=1 dirname | sed -e 's/\/.*//' | xargs 
--replace ln -s `pwd`/{} `pwd`/.cov > /dev/null 2>&1; \
        $(LTP) --directory .cov --output-file=.php_cov_info.ltpdata --capture; \

cov: .php_cov_info.ltpdata

cov-html: cov 
        @$(LTP_GENHTML) -o cov_html/ .php_cov_info.ltpdata -t "PHP Code 
Coverage" -s;

cov-clean:
        find . -name \*.gcda -o -name \*.gcno -exec rm -f {} \;
        rm -f .cov/*      # This is done first, since we are symlinked inside..
        rm -Rf .cov       # Now remove the directory
        rm -f .php_cov_info.ltpdata
        rm -Rf cov_html

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to