projects
/
openwrt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
scripts/feeds: allow multiple alternative urls for a single feed. this will be useful...
[openwrt.git]
/
scripts
/
feeds
diff --git
a/scripts/feeds
b/scripts/feeds
index
b5abfc8
..
ab765b1
100755
(executable)
--- a/
scripts/feeds
+++ b/
scripts/feeds
@@
-11,6
+11,10
@@
use Cwd 'abs_path';
chdir "$FindBin::Bin/..";
$ENV{TOPDIR}=getcwd();
chdir "$FindBin::Bin/..";
$ENV{TOPDIR}=getcwd();
+my $mk=`which gmake`; # select the right 'make' program
+chomp($mk); # trim trailing newline
+$mk or $mk = "make"; # default to 'make'
+
my @feeds;
my %build_packages;
my %installed;
my @feeds;
my %build_packages;
my %installed;
@@
-19,24
+23,27
@@
sub parse_config() {
my $line = 0;
my %name;
my $line = 0;
my %name;
- open FEEDS, "feeds.conf";
+ open FEEDS, "feeds.conf" or
+ open FEEDS, "feeds.conf.default" or
+ die "Unable to open feeds configuration";
while (<FEEDS>) {
chomp;
s/#.+$//;
next unless /\S/;
my @line = split /\s+/, $_, 3;
while (<FEEDS>) {
chomp;
s/#.+$//;
next unless /\S/;
my @line = split /\s+/, $_, 3;
+ my @src;
$line++;
my $valid = 1;
$line[0] =~ /^src-\w+$/ or $valid = 0;
$line[1] =~ /^\w+$/ or $valid = 0;
$line++;
my $valid = 1;
$line[0] =~ /^src-\w+$/ or $valid = 0;
$line[1] =~ /^\w+$/ or $valid = 0;
-
$line[2] =~ /\s/ and $valid = 0
;
+
@src = split /\s+/, $line[2]
;
$valid or die "Syntax error in feeds.list, line: $line\n";
$name{$line[1]} and die "Duplicate feed name '$line[1]', line: $line\n";
$name{$line[1]} = 1;
$valid or die "Syntax error in feeds.list, line: $line\n";
$name{$line[1]} and die "Duplicate feed name '$line[1]', line: $line\n";
$name{$line[1]} = 1;
- push @feeds, [
@line
];
+ push @feeds, [
$line[0], $line[1], \@src
];
}
close FEEDS;
}
}
close FEEDS;
}
@@
-48,8
+55,8
@@
sub update_index($)
-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
-d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1;
-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
-d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1;
- system("
make
-s prepare-mk TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\"");
- system("
make
-s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"packageinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"package\" SCAN_DEPS=\"$ENV{TOPDIR}/include/package*.mk\" SCAN_DEPTH=4 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\"");
+ system("
$mk
-s prepare-mk TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\"");
+ system("
$mk
-s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"packageinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"package\" SCAN_DEPS=\"$ENV{TOPDIR}/include/package*.mk\" SCAN_DEPTH=4 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\"");
system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index");
return 0;
system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index");
return 0;
@@
-96,7
+103,7
@@
sub update_git($$) {
system("GIT_DIR=./feeds/$name/.git git pull") == 0 or return 1;
} else {
system("rm -rf \"./feeds/$name\"");
system("GIT_DIR=./feeds/$name/.git git pull") == 0 or return 1;
} else {
system("rm -rf \"./feeds/$name\"");
- system("git
-
clone --depth 1 $src ./feeds/$name") == 0 or return 1;
+ system("git
clone --depth 1 $src ./feeds/$name") == 0 or return 1;
}
return 0;
}
return 0;
@@
-117,7
+124,7
@@
sub get_feed($) {
}
sub get_installed() {
}
sub get_installed() {
- system("
make
-s prepare-tmpinfo");
+ system("
$mk
-s prepare-tmpinfo");
clear_packages();
parse_package_metadata("./tmp/.packageinfo");
%installed = %package;
clear_packages();
parse_package_metadata("./tmp/.packageinfo");
%installed = %package;
@@
-186,7
+193,7
@@
sub list {
}
if ($opts{s}) {
foreach my $feed (@feeds) {
}
if ($opts{s}) {
foreach my $feed (@feeds) {
- printf "\%-32s\tURL: %s\n", $feed->[1],
$feed->[2]
;
+ printf "\%-32s\tURL: %s\n", $feed->[1],
join(", ", @{$feed->[2]})
;
}
return 0;
}
}
return 0;
}
@@
-280,7
+287,7
@@
sub install_package {
};
# install all dependencies
};
# install all dependencies
- foreach my $vpkg (@{$srcpackage{$src}}) {
+ foreach my $vpkg (@{$srcpackage{$src}}
, $pkg
) {
foreach my $dep (@{$vpkg->{depends}}, @{$vpkg->{builddepends}}) {
next if $dep =~ /@/;
$dep =~ s/^\+//;
foreach my $dep (@{$vpkg->{depends}}, @{$vpkg->{builddepends}}) {
next if $dep =~ /@/;
$dep =~ s/^\+//;
@@
-299,9
+306,9
@@
sub refresh_config {
# refresh the config
if ($default) {
# refresh the config
if ($default) {
- system("
make
oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null");
+ system("
$mk
oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null");
} else {
} else {
- system("
make
defconfig Config.in >/dev/null 2>/dev/null");
+ system("
$mk
defconfig Config.in >/dev/null 2>/dev/null");
}
}
}
}
@@
-413,8
+420,14
@@
sub update_feed($$$$)
return 1;
};
$perform_update and do {
return 1;
};
$perform_update and do {
- warn "Updating feed '$name' from '$src' ...\n";
- &{$update_method{$type}}($name, $src) == 0 or do {
+ my $failed = 1;
+ foreach my $feedsrc (@$src) {
+ warn "Updating feed '$name' from '$feedsrc' ...\n";
+ next unless &{$update_method{$type}}($name, $feedsrc) == 0;
+ $failed = 0;
+ last;
+ }
+ $failed and do {
warn "failed.\n";
return 1;
};
warn "failed.\n";
return 1;
};
This page took
0.025529 seconds
and
4
git commands to generate.