scripts: feeds: fix version detection for Make >= 4.2.1
[15.05/openwrt.git] / scripts / feeds
index 785be38..908e56c 100755 (executable)
@@ -22,7 +22,10 @@ my @mkver = split /\s+/, `$mk -v`, 4;
 my $valid_mk = 1;
 $mkver[0] =~ /^GNU/ or $valid_mk = 0;
 $mkver[1] =~ /^Make/ or $valid_mk = 0;
-$mkver[2] >= "3.81" or $valid_mk = 0;
+
+my ($mkv1, $mkv2) = split /\./, $mkver[2];
+($mkv1 >= 4 || ($mkv1 == 3 && $mkv2 >= 81)) or $valid_mk = 0;
+
 $valid_mk or die "Unsupported version of make found: $mk\n";
 
 my @feeds;
@@ -51,7 +54,7 @@ sub parse_config() {
                $line++;
 
                my $valid = 1;
-               $line[0] =~ /^src-\w+$/ or $valid = 0;
+               $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";
@@ -128,6 +131,13 @@ my %update_method = (
                'update'        => "git pull --ff",
                'controldir'    => ".git",
                'revision'      => "git show --abbrev-commit HEAD | head -n 1 | cut -d ' ' -f 2 | tr -d '\n'"},
+       'src-git-full' => {
+               'init'          => "git clone '%s' '%s'",
+               'init_branch'   => "git clone --branch '%s' '%s' '%s'",
+               'init_commit'   => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",
+               'update'        => "git pull --ff",
+               'controldir'    => ".git",
+               'revision'      => "git show --abbrev-commit HEAD | head -n 1 | cut -d ' ' -f 2 | tr -d '\n'"},
        'src-gitsvn' => {
                'init'  => "git svn clone -r HEAD '%s' '%s'",
                'update'        => "git svn rebase",
@@ -383,7 +393,7 @@ sub do_install_target($) {
 
                system("ln -sf ../../$path ./target/linux/");
        } else {
-               warn "Package is not valid\n";
+               warn "Target is not valid\n";
                return 1;
        }
 
@@ -443,10 +453,10 @@ sub install_package {
        my $force = shift;
        my $ret = 0;
 
-       $feed = lookup_target($feed, $name);
-       $feed and do {
+       my $this_feed_target = lookup_target($feed, $name);
+       $this_feed_target and do {
                $installed_targets{$name} and return 0;
-               install_target($feed, $name);
+               install_target($this_feed_target, $name);
                return 0;
        };
 
@@ -786,7 +796,7 @@ my %commands = (
        'uninstall' => \&uninstall,
        'feed_config' => \&feed_config,
        'clean' => sub {
-               system("rm -rf feeds");
+               system("rm -rf ./feeds ./package/feeds");
        }
 );