Migrate update-webkit for Windows to not require Cygwin
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Mar 2015 22:46:41 +0000 (22:46 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Mar 2015 22:46:41 +0000 (22:46 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143040

Reviewed by Brent Fulgham.

* Scripts/update-webkit-dependency:
(wanted):
(toUnixPath): Deleted.
* Scripts/webkitdirs.pm:
(fontExists):
(checkInstalledTools):
(setupAppleWinEnv):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181977 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/update-webkit-dependency
Tools/Scripts/webkitdirs.pm

index 258c047da90e906d0c5b086db8a410d82578591a..0b9e4514fdaa3e0163cbfe9c5867a8a719e2dedd 100644 (file)
@@ -1,3 +1,18 @@
+2015-03-25  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Migrate update-webkit for Windows to not require Cygwin
+        https://bugs.webkit.org/show_bug.cgi?id=143040
+
+        Reviewed by Brent Fulgham.
+
+        * Scripts/update-webkit-dependency:
+        (wanted):
+        (toUnixPath): Deleted.
+        * Scripts/webkitdirs.pm:
+        (fontExists):
+        (checkInstalledTools):
+        (setupAppleWinEnv):
+
 2015-03-25  Sam Weinig  <sam@webkit.org>
 
         [Content Extensions] Convert content extension compiling to return error codes and write its output using a client
index ec5b6fd98c2beb03ee1313bad1be7269ab5c0043..5f2ddcd7d434becf93061451b14ef498ab9f50cf 100755 (executable)
 use strict;
 use warnings;
 
+use Archive::Zip qw( :ERROR_CODES );
+use File::Copy;
 use File::Find;
 use File::Spec;
 use File::Temp ();
 use FindBin;
-use HTTP::Date qw(str2time);
+use HTTP::Date qw(str2time time2str);
+use LWP::Simple;
 use POSIX;
 use lib $FindBin::Bin;
 use webkitdirs;
@@ -67,26 +70,33 @@ my $prefixInZip = shift;
 my $sourceDir = sourceDir();
 my $file = getLibraryName($libsURL);
 my $zipFile = "$file.zip"; 
-my $webkitLibrariesDir = toUnixPath($ENV{'WEBKIT_LIBRARIES'}) || "$sourceDir/WebKitLibraries/win";
+my $webkitLibrariesDir = $ENV{'WEBKIT_LIBRARIES'} || "$sourceDir/WebKitLibraries/win";
 my $tmpRelativeDir = File::Temp::tempdir("webkitlibsXXXXXXX", TMPDIR => 1, CLEANUP => 1);
 my $tmpAbsDir = File::Spec->rel2abs($tmpRelativeDir);
 
 print "Checking Last-Modified date of $zipFile...\n";
 
-my $result = system "curl -s -I -k $libsURL | grep Last-Modified > \"$tmpAbsDir/$file.headers\"";
+my ($content_type, $document_length, $modified_time, $expires, $server) = head($libsURL);
 
-if (WEXITSTATUS($result)) {
+if (defined $modified_time) {
+
+    open NEW, ">", "$tmpAbsDir/$file.headers";
+    print NEW "Last-Modified: " . time2str($modified_time) . "\n";
+    close NEW;
+
+} else {
 
     #Note: Neither GitHub nor DropBox emit the Last-Modified HTTP header, so fall back to a file
        #containing the necessary information if we do not receive the information in our initial query.
     my $headerURL = $libsURL;
     $headerURL =~ s/\.zip$/\.headers/;
 
-    $result = system "curl -k -o \"$tmpAbsDir/$file.headers\" $headerURL";
+    my $result = getstore($headerURL, "$tmpAbsDir/$file.headers");
 
-    if (WEXITSTATUS($result)) {
+    if (!is_success($result)) {
         print STDERR "Couldn't check Last-Modified date of new $zipFile.\n";
-        print STDERR "Please ensure that $libsURL is reachable.\n";
+        print STDERR "Please ensure that Perl can use LWP::Simple to connect to HTTPS urls, and that $libsURL is reachable.\n";
+        print STDERR "You may have to run $ cpan LWP::Protocol::https\n";
 
         if (! -f "$webkitLibrariesDir/$file.headers") {
             print STDERR "Unable to check Last-Modified date and no version of $file to fall back to.\n";
@@ -113,11 +123,13 @@ if (open NEW, "$tmpAbsDir/$file.headers") {
 }
 
 print "Downloading $zipFile...\n\n";
-$result = system "curl -k -o \"$tmpAbsDir/$zipFile\" $libsURL";
-die "Couldn't download $zipFile!" if $result;
+print "$libsURL\n";
+my $result = getstore($libsURL, "$tmpAbsDir/$zipFile");
+die "Couldn't download $zipFile!" if is_error($result);
 
-$result = system "unzip", "-q", "-d", $tmpAbsDir, "$tmpAbsDir/$zipFile";
-die "Couldn't unzip $zipFile." if $result;
+my $zip = Archive::Zip->new("$tmpAbsDir/$zipFile");
+$result = $zip->extractTree("", $tmpAbsDir);
+die "Couldn't unzip $zipFile." if $result != AZ_OK;
 
 print "\nInstalling $file...\n";
 
@@ -131,25 +143,17 @@ sub wanted
         return;
     }
 
-    system "cp", $_, $destination;
+    copy($_, $destination);
 }
 
 File::Find::find(\&wanted, "$tmpAbsDir/$file");
 
-$result = system "mv", "$tmpAbsDir/$file.headers", $webkitLibrariesDir;
-print STDERR "Couldn't move $file.headers to $webkitLibrariesDir" . ".\n" if $result;
+$result = move("$tmpAbsDir/$file.headers", $webkitLibrariesDir);
+print STDERR "Couldn't move $file.headers to $webkitLibrariesDir" . ".\n" if $result == 0;
 
 print "The $file has been sucessfully installed in\n $webkitLibrariesDir\n";
 exit;
 
-sub toUnixPath
-{
-    my $path = shift;
-    return unless $path;
-    chomp($path = `cygpath -u '$path'`);
-    return $path;
-}
-
 sub lastModifiedToUnixTime($)
 {
     my ($str) = @_;
index a0c25733b69e07a2695fde432922c991a18418ca..d595c616ed238caffa7a4c2d1e62eb65b83fa7bf 100755 (executable)
@@ -1449,15 +1449,16 @@ sub windowsOutputDir()
 sub fontExists($)
 {
     my $font = shift;
-    my $val = system qw(regtool get), '\\HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\' . $font . ' (TrueType)';
-    return 0 == $val;
+    my $cmd = "reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\" . $font ."\" 2>&1";
+    my $val = `$cmd`;
+    return $? == 0;
 }
 
 sub checkInstalledTools()
 {
     # SVN 1.7.10 is known to be compatible with current servers. SVN 1.8.x seems to be missing some authentication
     # protocols we use for svn.webkit.org:
-    my $svnVersion = `svn --version | grep "\\sversion"`;
+    my $svnVersion = `svn --version 2> NUL | grep "\\sversion"`;
     chomp($svnVersion);
     if (!$? and $svnVersion =~ /1\.8\./) {
         print "svn 1.7.10 is known to be compatible with our servers. You are running $svnVersion,\nwhich may not work properly.\n"
@@ -1468,7 +1469,7 @@ sub checkInstalledTools()
     die "You must have Python installed to build WebKit.\n" if ($?);
 
     # cURL 7.34.0 has a bug that prevents authentication with opensource.apple.com (and other things using SSL3).
-    my $curlVer = `curl --version | grep "curl"`;
+    my $curlVer = `curl --version 2> NUL | grep "curl"`;
     chomp($curlVer);
     if (!$? and $curlVer =~ /libcurl\/7\.34\.0/) {
         print "cURL version 7.34.0 has a bug that prevents authentication with SSL v2 or v3.\n";
@@ -1525,7 +1526,10 @@ sub setupAppleWinEnv()
 
         foreach my $variable (keys %variablesToSet) {
             print "Setting the Environment Variable '" . $variable . "' to '" . $variablesToSet{$variable} . "'\n\n";
-            system qw(regtool -s set), '\\HKEY_CURRENT_USER\\Environment\\' . $variable, $variablesToSet{$variable};
+            my $ret = system "setx", $variable, $variablesToSet{$variable};
+            if ($ret != 0) {
+                system qw(regtool -s set), '\\HKEY_CURRENT_USER\\Environment\\' . $variable, $variablesToSet{$variable};
+            }
             $restartNeeded ||=  $variable eq "WEBKIT_LIBRARIES" || $variable eq "WEBKIT_OUTPUTDIR";
         }