xref: /llvm-project/clang/utils/analyzer/update_plist_test.pl (revision a54f160b3a98b91cd241a555d904a6b6453affc4)
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