ChangeDir now returns the correct value
[oota-llvm.git] / utils / NewNightlyTest.pl
index eb4fc50d1c82ad11817c9807d9cf680a0dab9d53..033ae1c7af0b9924eb349ec6479968e5b7fe75e4 100755 (executable)
@@ -52,6 +52,8 @@ use Socket;
 #                   the default.
 #  -compileflags    Next argument specifies extra options passed to make when
 #                   building LLVM.
+#  -use-gmake                  Use gmake instead of the default make command to build
+#                   llvm and run tests.
 #
 #  ---------------- Options to configure llvm-test ----------------------------
 #  -extraflags      Next argument specifies extra options that are passed to
@@ -108,6 +110,7 @@ $CONFIGUREARGS="";
 $nickname="";
 $NOTEST=0;
 $NORUNNINGTESTS=0;
+$MAKECMD="make";
 
 while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) {
     shift;
@@ -122,7 +125,8 @@ while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) {
     if (/^-norunningtests$/) { $NORUNNINGTESTS = 1; next; }
     if (/^-parallel$/)       { $MAKEOPTS = "$MAKEOPTS -j2 -l3.0"; next; }
     if (/^-release$/)        { $MAKEOPTS = "$MAKEOPTS ENABLE_OPTIMIZED=1 ".
-                                                                                                                                                  "OPTIMIZE_OPTION=-O2"; next; }
+                                                                                                            "OPTIMIZE_OPTION=-O2"; 
+                                                              $BUILDTYPE="release"; next; }
     if (/^-enable-llcbeta$/) { $PROGTESTOPTS .= " ENABLE_LLCBETA=1"; next; }
     if (/^-disable-llc$/)    { $PROGTESTOPTS .= " DISABLE_LLC=1";
                               $CONFIGUREARGS .= " --disable-llc_diffs"; next; } 
