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