+sub install_package {
+ my $feed = shift;
+ my $name = shift;
+ my $force = shift;
+
+ $feed = lookup_package($feed, $name);
+ unless ($feed) {
+ $installed_pkg{$name} and return 0;
+ $feed_vpackage->{$name} or warn "WARNING: No feed for package '$name' found\n";
+ return 0;
+ }
+
+ # switch to the metadata for the selected feed
+ get_feed($feed->[1]);
+ my $pkg = $feed_vpackage->{$name} or return 1;
+ return install_src($feed, $pkg->[0]{src}{name}, $force);
+}
+
+sub install_target_or_package {
+ my $feed = shift;
+ my $name = shift;
+ my $force = shift;
+
+ my $this_feed_target = lookup_target($feed, $name);
+ $this_feed_target and do {
+ return install_target($this_feed_target, $name);
+ };
+
+ my $this_feed_src = lookup_src($feed, $name);
+ $this_feed_src and do {
+ return install_src($this_feed_src, $name, $force);
+ };
+
+ return install_package($feed, $name, $force);
+}
+