-
-
Notifications
You must be signed in to change notification settings - Fork 12
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
Circular run-exports lead to overdepending #72
Comments
Yup, missed the fact that that's not possible because it introduces a build cycle. 😑 |
It does? Do you have an example log? |
|
The log you linked to passes fine. You said it will error if |
Yes, because that feedstock does not use Still, the warning is clear from the log, including the nudge to add
That's because the link check picks up the output which actually contains the DSO:
leaving |
All I'm saying is that your statement about |
OK. Strike that off the record then. The warning still instructs maintainers to do the very thing that will break this mechanism. |
Same can be said of numpy. From scipy-feedstock:
|
Here you go with a failing CI run now:
Numpy is different. Quoting @xhochy:
|
Should we have instead named it simply |
My proposal would be to have a a) empty This should solve the overlinking/overdepending issues as it is not a run_exports but also always present to the solver. |
I think we should just ignore overdepending checks. It's a broken check. Overlinking check should work just fine. |
I find them useful to detect unnecessary dependencies and thus would like to see them working. Looking through the implementation in `conda-build, ' I don't see an easy way to ignore them; therefore, the proposal is with a shared mutex package. With that, we should get around the warning/error of the check and support it also with other build tools (like rattler-build) as it isn't a conda-build-specific workaround. |
I'd like to avoid adding another package to work around a conda-build bug. I think the current recipe here is a good one that we want to generalize to other packages, but having a mutex would make this not elegant. |
I think the patterns should be adapted to what they should achieve:
Here we want to avoid co-installability, but use versioned outputs, which to me is upside down. It also requires complicated and almost circular constraints and run-exports, which in itself is not something I want to see spread more widely, because it's hard to grasp and substantially raises the bar for contributions. All that would still make it somewhat viable, but given the additional false positives for the overdepending-check (which many maintainers do react to; which would in turn undo the constraints that prevent co-installability), I really think this is not something we should propagate. |
With the solution picked for #67 / #68, we need a somewhat circuitous mechanism to avoid that different
libre2-{X,Y}
versions can be co-installed. In particular,re2-feedstock/recipe/meta.yaml
Lines 35 to 44 in 4a93f51
To recap,
re2
depends exactly onlibre2-X
(which it also run-exports) andlibre2-X
has a run-constraint on the exactre2
version that was used to build it. It's somewhat unintuitive that this works out as intended but ifre2
v2023.a.b andre2
v2024.c.d have the same SOVERSION, a downstream package built against v2023.a.b (at some point in the past) will be able to pull in the newestlibre2-X
built from v2024.c.d at runtime.However, the run-constraint is not enough to avoid that builds against different
libre2-{X,Y}
cannot be installed side-by-side (which we want to avoid due to this), because the constraint only fires ifre2
is actually present in the environment.So additionally, we have a run-export of
re2
tore2
, that ensures that the run-constraint oflibre2-X
fires and so all should be well.However, because
re2
doesn't contain the actual libraries, the link-check now starts to complain. This will lead to errors in feedstocks that opt intoerror_overlinking: true
and might confuse maintainers that manually try to keep their link-check clean:In particular, removing
re2
as a host-dependence will not solve the issue for such feedstocks, and worse: if they do the seemingly right thing ofthat just brings us back to square one, because that breaks the above mechanism to avoid co-installation.
I think the fix is to elevate the run-constraint to an actual run-dependence of
libre2-X
onre2
, and then remove there2
run-export fromre2
, but perhaps I'm missing something.CC @isuruf @xhochy
The text was updated successfully, but these errors were encountered: