blob: 522b4b6d563566dc8489f5aa9af8dc7389d06325 [file] [log] [blame]
#!/usr/bin/env perl
# Copyright (C) 2005, 2006, 2007, 2008, 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. 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 English;
use File::Copy qw/ move /;
use File::Temp qw/ tempdir tempfile /;
use FindBin;
use Getopt::Long qw(:config pass_through);
use lib $FindBin::Bin;
use webkitdirs;
chdirWebKit();
my $showHelp = 0;
my $programName = basename($0);
sub usage()
{
my $usage = <<EOF;
Bundles up products created with build-webkit into a zip suitable for sharing as a root.
The archive is created in the top level webkit directory.
Usage: $programName [configuration options]
--help Show this help message
--sdk Specifies SDK for which the roots are staged
(Default: currently installed Base SDK)
--ios-device Use "iphoneos.internal" SDK if installed, else "iphoneos" SDK (iOS only)
--device DEPRECATED alias of --ios-device
--ios-simulator Use "iphonesimulator.internal" SDK if installed, else "iphonesimulator" SDK (iOS only)
--simulator DEPRECATED alias of --ios-simulator
--debug Package roots from Debug-<platform>
--release Package roots from Release-<platform>
EOF
print $usage;
exit 0;
}
my %options = (
'help' => \$showHelp,
);
usage() if not @ARGV or not GetOptions(
'help' => \$showHelp,
);
usage() if $showHelp;
setConfiguration();
my @privateFrameworks = qw(WebCore WebKitLegacy WebKit2);
my @publicFrameworks = qw(JavaScriptCore WebKit);
my $privateInstallPath = "/System/Library/PrivateFrameworks";
my $publicInstallPath = "/System/Library/Frameworks";
my $configuration = configuration();
my $platform = xcodeSDKPlatformName();
my $productDir = productDir();
my $stagingRoot = tempdir(CLEANUP => 1);
my $stagingPrivatePath = "$stagingRoot$privateInstallPath";
my $stagingPublicPath = "$stagingRoot$publicInstallPath";
my $archiveName = "webkit-$configuration-$platform";
my $archivePath = "$productDir/$archiveName.tar.gz";
my ($fh, $tempArchiveName) = tempfile( "/tmp/$archiveName-XXXXXXX");
system 'mkdir', '-p', $stagingPrivatePath;
system 'mkdir', '-p', $stagingPublicPath;
foreach my $framework (@privateFrameworks) {
print "Copying Private $framework from $productDir ...\n";
system 'cp', '-LpR', $productDir . "/$framework.framework", "$stagingPrivatePath/";
die "Check to see that you have built $framework for $configuration-$platform" if $? and $framework ne 'WebKit2';
}
foreach my $framework (@publicFrameworks) {
print "Copying Public $framework from $productDir ...\n";
system 'cp', '-LpR', $productDir . "/$framework.framework", "$stagingPublicPath/";
die "Check to see that you have built $framework for $configuration-$platform" if $?;
}
system 'ditto', "$productDir/usr", "$stagingRoot/usr";
chdir $stagingRoot;
print "Creating compressed archive ...\n";
system 'ditto', '-cz', $stagingRoot, $tempArchiveName;
chdirWebKit();
my $moved = move($tempArchiveName, $archivePath);
if ($moved) {
print "Your root is: $archivePath\n";
} else {
print "Couldn't move temporary archive $tempArchiveName to $archivePath\n";
}