diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2004-12-28 14:50:39 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2004-12-28 14:50:39 +0000 |
commit | b6e7ee89b0666638000a75209e7d3a009aa9dbcf (patch) | |
tree | 6b3664e2e4c1805a1ead1425b2c801143eb68aa0 | |
parent | a7566b557d5d14a4b528b6a39ca9b1d5fa061c47 (diff) |
add a boguslibs forced option, that rescans packages for libraries
not marked with @lib.
This allows pkg_add -current to deal with 3.6 packages fully.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/SharedLibs.pm | 33 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 23 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add.1 | 5 |
3 files changed, 58 insertions, 3 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/SharedLibs.pm b/usr.sbin/pkg_add/OpenBSD/SharedLibs.pm index 47ca79ca2ff..edda030d729 100644 --- a/usr.sbin/pkg_add/OpenBSD/SharedLibs.pm +++ b/usr.sbin/pkg_add/OpenBSD/SharedLibs.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: SharedLibs.pm,v 1.5 2004/12/21 11:43:46 espie Exp $ +# $OpenBSD: SharedLibs.pm,v 1.6 2004/12/28 14:50:38 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -23,6 +23,20 @@ sub mark_available_lib { } +sub mark_bogus_lib +{ +} + +package OpenBSD::PackingElement::FileBase; + +sub mark_bogus_lib +{ + my ($self, $pkgname) = @_; + my $fname = $self->fullname(); + return unless $fname =~ m/\/lib[^\/]+\.so\.\d+\.\d+$/; + OpenBSD::SharedLibs::register_lib($fname, $pkgname); +} + package OpenBSD::PackingElement::Lib; sub mark_available_lib @@ -31,6 +45,10 @@ sub mark_available_lib OpenBSD::SharedLibs::register_lib($self->fullname(), $pkgname); } +sub mark_bogus_lib +{ +} + package OpenBSD::SharedLibs; use File::Basename; use OpenBSD::Error; @@ -131,6 +149,19 @@ sub add_package_libs $plist->visit('mark_available_lib', $pkgname); } +sub add_bogus_package_libs +{ + my $pkgname = $_[0]; + return if $done_plist->{$pkgname} == 2; + $done_plist->{$pkgname} = 2; + my $plist = OpenBSD::PackingList->from_installation($pkgname); + if (!defined $plist) { + Warn "Can't read plist for $pkgname\n"; + return; + } + $plist->visit('mark_bogus_lib', $pkgname); +} + sub add_plist_libs { my ($plist) = @_; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index 7c1b5d914b4..a4128ddad6b 100644 --- a/usr.sbin/pkg_add/pkg_add +++ b/usr.sbin/pkg_add/pkg_add @@ -1,7 +1,7 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_add,v 1.163 2004/12/28 13:54:13 espie Exp $ +# $OpenBSD: pkg_add,v 1.164 2004/12/28 14:50:38 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -548,6 +548,27 @@ sub lookup_library } } } + if ($state->{forced}->{boguslibs}) { + my $explored = {}; + # lookup through the full tree... + my @todo = keys %$dependencies; + while (my $dep = pop @todo) { + require OpenBSD::RequiredBy; + + next if $explored->{$dep}; + $explored->{$dep} = 1; + for my $dep2 (OpenBSD::Requiring->new($dep)->list()) { + push(@todo, $dep2) unless $done->{$dep2}; + } + OpenBSD::SharedLibs::add_bogus_package_libs($dep); + if (check_lib_spec($state->{very_verbose}, + $state->{destdir}.$plist->pkgbase(), $lib, {$dep => 1})) { + Warn "Found unmarked library ", $lib, " in dependent package $dep\n" if $state->{verbose}; + $dependencies->{$dep} = 1; + return 1; + } + } + } print "\n" if $state->{very_verbose}; } diff --git a/usr.sbin/pkg_add/pkg_add.1 b/usr.sbin/pkg_add/pkg_add.1 index b63409d4cbf..819201e9afd 100644 --- a/usr.sbin/pkg_add/pkg_add.1 +++ b/usr.sbin/pkg_add/pkg_add.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: pkg_add.1,v 1.30 2004/12/26 15:01:06 espie Exp $ +.\" $OpenBSD: pkg_add.1,v 1.31 2004/12/28 14:50:38 espie Exp $ .\" .\" FreeBSD install - a package for the installation and maintenance .\" of non-core utilities. @@ -143,6 +143,9 @@ These include: .Bl -tag -width "updatedependsXX" -compact .It Ar arch architecture recorded in package may not match. +.It Ar boguslibs +not all shared libraries are marked with @lib. +Inefficiently rescan package lists for non marked libraries. .It Ar conflicts package may conflict with other packages. .It Ar installed |