GREAT! In addition, it would be nice to support "--suppressions" valgrind option. On my system (FC4), valgrind always produces the same pthread specific error on any run. Se patch in attachment.
Also it is possible to run valgrind wih "-q" option, so valgrind will print it's own messages only on real errors, and you will not need filter them. Thanks. Dmitry. > -----Original Message----- > From: Marcus Boerger [mailto:[EMAIL PROTECTED] > Sent: Thursday, December 01, 2005 3:27 AM > To: [email protected] > Subject: [PHP-CVS] cvs: php-src / run-tests.php > > > helly Wed Nov 30 19:26:45 2005 EDT > > Modified files: > /php-src run-tests.php > Log: > - Add support for valgrind testing (Nuno) > > http://cvs.php.net/diff.php/php-src/run-tests.php?r1=1.239&r2= > 1.240&ty=u > Index: php-src/run-tests.php > diff -u php-src/run-tests.php:1.239 php-src/run-tests.php:1.240 > --- php-src/run-tests.php:1.239 Sat Nov 26 13:07:49 2005 > +++ php-src/run-tests.php Wed Nov 30 19:26:44 2005 > @@ -23,7 +23,7 @@ > > +------------------------------------------------------------- > ---------+ > */ > > -/* $Id: run-tests.php,v 1.239 2005/11/26 18:07:49 helly Exp $ */ > +/* $Id: run-tests.php,v 1.240 2005/12/01 00:26:44 helly Exp $ */ > > /* Sanity check to ensure that pcre extension needed by this > script is available. > * In the event it is not, print a nice error message > indicating that this script will @@ -274,6 +274,9 @@ > $ini_overwrites[] = > 'unicode.output_encoding=utf-8'; > $ini_overwrites[] = > 'unicode.from_error_mode=U_INVALID_SUBSTITUTE'; > break; > + case 'm': > + $GLOBALS['leak_check'] = 1; > + break; > default: > echo "Illegal switch > specified!\n"; > case "h": > @@ -302,6 +305,8 @@ > > -u Test with unicode_semantics set on. > > + -m Test for memory leaks with Valgrind > + > -v Verbose mode. > > -h <file> This Help. > @@ -682,7 +687,7 @@ > return $data; > } else if ($n > 0) { > $line = fread($pipes[1], 8192); > - if (strlen($line) == 0) { > + if ($line === false) { > /* EOF */ > break; > } > @@ -861,9 +866,10 @@ > $tmp_skipif = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.'); > $tmp_file = $tmp . DIRECTORY_SEPARATOR . > preg_replace('/\.phpt$/','.php',basename($file)); > $tmp_post = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.'); > + $tmp_relative_file = > +str_replace(dirname(__FILE__).DIRECTORY_SEPARATOR, '', $tmp_file) . > +'t'; > > if (is_array($IN_REDIRECT)) { > - $tested = $IN_REDIRECT['prefix'] . ' ' . > trim($section_text['TEST']) . " [$tmp_file]"; > + $tested = $IN_REDIRECT['prefix'] . ' ' . > trim($section_text['TEST']) > +. " [$tmp_relative_file]"; > $section_text['FILE'] = "# original source > file: $shortname\n" . $section_text['FILE']; > } > > @@ -1077,6 +1083,10 @@ > } > } > > + if (isset($GLOBALS['leak_check'])) { > + $cmd = 'valgrind --tool=memcheck ' . $cmd; > + } > + > if ($DETAILED) echo " > CONTENT_LENGTH = " . getenv("CONTENT_LENGTH") . " > CONTENT_TYPE = " . getenv("CONTENT_TYPE") . " > @@ -1100,6 +1110,31 @@ > > @unlink($tmp_post); > > + if (isset($GLOBALS['leak_check'])) { // leak check > + preg_match_all('/==\d+== +\w+ lost: (\d+) > bytes/S', $out, $matches); > + $leak = false; > + > + foreach ($matches[1] as $m) { > + if ($m) { // we got a leak > + $leak = true; > + break; > + } > + } > + > + if (!$leak && !preg_match('/==\d+== ERROR > SUMMARY: [1-9]\d* errors/', $out)) { > + if (isset($old_php)) { > + $php = $old_php; > + } > + echo "PASS $tested\n"; > + return 'PASSED'; > + } > + > + $output = $out; > + $wanted = ''; > + $warn = false; > + > + } else { // normal testing > + > // Does the output match what is expected? > $output = trim($out); > $output = preg_replace('/\r\n/',"\n",$output); > @@ -1158,6 +1193,8 @@ > $wanted_re = NULL; > } > > + } //end of non-valgrind testing > + > // Test failed so we need to report details. > if ($warn) { > show_result("WARN", $tested, $file, $info); > @@ -1190,7 +1227,7 @@ > // write .diff > if (strpos($log_format,'D') !== FALSE) { > $log = fopen($diff_filename,'wt') or > error("Cannot create test log - $diff_filename"); > - fwrite($log,generate_diff($wanted,$wanted_re,$output)); > + fwrite($log, isset($GLOBALS['leak_check']) ? '' : > +generate_diff($wanted,$wanted_re,$output)); > fclose($log); > } > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
