Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: avahi-stub possible? #22389

Closed
pullmoll opened this issue May 28, 2020 · 7 comments
Closed

RFC: avahi-stub possible? #22389

pullmoll opened this issue May 28, 2020 · 7 comments

Comments

@pullmoll
Copy link
Member

This is a request for comments for an idea which came to me when I had to deal with the inevitable mess of dependency cycles which avahi creates by its sole appearance in package's makedepends.

The idea is basically to invent an avahi-stub package which implements the interface(s) of avahi-libs-devel but, instead of depending on everything that avahi depends upon, depends on nothing else.

The stub library (or libraries) would then, at runtime, try to dlopen(3) the actual libavahi-client.so.3, libavahi-common.so.3, and libavahi-core.so.7 libraries and resolve their functions to store them in the stub's function pointers.

If a user (like me) chose not to install avahi at all, these functions pointers would be NULL and the stub functions would return the corresponding error codes and perhaps set errno = ENOSYS or whatever.

If OTOH the avahi package is installed, the stub would resolve the functions and then forward to them, adding one layer of call/return.

I don't know if anyone else already tried such a thing, whether it is at all possible, or if there are reasons why this cannot work in principle, that's why I ask here.

I'd love to be able to bootstrap and build up a Void repository without taking hours or days of manually tuning the package building process to avoid avahi here and pulseaudio there when building temporary packages to resolve the depedency cycles ... etc. pp.

Should this idea work, every package now depending on avahi-libs-devel would then depend on avahi-stub-devel and the bootstrap and repository build-up should work without human intervention.

@Chocimier
Copy link
Member

Separating build of subpackages depending on qt and gtk like #21974 breaks cycles as well.

@ericonr
Copy link
Member

ericonr commented May 28, 2020

Would we have to develop such a project? Mostly a fork but removing all function impls and using dlopen instead? (at least that's what I can think of).

@pullmoll
Copy link
Member Author

@Chocimier this is of course possible. It requires additional effort on the side of the maintainer or anyone from the team. In case of e.g. pulseaudio or cups I'm not sure that separating avahi dependent submodules from the rest is possible.

@ericonr yes, we would have to write such a project. We would basically have a fork of avahi with all functionality stripped away and functions just forwarding to the real thing, if it was found, otherwise returning an error condition. I haven't seen something like this already being developed.

I would try to do that for avahi. I've done similar things with Windows DLLs e.g. to intercept all TWAIN API calls and log and debug them, so in theory I would know what to do. What I'm asking here is if someone sees elementary reasons why this would not work.

@Chocimier
Copy link
Member

Chocimier commented May 29, 2020 via email

@pullmoll
Copy link
Member Author

@Chocimier this would also help! I guess you know what this is all about. It's not trying to get avahi eliminated from the system, but deferring its dependency tree impact. I'll perhaps try if this is workable as also to me it seems easier than creating an all new avahi-stub package.

@Johnnynator
Copy link
Member

The build cycle was added in #21731 and for now reverted in 6c2e984

@ahesford
Copy link
Member

PR #22406 returns to the earlier split behavior that I undid with the first 0.8 update. The original split template mentioned a desire to avoid gtk3 and gobject dependencies creeping into the base libs, but I overlooked the underlying build-cycle issue.

While the split doesn't help people install dependents without pulling in avahi libs, it at least eliminates the cycle problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants