[Win] Implement auto-version as a Perl program
authorbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 Jul 2014 00:01:02 +0000 (00:01 +0000)
committerbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 Jul 2014 00:01:02 +0000 (00:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=134745
<rdar://problem/17597801>

Reviewed by David Kilzer.

Source/WebKit:
Modify build commands to use new Perl version of the
auto-version script.

* WebKit.vcxproj/Interfaces/InterfacesPreBuild.cmd:
* WebKit.vcxproj/WebKit/WebKitPreBuild.cmd:

WebKitLibraries:
Translate the auto-version.sh bash script into an equivalent
Perl script.

* win/tools/scripts/auto-version.pl: Added.
* win/tools/scripts/auto-version.sh: Removed.

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

Source/WebKit/ChangeLog
Source/WebKit/WebKit.vcxproj/Interfaces/InterfacesPreBuild.cmd
Source/WebKit/WebKit.vcxproj/WebKit/WebKitPreBuild.cmd
WebKitLibraries/ChangeLog
WebKitLibraries/win/tools/scripts/auto-version.pl [new file with mode: 0755]
WebKitLibraries/win/tools/scripts/auto-version.sh [deleted file]

index 656a8ff..1a5d822 100644 (file)
@@ -1,3 +1,17 @@
+2014-07-08  Brent Fulgham  <bfulgham@apple.com>
+
+        [Win] Implement auto-version as a Perl program
+        https://bugs.webkit.org/show_bug.cgi?id=134745
+        <rdar://problem/17597801>
+
+        Reviewed by David Kilzer.
+
+        Modify build commands to use new Perl version of the
+        auto-version script.
+
+        * WebKit.vcxproj/Interfaces/InterfacesPreBuild.cmd:
+        * WebKit.vcxproj/WebKit/WebKitPreBuild.cmd:
+
 2014-07-06  Yoav Weiss  <yoav@yoav.ws>
 
         Turn on img@sizes compile flag
index 1e4a5a9..34dc3c9 100644 (file)
@@ -6,4 +6,4 @@ if errorlevel 1 exit 1
 echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%\buildfailed"
 
 mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\obj%PlatformArchitecture%\WebKit\%PROJECTNAME%"
-bash "%WEBKIT_LIBRARIES%\tools\scripts\auto-version.sh" "%INTDIR%"
+perl "%WEBKIT_LIBRARIES%\tools\scripts\auto-version.pl" "%INTDIR%"
index 1e26e87..5dfdb59 100644 (file)
@@ -8,4 +8,4 @@ echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%\buildfailed"
 mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\JavaScriptCore"
 xcopy /y /d "%WEBKIT_LIBRARIES%\include\JavaScriptCore\*" "%CONFIGURATIONBUILDDIR%\include\JavaScriptCore"
 
-bash "%WEBKIT_LIBRARIES%\tools\scripts\auto-version.sh" "%INTDIR%"
+perl "%WEBKIT_LIBRARIES%\tools\scripts\auto-version.pl" "%INTDIR%"
index 0748da3..ddfeae9 100644 (file)
@@ -1,3 +1,17 @@
+2014-07-08  Brent Fulgham  <bfulgham@apple.com>
+
+        [Win] Implement auto-version as a Perl program
+        https://bugs.webkit.org/show_bug.cgi?id=134745
+        <rdar://problem/17597801>
+
+        Reviewed by David Kilzer.
+
+        Translate the auto-version.sh bash script into an equivalent
+        Perl script.
+
+        * win/tools/scripts/auto-version.pl: Added.
+        * win/tools/scripts/auto-version.sh: Removed.
+
 2014-07-06  Yoav Weiss  <yoav@yoav.ws>
 
         Turn on img@sizes compile flag
diff --git a/WebKitLibraries/win/tools/scripts/auto-version.pl b/WebKitLibraries/win/tools/scripts/auto-version.pl
new file mode 100755 (executable)
index 0000000..9f07f50
--- /dev/null
@@ -0,0 +1,139 @@
+#!/usr/bin/perl -w
+
+use strict;
+use File::Path qw(make_path);
+use File::Spec;
+use Win32;
+
+# Copyright (C) 2007, 2009, 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. ``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
+# 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. 
+
+die "You must supply an output path as the argument.\n" if ($#ARGV < 0);
+
+my $WEBKIT_LIBRARIES = $ENV{'WEBKIT_LIBRARIES'};
+
+my ($COPYRIGHT_END_YEAR, $FALLBACK_VERSION);
+if (defined $WEBKIT_LIBRARIES) {
+    my $FALLBACK_VERSION_PATH = File::Spec->catfile($WEBKIT_LIBRARIES, 'tools', 'scripts', 'VERSION');
+    open(FALLBACK_VERSION_FILE, '<', $FALLBACK_VERSION_PATH) or die "Unable to open $FALLBACK_VERSION_PATH: $!";
+    $FALLBACK_VERSION = <FALLBACK_VERSION_FILE>;
+    close FALLBACK_VERSION_FILE;
+    chomp($FALLBACK_VERSION);
+
+    my $COPYRIGHT_END_YEAR_PATH = File::Spec->catfile($WEBKIT_LIBRARIES, 'tools', 'scripts', 'COPYRIGHT-END-YEAR');
+    open(COPYRIGHT_END_YEAR_FILE, '<', $COPYRIGHT_END_YEAR_PATH) or die "Unable to open $COPYRIGHT_END_YEAR_PATH: $!";
+    $COPYRIGHT_END_YEAR = <COPYRIGHT_END_YEAR_FILE>;
+    close COPYRIGHT_END_YEAR_FILE;
+    chomp($COPYRIGHT_END_YEAR);
+}
+
+my $OUTPUT_DIR = File::Spec->catdir($ARGV[0], 'include');
+my $OUTPUT_FILE = File::Spec->catfile($OUTPUT_DIR, 'autoversion.h');
+
+unless (-d $OUTPUT_DIR) {
+    make_path($OUTPUT_DIR) or die "Couldn't create $OUTPUT_DIR: $!";
+}
+
+# Take the initial version number from RC_ProjectSourceVersion if it
+# exists, otherwise fall back to the version number stored in the source.
+my $ENVIRONMENT_VERSION = $ENV{'RC_ProjectSourceVersion'};
+if (!defined $ENVIRONMENT_VERSION) {
+    $ENVIRONMENT_VERSION = $ENV{'RC_PROJECTSOURCEVERSION'};
+}
+
+my $PROPOSED_VERSION = (defined $ENVIRONMENT_VERSION) ? $ENVIRONMENT_VERSION : $FALLBACK_VERSION;
+chomp($PROPOSED_VERSION);
+
+# 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 "Couldn't parse $PROPOSED_VERSION";
+my $BUILD_MAJOR_VERSION = $1;
+my $BUILD_MINOR_VERSION = $2;
+my $BUILD_TINY_VERSION = $3;
+
+# 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;
+}
+
+$PROPOSED_VERSION = "$BUILD_MAJOR_VERSION.$BUILD_MINOR_VERSION.$BUILD_TINY_VERSION";
+
+# 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)/;
+my $MAJOR_VERSION = $1;
+my $MINOR_VERSION = $2;
+my $TINY_VERSION = $BUILD_MINOR_VERSION;
+my $VARIANT_VERSION = $BUILD_TINY_VERSION;
+
+my $VERSION_TEXT = $PROPOSED_VERSION;
+my $VERSION_TEXT_SHORT = $VERSION_TEXT;
+
+my $SVN_REVISION = '';
+if (!$ENVIRONMENT_VERSION) {
+    # If we didn't pull the version number from the environment then we're doing
+    # an engineering build and we'll stamp the build with some more information.
+
+    my $BUILD_DATE = localtime(time);
+    my $SVN_REVISION = `svn info`;
+    $SVN_REVISION =~ m/Revision: (\d+)/;
+    $SVN_REVISION= $1;
+
+    chomp($BUILD_DATE);
+    chomp($SVN_REVISION);
+
+    $VERSION_TEXT_SHORT .= "+";
+    my $USER = Win32::LoginName;
+    $VERSION_TEXT = "$VERSION_TEXT_SHORT $USER - $BUILD_DATE - r$SVN_REVISION";
+}
+
+open(OUTPUT_FILE, '>', $OUTPUT_FILE) or die "Couldn't open $OUTPUT_FILE: $!";
+print OUTPUT_FILE <<EOF;
+#define __VERSION_TEXT__ "$VERSION_TEXT"
+#define __BUILD_NUMBER__ "$VERSION_TEXT"
+#define __BUILD_NUMBER_SHORT__ "$VERSION_TEXT_SHORT"
+#define __VERSION_MAJOR__ $MAJOR_VERSION
+#define __VERSION_MINOR__ $MINOR_VERSION
+#define __VERSION_TINY__ $TINY_VERSION
+#define __VERSION_BUILD__ $VARIANT_VERSION
+#define __BUILD_NUMBER_MAJOR__ $BUILD_MAJOR_VERSION
+#define __BUILD_NUMBER_MINOR__ $BUILD_MINOR_VERSION
+#define __BUILD_NUMBER_VARIANT__ $BUILD_TINY_VERSION
+#define __SVN_REVISION__ $SVN_REVISION
+EOF
+
+if (defined $COPYRIGHT_END_YEAR) {
+    print OUTPUT_FILE "#define __COPYRIGHT_YEAR_END_TEXT__ \"$COPYRIGHT_END_YEAR\"\n";
+}
+close(OUTPUT_FILE);
diff --git a/WebKitLibraries/win/tools/scripts/auto-version.sh b/WebKitLibraries/win/tools/scripts/auto-version.sh
deleted file mode 100755 (executable)
index 3f1af37..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/bash
-
-# Copyright (C) 2007, 2009 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. ``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
-# 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. 
-
-
-# Trim any trailing \r or \n from the given variable.
-chomp()
-{
-    local old_value=$(eval echo "\$$1");
-    local value=$(echo "$old_value" | sed 's/[\r\n]*$//')
-    eval $1=\$value;
-}
-
-if [[ -n "$WEBKIT_LIBRARIES" ]]; then
-    FALLBACK_VERSION_PATH=`cygpath -u "$WEBKIT_LIBRARIES\\tools\\scripts\\VERSION"`
-    FALLBACK_VERSION=$(cat "$FALLBACK_VERSION_PATH");
-
-    COPYRIGHT_END_YEAR_PATH=`cygpath -u "$WEBKIT_LIBRARIES\\tools\\scripts\\COPYRIGHT-END-YEAR"`
-    COPYRIGHT_END_YEAR=$(cat "$COPYRIGHT_END_YEAR_PATH");
-    chomp COPYRIGHT_END_YEAR
-fi
-
-OUTPUT_FILE=$(cygpath -u "$1")/include/autoversion.h
-mkdir -p "$(dirname "$OUTPUT_FILE")"
-
-# Take the initial version number from RC_ProjectSourceVersion if it
-# exists, otherwise fall back to the version number stored in the source.
-ENVIRONMENT_VERSION=${RC_ProjectSourceVersion:-$RC_PROJECTSOURCEVERSION};
-
-PROPOSED_VERSION=${ENVIRONMENT_VERSION:-$FALLBACK_VERSION}
-chomp PROPOSED_VERSION
-
-# 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.
-BUILD_MAJOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 1)
-BUILD_MINOR_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 2)
-BUILD_TINY_VERSION=$(echo "$PROPOSED_VERSION.." | cut -d '.' -f 3)
-
-# 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.
-CHARACTERS_TO_DROP=$(( ${#BUILD_MAJOR_VERSION} > 3 ? ${#BUILD_MAJOR_VERSION} - 3 : 0 ))
-BUILD_MAJOR_VERSION=${BUILD_MAJOR_VERSION:$CHARACTERS_TO_DROP}
-PROPOSED_VERSION=${PROPOSED_VERSION:$CHARACTERS_TO_DROP}
-
-# Have the minor and tiny components default to zero if not present.
-BUILD_MINOR_VERSION=${BUILD_MINOR_VERSION:-0}
-BUILD_TINY_VERSION=${BUILD_TINY_VERSION:-0}
-
-# 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.
-MAJOR_VERSION=${BUILD_MAJOR_VERSION:0:1}
-MINOR_VERSION=${BUILD_MAJOR_VERSION:1}
-TINY_VERSION=${BUILD_MINOR_VERSION}
-VARIANT_VERSION=${BUILD_TINY_VERSION}
-
-VERSION_TEXT=${PROPOSED_VERSION}
-VERSION_TEXT_SHORT=${VERSION_TEXT}
-
-if [ -z ${ENVIRONMENT_VERSION} ]; then
-    # If we didn't pull the version number from the environment then we're doing
-    # an engineering build and we'll stamp the build with some more information.
-
-    BUILD_DATE=$(date)
-    SVN_REVISION=$(svn info | grep '^Revision' | sed 's/^Revision: //')
-
-    chomp BUILD_DATE
-    chomp SVN_REVISION
-
-    VERSION_TEXT_SHORT="${VERSION_TEXT_SHORT}+"
-    VERSION_TEXT="${VERSION_TEXT_SHORT} ${USER} - ${BUILD_DATE} - r${SVN_REVISION}"
-fi
-
-cat > "$OUTPUT_FILE" <<EOF
-#define __VERSION_TEXT__ "${VERSION_TEXT}"
-#define __BUILD_NUMBER__ "${VERSION_TEXT}"
-#define __BUILD_NUMBER_SHORT__ "${VERSION_TEXT_SHORT}"
-#define __VERSION_MAJOR__ ${MAJOR_VERSION}
-#define __VERSION_MINOR__ ${MINOR_VERSION}
-#define __VERSION_TINY__ ${TINY_VERSION}
-#define __VERSION_BUILD__ ${VARIANT_VERSION}
-#define __BUILD_NUMBER_MAJOR__ ${BUILD_MAJOR_VERSION}
-#define __BUILD_NUMBER_MINOR__ ${BUILD_MINOR_VERSION}
-#define __BUILD_NUMBER_VARIANT__ ${BUILD_TINY_VERSION}
-#define __SVN_REVISION__ ${SVN_REVISION}
-EOF
-
-if [[ -n "${COPYRIGHT_END_YEAR}" ]]; then
-cat >> "$OUTPUT_FILE" <<EOF
-#define __COPYRIGHT_YEAR_END_TEXT__ "${COPYRIGHT_END_YEAR}"
-EOF
-fi