-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Binary dependency is never built if specified with both optional
and target
keys
#10526
Comments
Revert #11183 This reverts commit d4c38af, reversing changes made to 92d8826. Fixes #11330 --- The root cause is that [`map_to_features_for`] takes care of `unit_for.host_features` from parent unit, but [here] we only want to know whether the dependency is for host or not. We could have an ad-hoc `FeaturesFor` construction there, but I'd rather revert it at this moment. The interaction between `UnitFor` and `FeaturesFor` bites me every time 😭. After this revert, if we want to resolve #10526 again. The fastest way is doing the following: ```diff diff --git a/src/cargo/core/compiler/unit_dependencies.rs b/src/cargo/core/compiler/unit_dependencies.rs index 9319a19e0..14cc84941 100644 --- a/src/cargo/core/compiler/unit_dependencies.rs +++ b/src/cargo/core/compiler/unit_dependencies.rs `@@` -1103,7 +1103,7 `@@` impl<'a, 'cfg> State<'a, 'cfg> { // If this is an optional dependency, and the new feature resolver // did not enable it, don't include it. if dep.is_optional() { - let features_for = unit_for.map_to_features_for(dep.artifact()); + let features_for = FeaturesFor::from_for_host(unit_for.is_for_host()); if !self.is_dep_activated(pkg_id, features_for, dep.name_in_toml()) { return false; } ``` [`map_to_features_for`]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/profiles.rs#L1043 [here]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/compiler/unit_dependencies.rs#L1102
Revert #11183 This reverts commit d4c38af, reversing changes made to 92d8826. Fixes #11330 --- The root cause is that [`map_to_features_for`] takes care of `unit_for.host_features` from parent unit, but [here] we only want to know whether the dependency is for host or not. We could have an ad-hoc `FeaturesFor` construction there, but I'd rather revert it at this moment. The interaction between `UnitFor` and `FeaturesFor` bites me every time 😭. After this revert, if we want to resolve #10526 again. The fastest way is doing the following: ```diff diff --git a/src/cargo/core/compiler/unit_dependencies.rs b/src/cargo/core/compiler/unit_dependencies.rs index 9319a19e0..14cc84941 100644 --- a/src/cargo/core/compiler/unit_dependencies.rs +++ b/src/cargo/core/compiler/unit_dependencies.rs `@@` -1103,7 +1103,7 `@@` impl<'a, 'cfg> State<'a, 'cfg> { // If this is an optional dependency, and the new feature resolver // did not enable it, don't include it. if dep.is_optional() { - let features_for = unit_for.map_to_features_for(dep.artifact()); + let features_for = FeaturesFor::from_for_host(unit_for.is_for_host()); if !self.is_dep_activated(pkg_id, features_for, dep.name_in_toml()) { return false; } ``` [`map_to_features_for`]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/profiles.rs#L1043 [here]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/compiler/unit_dependencies.rs#L1102
Revert #11183 This reverts commit d4c38af, reversing changes made to 92d8826. Fixes #11330 --- The root cause is that [`map_to_features_for`] takes care of `unit_for.host_features` from parent unit, but [here] we only want to know whether the dependency is for host or not. We could have an ad-hoc `FeaturesFor` construction there, but I'd rather revert it at this moment. The interaction between `UnitFor` and `FeaturesFor` bites me every time 😭. After this revert, if we want to resolve #10526 again. The fastest way is doing the following: ```diff diff --git a/src/cargo/core/compiler/unit_dependencies.rs b/src/cargo/core/compiler/unit_dependencies.rs index 9319a19e0..14cc84941 100644 --- a/src/cargo/core/compiler/unit_dependencies.rs +++ b/src/cargo/core/compiler/unit_dependencies.rs `@@` -1103,7 +1103,7 `@@` impl<'a, 'cfg> State<'a, 'cfg> { // If this is an optional dependency, and the new feature resolver // did not enable it, don't include it. if dep.is_optional() { - let features_for = unit_for.map_to_features_for(dep.artifact()); + let features_for = FeaturesFor::from_for_host(unit_for.is_for_host()); if !self.is_dep_activated(pkg_id, features_for, dep.name_in_toml()) { return false; } ``` [`map_to_features_for`]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/profiles.rs#L1043 [here]: https://github.com/rust-lang/cargo/blob/810cbad9a123ad4ee0a55a96171b8f8478ff1c03/src/cargo/core/compiler/unit_dependencies.rs#L1102
@weihanglo Thanks for working on this, even if #11183 didn't quite work out. :) |
Oops. Really? Both #11183 (checkout this commit 810cbad) or the patch in the PR description of #11331 work for me with your example. Maybe my assumption was wrong. Could you try it again? Anyhow, I'll continue investigating a solution like patch from #11331, but need more refactors. |
Er, sorry, I meant to refer to #11131 as the patch to address this that didn't work out and was reverted. |
Problem
For convenience I have also uploaded the failing code here: https://github.com/bstrie/bindeperror2
For the following code:
I expected this code to build. However,
cargo build
produces the following:As we can see from the output, it is not merely that the environment variable is missing; only mycrate is ever built, and mybindep is skipped.
Note that mybindep is an optional dependency, but is specified as a default feature.
In addition, neither
cargo build --features mybindep
norcargo build --all-features
will result in mybindep being built.The following causes the code to compile:
Furthermore, with this (along with removing the default feature) we can observe that
cargo build --features mybindep
andcargo build --all-features
now functions as expected. Leaving thetarget
key and removing theoptional
key also causes the code to build. It is the presence of both these keys simultaneously that results in the issue.cc @Byron
Version
The text was updated successfully, but these errors were encountered: