From cb6a3aa367e4ca30b909c2b9532b55492d188b9e Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Tue, 22 Jun 2004 15:38:37 +0000 Subject: [PATCH] - Added the -nice option for nicing the build processes. - Added the -gnuplotscript option to specify the GnuPlot script to use. - Added the -templatefile option to specify the HTML template to use. - Moved subroutines to top of file. - Used variables for file names in case we want to change to directories. - Made program track its directory changes in $VERBOSE mode (for debugging) - Added variables to support tracking start time, finish time, and platform details about each nightly test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14321 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/NightlyTest.pl | 521 +++++++++++++++++++++++-------------------- 1 file changed, 285 insertions(+), 236 deletions(-) diff --git a/utils/NightlyTest.pl b/utils/NightlyTest.pl index 8838026c610..4543a5a56ce 100755 --- a/utils/NightlyTest.pl +++ b/utils/NightlyTest.pl @@ -26,6 +26,10 @@ # -disable-codegen Disable LLC and JIT tests in the nightly tester. # -verbose Turn on some debug output # -debug Print information useful only to maintainers of this script. +# -nice Checkout/Configure/Build with "nice" to reduce impact +# on busy servers. +# -gnuplotscript Next argument specifies gnuplot script to use +# -templatefile Next argument specifies template file to use # # CVSROOT is the CVS repository from which the tree will be checked out, # specified either in the full :method:user@host:/dir syntax, or @@ -37,6 +41,8 @@ # WEBDIR is the directory into which the test results web page will be written, # AND in which the "index.html" is assumed to be a symlink to the most recent # copy of the results. This directory MUST exist before the script is run. +# LLVMGCCDIR is the directory in which the LLVM GCC Front End is installed +# to. This is the same as you would have for a normal LLVM build. # use POSIX qw(strftime); @@ -55,12 +61,28 @@ my $WebDir = $ENV{'WEBDIR'}; @TIME = localtime; my $DATE = sprintf "%4d-%02d-%02d", $TIME[5]+1900, $TIME[4]+1, $TIME[3]; my $DateString = strftime "%B %d, %Y", localtime; +my $TestStartTime = gmtime; + +# Command line argument settings... +my $NOCHECKOUT = 0; +my $NOREMOVE = 0; +my $NOFEATURES = 0; +my $NOREGRESSIONS = 0; +my $NOTEST = 0; +my $NORUNNINGTESTS = 0; +my $MAKEOPTS = ""; +my $PROGTESTOPTS = ""; +my $VERBOSE = 0; +my $DEBUG = 0; +my $CONFIGUREARGS = "--enable-jit"; +my $NICE = ""; sub ReadFile { - undef $/; if (open (FILE, $_[0])) { + undef $/; my $Ret = ; close FILE; + $/ = '\n'; return $Ret; } else { print "Could not open file '$_[0]' for reading!"; @@ -82,11 +104,30 @@ sub GetRegex { # (Regex with ()'s, value) return "?"; } +sub AddRecord { + my ($Val, $Filename) = @_; + my @Records; + if (open FILE, "$WebDir/$Filename") { + @Records = grep !/$DATE/, split "\n", ; + close FILE; + } + push @Records, "$DATE: $Val"; + WriteFile "$WebDir/$Filename", (join "\n", @Records) . "\n"; + return @Records; +} + sub AddPreTag { # Add pre tags around nonempty list, or convert to "none" $_ = shift; if (length) { return "
    $_
