Add layout performance test for simple bidi content with inline boxes
[WebKit-https.git] / WebKitLibraries / win / tools / scripts / version-stamp.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Cwd 'abs_path';
5 use File::Basename;
6 use File::Spec;
7 use POSIX;
8
9 # Copyright (C) 2007, 2009, 2014 Apple Inc.  All rights reserved.
10 #
11 # Redistribution and use in source and binary forms, with or without
12 # modification, are permitted provided that the following conditions
13 # are met:
14 # 1. Redistributions of source code must retain the above copyright
15 #    notice, this list of conditions and the following disclaimer.
16 # 2. Redistributions in binary form must reproduce the above copyright
17 #    notice, this list of conditions and the following disclaimer in the
18 #    documentation and/or other materials provided with the distribution.
19 #
20 # THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
21 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
24 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32 sub exitStatus($);
33
34 my $rawPath = $0;
35
36 my $thisDirectory = dirname(abs_path($rawPath));
37
38 my $VERSION_STAMPER = File::Spec->catfile($thisDirectory, '..', 'VersionStamper', 'VersionStamper.exe');
39
40 unless (-e $VERSION_STAMPER) {
41     print "No $VERSION_STAMPER executable. Exiting.\n";
42     exit(0);
43 }
44
45 my ($intdir, $target);
46 if (scalar(@ARGV) > 1) {
47     $intdir = $ARGV[0];
48     $target = $ARGV[1];
49 } else {
50     my @arguments = split(/\s+/, $ARGV[0]) or die "Couldn't parse $ARGV[0]";
51     die "You must supply the build output directory and the target to be stamped with version information.\n" if (scalar(@arguments) < 2);
52     $intdir = $arguments[0];
53     $target = $arguments[1];
54 }
55
56 # Make sure we don't have any leading or trailing quote characters.
57 $intdir =~ s/^\"//;
58 $intdir =~ s/\"$//;
59
60 $target =~ s/^\"//;
61 $target =~ s/\"$//;
62
63 my %components =
64 (
65     '__VERSION_TEXT__' => undef,
66     '__VERSION_MAJOR__' => undef,
67     '__VERSION_MINOR__' => undef,
68     '__VERSION_TINY__' => undef,
69     '__VERSION_BUILD__' => undef,
70     '__FULL_BUILD_MAJOR_VERSION__' => undef,
71 );
72
73 my $VERSION_FILE = File::Spec->catfile(File::Spec->canonpath($intdir), 'include', 'autoversion.h');
74
75 open(VERSION_INFO, '<', $VERSION_FILE) or die "Unable to open $VERSION_FILE: $!\n";
76 while (my $line = <VERSION_INFO>) {
77     foreach my $componentKey (keys %components) {
78         if ($line !~ m/$componentKey/) {
79             next;
80         }
81
82         $line =~ s/#define $componentKey//;
83         $line =~ s/^\s*(.*)\s*$/$1/;
84         $line =~ s/^"(.*)"$/$1/;
85         chomp($line);
86
87         $components{$componentKey} = $line;
88     }
89 }
90 close(VERSION_INFO);
91
92 print "Processing version $components{'__VERSION_TEXT__'} for $target\n";
93
94 my $TARGET_PATH = File::Spec->canonpath($target);
95
96 # Replace forward slashes with backslashes in case we are running Cygwin Perl.
97 $TARGET_PATH =~ s/\//\\/g;
98
99 print "Adjusting RC_PROJECTSOURCEVERSION and RC_ProjectSourceVersion to be safe for VersionStamper.\n";
100
101 my $SAFE_PROJECT_VERSION = "$components{'__FULL_BUILD_MAJOR_VERSION__'}.$components{'__VERSION_MINOR__'}.$components{'__VERSION_TINY__'}";
102 my $SAFE_BUILD_VERSION = $ENV{RC_ProjectBuildVersion} || $ENV{RC_PROJECTBUILDVERSION} || $components{'__VERSION_BUILD__'};
103
104 print "Using RC_PROJECTSOURCEVERSION=$SAFE_PROJECT_VERSION and RC_PROJECTBUILDVERSION=$SAFE_BUILD_VERSION\n";
105
106 # Note: These environment settings only affect this script and its child processes:
107 $ENV{RC_PROJECTSOURCEVERSION} = $SAFE_PROJECT_VERSION;
108 $ENV{RC_ProjectSourceVersion} = $SAFE_PROJECT_VERSION;
109
110 my $rc = system($VERSION_STAMPER, '--verbose', $TARGET_PATH, '--fileMajor', $components{'__FULL_BUILD_MAJOR_VERSION__'},
111     '--fileMinor', $components{'__VERSION_MINOR__'}, '--fileRevision', $components{'__VERSION_TINY__'},
112     '--fileBuild', $SAFE_BUILD_VERSION, '--productMajor', $components{'__FULL_BUILD_MAJOR_VERSION__'},
113     '--productMinor', $components{'__VERSION_MINOR__'}, '--productRevision', $components{'__VERSION_TINY__'},
114     '--productBuild', $components{'__VERSION_BUILD__'}); 
115
116 exit(exitStatus($rc));
117
118 # This method is for portability. Return the system-appropriate exit
119 # status of a child process.
120 #
121 # Args: pass the child error status returned by the last pipe close,
122 #       for example "$?".
123 sub exitStatus($)
124 {
125     my ($returnvalue) = @_;
126     if ($^O eq "MSWin32") {
127         return $returnvalue >> 8;
128     }
129     if (!WIFEXITED($returnvalue)) {
130         return 254;
131     }
132     return WEXITSTATUS($returnvalue);
133 }