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