"; } else { "none
"; } } +sub ChangeDir { # directory, logical name + my ($dir,$name) = @_; + chomp($dir); + if ( $VERBOSE ) { print "Changing To: $name ($dir)\n"; } + chdir($dir) || die "Cannot change directory to: $name ($dir) "; +} + sub GetDir { my $Suffix = shift; opendir DH, $WebDir; @@ -123,163 +164,12 @@ sub FormatTime { return $Time; } - -# Command line argument settings... -my $NOCHECKOUT = 0; -my $NOREMOVE = 0; -my $NOFEATURES = 0; -my $NOREGRESSIONS = 0; -my $NOTEST = 0; -my $NORUNNINGTESTS = 0; -my $MAKEOPTS = ""; -my $PROGTESTOPTS = ""; -my $VERBOSE = 0; -my $DEBUG = 0; -my $CONFIGUREARGS = "--enable-jit"; - -# Parse arguments... -while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) { - shift; - last if /^--$/; # Stop processing arguments on -- - - # List command line options here... - if (/^-nocheckout$/) { $NOCHECKOUT = 1; next; } - if (/^-noremove$/) { $NOREMOVE = 1; next; } - if (/^-nofeaturetests$/) { $NOFEATURES = 1; next; } - if (/^-noregressiontests$/){ $NOREGRESSIONS = 1; next; } - if (/^-notest$/) { $NOTEST = 1; $NORUNNINGTESTS = 1; next; } - if (/^-norunningtests$/) { $NORUNNINGTESTS = 1; next; } - if (/^-parallel$/) { $MAKEOPTS = "$MAKEOPTS -j2 -l3.0"; next; } - if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1"; next; } - if (/^-pedantic$/) { - $MAKEOPTS = "$MAKEOPTS CompileOptimizeOpts='-O3 -DNDEBUG -finline-functions -Wpointer-arith -Wcast-align -Wno-deprecated -Wold-style-cast -Wabi -Woverloaded-virtual -Weffc++ -ffor-scope'"; - next; - } - if (/^-enable-linscan$/) { $PROGTESTOPTS .= " ENABLE_LINEARSCAN=1"; next; } - if (/^-disable-codegen$/){ $PROGTESTOPTS .= " DISABLE_JIT=1 DISABLE_LLC=1"; - $CONFIGUREARGS="--disable-jit --disable-llc_diffs"; - next; } - if (/^-verbose$/) { $VERBOSE = 1; next; } - if (/^-debug$/) { $DEBUG = 1; next; } - - print "Unknown option: $_ : ignoring!\n"; -} - -if ($ENV{'LLVMGCCDIR'}) { - $CONFIGUREARGS .= " --with-llvmgccdir=" . $ENV{'LLVMGCCDIR'}; -} - -die "Must specify 0 or 3 options!" if (@ARGV != 0 and @ARGV != 3); - -if (@ARGV == 3) { - $CVSRootDir = $ARGV[0]; - $BuildDir = $ARGV[1]; - $WebDir = $ARGV[2]; -} - - -my $Template = "$BuildDir/llvm/utils/NightlyTestTemplate.html"; -my $Prefix = "$WebDir/$DATE"; - -if ($VERBOSE) { - print "INITIALIZED\n"; - print "CVS Root = $CVSRootDir\n"; - print "BuildDir = $BuildDir\n"; - print "WebDir = $WebDir\n"; - print "Prefix = $Prefix\n"; -} - - -# -# Create the CVS repository directory -# -if (!$NOCHECKOUT) { - if (-d $BuildDir) { - if (!$NOREMOVE) { - system "rm -rf $BuildDir"; - } else { - die "CVS checkout directory $BuildDir already exists!"; - } - } - mkdir $BuildDir or die "Could not create CVS checkout directory $BuildDir!"; -} -chdir $BuildDir or die "Could not change to CVS checkout directory $BuildDir!"; - - -# -# Check out the llvm tree, saving CVS messages to the cvs log... -# -$CVSOPT = ""; -$CVSOPT = "-z3" if $CVSRootDir =~ /^:ext:/; # Use compression if going over ssh. -if (!$NOCHECKOUT) { - if ( $VERBOSE ) { print "CHECKOUT STAGE\n"; } - system "(time -p cvs $CVSOPT -d $CVSRootDir co llvm) > $Prefix-CVS-Log.txt 2>&1"; -} - -chdir "llvm" or die "Could not change into llvm directory!"; - -if (!$NOCHECKOUT) { - if ( $VERBOSE ) { print "UPDATE STAGE\n"; } - system "cvs update -P -d > /dev/null 2>&1" ; -} - -# Read in the HTML template file... -my $TemplateContents = ReadFile $Template; - - -# -# Get some static statistics about the current state of CVS -# -my $CVSCheckoutTime = GetRegex "([0-9.]+)", `grep '^real' $Prefix-CVS-Log.txt`; -my $NumFilesInCVS = `egrep '^U' $Prefix-CVS-Log.txt | wc -l` + 0; -my $NumDirsInCVS = `egrep '^cvs (checkout|server|update):' $Prefix-CVS-Log.txt | wc -l` + 0; -$LOC = GetRegex "([0-9]+) +total", `wc -l \`utils/getsrcs.sh\` | grep total`; - -# -# Build the entire tree, saving build messages to the build log -# -if (!$NOCHECKOUT) { - if ( $VERBOSE ) { print "CONFIGURE STAGE\n"; } - system "(time -p ./configure $CONFIGUREARGS --enable-spec --with-objroot=.) > $Prefix-Build-Log.txt 2>&1"; - - if ( $VERBOSE ) { print "BUILD STAGE\n"; } - # Build the entire tree, capturing the output into $Prefix-Build-Log.txt - system "(time -p gmake $MAKEOPTS) >> $Prefix-Build-Log.txt 2>&1"; -} - - sub GetRegexNum { my ($Regex, $Num, $Regex2, $File) = @_; my @Items = split "\n", `grep '$Regex' $File`; return GetRegex $Regex2, $Items[$Num]; } -# -# Get some statistics about the build... -# -my @Linked = split '\n', `grep Linking $Prefix-Build-Log.txt`; -my $NumExecutables = scalar(grep(/executable/, @Linked)); -my $NumLibraries = scalar(grep(!/executable/, @Linked)); -my $NumObjects = `grep '^Compiling' $Prefix-Build-Log.txt | wc -l` + 0; - -my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$Prefix-Build-Log.txt"; -my $ConfigTimeS = GetRegexNum "^sys", 0, "([0-9.]+)", "$Prefix-Build-Log.txt"; -my $ConfigTime = $ConfigTimeU+$ConfigTimeS; # ConfigTime = User+System -my $ConfigWallTime = GetRegexNum "^real", 0,"([0-9.]+)","$Prefix-Build-Log.txt"; - -my $BuildTimeU = GetRegexNum "^user", 1, "([0-9.]+)", "$Prefix-Build-Log.txt"; -my $BuildTimeS = GetRegexNum "^sys", 1, "([0-9.]+)", "$Prefix-Build-Log.txt"; -my $BuildTime = $BuildTimeU+$BuildTimeS; # BuildTime = User+System -my $BuildWallTime = GetRegexNum "^real", 1, "([0-9.]+)","$Prefix-Build-Log.txt"; - -my $BuildError = ""; -if (`grep '^gmake[^:]*: .*Error' $Prefix-Build-Log.txt | wc -l` + 0 || - `grep '^gmake: \*\*\*.*Stop.' $Prefix-Build-Log.txt | wc -l`+0) { - $BuildError = "

