Ensure old tab state is cleared between iterations of run-benchmark
[WebKit-https.git] / Tools / Scripts / copy-webkitlibraries-to-product-directory
1 #!/usr/bin/env perl
2
3 # Copyright (C) 2005-2017 Apple Inc. All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 #
9 # 1.  Redistributions of source code must retain the above copyright
10 #     notice, this list of conditions and the following disclaimer. 
11 # 2.  Redistributions in binary form must reproduce the above copyright
12 #     notice, this list of conditions and the following disclaimer in the
13 #     documentation and/or other materials provided with the distribution. 
14 #
15 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 use strict;
27 use warnings;
28 use File::Spec;
29 use FindBin;
30 use Getopt::Long qw(:config pass_through);
31 use lib $FindBin::Bin;
32 use webkitdirs;
33
34 my $showHelp = 0;
35 my $wksi = 0;
36 my $clean = 0;
37 my $useFullLibPaths = 0;
38 my $osxVersion;
39 my $force = 0;
40
41 determineXcodeSDK();
42
43 my $programName = basename($0);
44 my $usage = <<EOF;
45 Usage: $programName [options]
46   --help                        Show this help message
47   --[no-]wksi                   Obsolete. Does nothing. Remove once we are sure nobody passes this option any more.
48   --clean                       Clean the libraries (default: $clean)
49   --[no-]use-full-lib-paths     Toggle using full library paths
50   --sdk=<sdk>                   Use a specific Xcode SDK
51   --device                      Use the current iphoneos.internal SDK (iOS only)
52   --simulator                   Use the current iphonesimulator SDK (iOS only)
53   --osx-version=<version>       Set the OS X version to use when deciding what to copy.
54   --[no-]force                  Toggle forcing the copy - i.e. ignoring timestamps (default: $force)
55 EOF
56
57 GetOptions(
58     'help' => \$showHelp,
59     'wksi!' => \$wksi,
60     'clean' => \$clean,
61     'use-full-lib-paths!' => \$useFullLibPaths,
62     'osx-version=s' => \$osxVersion,
63     'force!' => \$force
64 );
65
66 if ($showHelp) {
67    print STDERR $usage;
68    exit 1;
69 }
70
71 my $productDir = shift @ARGV;
72 if ($productDir) {
73     $productDir = File::Spec->rel2abs($productDir);
74 } else {
75     $productDir = $ENV{BUILT_PRODUCTS_DIR} || productDir();
76 }
77
78 if (!isIOSWebKit() && !$osxVersion &&!isAnyWindows()) {
79     $osxVersion = `sw_vers -productVersion | cut -d. -f-2`;
80     chomp($osxVersion);
81 }
82
83 chdirWebKit();
84
85 sub executeRanlib($)
86 {
87     my ($library) = @_;
88     my @args;
89     push @args, ("-sdk", xcodeSDK()) if xcodeSDK();
90     push @args, "ranlib";
91     push @args, "-no_warning_for_no_symbols" if isIOSWebKit();
92     system("xcrun", @args, $library) == 0 or die;
93 }
94
95 sub unpackIfNecessary
96 {
97     my ($targetDir, $sampleFile, $package, $hasLibraries) = @_;
98     if ($force || !-e $sampleFile || -M $sampleFile > -M $package) {
99         print "Unpacking $package into $targetDir\n";
100         (system("tar -C $targetDir -xmf $package") == 0) or die;
101         if ($hasLibraries) {
102             foreach my $library (`tar -tf $package`) {
103                 chomp $library;
104                 print "   Ranlib $library\n";
105                 executeRanlib($targetDir . "/" . $library);
106             }
107         }
108         return 1;
109     }
110     return 0;
111 }
112
113 sub dittoHeaders
114 {
115     my ($srcHeader, $header) = @_;
116     if ($force || !-e $header || -M $header > -M $srcHeader) {
117         print "Updating $header\n";
118         (system("ditto", $srcHeader, $header) == 0) or die;
119     }
120 }
121
122 if ($clean) {
123     print "Cleaning.\n";    
124     unlink glob "$productDir/libLTO*" or die if glob "$productDir/libLTO*";
125 }
126
127 sub fileContains
128 {
129     my ($filename, $string) = @_;
130     open my $fileHandle, '<', $filename or die;
131     while (<$fileHandle>) {
132         return 1 if /^$string$/;
133     }
134     return 0;
135 }
136
137 sub isContentOfFileEqualToString($$)
138 {
139     my ($filename, $string) = @_;
140     open my $fileHandle, '<', $filename or die;
141     binmode $fileHandle;
142     my $contents = <$fileHandle>;
143     return $contents eq $string;
144 }
145