Home | History | Annotate | Download | only in BuildSlaveSupport
      1 #!/usr/bin/perl -w
      2 
      3 # Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
      4 # Copyright (C) 2006 Mark Rowe <opendarwin.org (at] bdash.net.nz>.  All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 #
     10 # 1.  Redistributions of source code must retain the above copyright
     11 #     notice, this list of conditions and the following disclaimer. 
     12 # 2.  Redistributions in binary form must reproduce the above copyright
     13 #     notice, this list of conditions and the following disclaimer in the
     14 #     documentation and/or other materials provided with the distribution. 
     15 # 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     16 #     its contributors may be used to endorse or promote products derived
     17 #     from this software without specific prior written permission. 
     18 #
     19 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     20 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     23 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     26 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     28 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 
     30 # Creates the launcher WebKit.app with bundled frameworks.
     31 
     32 use strict;
     33 
     34 use FindBin;
     35 use lib "$FindBin::Bin/../Scripts";
     36 use webkitdirs;
     37 
     38 my @xcodeBuildArguments = XcodeOptions();
     39 my $nightlyLauncherTemplatePath = "$FindBin::Bin/../WebKitLauncher";
     40 my $nightlyLauncherStagingPath = productDir() . "/WebKit.app";
     41 
     42 sub buildNightlyLauncher
     43 {
     44     chdir($nightlyLauncherTemplatePath);
     45     system("xcodebuild", "clean", "-alltargets", @xcodeBuildArguments, @ARGV) == 0 or die "Failed cleaning WebKitLauncher project";
     46     system("xcodebuild", @xcodeBuildArguments, @ARGV) == 0 or die "Failed building WebKitLauncher project";
     47     chdirWebKit();
     48 }
     49 
     50 sub currentRevision
     51 {
     52     my $sourceDir = sourceDir();
     53     if (isSVNDirectory($sourceDir)) {
     54         return currentSVNRevision();
     55     } elsif (isGitDirectory($sourceDir)) {
     56         my $gitLog = `cd $sourceDir && LC_ALL=C git log --grep='git-svn-id: ' -n 1 | grep git-svn-id:`;
     57         (my $revision) = ($gitLog =~ m/ +git-svn-id: .+@(\d+) /g);
     58         return $revision;
     59     }
     60 }
     61 
     62 sub currentBranch
     63 {
     64     my $sourceDir = sourceDir();
     65     my ($url, $branch);
     66     if (isSVNDirectory($sourceDir)) {
     67         my $svnInfo = `LC_ALL=C svn info $sourceDir | grep URL:`;
     68         ($url) = ($svnInfo =~ m/URL: (.+)/g);
     69     } elsif (isGitDirectory($sourceDir)) {
     70         my $gitLog = `cd $sourceDir && LC_ALL=C git log --grep='git-svn-id: ' -n 1 | grep git-svn-id:`;
     71         ($url) = ($gitLog =~ m/ +git-svn-id: (.+)@\d+ /g);
     72     }
     73     ($branch) = ($url =~ m/\/webkit\/(trunk|branches\/[^\/]+)/);
     74     die "Unable to determine current SVN branch in $sourceDir" unless (defined $branch);
     75     $branch =~ s/^branches\///;
     76     return $branch;
     77 }
     78 
     79 sub copyNightlyLauncher
     80 {
     81     my $revision = currentRevision();
     82     my $branch = currentBranch();
     83 
     84     my $infoPlist = "$nightlyLauncherStagingPath/Contents/Info.plist";
     85     my $versionFile = "$nightlyLauncherStagingPath/Contents/Resources/VERSION";
     86     my $branchFile = "$nightlyLauncherStagingPath/Contents/Resources/BRANCH";
     87     my $data;
     88     open(IN, $infoPlist) or die "Couldn't open Info.plist in built application for reading";
     89     {
     90         undef $/;
     91         $data = <IN>;
     92     }
     93     close(IN);
     94     open(OUT, ">$infoPlist") or die "Couldn't open Info.plist in built application for writing";
     95     $data =~ s/VERSION/$revision/g;
     96     print OUT $data;
     97     close(OUT);
     98 
     99     open(OUT, ">$versionFile") or die "Couldn't open VERSION in built application for writing";
    100     print OUT "$revision\n";
    101     close(OUT);
    102 
    103     open(OUT, ">$branchFile") or die "Couldn't open BRANCH in built application for writing";
    104     print OUT "$branch\n";
    105     close(OUT);
    106 
    107     my @frameworks = ("JavaScriptCore", "JavaScriptGlue", "WebCore", "WebKit");
    108     for my $framework (@frameworks) {
    109         system("ditto", productDir() . "/$framework.framework", "$nightlyLauncherStagingPath/Contents/Resources/$framework.framework") == 0 or die "Failed copying $framework.framework into $nightlyLauncherStagingPath";
    110     }
    111 }
    112 
    113 my $b = currentBranch();
    114 my $r = currentRevision();
    115 print "Branch: ", $b, "\n";
    116 print "Revision: ", $r, "\n";
    117 
    118 chdirWebKit();
    119 buildNightlyLauncher();
    120 copyNightlyLauncher();
    121