From: Felix Fietkau <nbd@openwrt.org>
Date: Sun, 15 Mar 2015 11:08:05 +0000 (+0000)
Subject: scripts/feeds: add support for installing targets
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2484f3a86a49be9bedf84da55e1dfe41d8e42b09;p=lede.git

scripts/feeds: add support for installing targets

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 44781
---

diff --git a/scripts/feeds b/scripts/feeds
index a1795e1639..62edb66820 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -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;