summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2010-12-20 16:30:03 +0000
committerespie <espie@openbsd.org>2010-12-20 16:30:03 +0000
commitabf470d6ddfce62896227bfe84808286d9956fe6 (patch)
tree9c60239eb7621392a558a6d2f2a227dd51f36348
parentOnly set SO_REUSEPORT for listening ports. (diff)
downloadwireguard-openbsd-abf470d6ddfce62896227bfe84808286d9956fe6.tar.xz
wireguard-openbsd-abf470d6ddfce62896227bfe84808286d9956fe6.zip
use a better strategy: ask the ports tree for the plist for packages with
the same pkgpath. Thus, PseudoSets need to have a real list, and pkgcreate needs to loop to solve those depends. reactivate the check
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Dependencies.pm18
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PkgCreate.pm68
-rw-r--r--usr.sbin/pkg_add/pkg_create.16
3 files changed, 59 insertions, 33 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Dependencies.pm b/usr.sbin/pkg_add/OpenBSD/Dependencies.pm
index b7172efb9b8..3b5842aad98 100644
--- a/usr.sbin/pkg_add/OpenBSD/Dependencies.pm
+++ b/usr.sbin/pkg_add/OpenBSD/Dependencies.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: Dependencies.pm,v 1.147 2010/12/20 11:55:48 espie Exp $
+# $OpenBSD: Dependencies.pm,v 1.148 2010/12/20 16:30:03 espie Exp $
#
# Copyright (c) 2005-2010 Marc Espie <espie@openbsd.org>
#
@@ -402,8 +402,6 @@ sub solve_wantlibs
my $okay = 1;
my $lib_finder = OpenBSD::lookup::library->new($solver);
- $lib_finder->{known}{BUILD} = 1;
- $lib_finder->{done}{BUILD} = 1;
for my $h ($solver->{set}->newer) {
for my $lib (@{$h->{plist}->{wantlib}}) {
$solver->{localbase} = $h->{plist}->localbase;
@@ -467,6 +465,13 @@ sub find_in_installed
return $self->find_candidate($dep, @{$self->installed_list});
}
+sub find_dep_in_self
+{
+ my ($self, $state, $dep) = @_;
+
+ return $self->find_candidate($dep, $self->{set}->newer_names);
+}
+
package OpenBSD::Dependencies::Solver;
our @ISA = qw(OpenBSD::Dependencies::SolverBase);
@@ -580,13 +585,6 @@ sub find_dep_in_repositories
}
}
-sub find_dep_in_self
-{
- my ($self, $state, $dep) = @_;
-
- return $self->find_candidate($dep, $self->{set}->newer_names);
-}
-
sub find_dep_in_stuff_to_install
{
my ($self, $state, $dep) = @_;
diff --git a/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm b/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm
index 785c6dcf770..5f9b1f1067a 100644
--- a/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm
@@ -1,6 +1,6 @@
#! /usr/bin/perl
# ex:ts=8 sw=4:
-# $OpenBSD: PkgCreate.pm,v 1.32 2010/12/20 11:48:42 espie Exp $
+# $OpenBSD: PkgCreate.pm,v 1.33 2010/12/20 16:30:04 espie Exp $
#
# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
#
@@ -531,39 +531,61 @@ sub new
bless { set => OpenBSD::PseudoSet->new($plist), bad => [] }, $class;
}
+sub solve_all_depends
+{
+ my ($solver, $state) = @_;
+
+
+ while (1) {
+ $solver->{more} = [];
+ $solver->solve_depends($state);
+ if (@{$solver->{more}}) {
+ for my $i (@{$solver->{more}}) {
+ push(@{$solver->{set}{new}},
+ OpenBSD::PseudoHandle->new($i));
+ }
+ } else {
+ return;
+ }
+ }
+}
+
sub really_solve_dependency
{
my ($self, $state, $dep, $package) = @_;
# look in installed packages
my $v = $self->find_in_installed($dep);
+ if (!defined $v) {
+ $v = $self->find_dep_in_self($state, $dep);
+ }
# and in built tree if other packages have the same BASE_PKGPATH
- if (!defined $v && !defined $self->{all_dependencies}{BUILD}) {
+ if (!defined $v) {
my $f = $state->{subst}->value('FULLPKGPATH');
$f =~ s/,.*//;
my $f2 = $dep->{pkgpath};
$f2 =~ s/,.*//;
if ($f eq $f2) {
- return $self->add_built_libraries($state);
+ return $self->solve_from_ports($state, $dep, $package);
}
}
return $v;
}
-sub add_built_libraries
+sub solve_from_ports
{
- my ($self, $state) = @_;
- require File::Find;
- File::Find::find(sub {
- return unless -f $_;
- my $libname = $File::Find::name;
- $libname =~ s,^\Q$state->{base}\E,,;
- my $lib = OpenBSD::Library->from_string($libname);
- return unless $lib->is_valid;
- OpenBSD::SharedLibs::register_library($lib, "BUILD");
- }, $state->{base});
- return "BUILD";
+ my ($self, $state, $dep, $package) = @_;
+
+ my $portsdir = $state->defines('PORTSDIR')
+ // $ENV{'PORTSDIR'}
+ // OpenBSD::Paths->portsdir;
+ my $make = OpenBSD::Paths->make;
+ open(my $fh, "cd $portsdir && SUBDIR=$dep->{pkgpath} ECHO_MSG=: $make print-plist-with-depends|") or return undef;
+ my $plist = OpenBSD::PackingList->read($fh);
+ OpenBSD::SharedLibs::add_libs_from_plist($plist, $state);
+ push(@{$self->{more}}, $plist);
+ return $plist->pkgname;
}
# the full installed list is okay
@@ -609,14 +631,20 @@ sub new
my ($class, $plist) = @_;
my $h = OpenBSD::PseudoHandle->new($plist);
- bless {h => $h}, $class;
+ bless {new => [$h]}, $class;
}
sub newer
{
- return (shift->{h});
+ return @{shift->{new}};
}
+
+sub newer_names
+{
+ return map {$_->pkgname} @{shift->{new}};
+}
+
sub older
{
return ();
@@ -630,7 +658,7 @@ sub kept
sub print
{
my $self = shift;
- return $self->{h}->pkgname;
+ return $self->{new}[0]->pkgname;
}
package OpenBSD::PkgCreate;
@@ -961,7 +989,7 @@ sub check_dependencies
my ($self, $plist, $state) = @_;
my $solver = OpenBSD::Dependencies::CreateSolver->new($plist);
- $solver->solve_depends($state);
+ $solver->solve_all_depends($state);
# look for libraries in the "real" tree
$state->{destdir} = '/';
if (!$solver->solve_wantlibs($state)) {
@@ -1066,7 +1094,7 @@ sub parse_and_run
$state->{base} = $base;
$plist->discover_directories($state);
-# $self->check_dependencies($plist, $state);
+ $self->check_dependencies($plist, $state);
unless (defined $state->opt('q') && defined $state->opt('n')) {
$state->set_status("checksumming");
if ($regen_package) {
diff --git a/usr.sbin/pkg_add/pkg_create.1 b/usr.sbin/pkg_add/pkg_create.1
index b58a315f16d..cb20095a66a 100644
--- a/usr.sbin/pkg_add/pkg_create.1
+++ b/usr.sbin/pkg_add/pkg_create.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: pkg_create.1,v 1.69 2010/12/20 11:32:30 espie Exp $
+.\" $OpenBSD: pkg_create.1,v 1.70 2010/12/20 16:30:03 espie Exp $
.\"
.\" Documentation and design originally from FreeBSD. All the code has
.\" been rewritten since. We keep the documentation's notice:
@@ -45,6 +45,7 @@
.Op Fl W Ar wantedlib
.Fl d Ar desc
.Fl D Ar COMMENT Ns = Ns Ar value
+.Fl D Ar PORTSDIR Ns = Ns Ar value
.Fl f Ar packinglist
.Fl p Ar prefix
.Ar pkg-name
@@ -91,8 +92,7 @@ It will also check all
.Cm @wantlib
for reachability, by looking into all installed
.Cm @depend .
-It will also look into the build directory itself as specified by
-.Fl B Ar pkg-destdir ,
+It may also ask the ports tree for extra dependencies,
provided some other
.Cm @depend
refers to the same