<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[171319] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/171319">171319</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2014-07-21 16:10:44 -0700 (Mon, 21 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Tools: [Win] Extend auto-version.pl to support 5-tuple versions
https://bugs.webkit.org/show_bug.cgi?id=135124
&lt;rdar://problem/17750334&gt;

Reviewed by David Kilzer.

Add test cases for auto-version.pl.

* Scripts/webkitperl/auto-version_unittest: Added.
* Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Added.

WebKitLibraries: [Win] Extend auto-version.pl to handle 5-tuple versions
https://bugs.webkit.org/show_bug.cgi?id=135124
&lt;rdar://problem/17750334&gt;

Reviewed by David Kilzer.

Extend tuple parsing to handle up to five tuples, and as
few as a single tuple. On Windows, the two additional
tuples are unused.

Also corrected regular expression capture logic to use local
blocks, preventing later capture expressions from reusing
previous capture results when the current expression failed
to find a match (GRRR, Perl!).

Clean up code by putting logic into a couple of subroutines.

* win/tools/scripts/auto-version.pl:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkWebKitLibrariesChangeLog">trunk/WebKitLibraries/ChangeLog</a></li>
<li><a href="#trunkWebKitLibrarieswintoolsscriptsautoversionpl">trunk/WebKitLibraries/win/tools/scripts/auto-version.pl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Tools/Scripts/webkitperl/auto-version_unittest/</li>
<li><a href="#trunkToolsScriptswebkitperlautoversion_unittestautoVersionTestspl">trunk/Tools/Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (171318 => 171319)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2014-07-21 23:07:32 UTC (rev 171318)
+++ trunk/Tools/ChangeLog        2014-07-21 23:10:44 UTC (rev 171319)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-07-21  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        [Win] Extend auto-version.pl to support 5-tuple versions
+        https://bugs.webkit.org/show_bug.cgi?id=135124
+        &lt;rdar://problem/17750334&gt;
+
+        Reviewed by David Kilzer.
+
+        Add test cases for auto-version.pl.
+
+        * Scripts/webkitperl/auto-version_unittest: Added.
+        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Added.
+
</ins><span class="cx"> 2014-07-21  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Allow MiniBrowser WK1 to do element fullscreen
</span></span></pre></div>
<a id="trunkToolsScriptswebkitperlautoversion_unittestautoVersionTestspl"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl (0 => 171319)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl                                (rev 0)
+++ trunk/Tools/Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl        2014-07-21 23:10:44 UTC (rev 171319)
</span><span class="lines">@@ -0,0 +1,404 @@
</span><ins>+#!/usr/bin/perl -w
+
+# Copyright (C) 2014 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Temp qw/ tempdir /;
+
+use Test::More;
+
+my @testCases = 
+(
+    {
+        'RC_ProjectSourceVersion' =&gt; '5300.4.3.2.1',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '300.4.3',
+            '__BUILD_NUMBER__' =&gt; '300.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '300.4.3',
+            '__VERSION_MAJOR__' =&gt; '3',
+            '__VERSION_MINOR__' =&gt; '00',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '300',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '530.4.3.2.1',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '530.4.3',
+            '__BUILD_NUMBER__' =&gt; '530.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '530.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '30',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '530',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '53.4.3.2.1',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '53.4.3',
+            '__BUILD_NUMBER__' =&gt; '53.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '53.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '3',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '53',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5.4.3.2.1',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '5.4.3',
+            '__BUILD_NUMBER__' =&gt; '5.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '5.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '5',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5300.4.3.2',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '300.4.3',
+            '__BUILD_NUMBER__' =&gt; '300.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '300.4.3',
+            '__VERSION_MAJOR__' =&gt; '3',
+            '__VERSION_MINOR__' =&gt; '00',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '300',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '530.4.3.2',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '530.4.3',
+            '__BUILD_NUMBER__' =&gt; '530.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '530.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '30',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '530',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '53.4.3.2',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '53.4.3',
+            '__BUILD_NUMBER__' =&gt; '53.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '53.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '3',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '53',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5.4.3.2',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '5.4.3',
+            '__BUILD_NUMBER__' =&gt; '5.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '5.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '5',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5300.4.3',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '300.4.3',
+            '__BUILD_NUMBER__' =&gt; '300.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '300.4.3',
+            '__VERSION_MAJOR__' =&gt; '3',
+            '__VERSION_MINOR__' =&gt; '00',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '300',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '530.4.3',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '530.4.3',
+            '__BUILD_NUMBER__' =&gt; '530.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '530.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '30',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '530',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '53.4.3',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '53.4.3',
+            '__BUILD_NUMBER__' =&gt; '53.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '53.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '3',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '53',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5.4.3',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '5.4.3',
+            '__BUILD_NUMBER__' =&gt; '5.4.3',
+            '__BUILD_NUMBER_SHORT__' =&gt; '5.4.3',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '3',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '5',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '3',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5300.4',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '300.4.0',
+            '__BUILD_NUMBER__' =&gt; '300.4.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '300.4.0',
+            '__VERSION_MAJOR__' =&gt; '3',
+            '__VERSION_MINOR__' =&gt; '00',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '300',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '530.4',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '530.4.0',
+            '__BUILD_NUMBER__' =&gt; '530.4.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '530.4.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '30',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '530',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '53.4',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '53.4.0',
+            '__BUILD_NUMBER__' =&gt; '53.4.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '53.4.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '3',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '53',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5.4',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '5.4.0',
+            '__BUILD_NUMBER__' =&gt; '5.4.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '5.4.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '',
+            '__VERSION_TINY__' =&gt; '4',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '5',
+            '__BUILD_NUMBER_MINOR__' =&gt; '4',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '5300',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '300.0.0',
+            '__BUILD_NUMBER__' =&gt; '300.0.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '300.0.0',
+            '__VERSION_MAJOR__' =&gt; '3',
+            '__VERSION_MINOR__' =&gt; '00',
+            '__VERSION_TINY__' =&gt; '0',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '300',
+            '__BUILD_NUMBER_MINOR__' =&gt; '0',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    {
+        'RC_ProjectSourceVersion' =&gt; '530',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '530.0.0',
+            '__BUILD_NUMBER__' =&gt; '530.0.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '530.0.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '30',
+            '__VERSION_TINY__' =&gt; '0',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '530',
+            '__BUILD_NUMBER_MINOR__' =&gt; '0',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    # Smallest &quot;Valid&quot; case
+    {
+        'RC_ProjectSourceVersion' =&gt; '53',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '53.0.0',
+            '__BUILD_NUMBER__' =&gt; '53.0.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '53.0.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '3',
+            '__VERSION_TINY__' =&gt; '0',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '53',
+            '__BUILD_NUMBER_MINOR__' =&gt; '0',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    # We don't support 1-digit versions, but we should run without crashing
+    {
+        'RC_ProjectSourceVersion' =&gt; '5',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '5.0.0',
+            '__BUILD_NUMBER__' =&gt; '5.0.0',
+            '__BUILD_NUMBER_SHORT__' =&gt; '5.0.0',
+            '__VERSION_MAJOR__' =&gt; '5',
+            '__VERSION_MINOR__' =&gt; '',
+            '__VERSION_TINY__' =&gt; '0',
+            '__VERSION_BUILD__' =&gt; '0',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '5',
+            '__BUILD_NUMBER_MINOR__' =&gt; '0',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '0',
+        },
+    },
+
+    # Largest specified version test
+    {
+        'RC_ProjectSourceVersion' =&gt; '214747.99.99.99.99',
+        expectedResults =&gt; {
+            '__VERSION_TEXT__' =&gt; '747.99.99',
+            '__BUILD_NUMBER__' =&gt; '747.99.99',
+            '__BUILD_NUMBER_SHORT__' =&gt; '747.99.99',
+            '__VERSION_MAJOR__' =&gt; '7',
+            '__VERSION_MINOR__' =&gt; '47',
+            '__VERSION_TINY__' =&gt; '99',
+            '__VERSION_BUILD__' =&gt; '99',
+            '__BUILD_NUMBER_MAJOR__' =&gt; '747',
+            '__BUILD_NUMBER_MINOR__' =&gt; '99',
+            '__BUILD_NUMBER_VARIANT__' =&gt; '99',
+        },
+    },
+);
+
+my $testCasesCount = scalar(@testCases) * 10; # 10 expected results
+plan(tests =&gt; $testCasesCount);
+
+foreach my $testCase (@testCases) {
+    my $toolsPath = $ENV{'WEBKIT_LIBRARIES'};
+    my $autoVersionScript = File::Spec-&gt;catfile($toolsPath, 'tools', 'scripts', 'auto-version.pl');
+    my $testOutputDir = tempdir(CLEANUP =&gt; 1);
+    `RC_ProjectSourceVersion=$testCase-&gt;{'RC_ProjectSourceVersion'} perl $autoVersionScript $testOutputDir`;
+
+    my $expectedResults = $testCase-&gt;{expectedResults};
+
+    my $outputFile = File::Spec-&gt;catfile($testOutputDir, 'include', 'autoversion.h');
+    open(TEST_OUTPUT, '&lt;', $outputFile) or die &quot;Unable to open $outputFile&quot;;
+
+    while (my $line = &lt;TEST_OUTPUT&gt;) {
+        foreach my $expectedResultKey (keys $expectedResults) {
+            if ($line !~ m/$expectedResultKey/) {
+                next;
+            }
+
+            $line =~ s/#define $expectedResultKey//;
+            $line =~ s/^\s*(.*)\s*$/$1/;
+            $line =~ s/^&quot;(.*)&quot;$/$1/;
+            chomp($line);
+
+            my $expectedResultValue = $expectedResults-&gt;{$expectedResultKey};
+            is($line, $expectedResultValue, &quot;$testCase-&gt;{'RC_ProjectSourceVersion'}: $expectedResultKey&quot;);
+        }
+    }
+}
</ins></span></pre></div>
<a id="trunkWebKitLibrariesChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKitLibraries/ChangeLog (171318 => 171319)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitLibraries/ChangeLog        2014-07-21 23:07:32 UTC (rev 171318)
+++ trunk/WebKitLibraries/ChangeLog        2014-07-21 23:10:44 UTC (rev 171319)
</span><span class="lines">@@ -1,5 +1,26 @@
</span><span class="cx"> 2014-07-21  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [Win] Extend auto-version.pl to handle 5-tuple versions
+        https://bugs.webkit.org/show_bug.cgi?id=135124
+        &lt;rdar://problem/17750334&gt;
+
+        Reviewed by David Kilzer.
+
+        Extend tuple parsing to handle up to five tuples, and as
+        few as a single tuple. On Windows, the two additional
+        tuples are unused.
+
+        Also corrected regular expression capture logic to use local
+        blocks, preventing later capture expressions from reusing
+        previous capture results when the current expression failed
+        to find a match (GRRR, Perl!).
+
+        Clean up code by putting logic into a couple of subroutines.
+
+        * win/tools/scripts/auto-version.pl:
+
+2014-07-21  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
</ins><span class="cx">         [Win] Correct auto-version.pl script for two-digit version numbers
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=135119
</span><span class="cx">         &lt;rdar://problem/17743959&gt;
</span></span></pre></div>
<a id="trunkWebKitLibrarieswintoolsscriptsautoversionpl"></a>
<div class="modfile"><h4>Modified: trunk/WebKitLibraries/win/tools/scripts/auto-version.pl (171318 => 171319)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitLibraries/win/tools/scripts/auto-version.pl        2014-07-21 23:07:32 UTC (rev 171318)
+++ trunk/WebKitLibraries/win/tools/scripts/auto-version.pl        2014-07-21 23:10:44 UTC (rev 171319)
</span><span class="lines">@@ -28,6 +28,9 @@
</span><span class="cx"> # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
</span><span class="cx"> # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
</span><span class="cx"> 
</span><ins>+sub splitVersion($);
+sub splitBuildMajorVersion($);
+
</ins><span class="cx"> die &quot;You must supply an output path as the argument.\n&quot; if ($#ARGV &lt; 0);
</span><span class="cx"> 
</span><span class="cx"> my $WEBKIT_LIBRARIES = $ENV{'WEBKIT_LIBRARIES'};
</span><span class="lines">@@ -68,47 +71,13 @@
</span><span class="cx"> my $PROPOSED_VERSION = (defined $ENVIRONMENT_VERSION) ? $ENVIRONMENT_VERSION : $FALLBACK_VERSION;
</span><span class="cx"> chomp($PROPOSED_VERSION);
</span><span class="cx"> 
</span><del>-# Split out the three components of the dotted version number.  We pad
-# the input with trailing dots to handle the case where the input version
-# has fewer components than we expect.
-$PROPOSED_VERSION =~ m/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/ or die &quot;Couldn't parse $PROPOSED_VERSION&quot;;
-my $BUILD_MAJOR_VERSION = $1;
-my $BUILD_MINOR_VERSION = $2;
-my $BUILD_TINY_VERSION = $3;
</del><ins>+my ($BUILD_MAJOR_VERSION, $BUILD_MINOR_VERSION, $BUILD_TINY_VERSION) = splitVersion($PROPOSED_VERSION);
</ins><span class="cx"> 
</span><del>-# The default version (with no decimals) will be matched by the regexp
-# to $BUILD_TINY_VERSION. If that happens, we need to move it to
-# $BUILD_MAJOR_VERSION.
-if (!defined $BUILD_MAJOR_VERSION &amp;&amp; !defined $BUILD_MINOR_VERSION) {
-    $BUILD_MAJOR_VERSION = $BUILD_TINY_VERSION;
-    $BUILD_TINY_VERSION = 0;
-}
-
-# Cut the major component down to three characters by dropping any
-# extra leading digits, then adjust the major version portion of the
-# version string to match.
-$BUILD_MAJOR_VERSION =~ s/^.*(\d\d\d)$/$1/;
-
-# Have the minor and tiny components default to zero if not present.
-if (!defined $BUILD_MINOR_VERSION) {
-    $BUILD_MINOR_VERSION = 0;
-}
-if (!defined $BUILD_TINY_VERSION) {
-    $BUILD_TINY_VERSION = 0;
-}
-
</del><span class="cx"> $PROPOSED_VERSION = &quot;$BUILD_MAJOR_VERSION.$BUILD_MINOR_VERSION.$BUILD_TINY_VERSION&quot;;
</span><span class="cx"> 
</span><del>-# Split the first component further by using the first digit for the
-# major version and the remaining two characters as the minor version.
-# The minor version is shifted down to the tiny version, with the tiny
-# version becoming the variant version.
-$BUILD_MAJOR_VERSION =~ m/^[^\d]*(\d)(\d{1,})/;
-my $MAJOR_VERSION = $1;
-my $MINOR_VERSION = $2;
</del><ins>+my ($MAJOR_VERSION, $MINOR_VERSION) = splitBuildMajorVersion($BUILD_MAJOR_VERSION);
</ins><span class="cx"> my $TINY_VERSION = $BUILD_MINOR_VERSION;
</span><span class="cx"> my $VARIANT_VERSION = $BUILD_TINY_VERSION;
</span><del>-
</del><span class="cx"> my $VERSION_TEXT = $PROPOSED_VERSION;
</span><span class="cx"> my $VERSION_TEXT_SHORT = $VERSION_TEXT;
</span><span class="cx"> 
</span><span class="lines">@@ -149,3 +118,54 @@
</span><span class="cx">     print OUTPUT_FILE &quot;#define __COPYRIGHT_YEAR_END_TEXT__ \&quot;$COPYRIGHT_END_YEAR\&quot;\n&quot;;
</span><span class="cx"> }
</span><span class="cx"> close(OUTPUT_FILE);
</span><ins>+
+
+sub splitVersion($)
+{
+    my $PROPOSED_VERSION = shift;
+
+    # Split out the three components of the dotted version number.  We pad
+    # the input with trailing dots to handle the case where the input version
+    # has fewer components than we expect.
+    my @components = split(/\./, $PROPOSED_VERSION) or die &quot;Couldn't parse $PROPOSED_VERSION&quot;;
+    my $componentCount = scalar(@components);
+
+    my $BUILD_MAJOR_VERSION = $components[0];
+
+    # Have the minor and tiny components default to zero if not present.
+    my $BUILD_MINOR_VERSION = 0;
+    my $BUILD_TINY_VERSION = 0;
+    if ($componentCount &gt; 1) {
+        $BUILD_MINOR_VERSION = $components[1];
+        if ($componentCount &gt; 2) {
+            $BUILD_TINY_VERSION = $components[2];
+        }
+    }
+
+    # Cut the major component down to three characters by dropping any
+    # extra leading digits, then adjust the major version portion of the
+    # version string to match.
+    $BUILD_MAJOR_VERSION =~ s/^.*(\d\d\d)$/$1/;
+
+    return ($BUILD_MAJOR_VERSION, $BUILD_MINOR_VERSION, $BUILD_TINY_VERSION);
+}
+
+sub splitBuildMajorVersion($)
+{
+    # Split the first component further by using the first digit for the
+    # major version and the remaining two characters as the minor version.
+    # The minor version is shifted down to the tiny version, with the tiny
+    # version becoming the variant version.
+    my ($MAJOR_VERSION, $MINOR_VERSION);
+    {
+        if ($BUILD_MAJOR_VERSION =~ m/^[^\d]*(\d)(\d{1,})/) {
+            $MAJOR_VERSION = $1;
+            $MINOR_VERSION = $2;
+        } else {
+            $MAJOR_VERSION = $BUILD_MAJOR_VERSION;
+            $MINOR_VERSION = '';
+        }
+    }
+
+    return ($MAJOR_VERSION, $MINOR_VERSION);
+}
</ins></span></pre>
</div>
</div>

</body>
</html>