1#!/usr/bin/perl -w 2 3# Copyright (C) 2005, 2006, 2007 Apple Computer, 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# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15# its contributors may be used to endorse or promote products derived 16# from this software without specific prior written permission. 17# 18# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29# Updates a development environment to the new WebKitSupportLibrary 30 31use strict; 32use warnings; 33 34use File::Find; 35use File::Temp (); 36use File::Spec; 37use FindBin; 38use lib $FindBin::Bin; 39use webkitdirs; 40 41my $expectedMD5 = "a1341aadbcce1ef26dad2b2895457314"; 42 43my $sourceDir = sourceDir(); 44my $file = "WebKitSupportLibrary"; 45my $zipFile = "$file.zip"; 46my $zipDirectory = toUnixPath($ENV{'WEBKITSUPPORTLIBRARIESZIPDIR'}) || $sourceDir; 47my $pathToZip = File::Spec->catfile($zipDirectory, $zipFile); 48my $webkitLibrariesDir = toUnixPath($ENV{'WEBKITLIBRARIESDIR'}) || "$sourceDir/WebKitLibraries/win"; 49my $tmpDir = File::Spec->rel2abs(File::Temp::tempdir("webkitlibsXXXXXXX", TMPDIR => 1, CLEANUP => 1)); 50 51# Make sure the file zipfile exists and matches the expected MD5 before doing anything. 52 53-f $pathToZip or dieAndInstructToDownload("$zipFile could not be find in your root source directory."); 54 55`md5sum "$pathToZip"` =~ /^([0-9a-fA-F]{32}).*/ or die "Error running md5sum on \"$pathToZip\""; 56my $actualMD5 = $1; 57$actualMD5 eq $expectedMD5 or dieAndInstructToDownload("$zipFile is out of date."); 58 59print "Checking mod-date of $zipFile...\n"; 60open MOD, ">$tmpDir/$file.modified" or die "Couldn't open $tmpDir/$file.modified for writing"; 61print MOD (stat $pathToZip)[9] . "\n"; 62close MOD; 63 64if (open NEW, "$tmpDir/$file.modified") { 65 my $new = <NEW>; 66 close NEW; 67 68 if (open OLD, "$webkitLibrariesDir/$file.modified") { 69 my $old = <OLD>; 70 close OLD; 71 if ($old eq $new) { 72 print "Current $file is up to date\n"; 73 exit 0; 74 } 75 } 76} 77 78my $result = system "unzip", "-q", "-d", $tmpDir, $pathToZip; 79die "Couldn't unzip $zipFile." if $result; 80 81print "\nInstalling $file...\n"; 82 83sub wanted 84{ 85 my $relativeName = File::Spec->abs2rel($File::Find::name, "$tmpDir/$file/win"); 86 my $destination = "$webkitLibrariesDir/$relativeName"; 87 88 if (-d $_) { 89 mkdir $destination; 90 return; 91 } 92 93 system "cp", $_, $destination; 94} 95 96File::Find::find(\&wanted, "$tmpDir/$file"); 97 98$result = system "mv", "$tmpDir/$file.modified", $webkitLibrariesDir; 99print STDERR "Couldn't move $file.modified to $webkitLibrariesDir" . ".\n" if $result; 100 101print "The $file has been sucessfully installed in\n $webkitLibrariesDir\n"; 102exit; 103 104sub toUnixPath 105{ 106 my $path = shift; 107 return unless $path; 108 chomp($path = `cygpath -u '$path'`); 109 return $path; 110} 111 112sub dieAndInstructToDownload 113{ 114 my $message = shift; 115 116 die <<EOF; 117 118=============================================================================== 119$message 120Please download $zipFile from: 121 122 http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html 123 124and place it in: 125 126 $sourceDir 127 128Then run build-webkit again. 129=============================================================================== 130 131EOF 132 133} 134