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