filter-build-webkit: Don't filter out the location of the missing symbol when linking...
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 17 May 2013 19:33:19 +0000 (19:33 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 17 May 2013 19:33:19 +0000 (19:33 +0000)
Part 3 of 3: <http://webkit.org/b/116247>

Reviewed by Benjamin Poulain.

* Scripts/filter-build-webkit: Change while() loop to for() loop
to track $previousLine, then pass $previousLine into
shouldIgnoreLine().
(shouldIgnoreLine): Add $previousLine argument. Do not skip a
line that begins with four spaces if the previous line is a
linker error message.
* Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
- Add "Ignored: " to test descriptions to document expected
  behavior.
- Add comment blocks for various groups of tests.
- Expand "Build settings" tests since we're changing the code in
  shouldIgnoreLine() that ignores those lines.
- Add tests for undefined symbols error message.
(description): Add.  Extract from global code.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@150286 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/filter-build-webkit
Tools/Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl

index 98e6e04..f33567a 100644 (file)
@@ -1,5 +1,27 @@
 2013-05-17  David Kilzer  <ddkilzer@apple.com>
 
+        filter-build-webkit: Don't filter out the location of the missing symbol when linking fails
+        Part 3 of 3: <http://webkit.org/b/116247>
+
+        Reviewed by Benjamin Poulain.
+
+        * Scripts/filter-build-webkit: Change while() loop to for() loop
+        to track $previousLine, then pass $previousLine into
+        shouldIgnoreLine().
+        (shouldIgnoreLine): Add $previousLine argument. Do not skip a
+        line that begins with four spaces if the previous line is a
+        linker error message.
+        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
+        - Add "Ignored: " to test descriptions to document expected
+          behavior.
+        - Add comment blocks for various groups of tests.
+        - Expand "Build settings" tests since we're changing the code in
+          shouldIgnoreLine() that ignores those lines.
+        - Add tests for undefined symbols error message.
+        (description): Add.  Extract from global code.
+
+2013-05-17  David Kilzer  <ddkilzer@apple.com>
+
         Add tests for shouldIgnoreLine() in filter-build-webkit
         Part 2 of 3: <http://webkit.org/b/116247>
 
index 1f8fc03..3a7f95f 100755 (executable)
@@ -66,7 +66,7 @@ HTMLFOOTER
 sub printLine($$);
 sub setLogfileOption($$);
 sub setOutputFormatOption($$);
-sub shouldIgnoreLine($);
+sub shouldIgnoreLine($$);
 sub usageAndExit();
 
 # Defined in VCSUtils.
@@ -123,12 +123,12 @@ print OUTPUT_HANDLE HTML_HEADER if ($outputFormat eq "html");
 
 my $buildFinished;
 my $buildFailed = 0;
-while (my $line = <>) {
+for (my $previousLine = "", my $line = <>; $line; $previousLine = $line, $line = <>) {
     print UNFILTERED_OUTPUT_HANDLE $line if $logUnfilteredOutput;
 
     chomp($line);
 
-    next if shouldIgnoreLine($line);
+    next if shouldIgnoreLine($previousLine, $line);
 
     if ($line =~ /^={10}/) {
         printLine($line, STYLE_SUCCESS);
@@ -211,9 +211,9 @@ sub setOutputFormatOption($$)
     $outputFormat = $value;
 }
 
-sub shouldIgnoreLine($)
+sub shouldIgnoreLine($$)
 {
-    my ($line) = @_;
+    my ($previousLine, $line) = @_;
 
     return 1 if $line =~ /^\s*$/;
     return 1 if $line =~ /^Build settings from command line:/;
@@ -228,7 +228,7 @@ sub shouldIgnoreLine($)
     return 1 if $line =~ /libtool.*has no symbols/;
     return 1 if $line =~ /^# Lower case all the values, as CSS values are case-insensitive$/;
     return 1 if $line =~ /^if sort /;
-    return 1 if $line =~ /^    /;
+    return 1 if $line =~ /^    / && $previousLine !~ /referenced from:$/;
     return 1 if $line =~ /^printf /;
     return 1 if $line =~ /^offlineasm: Nothing changed/;
     return 1 if $line =~ /^Showing first/;
index 9e813c8..fc2c13b 100644 (file)
@@ -34,15 +34,22 @@ use Test::More;
 use lib File::Spec->catdir($FindBin::Bin, "..");
 use LoadAsModule qw(FilterBuildWebKit filter-build-webkit);
 
+sub description($);
+
 @FilterBuildWebKit::EXPORT_OK = qw(shouldIgnoreLine);
 FilterBuildWebKit->import(@FilterBuildWebKit::EXPORT_OK);
 
-is(shouldIgnoreLine(""), 1, "empty_line");
-is(shouldIgnoreLine(" "), 1, "one_space");
-is(shouldIgnoreLine("\t"), 1, "one_tab");
+#
+# Test whitespace
+#
+is(shouldIgnoreLine("", ""), 1, "Ignored: empty line");
+is(shouldIgnoreLine("", " "), 1, "Ignored: one space");
+is(shouldIgnoreLine("", "\t"), 1, "Ignored: one tab");
 
+#
+# Test input that should be ignored regardless of previous line
+#
 my @expectIgnoredLines = split(/$INPUT_RECORD_SEPARATOR/, <<'END');
-Build settings from command line:
 make: Nothing to be done for `all'.
 JavaScriptCore/create_hash_table JavaScriptCore/runtime/ArrayConstructor.cpp -i > ArrayConstructor.lut.h
 Creating hashtable for JavaScriptCore/runtime/ArrayConstructor.cpp
@@ -57,13 +64,57 @@ python JavaScriptCore/KeywordLookupGenerator.py JavaScriptCore/parser/Keywords.t
 sed -e s/\<WebCore/\<WebKit/ -e s/DOMDOMImplementation/DOMImplementation/ /Volumes/Data/Build/Release/WebCore.framework/PrivateHeaders/DOM.h > /Volumes/Data/Build/Release/WebKit.framework/Versions/A/Headers/DOM.h
 END
 
-my $lineLength = 200;
-my $ellipsis = "...";
-my $truncateLength = $lineLength - length($ellipsis);
 for my $line (@expectIgnoredLines) {
-    my $description = length($line) > $lineLength ? substr($line, 0, $truncateLength) : $line;
-    $description .= $ellipsis if length($line) != length($description);
-    is(shouldIgnoreLine($line), 1, $description);
+    is(shouldIgnoreLine("", $line), 1, description("Ignored: " . $line));
+}
+
+#
+# Test input starting with four spaces
+#
+my @buildSettingsLines = split(/$INPUT_RECORD_SEPARATOR/, <<'END');
+Build settings from command line:
+    ARCHS = i386 x86_64
+    OBJROOT = /Volumes/Data/Build
+    ONLY_ACTIVE_ARCH = NO
+    SHARED_PRECOMPS_DIR = /Volumes/Data/Build/PrecompiledHeaders
+    SYMROOT = /Volumes/Data/Build
+END
+
+for my $i (0..scalar(@buildSettingsLines) - 1) {
+    my $previousLine = $i ? $buildSettingsLines[$i - 1] : "";
+    my $line = $buildSettingsLines[$i];
+    is(shouldIgnoreLine($previousLine, $line), 1, description("Ignored: " . $line));
+}
+
+#
+# Test input for undefined symbols error message
+#
+my @undefinedSymbolsLines = split(/$INPUT_RECORD_SEPARATOR/, <<'END');
+Undefined symbols for architecture x86_64:
+  "__ZN6WebKit12WebPageProxy28exposedRectChangedTimerFiredEPN7WebCore5TimerIS0_EE", referenced from:
+      __ZN6WebKit12WebPageProxyC2EPNS_10PageClientEN3WTF10PassRefPtrINS_15WebProcessProxyEEEPNS_12WebPageGroupEy in WebPageProxy.o
+ld: symbol(s) not found for architecture x86_64
+clang: error: linker command failed with exit code 1 (use -v to see invocation)
+END
+
+for my $i (0..scalar(@undefinedSymbolsLines) - 1) {
+    my $previousLine = $i ? $undefinedSymbolsLines[$i - 1] : "";
+    my $line = $undefinedSymbolsLines[$i];
+    is(shouldIgnoreLine($previousLine, $line), 0, description("Printed: " . $line));
 }
 
-done_testing(3 + scalar(@expectIgnoredLines));
+done_testing();
+
+sub description($)
+{
+    my ($line) = @_;
+
+    my $maxLineLength = 200;
+    my $ellipsis = "...";
+    my $truncateLength = $maxLineLength - length($ellipsis);
+
+    my $description = length($line) > $maxLineLength ? substr($line, 0, $truncateLength) : $line;
+    $description .= $ellipsis if length($line) != length($description);
+
+    return $description;
+}