3b4931ad5c3f70c91b4a5e9a20a572c9e6bfd088
[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 $platformEfl = 0;
26 my $platformGtk = 0;
27
28 my $getOptionsResult = GetOptions(
29     'efl' => \$platformEfl,
30     'gtk' => \$platformGtk,
31     );
32
33 my $platform = "";
34 if (!$getOptionsResult) {
35     die "No platform specified for " . basename($0) .". Use --gtk or --efl.\n";
36 } else {
37     if ($platformEfl) {
38         $platform = "efl";
39     }
40     if ($platformGtk) {
41         $platform = "gtk";
42     }
43 }
44
45 sub getMD5HashForFile($)
46 {
47     my $file = shift;
48
49     open(FILE_CONTENTS, $file);
50
51     my $contents = "";
52     while (<FILE_CONTENTS>) {
53         $contents .= $_;
54     }
55
56     close(FILE_CONTENTS);
57
58     return md5_hex($contents);
59 }
60
61 sub jhbuildConfigurationChanged()
62 {
63     foreach my $file (qw(jhbuildrc jhbuild.modules)) {
64         my $path = join('/', getJhbuildPath(), $file . '.md5sum');
65         if (! -e $path) {
66             return 1;
67         }
68
69         # Get the md5 sum of the file we're testing, look in the right platform directory.
70         my $actualFile = join('/', sourceDir(), 'Tools', $platform, $file);
71         my $currentSum = getMD5HashForFile($actualFile);
72
73         # Get our previous record.
74         open(PREVIOUS_MD5, $path);
75         chomp(my $previousSum = <PREVIOUS_MD5>);
76         close(PREVIOUS_MD5);
77
78         if ($previousSum ne $currentSum) {
79             return 1;
80         }
81     }
82 }
83
84 sub saveJhbuildMd5() {
85     # Save md5sum for jhbuild-related files.saveJhbuildMd5();
86     my $jhbuildPath = getJhbuildPath();
87     (-d $jhbuildPath) || mkpath $jhbuildPath;
88     foreach my $file (qw(jhbuildrc jhbuild.modules)) {
89         my $source = join('/', sourceDir(), "Tools", $platform, $file);
90         my $destination = join('/', $jhbuildPath, $file);
91         open(SUM, ">$destination" . ".md5sum");
92         print SUM getMD5HashForFile($source);
93         close(SUM);
94     }
95 }
96
97 sub runJhbuild
98 {
99     my $command = shift;
100     my @jhbuildArgs = ("./jhbuild-wrapper", "--".$platform, $command);
101     push(@jhbuildArgs, @ARGV[0..$#ARGV]);
102     system(@jhbuildArgs) == 0 or die "Running jhbuild-wrapper " . $command . " failed.\n";
103 }
104
105 sub cleanJhbuild()
106 {
107     # If the configuration changed, dependencies may have been removed.
108     # Since we lack a granular way of uninstalling those we wipe out the
109     # jhbuild root and start from scratch.
110     my $jhbuildPath = getJhbuildPath();
111     if (system("rm -rf $jhbuildPath/Root") ne 0) {
112         die "Cleaning jhbuild root failed!";
113     }
114
115     if (system("rm -rf $jhbuildPath/Source") ne 0) {
116         die "Cleaning jhbuild sources failed!";
117     }
118 }
119
120 delete $ENV{AR_FLAGS} if exists $ENV{AR_FLAGS};
121
122 chdir(relativeScriptsDir() . "/../jhbuild") or die $!;
123
124 my %prettyPlatform = ( "efl" => "EFL", "gtk" => "GTK+" );
125
126 if (-e getJhbuildPath() && jhbuildConfigurationChanged()) {
127     cleanJhbuild();
128 }
129
130 saveJhbuildMd5();
131
132 print "Updating " . $prettyPlatform{$platform} . " port dependencies using jhbuild...\n";
133 runJhbuild("build");