| #!/usr/bin/env perl |
| |
| # This tiny little script, which should be run from the clang |
| # directory (with clang in your patch), tries to take each |
| # compilable Clang test and build a PCH file from that test, then read |
| # and dump the contents of the PCH file just created. |
| use POSIX; |
| use warnings; |
| |
| $exitcode = 0; |
| sub testfiles($$) { |
| my $suffix = shift; |
| my $language = shift; |
| my $passed = 0; |
| my $failed = 0; |
| my $skipped = 0; |
| |
| @files = `ls test/*/*.$suffix`; |
| foreach $file (@files) { |
| chomp($file); |
| my $code = system("clang -fsyntax-only -x $language $file > /dev/null 2>&1"); |
| if ($code == 0) { |
| print("."); |
| $code = system("clang -cc1 -emit-pch -x $language -o $file.pch $file > /dev/null 2>&1"); |
| if ($code == 0) { |
| $code = system("clang -cc1 -include-pch $file.pch -x $language -ast-dump /dev/null > /dev/null 2>&1"); |
| if ($code == 0) { |
| $passed++; |
| } elsif (($code & 0xFF) == SIGINT) { |
| exit($exitcode); |
| } else { |
| print("\n---Failed to dump AST file for \"$file\"---\n"); |
| $exitcode = 1; |
| $failed++; |
| } |
| unlink "$file.pch"; |
| } elsif (($code & 0xFF) == SIGINT) { |
| exit($exitcode); |
| } else { |
| print("\n---Failed to build PCH file for \"$file\"---\n"); |
| $exitcode = 1; |
| $failed++; |
| } |
| } elsif (($code & 0xFF) == SIGINT) { |
| exit($exitcode); |
| } else { |
| print("x"); |
| $skipped++; |
| } |
| } |
| |
| print("\n\n$passed tests passed\n"); |
| print("$failed tests failed\n"); |
| print("$skipped tests skipped ('x')\n") |
| } |
| |
| printf("-----Testing precompiled headers for C-----\n"); |
| testfiles("c", "c"); |
| printf("\n-----Testing precompiled headers for Objective-C-----\n"); |
| testfiles("m", "objective-c"); |
| print("\n"); |
| exit($exitcode); |