| #!/usr/bin/perl -w | 
 | use strict; | 
 | require File::Temp; | 
 | use File::Temp (); | 
 |  | 
 | die "update_plist_test <test file> <plist file>\n" if ($#ARGV < 1); | 
 | my $testFile = shift @ARGV; | 
 | die "error: cannot read file $testFile\n" if (! -r $testFile); | 
 | my $plistFile = shift @ARGV; | 
 | die "error: cannot read file $plistFile\n" if (! -r $plistFile); | 
 |  | 
 | # Create a temp file for the new test. | 
 | my $fh = File::Temp->new(); | 
 | my $filename = $fh->filename; | 
 | $fh->unlink_on_destroy(1); | 
 |  | 
 | # Copy the existing temp file, skipping the FileCheck comments. | 
 | open (IN, $testFile) or die "cannot open $testFile\n"; | 
 | while (<IN>) { | 
 |   next if (/^\/\/ CHECK/); | 
 |   print $fh $_; | 
 | } | 
 | close(IN); | 
 |  | 
 | # Copy the plist data, and specially format it. | 
 | open (IN, $plistFile) or die "cannot open $plistFile\n"; | 
 | my $firstArray = 1; | 
 | my $first = 1; | 
 | while (<IN>) { | 
 |   # Skip everything not indented. | 
 |   next if (/^[^\s]/); | 
 |   # Skip the first array entry, which is for files. | 
 |   if ($firstArray) { | 
 |     if (/<\/array>/) { $firstArray = 0; } | 
 | 	next; | 
 |   } | 
 |   # Format the CHECK lines. | 
 |   if ($first) { | 
 |   	print $fh "// CHECK: "; | 
 | 	$first = 0; | 
 |   } | 
 |   else { | 
 |   	print $fh "// CHECK-NEXT: "; | 
 |   } | 
 |   print $fh $_; | 
 | } | 
 | close (IN); | 
 | close ($fh); | 
 |  | 
 | `cp $filename $testFile`; | 
 | print "updated $testFile\n"; |