diff options
author | 2010-12-20 16:30:03 +0000 | |
---|---|---|
committer | 2010-12-20 16:30:03 +0000 | |
commit | abf470d6ddfce62896227bfe84808286d9956fe6 (patch) | |
tree | 9c60239eb7621392a558a6d2f2a227dd51f36348 | |
parent | Only set SO_REUSEPORT for listening ports. (diff) | |
download | wireguard-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.pm | 18 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PkgCreate.pm | 68 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_create.1 | 6 |
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 |