X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=scripts%2Ffeeds;h=69ab60278a1a12bc5446cf5245c9f8cdac09d349;hb=c70545f397187b36c1220ae16b4db19f39857c93;hp=437af035fd28f2500f045bbb62d6412d97f28106;hpb=41ab276fe4d6a18f7bf875b4727474104fc4e136;p=oweals%2Fopenwrt.git diff --git a/scripts/feeds b/scripts/feeds index 437af035fd..69ab60278a 100755 --- a/scripts/feeds +++ b/scripts/feeds @@ -41,33 +41,56 @@ my $feed_src = {}; my $feed_target = {}; my $feed_vpackage = {}; -sub parse_config() { +sub parse_file($$); + +sub parse_file($$) { + my ($fname, $existing) = @_; my $line = 0; - my %name; + my $fh; - open FEEDS, "feeds.conf" or - open FEEDS, "feeds.conf.default" or - die "Unable to open feeds configuration"; - while () { + open $fh, $fname or return undef; + while (<$fh>) { chomp; s/#.+$//; - next unless /\S/; - my @line = split /\s+/, $_, 3; - my @src; $line++; + next unless /\S/; + + my ($type, $flags, $name, $urls) = m!^src-([\w\-]+)((?:\s+--\w+(?:=\S+)?)*)\s+(\w+)(?:\s+(\S.*))?$!; + unless ($type && $name) { + die "Syntax error in $fname, line $line\n"; + } + + if ($existing->{$name}++) { + die "Duplicate feed name '$name' in '$fname' line: $line\n"; + } + + my @src = defined($urls) ? split /\s+/, $urls : (); + push @src, '' if @src == 0; - my $valid = 1; - $line[0] =~ /^src-[\w-]+$/ or $valid = 0; - $line[1] =~ /^\w+$/ or $valid = 0; - @src = split /\s+/, $line[2]; - $valid or die "Syntax error in feeds.conf, line: $line\n"; + my %flags; + if (defined $flags) { + while ($flags =~ m!\s+--(\w+)(?:=(\S+))?!g) { + $flags{$1} = defined($2) ? $2 : 1; + } + } - $name{$line[1]} and die "Duplicate feed name '$line[1]', line: $line\n"; - $name{$line[1]} = 1; + if ($type eq "include") { + parse_file($urls, $existing) or + die "Unable to open included file '$urls'"; + next; + } - push @feeds, [$line[0], $line[1], \@src]; + push @feeds, ["src-$type", $name, \@src, \%flags]; } - close FEEDS; + close $fh; + return 1; +} + +sub parse_config() { + my %name; + parse_file("feeds.conf", \%name) or + parse_file("feeds.conf.default", \%name) or + die "Unable to open feeds configuration"; } sub update_location($$) @@ -105,8 +128,8 @@ sub update_index($) -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; system("$mk -s prepare-mk OPENWRT_BUILD= 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=5 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); - system("$mk -s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"targetinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"target\" SCAN_DEPS=\"profiles/*.mk $ENV{TOPDIR}/include/target.mk\" SCAN_DEPTH=5 SCAN_EXTRA=\"\" SCAN_MAKEOPTS=\"TARGET_BUILD=1\" 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_DEPTH=5 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); + system("$mk -s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"targetinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"target\" SCAN_DEPTH=5 SCAN_EXTRA=\"\" SCAN_MAKEOPTS=\"TARGET_BUILD=1\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index"); system("ln -sf $name.tmp/.targetinfo ./feeds/$name.targetindex"); @@ -127,6 +150,10 @@ my %update_method = ( 'init' => "ln -s '%s' '%s'", 'update' => "", 'revision' => "echo -n 'local'"}, + 'src-dummy' => { + 'init' => "true '%s' && mkdir '%s'", + 'update' => "", + 'revision' => "echo -n 'dummy'"}, 'src-git' => { 'init' => "git clone --depth 1 '%s' '%s'", 'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'", @@ -501,6 +528,11 @@ sub install_src { get_feed($feed->[1]); my $src = $feed_src->{$name} or return 1; + # enable force flag if feed src line was declared with --force + if (exists($feed->[3]{force})) { + $force = 1; + } + # If it's a core package and we don't want to override, just return my $override = 0; if (is_core_src($name)) { @@ -819,11 +851,12 @@ sub feed_config() { my $installed = (-f "feeds/$feed->[1].index"); printf "\tconfig FEED_%s\n", $feed->[1]; - printf "\t\tbool \"Enable feed %s\"\n", $feed->[1]; + printf "\t\ttristate \"Enable feed %s\"\n", $feed->[1]; printf "\t\tdepends on PER_FEED_REPO\n"; printf "\t\tdefault y\n" if $installed; printf "\t\thelp\n"; - printf "\t\t Enable the \\\"%s\\\" feed at %s.\n", $feed->[1], $feed->[2][0]; + printf "\t\t Enable the \\\"%s\\\" feed in opkg distfeeds.conf.\n", $feed->[1]; + printf "\t\t Say M to add the feed commented out.\n"; printf "\n"; }