[jhbuild] Simplify platform detection in update-webkit-libs-jhbuild
[WebKit-https.git] / Tools / Scripts / update-webkit-libs-jhbuild
1 #!/usr/bin/perl -w
2 # Copyright (C) 2011 Igalia S.L.
3 # Copyright (C) 2012 Intel Corporation
4 # Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
5 #
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2 of the License, or (at your option) any later version.
10 #
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # Lesser General Public License for more details.
15 #
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19
20 use FindBin;
21 use lib $FindBin::Bin;
22 use webkitdirs;
23 use Getopt::Long qw(:config pass_through);
24
25 my $platform = "";
26 $platform = "efl" if isEfl();
27 $platform = "gtk" if isGtk();
28
29 if (!$platform) {
30     die "No platform specified for " . basename($0) .". Use --gtk or --efl.\n";
31 }
32
33 sub getMD5HashForFile($)
34 {
35     my $file = shift;
36
37     open(FILE_CONTENTS, $file);
38
39     my $contents = "";
40     while (<FILE_CONTENTS>) {
41         $contents .= $_;
42     }
43
44     close(FILE_CONTENTS);
45
46     return md5_hex($contents);
47 }
48
49 sub jhbuildConfigurationChanged()
50 {
51     foreach my $file (qw(jhbuildrc jhbuild.modules)) {
52         my $path = join('/', getJhbuildPath(), $file . '.md5sum');
53         if (! -e $path) {
54             return 1;
55         }
56
57         # Get the md5 sum of the file we're testing, look in the right platform directory.
58         my $actualFile = join('/', sourceDir(), 'Tools', $platform, $file);
59         my $currentSum = getMD5HashForFile($actualFile);
60
61         # Get our previous record.
62         open(PREVIOUS_MD5, $path);
63         chomp(my $previousSum = <PREVIOUS_MD5>);
64         close(PREVIOUS_MD5);
65
66         if ($previousSum ne $currentSum) {
67             return 1;
68         }
69     }
70 }
71
72 sub saveJhbuildMd5() {
73     # Save md5sum for jhbuild-related files.saveJhbuildMd5();
74     my $jhbuildPath = getJhbuildPath();
75     (-d $jhbuildPath) || mkpath $jhbuildPath;
76     foreach my $file (qw(jhbuildrc jhbuild.modules)) {
77         my $source = join('/', sourceDir(), "Tools", $platform, $file);
78         my $destination = join('/', $jhbuildPath, $file);
79         open(SUM, ">$destination" . ".md5sum");
80         print SUM getMD5HashForFile($source);
81         close(SUM);
82     }
83 }
84
85 sub runJhbuild
86 {
87     my $command = shift;
88     my @jhbuildArgs = ("./jhbuild-wrapper", "--".$platform, $command);
89     push(@jhbuildArgs, @ARGV[0..$#ARGV]);
90     system(@jhbuildArgs) == 0 or die "Running jhbuild-wrapper " . $command . " failed.\n";
91 }
92
93 sub cleanJhbuild()
94 {
95     # If the configuration changed, dependencies may have been removed.
96     # Since we lack a granular way of uninstalling those we wipe out the
97     # jhbuild root and start from scratch.
98     my $jhbuildPath = getJhbuildPath();
99     if (system("rm -rf $jhbuildPath/Root") ne 0) {
100         die "Cleaning jhbuild root failed!";
101     }
102
103     if (system("rm -rf $jhbuildPath/Source") ne 0) {
104         die "Cleaning jhbuild sources failed!";
105     }
106 }
107
108 delete $ENV{AR_FLAGS} if exists $ENV{AR_FLAGS};
109
110 chdir(relativeScriptsDir() . "/../jhbuild") or die $!;
111
112 my %prettyPlatform = ( "efl" => "EFL", "gtk" => "GTK+" );
113
114 if (-e getJhbuildPath() && jhbuildConfigurationChanged()) {
115     cleanJhbuild();
116 }
117
118 saveJhbuildMd5();
119
120 print "Updating " . $prettyPlatform{$platform} . " port dependencies using jhbuild...\n";
121 runJhbuild("build");