Download raw body.
pkg_create: @lib without LIBname_VERSION
On Mon, Nov 24, 2025 at 08:10:07PM -0800, Andrew Hewus Fresh wrote:
> On Mon, Nov 24, 2025 at 08:11:21PM -0500, George Koehler wrote:
> > I'm looking for oks for this pkg_create diff (from espie, with the
> > \Q$k\E fix). After jca committed libtalloc on Friday, I can't find
> > any other ports that would break. (One can find these ports with
> > "make print-plist-all" or databases/pkglocatedb.) I built only a few
> > ports. It works with both perl 5.40.1 and 5.42.0.
>
>
> I am fairly sure I follow the logic here and it makes sense to me. I
> say OK, but definitely would want to hear from espie@ for reasons there
> might be a better solution.
>
>
>
> > To recap, the diff prevents a warning in 5.42 from "!$x =~ m/y/", and
> > requires that every @lib in a plist has its ${LIBname_VERSION}.
> > --gkoehler
> >
> > Index: OpenBSD/PkgCreate.pm
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm,v
> > diff -u -p -r1.200 PkgCreate.pm
> > --- OpenBSD/PkgCreate.pm 15 Sep 2025 01:59:37 -0000 1.200
> > +++ OpenBSD/PkgCreate.pm 23 Nov 2025 00:35:15 -0000
> > @@ -771,11 +771,13 @@ sub check_version($self, $state, $unsubs
> > {
> > my @l = $self->parse($self->name);
> > if (defined $l[0]) {
> > - if (!$unsubst =~ m/\$\{LIB$l[0]_VERSION\}/) {
> > - $state->error(
> > - "Incorrectly versioned shared library: #1",
> > - $unsubst);
> > + my $k = "LIB$l[0]_VERSION";
> > + my $r = $state->{subst}->do($unsubst, $k);
> > + if ($r =~ m/\blib\Q$l[0]\E\.so\.\$\{\Q$k\E\}$/) {
> > + return;
> > }
> > + $state->error("Incorrectly versioned shared library: #1",
> > + $unsubst);
> > } else {
> > $state->error("Invalid shared library #1", $unsubst);
> > }
> > @@ -1205,7 +1207,7 @@ sub read_fragments($self, $state, $plist
> > # XXX some things, like @comment no checksum, don't produce an object
> > my $o = &$cont($s);
> > if (defined $o) {
> > - $o->check_version($state, $s);
> > + $o->check_version($state, $l);
> > $self->annotate($o, $l, $file);
> > }
> > }
> > Index: OpenBSD/Subst.pm
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/Subst.pm,v
> > diff -u -p -r1.27 Subst.pm
> > --- OpenBSD/Subst.pm 27 May 2025 03:42:59 -0000 1.27
> > +++ OpenBSD/Subst.pm 23 Nov 2025 00:35:15 -0000
> > @@ -63,11 +63,14 @@ sub parse_option($self, $opt)
> > }
> > }
> >
> > -sub do($self, $s)
> > +sub do($self, $s, $without = undef)
> > {
> > return $s unless $s =~ m/\$/o; # no need to subst if no $
> > while ( my $k = ($s =~ m/\$\{([A-Za-z_][^\}]*)\}/o)[0] ) {
> > my $v = $self->{$k};
> > + if (defined $without && $without eq $k) {
> > + $v = undef;
> > + }
One tiny style suggestion here, I might have done:
sub do($self, $s, @except) {
...;
for (@except) {
next unless defined;
next unless $k eq $_;
$v = undef;
last;
}
...;
}
> > unless ( defined $v ) { $v = "\$\\\{$k\}"; }
> > $s =~ s/\$\{\Q$k\E\}/$v/g;
> > }
>
> --
> andrew
>
> I think I understand, but my stubborn brain refuses to admit it
> until I beat it into submission by proof upon proof.
> -- Michael Shiloh <michaelshiloh1010@gmail.com>
>
--
andrew
At the source of every error which is blamed on the computer, you
will find at least two human errors, including the error of blaming
it on the computer.
pkg_create: @lib without LIBname_VERSION