Home | History | Annotate | Download | only in Scripts
      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