| #!/usr/bin/perl -w |
| # Copyright (C) 2011 Igalia S.L. |
| # Copyright (C) 2012 Intel Corporation |
| # |
| # This library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2 of the License, or (at your option) any later version. |
| # |
| # This library is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # Lesser General Public License for more details. |
| # |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with this library; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| |
| use FindBin; |
| use lib $FindBin::Bin; |
| use webkitdirs; |
| use Getopt::Long qw(:config pass_through); |
| |
| my $platformEfl = 0; |
| my $platformGtk = 0; |
| |
| my $getOptionsResult = GetOptions( |
| 'efl' => \$platformEfl, |
| 'gtk' => \$platformGtk |
| ); |
| |
| my $platform = ""; |
| if (!$getOptionsResult) { |
| die "No platform specified for " . basename($0) .". Use --gtk or --efl.\n"; |
| } else { |
| if ($platformEfl) { |
| $platform = "efl"; |
| } |
| if ($platformGtk) { |
| $platform = "gtk"; |
| } |
| } |
| |
| sub getMD5HashForFile($) |
| { |
| my $file = shift; |
| |
| open(FILE_CONTENTS, $file); |
| |
| my $contents = ""; |
| while (<FILE_CONTENTS>) { |
| $contents .= $_; |
| } |
| |
| close(FILE_CONTENTS); |
| |
| return md5_hex($contents); |
| } |
| |
| sub jhbuildConfigurationChanged() |
| { |
| foreach my $file (qw(jhbuildrc jhbuild.modules)) { |
| my $path = join('/', getJhbuildPath(), $file . '.md5sum'); |
| if (! -e $path) { |
| return 1; |
| } |
| |
| # Get the md5 sum of the file we're testing, look in the right platform directory. |
| my $actualFile = join('/', sourceDir(), 'Tools', $platform, $file); |
| my $currentSum = getMD5HashForFile($actualFile); |
| |
| # Get our previous record. |
| open(PREVIOUS_MD5, $path); |
| chomp(my $previousSum = <PREVIOUS_MD5>); |
| close(PREVIOUS_MD5); |
| |
| if ($previousSum ne $currentSum) { |
| return 1; |
| } |
| } |
| } |
| |
| sub saveJhbuildMd5() { |
| # Save md5sum for jhbuild-related files.saveJhbuildMd5(); |
| my $jhbuildPath = getJhbuildPath(); |
| (-d $jhbuildPath) || mkpath $jhbuildPath; |
| foreach my $file (qw(jhbuildrc jhbuild.modules)) { |
| my $source = join('/', sourceDir(), "Tools", $platform, $file); |
| my $destination = join('/', $jhbuildPath, $file); |
| open(SUM, ">$destination" . ".md5sum"); |
| print SUM getMD5HashForFile($source); |
| close(SUM); |
| } |
| } |
| |
| sub runJhbuild |
| { |
| my $command = shift; |
| my @jhbuildArgs = ("./jhbuild-wrapper", "--".$platform, $command); |
| push(@jhbuildArgs, @ARGV[0..$#ARGV]); |
| system(@jhbuildArgs) == 0 or die "Running jhbuild-wrapper " . $command . " failed.\n"; |
| } |
| |
| sub cleanJhbuild() |
| { |
| # If the configuration changed, dependencies may have been removed. |
| # Since we lack a granular way of uninstalling those we wipe out the |
| # jhbuild root and start from scratch. |
| my $jhbuildPath = getJhbuildPath(); |
| if (system("rm -rf $jhbuildPath/Root") ne 0) { |
| die "Cleaning jhbuild root failed!"; |
| } |
| |
| if (system("rm -rf $jhbuildPath/Source") ne 0) { |
| die "Cleaning jhbuild sources failed!"; |
| } |
| } |
| |
| delete $ENV{AR_FLAGS} if exists $ENV{AR_FLAGS}; |
| |
| chdir(relativeScriptsDir() . "/../jhbuild") or die $!; |
| |
| my %prettyPlatform = ( "efl" => "EFL", "gtk" => "GTK+" ); |
| |
| if (-e getJhbuildPath() && jhbuildConfigurationChanged()) { |
| cleanJhbuild(); |
| } |
| |
| saveJhbuildMd5(); |
| |
| print "Updating " . $prettyPlatform{$platform} . " port dependencies using jhbuild...\n"; |
| runJhbuild("build"); |