scripts/feeds: add support for installing targets
authorFelix Fietkau <nbd@openwrt.org>
Sun, 15 Mar 2015 11:08:05 +0000 (11:08 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 15 Mar 2015 11:08:05 +0000 (11:08 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 44781

scripts/feeds

index a1795e1639a199f2999d2933a714e1fe914712e9..62edb668209c850b412b644ec426c6012a8bbc52 100755 (executable)
@@ -366,6 +366,30 @@ sub do_install_package($$) {
        return 0;
 }
 
+sub do_install_target($) {
+       my $target = shift;
+       my $path = $target->{makefile};
+
+       if ($path) {
+               $path =~ s/\/Makefile$//;
+               my $name = $path;
+               $name =~ s/.*\///;
+               my $dest = "./target/linux/$name";
+
+               -e $dest and do {
+                       warn "Path $dest already exists";
+                       return 1;
+               };
+
+               system("ln -sf ../../$path ./target/linux/");
+       } else {
+               warn "Package is not valid\n";
+               return 1;
+       }
+
+       return 0;
+}
+
 sub lookup_package($$) {
        my $feed = shift;
        my $package = shift;
@@ -378,6 +402,18 @@ sub lookup_package($$) {
        return;
 }
 
+sub lookup_target($$) {
+       my $feed = shift;
+       my $target = shift;
+
+       foreach my $feed ($feed, @feeds) {
+               next unless $feed->[1];
+               next unless $feed_cache{$feed->[1]};
+               $feed_cache{$feed->[1]}->[2]->{$target} and return $feed;
+       }
+       return;
+}
+
 sub is_core_package($) {
        my $package = shift;
        foreach my $file ("tmp/info/.packageinfo-$package", glob("tmp/info/.packageinfo-*_$package")) {
@@ -387,12 +423,33 @@ sub is_core_package($) {
        return 0;
 }
 
+sub install_target {
+       my $feed = shift;
+       my $name = shift;
+
+       $feed = $feed_cache{$feed->[1]}->[2];
+       $feed or return 0;
+
+       my $target = $feed->{$name};
+       $target or return 0;
+
+       warn "Installing target '$name'\n";
+       return do_install_target($target);
+}
+
 sub install_package {
        my $feed = shift;
        my $name = shift;
        my $force = shift;
        my $ret = 0;
 
+       $feed = lookup_target($feed, $name);
+       $feed and do {
+               $installed_targets{$name} and return 0;
+               install_target($feed, $name);
+               return 0;
+       };
+
        $feed = lookup_package($feed, $name);
        $feed or do {
                $installed{$name} and return 0;