Index | Thread | Search

From:
Andrew Hewus Fresh <andrew@afresh1.com>
Subject:
Re: pkg_create: @lib without LIBname_VERSION
To:
Marc Espie <marc.espie.openbsd@gmail.com>
Cc:
George Koehler <kernigh@gmail.com>, ports@openbsd.org
Date:
Sat, 8 Nov 2025 08:32:46 -0800

Download raw body.

Thread
On Sat, Nov 08, 2025 at 11:00:39AM +0100, Marc Espie wrote:
> On Fri, Nov 07, 2025 at 10:52:05PM -0500, George Koehler wrote:
> > pkg_create has some code to check every @lib in a PLIST is correctly
> > versioned (by expanding ${LIBname_VERSION}).  This check is broken, so
> > the error never happens.  The broken code will cause a warning in
> > Perl 5.42, so we must change it before we update Perl.
> > 
> > When I fixed the check, it broke a few ports,
> > 
> > $ make -C lang/vala print-plist-all >/dev/null                        
> > Error: Incorrectly versioned shared library: \
> > @lib lib/libvala-${API_V}.so.${LIBvala-${API_V}_VERSION}
> > 
> > This @lib line is correct, but pkg_create looked for the exact string
> > '${LIBvala-0.56_VERSION}' in the unsubstituted line, and didn't find
> > it, because API_V=0.56 was unsubst.  There are more than 30 ports like
> > this; see list below diff.  (Because print-plist-all can produce the
> > error, I didn't need a bulk build to find the broken ports.)
> > 
> > I want to commit this version of the diff, which has '0 &&' to disable
> > the check, so ports like lang/vala don't break.  The other changes in
> > this diff are,
> >  - Change "!$x =~ m/y/" to "$x !~ m/y/", which fixes the Perl 5.42
> >    warning "Possible precendence problem between ! and =~".
> >  - Add \Q and \E to the regexp, so libestdc++ stops matching
> >    '${LIBestdcccccc_VERSION}'.
> >  - Pass the unsubstituted string to check_version: the caller did
> >    "my $s = $subst->do($l);", so pass $l, not $s.
> > 
> > In the future, we might modify and enable this check.  For example, we
> > might compare libvala's filename's version with LIBvala-0.56_VERSION,
> > without looking for '${LIBvala-0.56_VERSION}'.  This might work for
> > devel/libtalloc,-python which has,
> > 
> > @lib lib/libpytalloc-util.${PYTALLOC_UTIL_LIBSUFFIX}
> > 
> > We can't enable a check now, because cad/qcad has lines like,
> > 
> > @lib share/qcad/plugins/script/libqtscript_core.so.1.0
> > 
> > There is no LIBqtscript_core_VERSION=1.0; and I'm not sure whether to
> > add these plugins to SHARED_LIBS or change them from @lib to @so.
> > 
> > Is this diff with '0 &&' ok?
> > --gkoehler
> 
> No.
> 
> Andrew has had a patch to fix the warning for ages by now.

I did, which was the obvious first part of this patch (without `0 &&`),
but sadly had to revert it:

https://github.com/openbsd/src/commit/192820d0400a512050d40845c284e95be601625e

I didn't have the other part (pass in $l not $s), and gkoehler figured
it out before I had time to dig into it.  (Many thanks for that!)

> And the ports that do not have proper lib version naming should be fixed
> anyway.

Probably true, I totally would not have expected `.` to be valid in 
'${LIBvala-0.56_VERSION}', but it testing shows it is.

That doesn't solve the problem that it doesn't say `0.56` but instead
`${API_V}` or the special cases with libtalloc,python or qcad.


> There is a reason we want to take control of shared libs version and the
> fact that this check got broken is no reason to disable it.

Seems reasonable, how do we fix the examples to be able to do that?

-- 
andrew

The 3 great virtues of a programmer: Laziness, Impatience, and Hubris.
                      --Larry Wall