Thanks - I suppose I should have always known that we were lucky that pkgdepend
was handling these for us.
Instead of adding manual depend actions and ignoring the pkgdepend errors, would
I be insane to do use pkgmogrify between the pkgdepend generate & resolve steps
to manually resolve the dependencies pkgdepend found for us?
This seems to work:
--- a/pkg/Makefile
+++ b/pkg/Makefile
@@ -309,7 +309,9 @@
$(PKGDEBUG)$(RM) $(@)
$(PKGDEBUG)if [[ ! -f $(@:%.dep=%.nodepend) ]]; then \
pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
- $(PKGROOT) > $(@); \
+ $(PKGROOT) > $(@).raw ; \
+ $(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
+ -O $(@) $(@).raw gl-depends; \
else \
$(CP) $(<) $(@); \
fi
with this in gl-depends:
<transform depend pkg.debug.depend.file=libGL.so.1 -> \
edit fmri __TBD pkg:/service/opengl/ogl-select>
<transform depend pkg.debug.depend.file=libglx.so -> \
edit fmri __TBD pkg:/service/opengl/ogl-select>
I understand that I'm depending on private/unstable attributes of pkgdepend
there, and it would be nice to someday have a pkg.depend.* attribute I could
set instead to do manual resolution overrides, similar to Tim's proposed
pkg.depend.bypass-generate. This seems better than requiring my developers
(or those in Userland & JDS) to remember which packages need special handling
for libGL dependencies.
It also makes me completely "pkgdepend clean" today, with no issues reported
by pkgdepend resolve any longer.
-alan-
On 02/15/11 10:34 PM, Brock Pytlik wrote:
> Hi Alan,
>
> Build 156 is when I attempted to get pkgdepend to correctly handle symlinks,
> so
> it seems likely to be the culprit for changing the behavior. The resolve_links
> code seems to depend on eventually finding a real file at the end of the
> chains
> to function properly. What I can't remember right now is why I wrote the code
> like that. I think the reason is that because an elf file can have multiple
> run
> paths, without a real file to ground our choice on, we don't have a way to
> know
> which run path is actually fulfilling the dependency.
>
> The information that pkgdepend has is that /lib/libGL.so.1 doesn't exist, and
> /usr/lib/libGL.so.1 ends in a dangling symlink. I can see an argument that in
> that situation, perhaps pkgdep should choose the dangling symlink. Suppose
> that
> /lib/libGL.so.1 does exist, should pkgdepend now choose /lib/libGL.so.1 over
> the
> dangling symlink? I think we could probably create a situation where real
> files
> (or symlink chains which resolve to real files) are preferred over dangling
> symlink chains which are preferred over non-existent files.
>
> I would tend to say, though, that pkgdepend is actually doing the right thing
> now and that its previous behavior, while accidentally correct for the X gate,
> was wrong since pkgdepend had no way of knowing that there would be an actual
> file to fulfill the dependency on libGL.so.1.
>
> What I could see as a potential RFE would be a new type of file action which
> claimed a spot on the file system, but didn't actually deliver content. It
> would
> be used in a case like this where the packager knows that a service will
> create
> a file in a certain location, but that file isn't packaged.
>
> Sorry I can't be of more help, but I think the right answer may very well be
> that these need to be manually tagged dependencies.
>
> Brock
>
> On 02/15/11 04:42 PM, Alan Coopersmith wrote:
>> I know that our symlinks in the X packages to the (non-packaged/SMF created)
>> /var/run/GL paths is just asking for all kinds of fun, but they used to work.
>>
>> We recently got a pair of matching bug reports though:
>> 7015365 x11/server/xephyr package has missing dependency
>> 7015340 x11/diagnostic/x11-info-clients package has missing dependency
>>
>> Both of these contain binaries linked against the symlinked libraries:
>>
>> From elfdump -d proto/root_i386/usr/bin/xdriinfo:
>> [3] NEEDED 0x1d5 libGL.so.1
>> [7] RUNPATH 0x1e0 /usr/lib
>>
>> From elfdump -d elfdump -d proto/root_i386/usr/bin/amd64/Xephyr:
>> [33] NEEDED 0x20311 libGL.so.1
>> [45] RUNPATH 0x20328
>> /usr/lib/xorg/amd64:/usr/lib/amd64
>>
>> The pkgdepend generate output still shows the dependency:
>>
>> depend fmri=__TBD pkg.debug.depend.file=libGL.so.1 pkg.debug.depend.path=lib
>> pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/bin/xdriinfo
>> pkg.debug.depend.type=elf type=require
>>
>> During resolution, it should be able to find the link in the manifest for
>> service-opengl-ogl-select which is part of the set being resolved (the X
>> pkgdepend steps are copied from ON's usr/src/pkg/Makefile):
>>
>> link path=usr/lib/libGL.so.1 target=GL/libGL.so.1
>> link path=usr/lib/GL/libGL.so.1 target=../../../var/run/opengl/lib/libGL.so.1
>>
>> But after resolution, it no longer lists a dependency on the
>> pkg:/service/opengl/ogl-select that delivers the /usr/lib/libGL.so.1 ->
>> /var/run/opengl/libGL.so.1 links (which in turn are linked to the correct
>> backend by the SMF service in that package at runtime).
>>
>> The dependency was included up through our build 157 delivery, but
>> disappeared
>> in 158, which would have been build with ipkg from build 156. I can't see
>> anything in the few changesets we integrated in build 158 that would have
>> broken
>> it - is there a change to pkgdepend that would explain this? Do I just
>> need to
>> manually include this dependency in our packages?
>>
>
> _______________________________________________
> pkg-discuss mailing list
> [email protected]
> http://mail.opensolaris.org/mailman/listinfo/pkg-discuss
--
-Alan Coopersmith- [email protected]
Oracle Solaris Platform Engineering: X Window System
_______________________________________________
pkg-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pkg-discuss