Ted Kremenek | 9937216 | 2012-09-10 06:19:34 +0000 | [diff] [blame] | 1 | #!/usr/bin/perl -w |
| 2 | use strict; |
| 3 | require File::Temp; |
| 4 | use File::Temp (); |
| 5 | |
| 6 | die "update_plist_test <test file> <plist file>\n" if ($#ARGV < 1); |
| 7 | my $testFile = shift @ARGV; |
| 8 | die "error: cannot read file $testFile\n" if (! -r $testFile); |
| 9 | my $plistFile = shift @ARGV; |
| 10 | die "error: cannot read file $plistFile\n" if (! -r $plistFile); |
| 11 | |
| 12 | # Create a temp file for the new test. |
| 13 | my $fh = File::Temp->new(); |
| 14 | my $filename = $fh->filename; |
| 15 | $fh->unlink_on_destroy(1); |
| 16 | |
| 17 | # Copy the existing temp file, skipping the FileCheck comments. |
| 18 | open (IN, $testFile) or die "cannot open $testFile\n"; |
| 19 | while (<IN>) { |
| 20 | next if (/^\/\/ CHECK/); |
| 21 | print $fh $_; |
| 22 | } |
| 23 | close(IN); |
| 24 | |
| 25 | # Copy the plist data, and specially format it. |
| 26 | open (IN, $plistFile) or die "cannot open $plistFile\n"; |
| 27 | my $firstArray = 1; |
| 28 | my $first = 1; |
| 29 | while (<IN>) { |
| 30 | # Skip everything not indented. |
| 31 | next if (/^[^\s]/); |
| 32 | # Skip the first array entry, which is for files. |
| 33 | if ($firstArray) { |
| 34 | if (/<\/array>/) { $firstArray = 0; } |
| 35 | next; |
| 36 | } |
| 37 | # Format the CHECK lines. |
| 38 | if ($first) { |
| 39 | print $fh "// CHECK: "; |
| 40 | $first = 0; |
| 41 | } |
| 42 | else { |
| 43 | print $fh "// CHECK-NEXT: "; |
| 44 | } |
| 45 | print $fh $_; |
| 46 | } |
| 47 | close (IN); |
| 48 | close ($fh); |
| 49 | |
| 50 | `cp $filename $testFile`; |
| 51 | print "updated $testFile\n"; |