On 2021/12/12 14:16, Stefan Hagen wrote: > Stuart Henderson wrote: > > On 2021/12/12 12:10, Stefan Hagen wrote: > > > Anthony J. Bentley wrote: > > > > Stuart Henderson writes: > > > > > Please put them in LIB_DEPENDS/WANTLIB with the annotation in the > > > > > comment. > > > > > What they're doing is not safe/reliable because it relies on the > > > > > library > > > > > ABI not changing. Adding as a LIB_DEPENDS ensures that yquake is > > > > > updated > > > > > when required due to any incompatible changes to the libraries. > > > > > > > > This needs to be documented somewhere. bsd.port.mk(5) implies that > > > > LIB_DEPENDS is not necessary for dlopen'd libraries: > > > > > > > > LIB_DEPENDS <spec> not needed for <FULLPKGPATH> There doesn't seem > > > > to be > > > > any WANTLIB to match the given LIB_DEPENDS. Thus, the LIB_DEPENDS > > > > won't > > > > turn into a @depends line in the created package. This is often > > > > because > > > > of confusion between LIB_DEPENDS and RUN_DEPENDS: RUN_DEPENDS is > > > > needed > > > > for dlopen'd libraries. > > > > > > I thought so too. What about this? > > > > > > But I think maybe we should just stop suggesting that completely (I > > think it relates to a shortcut of just listing libraries for _all_ > > subpackages in LIB_DEPENDS so they end up in every LIB_DEPENDS-subpkg > > and relying on tools to prune the ones which aren't needed; in practice > > afaik no port does that intentionally). > > > > Secondly "is safer" isn't really informative. Safer why? Unless it's > > going to explain in more detail then something like "should be added" > > would be better than "is safer". > > > > (also a nit: for manpages the standard is "new sentence -> new line"). > > I started to rewrite the paragraph and add more information about how > dlopen is used and why rebuilds are necessary. > > But that made me think about how those reasons do not matter at all. We > have libraries ports depend on. Ports should be updated when the library > changes. No matter how the library is used. I think it's as simple as > that.
Not quite - ports using a shared library only need to be updated if the ABI changes (library version number changes) - ports using a static library need to be updated every time the library changes. > The problem is only that the ports system looks at dynamically linked > libraries, which fails when the library is dlopened or statically linked > in. > > Or maybe for stylistic reasons like setting LIB_DEPENDS globally and > having flavors/subpackages that only need parts of it. > > It all boils down to: > Libraries go to LIB_DEPENDS and WANTLIB. If you see this warning, check > if the library is actually needed. If the answer is yes, ignore the > warning and add a comment. > > Did I get this right? > > I reworked the paragraph a bit and dropped the multi-package case. > > Index: ./share/man/man5/bsd.port.mk.5 > =================================================================== > RCS file: /home/cvs/src/share/man/man5/bsd.port.mk.5,v > retrieving revision 1.550 > diff -u -p -u -p -r1.550 bsd.port.mk.5 > --- ./share/man/man5/bsd.port.mk.5 22 Nov 2021 11:17:39 -0000 1.550 > +++ ./share/man/man5/bsd.port.mk.5 12 Dec 2021 13:07:44 -0000 > @@ -3558,17 +3558,16 @@ usage. > .It LIB_DEPENDS <spec> not needed for <FULLPKGPATH> > There doesn't seem to be any WANTLIB to match the given LIB_DEPENDS. > Thus, the LIB_DEPENDS won't turn into a @depends line in the created package. > -This is often because of confusion between LIB_DEPENDS and RUN_DEPENDS: > -RUN_DEPENDS is needed for dlopen'd libraries. > +This is often because of confusion between LIB_DEPENDS and RUN_DEPENDS. > .Pp > -Might be intentional sometimes, if some compile flavors create static > binaries, > -for instance. > -Also, will happen for multi-packages, where one sets LIB_DEPENDS to have > -a given build dependency (and corresponding WANTLIB for a given SUBPACKAGE). > -.Pp > -See > -.Cm print-package-args Pq Cm lib-depends-args > -for details. > +Needed libraries should always be added to LIB_DEPENDS and WANTLIB. > +In cases where the libraries are not dynamically linked in, > +.Cm lib-depends-check > +will raise a warning, because it can't detect the dependency. > +For example for statically linked libraries, or libraries that are > +loaded by > +.Xr dlopen 3 . > +In this case, add a comment to the Makefile about the intentional warning. > .It "Warning: FULLPKGNAME-sub defined but not FULLPKGPATH-sub" > .Ev FULLPKGNAME-sub > has been explicitly defined by the port, instead of relying on the default, > I think this is good on the dlopen/normal shared case, but static is a bit different.