Build error: compilation " . - "aborted

"; - print "BUILD ERROR\n"; -} - sub GetQMTestResults { # (filename) my ($filename) = @_; my @lines; @@ -297,42 +187,42 @@ sub GetQMTestResults { # (filename) my $nocopy = 0; while ( ) { if ( length($_) > 1 ) { - chomp($_); - if ( ! m/: PASS[ ]*$/ && - ! m/^ qmtest.target:/ && - ! m/^ local/ && - ! m/^gmake:/ ) { - if ( m/: XFAIL/ ) { - $nocopy = 1; - } elsif ( m/: XPASS/ || m/: FAIL/ ) { - $nocopy = 0; - if ( $first_list ) { - $first_list = 0; - $should_break = 1; - push(@lines,"$_
\n"); - } else { - push(@lines,"
  • $_
    \n"); - } - } elsif ( m/^--- STATISTICS/ ) { - if ( $first_list ) { push(@lines,"PERFECT!"); } - push(@lines,"
  • STATISTICS

    \n");
    -	    $should_break = 0;
    -	    $nocopy = 0;
    -	  } elsif ( m/^--- TESTS WITH/ ) {
    -	    $should_break = 1;
    -	    $first_list = 1;
    -	    $nocopy = 0;
    -	    push(@lines,"

    TESTS WITH UNEXPECTED RESULTS

    1. \n"); - } elsif ( m/^real / ) { - last; - } elsif (!$nocopy) { - if ( $should_break ) { - push(@lines,"$_
      \n"); - } else { - push(@lines,"$_\n"); - } - } - } + chomp($_); + if ( ! m/: PASS[ ]*$/ && + ! m/^ qmtest.target:/ && + ! m/^ local/ && + ! m/^gmake:/ ) { + if ( m/: XFAIL/ ) { + $nocopy = 1; + } elsif ( m/: XPASS/ || m/: FAIL/ ) { + $nocopy = 0; + if ( $first_list ) { + $first_list = 0; + $should_break = 1; + push(@lines,"$_
      \n"); + } else { + push(@lines,"
    2. $_
      \n"); + } + } elsif ( m/^--- STATISTICS/ ) { + if ( $first_list ) { push(@lines,"PERFECT!"); } + push(@lines,"

    STATISTICS

    \n");
    +            $should_break = 0;
    +            $nocopy = 0;
    +          } elsif ( m/^--- TESTS WITH/ ) {
    +            $should_break = 1;
    +            $first_list = 1;
    +            $nocopy = 0;
    +            push(@lines,"

    TESTS WITH UNEXPECTED RESULTS

    1. \n"); + } elsif ( m/^real / ) { + last; + } elsif (!$nocopy) { + if ( $should_break ) { + push(@lines,"$_
      \n"); + } else { + push(@lines,"$_\n"); + } + } + } } } close SRCHFILE; @@ -341,16 +231,185 @@ sub GetQMTestResults { # (filename) return "$content
    \n"; } + +##################################################################### +## MAIN PROGRAM +##################################################################### + +my $Template = ""; +my $PlotScriptFilename = ""; + +# Parse arguments... +while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) { + shift; + last if /^--$/; # Stop processing arguments on -- + + # List command line options here... + if (/^-nocheckout$/) { $NOCHECKOUT = 1; next; } + if (/^-noremove$/) { $NOREMOVE = 1; next; } + if (/^-nofeaturetests$/) { $NOFEATURES = 1; next; } + if (/^-noregressiontests$/){ $NOREGRESSIONS = 1; next; } + if (/^-notest$/) { $NOTEST = 1; $NORUNNINGTESTS = 1; next; } + if (/^-norunningtests$/) { $NORUNNINGTESTS = 1; next; } + if (/^-parallel$/) { $MAKEOPTS = "$MAKEOPTS -j2 -l3.0"; next; } + if (/^-release$/) { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1"; next; } + if (/^-pedantic$/) { + $MAKEOPTS = "$MAKEOPTS CompileOptimizeOpts='-O3 -DNDEBUG -finline-functions -Wpointer-arith -Wcast-align -Wno-deprecated -Wold-style-cast -Wabi -Woverloaded-virtual -ffor-scope'"; + next; + } + if (/^-enable-linscan$/) { $PROGTESTOPTS .= " ENABLE_LINEARSCAN=1"; next; } + if (/^-disable-codegen$/){ $PROGTESTOPTS .= " DISABLE_JIT=1 DISABLE_LLC=1"; + $CONFIGUREARGS="--disable-jit --disable-llc_diffs"; + next; } + if (/^-verbose$/) { $VERBOSE = 1; next; } + if (/^-debug$/) { $DEBUG = 1; next; } + if (/^-nice$/) { $NICE = "nice "; next; } + if (/^-gnuplotscript$/) { $PlotScriptFilename = $ARGV[0]; shift; next; } + if (/^-templatefile$/) { $Template = $ARGV[0]; shift;; next; } + + print "Unknown option: $_ : ignoring!\n"; +} + +if ($ENV{'LLVMGCCDIR'}) { + $CONFIGUREARGS .= " --with-llvmgccdir=" . $ENV{'LLVMGCCDIR'}; +} + +die "Must specify 0 or 3 options!" if (@ARGV != 0 and @ARGV != 3); + +if (@ARGV == 3) { + $CVSRootDir = $ARGV[0]; + $BuildDir = $ARGV[1]; + $WebDir = $ARGV[2]; +} + +if ( $Template eq "" ) { + $Template = "$BuildDir/llvm/utils/NightlyTestTemplate.html"; +} +die "Template file $Template is not readable" if ( ! -r "$Template" ); + +if ( $PlotScriptFilename eq "" ) { + $PlotScriptFilename = "$BuildDir/llvm/utils/NightlyTest.gnuplot"; +} +die "GNUPlot Script $PlotScriptFilename is not readable" if ( ! -r "$PlotScriptFilename" ); + +my $Prefix = "$WebDir/$DATE"; + +#define the file names we'll use +my $BuildLog = "$Prefix-Build-Log.txt"; +my $CVSLog = "$Prefix-CVS-Log.txt"; +my $FeatureTestsLog = "$Prefix-FeatureTests-Log.txt"; +my $RegressionTestsLog = "$Prefix-RegressionTests-Log.txt"; +my $OldenTestsLog = "$Prefix-Olden-tests.txt"; +my $SingleSourceLog = "$Prefix-SingleSource-ProgramTest.txt.gz"; +my $MultiSourceLog = "$Prefix-MultiSource-ProgramTest.txt.gz"; +my $ExternalLog = "$Prefix-External-ProgramTest.txt.gz"; + +if ($VERBOSE) { + print "INITIALIZED\n"; + print "CVS Root = $CVSRootDir\n"; + print "BuildDir = $BuildDir\n"; + print "WebDir = $WebDir\n"; + print "Prefix = $Prefix\n"; + print "CVSLog = $CVSLog\n"; + print "BuildLog = $BuildLog\n"; +} + + +# +# Create the CVS repository directory +# +if (!$NOCHECKOUT) { + if (-d $BuildDir) { + if (!$NOREMOVE) { + system "rm -rf $BuildDir"; + } else { + die "CVS checkout directory $BuildDir already exists!"; + } + } + mkdir $BuildDir or die "Could not create CVS checkout directory $BuildDir!"; +} + +ChangeDir( $BuildDir, "CVS checkout directory" ); + + +# +# Check out the llvm tree, saving CVS messages to the cvs log... +# +$CVSOPT = ""; +$CVSOPT = "-z3" if $CVSRootDir =~ /^:ext:/; # Use compression if going over ssh. +if (!$NOCHECKOUT) { + if ( $VERBOSE ) { print "CHECKOUT STAGE\n"; } + system "(time -p $NICE cvs $CVSOPT -d $CVSRootDir co llvm) > $CVSLog 2>&1"; +} + +ChangeDir( "llvm" , "llvm source directory") ; + +if (!$NOCHECKOUT) { + if ( $VERBOSE ) { print "UPDATE STAGE\n"; } + system "$NICE cvs update -P -d >> $CVSLog 2>&1" ; +} + +# Read in the HTML template file... +if ( $VERBOSE ) { print "READING TEMPLATE\n"; } +my $TemplateContents = ReadFile $Template; + +# +# Get some static statistics about the current state of CVS +# +my $CVSCheckoutTime = GetRegex "([0-9.]+)", `grep '^real' $CVSLog`; +my $NumFilesInCVS = `egrep '^U' $CVSLog | wc -l` + 0; +my $NumDirsInCVS = `egrep '^cvs (checkout|server|update):' $CVSLog | wc -l` + 0; +$LOC = GetRegex "([0-9]+) +total", `wc -l \`utils/getsrcs.sh\` | grep total`; + +# +# Build the entire tree, saving build messages to the build log +# +if (!$NOCHECKOUT) { + if ( $VERBOSE ) { print "CONFIGURE STAGE\n"; } + system "(time -p $NICE ./configure $CONFIGUREARGS --enable-spec --with-objroot=.) > $BuildLog 2>&1"; + + if ( $VERBOSE ) { print "BUILD STAGE\n"; } + # Build the entire tree, capturing the output into $BuildLog + system "(time -p $NICE gmake $MAKEOPTS) >> $BuildLog 2>&1"; +} + + +# +# Get some statistics about the build... +# +my @Linked = split '\n', `grep Linking $BuildLog`; +my $NumExecutables = scalar(grep(/executable/, @Linked)); +my $NumLibraries = scalar(grep(!/executable/, @Linked)); +my $NumObjects = `grep '^Compiling' $BuildLog | wc -l` + 0; + +my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$BuildLog"; +my $ConfigTimeS = GetRegexNum "^sys", 0, "([0-9.]+)", "$BuildLog"; +my $ConfigTime = $ConfigTimeU+$ConfigTimeS; # ConfigTime = User+System +my $ConfigWallTime = GetRegexNum "^real", 0,"([0-9.]+)","$BuildLog"; + +my $BuildTimeU = GetRegexNum "^user", 1, "([0-9.]+)", "$BuildLog"; +my $BuildTimeS = GetRegexNum "^sys", 1, "([0-9.]+)", "$BuildLog"; +my $BuildTime = $BuildTimeU+$BuildTimeS; # BuildTime = User+System +my $BuildWallTime = GetRegexNum "^real", 1, "([0-9.]+)","$BuildLog"; + +my $BuildError = ""; +if (`grep '^gmake[^:]*: .*Error' $BuildLog | wc -l` + 0 || + `grep '^gmake: \*\*\*.*Stop.' $BuildLog | wc -l`+0) { + $BuildError = "

    Build error: compilation " . + "aborted

    "; + if ($VERBOSE) { print "BUILD ERROR\n"; } +} + # Get results of feature tests. my $FeatureTestResults; # String containing the results of the feature tests my $FeatureTime; # System+CPU Time for feature tests my $FeatureWallTime; # Wall Clock Time for feature tests if (!$NOFEATURES) { if ( $VERBOSE ) { print "FEATURE TEST STAGE\n"; } - my $feature_output = "$Prefix-FeatureTests-Log.txt"; + my $feature_output = "$FeatureTestsLog"; # Run the feature tests so we can summarize the results - system "(time -p gmake -C test Feature.t) > $feature_output 2>&1"; + system "(time -p gmake $MAKEOPTS -C test Feature.t) > $feature_output 2>&1"; # Extract test results $FeatureTestResults = GetQMTestResults("$feature_output"); @@ -369,10 +428,10 @@ if (!$NOFEATURES) { if (!$NOREGRESSIONS) { if ( $VERBOSE ) { print "REGRESSION TEST STAGE\n"; } - my $regression_output = "$Prefix-RegressionTests-Log.txt"; + my $regression_output = "$RegressionTestsLog"; # Run the regression tests so we can summarize the results - system "(time -p gmake -C test Regression.t) > $regression_output 2>&1"; + system "(time -p gmake $MAKEOPTS -C test Regression.t) > $regression_output 2>&1"; # Extract test results $RegressionTestResults = GetQMTestResults("$regression_output"); @@ -397,7 +456,7 @@ if ( $VERBOSE ) { print "BUILD INFORMATION COLLECTION STAGE\n"; } # # Get warnings from the build # -my @Warn = split "\n", `egrep 'warning:|Entering dir' $Prefix-Build-Log.txt`; +my @Warn = split "\n", `egrep 'warning:|Entering dir' $BuildLog`; my @Warnings; my $CurDir = ""; @@ -477,31 +536,32 @@ my $ModifiedFilesList = AddPreTag join "\n", sort keys %ModifiedFiles; my $RemovedFilesList = AddPreTag join "\n", sort keys %RemovedFiles; my $TestError = 1; -my $SingleSourceProgramsTable; -my $MultiSourceProgramsTable; -my $ExternalProgramsTable; +my $SingleSourceProgramsTable = "!"; +my $MultiSourceProgramsTable = "!"; +my $ExternalProgramsTable = "!"; sub TestDirectory { my $SubDir = shift; - chdir "test/Programs/$SubDir" or - die "Could not change into test/Programs/$SubDir testdir!"; + ChangeDir( "test/Programs/$SubDir", "Programs Test Subdirectory" ); + + my $ProgramTestLog = "$Prefix-$SubDir-ProgramTest.txt"; # Run the programs tests... creating a report.nightly.html file if (!$NOTEST) { system "gmake -k $MAKEOPTS $PROGTESTOPTS report.nightly.html " - . "TEST=nightly > $Prefix-$SubDir-ProgramTest.txt 2>&1"; + . "TEST=nightly > $ProgramTestLog 2>&1"; } else { - system "gunzip $Prefix-$SubDir-ProgramTest.txt.gz"; + system "gunzip ${ProgramTestLog}.gz"; } my $ProgramsTable; - if (`grep '^gmake[^:]: .*Error' $Prefix-$SubDir-ProgramTest.txt | wc -l` + 0){ + if (`grep '^gmake[^:]: .*Error' $ProgramTestLog | wc -l` + 0){ $TestError = 1; $ProgramsTable = "

    Error running tests!

    "; print "ERROR TESTING\n"; - } elsif (`grep '^gmake[^:]: .*No rule to make target' $Prefix-$SubDir-ProgramTest.txt | wc -l` + 0) { + } elsif (`grep '^gmake[^:]: .*No rule to make target' $ProgramTestLog | wc -l` + 0) { $TestError = 1; $ProgramsTable = "

    Makefile error running tests!

    "; @@ -513,17 +573,17 @@ sub TestDirectory { # # Create a list of the tests which were run... # - system "egrep 'TEST-(PASS|FAIL)' < $Prefix-$SubDir-ProgramTest.txt " + system "egrep 'TEST-(PASS|FAIL)' < $ProgramTestLog " . "| sort > $Prefix-$SubDir-Tests.txt"; } # Compress the test output - system "gzip -f $Prefix-$SubDir-ProgramTest.txt"; - chdir "../../.." or die "Cannot return to parent directory!"; + system "gzip -f $ProgramTestLog"; + ChangeDir( "../../..", "Programs Test Parent Directory" ); return $ProgramsTable; } -# If we build the tree successfully, run the nightly programs tests... +# If we built the tree successfully, run the nightly programs tests... if ($BuildError eq "") { if ( $VERBOSE ) { print "SingleSource TEST STAGE\n"; @@ -541,9 +601,7 @@ if ($BuildError eq "") { " $Prefix-External-Tests.txt | sort > $Prefix-Tests.txt"; } -if ( $VERBOSE ) { - print "TEST INFORMATION COLLECTION STAGE\n"; -} +if ( $VERBOSE ) { print "TEST INFORMATION COLLECTION STAGE\n"; } my ($TestsAdded, $TestsRemoved, $TestsFixed, $TestsBroken) = ("","","",""); if ($TestError) { @@ -592,25 +650,27 @@ if ($TestError) { # If we built the tree successfully, runs of the Olden suite with # LARGE_PROBLEM_SIZE on so that we can get some "running" statistics. if ($BuildError eq "") { + if ( $VERBOSE ) { print "OLDEN TEST SUITE STAGE\n"; } my ($NATTime, $CBETime, $LLCTime, $JITTime, $OptTime, $BytecodeSize, $MachCodeSize) = ("","","","","","",""); if (!$NORUNNINGTESTS) { - chdir "test/Programs/MultiSource/Benchmarks/Olden" or die "Olden tests moved?"; + ChangeDir( "$BuildDir/llvm/test/Programs/MultiSource/Benchmarks/Olden", + "Olden Test Directory"); # Clean out previous results... - system "gmake $MAKEOPTS clean > /dev/null 2>&1"; + system "$NICE gmake $MAKEOPTS clean > /dev/null 2>&1"; # Run the nightly test in this directory, with LARGE_PROBLEM_SIZE enabled! system "gmake -k $MAKEOPTS $PROGTESTOPTS report.nightly.raw.out TEST=nightly " . " LARGE_PROBLEM_SIZE=1 > /dev/null 2>&1"; - system "cp report.nightly.raw.out $Prefix-Olden-tests.txt"; + system "cp report.nightly.raw.out $OldenTestsLog"; } else { - system "gunzip $Prefix-Olden-tests.txt.gz"; + system "gunzip ${OldenTestsLog}.gz"; } - # Now we know we have $Prefix-Olden-tests.txt as the raw output file. Split + # Now we know we have $OldenTestsLog as the raw output file. Split # it up into records and read the useful information. - my @Records = split />>> ========= /, ReadFile "$Prefix-Olden-tests.txt"; + my @Records = split />>> ========= /, ReadFile "$OldenTestsLog"; shift @Records; # Delete the first (garbage) record # Loop over all of the records, summarizing them into rows for the running @@ -644,12 +704,10 @@ if ($BuildError eq "") { AddRecord($BytecodeSize, "running_Olden_bytecode.txt"); AddRecord($MachCodeSize, "running_Olden_machcode.txt"); - system "gzip -f $Prefix-Olden-tests.txt"; + system "gzip -f $OldenTestsLog"; } - - # # Get a list of the previous days that we can link to... # @@ -659,13 +717,13 @@ if ((scalar @PrevDays) > 20) { splice @PrevDays, 20; # Trim down list to something reasonable... } -my $PrevDaysList = # Format list for sidebar - join "\n ", map { "$_
    " } @PrevDays; +# Format list for sidebar +my $PrevDaysList = join "\n ", map { "$_
    " } @PrevDays; # # Start outputing files into the web directory # -chdir $WebDir or die "Could not change into web directory!"; +ChangeDir( $WebDir, "Web Directory" ); # Add information to the files which accumulate information for graphs... AddRecord($LOC, "running_loc.txt"); @@ -679,13 +737,12 @@ if ( $VERBOSE ) { # $GNUPLOT = "/usr/dcs/software/supported/bin/gnuplot"; $GNUPLOT = "gnuplot" if ! -x $GNUPLOT; -$PlotScriptFilename = "$BuildDir/llvm/utils/NightlyTest.gnuplot"; -system ($GNUPLOT, $PlotScriptFilename); +system ("$GNUPLOT", $PlotScriptFilename); # # Remove the cvs tree... # -system "rm -rf $BuildDir" if (!$NOCHECKOUT and !$NOREMOVE); +system ( "$NICE rm -rf $BuildDir") if (!$NOCHECKOUT and !$NOREMOVE); # # Print out information... @@ -719,20 +776,12 @@ if ( $VERBOSE ) { } # Main HTML file... my $Output; +my $TestFinishTime = gmtime; +my $TestPlatform = `uname -a`; eval "\$Output = <; - close FILE; - } - push @Records, "$DATE: $Val"; - WriteFile "$WebDir/$Filename", (join "\n", @Records) . "\n"; - return @Records; -} +# vim: sw=2 ai