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"; |
52 | |