fix initramfs
[openwrt.git] / scripts / download.pl
index 859e6c8..806ee80 100755 (executable)
@@ -8,15 +8,39 @@
 
 use strict;
 use warnings;
+use File::Basename;
+
+@ARGV > 2 or die "Syntax: $0 <target dir> <filename> <md5sum> [<mirror> ...]\n";
 
 my $target = shift @ARGV;
 my $filename = shift @ARGV;
 my $md5sum = shift @ARGV;
+my $scriptdir = dirname($0);
 my @mirrors;
-
 my $ok;
 
-@ARGV > 0 or die "Syntax: $0 <target dir> <filename> <md5sum> <mirror> [<mirror> ...]\n";
+sub localmirrors {
+    my @mlist;
+    open LM, "$scriptdir/localmirrors" and do {
+           while (<LM>) {
+                       chomp $_;
+                       push @mlist, $_;
+               }
+               close LM;
+       };
+       open CONFIG, "<".$ENV{'TOPDIR'}."/.config" and do {
+               while (<CONFIG>) {
+                       /^CONFIG_LOCALMIRROR="(.+)"/ and do {
+                               chomp;
+                               push @mlist, $1;
+                       };
+               }
+               close CONFIG;
+       };
+       
+
+    return @mlist;
+}
 
 sub which($) {
        my $prog = shift;
@@ -62,7 +86,7 @@ sub download
        $sum = $1;
        
        if (($md5sum =~ /\w{32}/) and ($sum ne $md5sum)) {
-               print STDERR "MD5 sum of the downloaded file does not match - deleting download.\n";
+               print STDERR "MD5 sum of the downloaded file does not match (file: $sum, requested: $md5sum) - deleting download.\n";
                cleanup();
                return;
        }
@@ -78,6 +102,8 @@ sub cleanup
        unlink "$target/$filename.md5sum";
 }
 
+@mirrors = localmirrors();
+
 foreach my $mirror (@ARGV) {
        if ($mirror =~ /^\@SF\/(.+)$/) {
                # give sourceforge a few more tries, because it redirects to different mirrors
@@ -85,15 +111,23 @@ foreach my $mirror (@ARGV) {
                        push @mirrors, "http://downloads.sourceforge.net/$1";
                }
        } elsif ($mirror =~ /^\@GNU\/(.+)$/) {
-               my $gnupath = $1;
-               push @mirrors, "ftp://ftp.gnu.org/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.belnet.be/mirror/ftp.gnu.org/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.mirror.nl/pub/mirror/gnu/$gnupath";
-               push @mirrors, "http://mirror.switch.ch/ftp/mirror/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.uu.net/archive/systems/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.eu.uu.net/pub/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.leo.org/pub/comp/os/unix/gnu/$gnupath";
-               push @mirrors, "ftp://ftp.digex.net/pub/gnu/$gnupath";
+               push @mirrors, "ftp://ftp.gnu.org/gnu/$1";
+               push @mirrors, "ftp://ftp.belnet.be/mirror/ftp.gnu.org/gnu/$1";
+               push @mirrors, "ftp://ftp.mirror.nl/pub/mirror/gnu/$1";
+               push @mirrors, "http://mirror.switch.ch/ftp/mirror/gnu/$1";
+               push @mirrors, "ftp://ftp.uu.net/archive/systems/gnu/$1";
+               push @mirrors, "ftp://ftp.eu.uu.net/pub/gnu/$1";
+               push @mirrors, "ftp://ftp.leo.org/pub/comp/os/unix/gnu/$1";
+               push @mirrors, "ftp://ftp.digex.net/pub/gnu/$1";
+       } elsif ($mirror =~ /^\@KERNEL\/(.+)$/) {
+               push @mirrors, "ftp://ftp.us.kernel.org/pub/$1";
+               push @mirrors, "http://ftp.us.kernel.org/pub/$1";
+               push @mirrors, "ftp://ftp.kernel.org/pub/$1";
+               push @mirrors, "http://ftp.kernel.org/pub/$1";
+               push @mirrors, "ftp://ftp.de.kernel.org/pub/$1";
+               push @mirrors, "http://ftp.de.kernel.org/pub/$1";
+               push @mirrors, "ftp://ftp.fr.kernel.org/pub/$1";
+               push @mirrors, "http://ftp.fr.kernel.org/pub/$1";
        } else {
                push @mirrors, $mirror;
        }
This page took 0.022457 seconds and 4 git commands to generate.