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.
No comments:
Post a Comment