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 31 use strict; 32 use warnings; 33 34 use File::Find; 35 use File::Temp (); 36 use File::Spec; 37 use FindBin; 38 use lib $FindBin::Bin; 39 use webkitdirs; 40 41 my $expectedMD5 = "a1341aadbcce1ef26dad2b2895457314"; 42 43 my $sourceDir = sourceDir(); 44 my $file = "WebKitSupportLibrary"; 45 my $zipFile = "$file.zip"; 46 my $zipDirectory = toUnixPath($ENV{'WEBKITSUPPORTLIBRARIESZIPDIR'}) || $sourceDir; 47 my $pathToZip = File::Spec->catfile($zipDirectory, $zipFile); 48 my $webkitLibrariesDir = toUnixPath($ENV{'WEBKITLIBRARIESDIR'}) || "$sourceDir/WebKitLibraries/win"; 49 my $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\""; 56 my $actualMD5 = $1; 57 $actualMD5 eq $expectedMD5 or dieAndInstructToDownload("$zipFile is out of date."); 58 59 print "Checking mod-date of $zipFile...\n"; 60 open MOD, ">$tmpDir/$file.modified" or die "Couldn't open $tmpDir/$file.modified for writing"; 61 print MOD (stat $pathToZip)[9] . "\n"; 62 close MOD; 63 64 if (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 78 my $result = system "unzip", "-q", "-d", $tmpDir, $pathToZip; 79 die "Couldn't unzip $zipFile." if $result; 80 81 print "\nInstalling $file...\n"; 82 83 sub 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 96 File::Find::find(\&wanted, "$tmpDir/$file"); 97 98 $result = system "mv", "$tmpDir/$file.modified", $webkitLibrariesDir; 99 print STDERR "Couldn't move $file.modified to $webkitLibrariesDir" . ".\n" if $result; 100 101 print "The $file has been sucessfully installed in\n $webkitLibrariesDir\n"; 102 exit; 103 104 sub toUnixPath 105 { 106 my $path = shift; 107 return unless $path; 108 chomp($path = `cygpath -u '$path'`); 109 return $path; 110 } 111 112 sub dieAndInstructToDownload 113 { 114 my $message = shift; 115 116 die <<EOF; 117 118 =============================================================================== 119 $message 120 Please download $zipFile from: 121 122 http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html 123 124 and place it in: 125 126 $sourceDir 127 128 Then run build-webkit again. 129 =============================================================================== 130 131 EOF 132 133 } 134