@@ -161,6 +165,9 @@ while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) {
     if (/^-compileflags/)    {
        $MAKEOPTS = "$MAKEOPTS $ARGV[0]"; shift; next;
     }
+    if (/^-use-gmake/)    {
+                       $MAKECMD = "gmake"; shift; next;
+    }
     if (/^-extraflags/)      {
        $PROGTESTOPTS .= " EXTRA_FLAGS=\'$ARGV[0]\'"; shift; next;
     }
@@ -177,7 +184,13 @@ if ($CONFIGUREARGS !~ /--disable-jit/) {
     $CONFIGUREARGS .= " --enable-jit";
 }
 
-die "Must specify 0 or 3 options!" if (@ARGV != 0 and @ARGV != 3);
+
+if (@ARGV != 0 and @ARGV != 3){
+       foreach $x (@ARGV){
+               print "$x\n";
+       }
+       print "Must specify 0 or 3 options!";
+}
 
 if (@ARGV == 3) {
     $CVSRootDir = $ARGV[0];
@@ -185,10 +198,21 @@ if (@ARGV == 3) {
     $WebDir     = $ARGV[2];
 }
 
+if($CVSRootDir eq "" or
+   $BuildDir   eq "" or
+   $WebDir     eq ""){
+   die("please specify a cvs root directory, a build directory, and a ".
+       "web directory");
+ }
 if($nickname eq ""){
        die ("Please invoke NewNightlyTest.pl with command line option \"-nickname <nickname>\"");
 }
 
+if($BUILDTYPE ne "release"){
+       $BUILDTYPE = "debug";
+}
+
 ##############################################################
 #
 #define the file names we'll use
@@ -278,7 +302,12 @@ 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) ";
+    $result = chdir($dir);
+    if(!$result){
+       print "ERROR!!! Cannot change directory to: $name ($dir) because $!"; 
+       return false;
+    }
+    return true;
 }
 
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -584,19 +613,18 @@ my $UserUpdateList = join "\n", sort keys %UsersUpdated;
 ##############################################################
 if (!$NOCHECKOUT && !$NOBUILD) {
     my $EXTRAFLAGS = "--enable-spec --with-objroot=.";
-    if ( $VERBOSE )
-    {
+    if ( $VERBOSE ){
         print "CONFIGURE STAGE:\n";
         print "(time -p $NICE ./configure $CONFIGUREARGS $EXTRAFLAGS) > $BuildLog 2>&1\n";
     }
     system "(time -p $NICE ./configure $CONFIGUREARGS $EXTRAFLAGS) > $BuildLog 2>&1";
     if ( $VERBOSE ) 
     { 
-       print "BUILD STAGE:\n";
-       print "(time -p $NICE make $MAKEOPTS) >> $BuildLog 2>&1\n";
+                       print "BUILD STAGE:\n";
+                       print "(time -p $NICE $MAKECMD $MAKEOPTS) >> $BuildLog 2>&1\n";
     }
     # Build the entire tree, capturing the output into $BuildLog
-    system "(time -p $NICE make $MAKEOPTS) >> $BuildLog 2>&1";
+    system "(time -p $NICE $MAKECMD $MAKEOPTS) >> $BuildLog 2>&1";
 }
 
 
@@ -611,25 +639,6 @@ if (!$NOCHECKOUT && !$NOBUILD) {
 #my $NumLibraries   = scalar(grep(!/executable/, @Linked));
 #my $NumObjects     = `grep ']\: Compiling ' $BuildLog | wc -l` + 0;
 
-my $a_file_sizes="";
-my $o_file_sizes="";
-if(!$BuildError){
-       ChangeDir( "$BuildDir", "Build Directory" );
-       $afiles = `find . -iname '*.a' -ls`;
-       $ofiles = `find . -iname '*.o' -ls`;
-       @AFILES = split "\n", $afiles;
-       $a_file_sizes="";
-       foreach $x (@AFILES){
-         $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/;
-         $a_file_sizes.="$1 $2\n";
-       }       
-       @OFILES = split "\n", $ofiles;
-       $o_file_sizes="";
-       foreach $x (@OFILES){
-         $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/;
-         $o_file_sizes.="$1 $2\n";
-       }
-}
 
 my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$BuildLog";
 my $ConfigTimeS = GetRegexNum "^sys", 0, "([0-9.]+)", "$BuildLog";
@@ -652,14 +661,42 @@ if($NOBUILD){
     $BuildStatus = "Skipped by user";
     $BuildError = 1;
 }
-elsif (`grep '^make[^:]*: .*Error' $BuildLog | wc -l` + 0 ||
-    `grep '^make: \*\*\*.*Stop.' $BuildLog | wc -l`+0) {
+elsif (`grep '^$MAKECMD\[^:]*: .*Error' $BuildLog | wc -l` + 0 ||
+    `grep '^$MAKECMD: \*\*\*.*Stop.' $BuildLog | wc -l`+0) {
     $BuildStatus = "Error: compilation aborted";
     $BuildError = 1;
     print  "\n***ERROR BUILDING TREE\n\n";
 }
 if ($BuildError) { $NODEJAGNU=1; }
 
+my $a_file_sizes="";
+my $o_file_sizes="";
+if(!$BuildError){
+       if ( $VERBOSE ){
+        print "Organizing size of .o and .a files\n";
+    }
+       ChangeDir( "$BuildDir/llvm", "Build Directory" );
+       $afiles = `find . -iname '*.a' -ls`;
+       $ofiles = `find . -iname '*.o' -ls`;
+       @AFILES = split "\n", $afiles;
+       $a_file_sizes="";
+       foreach $x (@AFILES){
+         $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/;
+         $a_file_sizes.="$1 $2 $BUILDTYPE\n";
+       }       
+       @OFILES = split "\n", $ofiles;
+       $o_file_sizes="";
+       foreach $x (@OFILES){
+         $x =~ m/.+\s+.+\s+.+\s+.+\s+.+\s+.+\s+(.+)\s+.+\s+.+\s+.+\s+(.+)/;
+         $o_file_sizes.="$1 $2 $BUILDTYPE\n";
+       }
+}
+else{
+       $a_file_sizes="No data due to a bad build.";
+       $o_file_sizes="No data due to a bad build.";
+}
+
+
 ##############################################################
 #
 # Running dejagnu tests
@@ -670,13 +707,13 @@ my $dejagnu_output = "$DejagnuTestsLog";
 if(!$NODEJAGNU) {
     if($VERBOSE) 
     { 
-       print "DEJAGNU FEATURE/REGRESSION TEST STAGE:\n"; 
-       print "(time -p make $MAKEOPTS check) > $dejagnu_output 2>&1\n";
+                       print "DEJAGNU FEATURE/REGRESSION TEST STAGE:\n"; 
+                       print "(time -p $MAKECMD $MAKEOPTS check) > $dejagnu_output 2>&1\n";
     }
 
     #Run the feature and regression tests, results are put into testrun.sum
     #Full log in testrun.log
-    system "(time -p make $MAKEOPTS check) > $dejagnu_output 2>&1";
+    system "(time -p $MAKECMD $MAKEOPTS check) > $dejagnu_output 2>&1";
     
     #Copy the testrun.log and testrun.sum to our webdir
     CopyFile("test/testrun.log", $DejagnuLog);
@@ -744,85 +781,78 @@ my ($WarningsAdded, $WarningsRemoved) = DiffFiles "-Warnings.txt";
 #
 ##############################################################
 sub TestDirectory {
-    my $SubDir = shift;
-    
-    ChangeDir( "projects/llvm-test/$SubDir", "Programs Test Subdirectory" );
-
-    my $ProgramTestLog = "$Prefix-$SubDir-ProgramTest.txt";
-    #my $ProgramTestLog = "$Prefix-MultiSource-ProgramTest.txt"; #CHANGE ME!
-    
-    # Run the programs tests... creating a report.nightly.csv file
-    if (!$NOTEST) {
-       print "make -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv "
-           . "TEST=nightly > $ProgramTestLog 2>&1\n";
-       system "make -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv "
-           . "TEST=nightly > $ProgramTestLog 2>&1";
-       $llcbeta_options=`make print-llcbeta-option`;
-    } 
+       my $SubDir = shift;
+       
+       ChangeDir( "$BuildDir/llvm/projects/llvm-test/$SubDir", "Programs Test Subdirectory" ) || return ("", "");
+       
+       my $ProgramTestLog = "$Prefix-$SubDir-ProgramTest.txt";
+       
+       # Run the programs tests... creating a report.nightly.csv file
+       if (!$NOTEST) {
+               print "$MAKECMD -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv ".
+          "TEST=nightly > $ProgramTestLog 2>&1\n";
+               system "$MAKECMD -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv ".
+           "TEST=nightly > $ProgramTestLog 2>&1";
+         $llcbeta_options=`$MAKECMD print-llcbeta-option`;
+       } 
     
-    my $ProgramsTable;
-    if (`grep '^make[^:]: .*Error' $ProgramTestLog | wc -l` + 0){
-       $TestError = 1;
-       $ProgramsTable="Error running test $SubDir\n";
-       print "ERROR TESTING\n";
-    } elsif (`grep '^make[^:]: .*No rule to make target' $ProgramTestLog | wc -l` + 0) {
-       $TestError = 1;
-       $ProgramsTable="Makefile error running tests $SubDir!\n";
-       print "ERROR TESTING\n";
-    } else {
-       $TestError = 0;
+  my $ProgramsTable;
+  if (`grep '^$MAKECMD\[^:]: .*Error' $ProgramTestLog | wc -l` + 0){
+    $TestError = 1;
+    $ProgramsTable="Error running test $SubDir\n";
+    print "ERROR TESTING\n";
+  } elsif (`grep '^$MAKECMD\[^:]: .*No rule to make target' $ProgramTestLog | wc -l` + 0) {
+    $TestError = 1;
+    $ProgramsTable="Makefile error running tests $SubDir!\n";
+    print "ERROR TESTING\n";
+  } else {
+    $TestError = 0;
+    #
+    # Create a list of the tests which were run...
+    #
+    system "egrep 'TEST-(PASS|FAIL)' < $ProgramTestLog ".
+           "| sort > $Prefix-multisourceprogramstable.txt";
+  }
+  $ProgramsTable = ReadFile "report.nightly.csv";
 
-       #
-       # Create a list of the tests which were run...
-       #
-       system "egrep 'TEST-(PASS|FAIL)' < $ProgramTestLog "
-       . "| sort > $Prefix-multisourceprogramstable.txt";
-    }
-    $ProgramsTable = ReadFile "report.nightly.csv";
-    
-    ChangeDir( "../../..", "Programs Test Parent Directory" );
-    return ($ProgramsTable, $llcbeta_options);
+  ChangeDir( "../../..", "Programs Test Parent Directory" );
+  return ($ProgramsTable, $llcbeta_options);
 }
 
-$patrickjenkins=1;
-if(!$patrickjenkins){
-    if ( $VERBOSE ) {
-        print "Modified Multisource Olden test stage\n";
-    }
-    ($MultiSourceProgramsTable, $multisource_llcbeta_options) = TestDirectory("MultiSource/");
-    ChangeDir( "../../..", "Programs Test Parent Directory" );
-    
-
-    WriteFile "$WebDir/multisourceprogramstable.txt", $MultiSourceProgramsTable;
-}
-if (!$BuildError && $patrickjenkins) {
-    if ( $VERBOSE ) {
-       print "SingleSource TEST STAGE\n";
-    }
-    ($SingleSourceProgramsTable, $llcbeta_options) = TestDirectory("SingleSource");
-    WriteFile "$Prefix-singlesourceprogramstable.txt", $SingleSourceProgramsTable;
-    if ( $VERBOSE ) {
-       print "MultiSource TEST STAGE\n";
-    }
-    ($MultiSourceProgramsTable, $llcbeta_options) = TestDirectory("MultiSource");
-    WriteFile "$Prefix-multisourceprogramstable.txt", $MultiSourceProgramsTable;
-    if ( ! $NOEXTERNALS ) {
+if (!$BuildError) {
        if ( $VERBOSE ) {
-           print "External TEST STAGE\n";
+    print "SingleSource TEST STAGE\n";
        }
-       ($ExternalProgramsTable, $llcbeta_options) = TestDirectory("External");
-       WriteFile "$Prefix-externalprogramstable.txt", $ExternalProgramsTable;
-       system "cat $Prefix-singlesourceprogramstable.txt $Prefix-multisourceprogramstable.txt ".
-           " $Prefix-externalprogramstable.txt | sort > $Prefix-Tests.txt";
-    } else {
-       $ExternalProgramsTable = "External TEST STAGE SKIPPED\n";
+       ($SingleSourceProgramsTable, $llcbeta_options) = TestDirectory("SingleSource");
        if ( $VERBOSE ) {
-           print "External TEST STAGE SKIPPED\n";
+    print "SingleSource returned $SingleSourceProgramsTable\n";
        }
-       system "cat $Prefix-singlesourceprogramstable.txt $Prefix-multisourceprogramstable.txt ".
-           " | sort > $Prefix-Tests.txt";
-    }
-    WriteFile "$Prefix-externalprogramstable.txt", $ExternalProgramsTable;
+       WriteFile "$Prefix-singlesourceprogramstable.txt", $SingleSourceProgramsTable;
+       if ( $VERBOSE ) {
+         print "MultiSource TEST STAGE\n";
+       }
+       ($MultiSourceProgramsTable, $llcbeta_options) = TestDirectory("MultiSource");
+       WriteFile "$Prefix-multisourceprogramstable.txt", $MultiSourceProgramsTable;
+       if ( $VERBOSE ) {
+         print "MultiSource returned $MultiSourceProgramsTable\n";
+       }
+       if ( ! $NOEXTERNALS ) {
+         if ( $VERBOSE ) {
+                 print "External TEST STAGE\n";
+         }
+         ($ExternalProgramsTable, $llcbeta_options) = TestDirectory("External");
+         WriteFile "$Prefix-externalprogramstable.txt", $ExternalProgramsTable;
+         system "cat $Prefix-singlesourceprogramstable.txt $Prefix-multisourceprogramstable.txt ".
+                      " $Prefix-externalprogramstable.txt | sort > $Prefix-Tests.txt";
+       } else {
+         $ExternalProgramsTable = "External TEST STAGE SKIPPED\n";
+         if ( $VERBOSE ) {
+                 print "External TEST STAGE SKIPPED\n";
+         }
+         system "cat $Prefix-singlesourceprogramstable.txt $Prefix-multisourceprogramstable.txt ".
+                      " | sort > $Prefix-Tests.txt";
+       }
+       WriteFile "$Prefix-externalprogramstable.txt", $ExternalProgramsTable;
 }
 
 ##############################################################
@@ -912,13 +942,13 @@ if (!$BuildError) {
                   "Olden Test Directory");
 
        # Clean out previous results...
-       system "$NICE make $MAKEOPTS clean > /dev/null 2>&1";
+       system "$NICE $MAKECMD $MAKEOPTS clean > /dev/null 2>&1";
        
        # Run the nightly test in this directory, with LARGE_PROBLEM_SIZE and
        # GET_STABLE_NUMBERS enabled!
-       if( $VERBOSE ) { print "make -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv.out TEST=nightly " .
+       if( $VERBOSE ) { print "$MAKECMD -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv.out TEST=nightly " .
                             " LARGE_PROBLEM_SIZE=1 GET_STABLE_NUMBERS=1 > /dev/null 2>&1\n"; }
-       system "make -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv.out TEST=nightly " .
+       system "$MAKECMD -k $MAKEOPTS $PROGTESTOPTS report.nightly.csv.out TEST=nightly " .
            " LARGE_PROBLEM_SIZE=1 GET_STABLE_NUMBERS=1 > /dev/null 2>&1";
        system "cp report.nightly.csv $OldenTestsLog";
     } #else {