CLI: don't enable default features in --no-default-features builds (#5147)
* Don't push default features in `--no-default-features` builds Signed-off-by: Nico Burns <nico@nicoburns.com> * add tests for default features and no default features outside of renderers --------- Signed-off-by: Nico Burns <nico@nicoburns.com> Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
This commit is contained in:
1 parent
352e59ea01
commit
761c9503fd
7 files changed
+80
-13
No files matched your search
Generated
+14
@@ -9017,6 +9017,20 @@ dependencies = [
|
|||||||
"dioxus",
|
"dioxus",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "harness-web-with-default-features"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"dioxus",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "harness-web-with-no-default-features"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"dioxus",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hash32"
|
name = "hash32"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[package]
|
||||||
|
name = "harness-web-with-default-features"
|
||||||
|
version = "0.0.1"
|
||||||
|
edition = "2021"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dioxus = { workspace = true }
|
||||||
|
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default=["other"]
|
||||||
|
other=[]
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[package]
|
||||||
|
name = "harness-web-with-no-default-features"
|
||||||
|
version = "0.0.1"
|
||||||
|
edition = "2021"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dioxus = { workspace = true }
|
||||||
|
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default=["other"]
|
||||||
|
other=[]
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
||||||
@@ -605,7 +605,7 @@ impl BuildRequest {
|
|||||||
Fullstack usage is inferred from the presence of the fullstack feature or --fullstack.
|
Fullstack usage is inferred from the presence of the fullstack feature or --fullstack.
|
||||||
*/
|
*/
|
||||||
let mut features = args.features.clone();
|
let mut features = args.features.clone();
|
||||||
let mut no_default_features = args.no_default_features;
|
let no_default_features = args.no_default_features;
|
||||||
let all_features = args.all_features;
|
let all_features = args.all_features;
|
||||||
let mut triple = args.target.clone();
|
let mut triple = args.target.clone();
|
||||||
let mut renderer = args.renderer;
|
let mut renderer = args.renderer;
|
||||||
@@ -706,7 +706,6 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Web));
|
renderer = renderer.or(Some(Renderer::Web));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Web));
|
bundle_format = bundle_format.or(Some(BundleFormat::Web));
|
||||||
triple = triple.or(Some("wasm32-unknown-unknown".parse()?));
|
triple = triple.or(Some("wasm32-unknown-unknown".parse()?));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
Platform::MacOS => {
|
Platform::MacOS => {
|
||||||
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
||||||
@@ -715,7 +714,6 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Webview));
|
renderer = renderer.or(Some(Renderer::Webview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::MacOS));
|
bundle_format = bundle_format.or(Some(BundleFormat::MacOS));
|
||||||
triple = triple.or(Some(Triple::host()));
|
triple = triple.or(Some(Triple::host()));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
Platform::Windows => {
|
Platform::Windows => {
|
||||||
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
||||||
@@ -724,7 +722,6 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Webview));
|
renderer = renderer.or(Some(Renderer::Webview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Windows));
|
bundle_format = bundle_format.or(Some(BundleFormat::Windows));
|
||||||
triple = triple.or(Some(Triple::host()));
|
triple = triple.or(Some(Triple::host()));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
Platform::Linux => {
|
Platform::Linux => {
|
||||||
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
if main_package.features.contains_key("desktop") && renderer.is_none() {
|
||||||
@@ -733,7 +730,6 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Webview));
|
renderer = renderer.or(Some(Renderer::Webview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Linux));
|
bundle_format = bundle_format.or(Some(BundleFormat::Linux));
|
||||||
triple = triple.or(Some(Triple::host()));
|
triple = triple.or(Some(Triple::host()));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
Platform::Ios => {
|
Platform::Ios => {
|
||||||
if main_package.features.contains_key("mobile") && renderer.is_none() {
|
if main_package.features.contains_key("mobile") && renderer.is_none() {
|
||||||
@@ -741,7 +737,6 @@ impl BuildRequest {
|
|||||||
}
|
}
|
||||||
renderer = renderer.or(Some(Renderer::Webview));
|
renderer = renderer.or(Some(Renderer::Webview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Ios));
|
bundle_format = bundle_format.or(Some(BundleFormat::Ios));
|
||||||
no_default_features = true;
|
|
||||||
match device.is_some() {
|
match device.is_some() {
|
||||||
// If targeting device, we want to build for the device which is always aarch64
|
// If targeting device, we want to build for the device which is always aarch64
|
||||||
true => triple = triple.or(Some("aarch64-apple-ios".parse()?)),
|
true => triple = triple.or(Some("aarch64-apple-ios".parse()?)),
|
||||||
@@ -762,7 +757,6 @@ impl BuildRequest {
|
|||||||
|
|
||||||
renderer = renderer.or(Some(Renderer::Webview));
|
renderer = renderer.or(Some(Renderer::Webview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Android));
|
bundle_format = bundle_format.or(Some(BundleFormat::Android));
|
||||||
no_default_features = true;
|
|
||||||
|
|
||||||
// maybe probe adb?
|
// maybe probe adb?
|
||||||
if let Some(_device_name) = device.as_ref() {
|
if let Some(_device_name) = device.as_ref() {
|
||||||
@@ -792,7 +786,6 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Server));
|
renderer = renderer.or(Some(Renderer::Server));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Server));
|
bundle_format = bundle_format.or(Some(BundleFormat::Server));
|
||||||
triple = triple.or(Some(Triple::host()));
|
triple = triple.or(Some(Triple::host()));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
Platform::Liveview => {
|
Platform::Liveview => {
|
||||||
if main_package.features.contains_key("liveview") && renderer.is_none() {
|
if main_package.features.contains_key("liveview") && renderer.is_none() {
|
||||||
@@ -801,12 +794,12 @@ impl BuildRequest {
|
|||||||
renderer = renderer.or(Some(Renderer::Liveview));
|
renderer = renderer.or(Some(Renderer::Liveview));
|
||||||
bundle_format = bundle_format.or(Some(BundleFormat::Server));
|
bundle_format = bundle_format.or(Some(BundleFormat::Server));
|
||||||
triple = triple.or(Some(Triple::host()));
|
triple = triple.or(Some(Triple::host()));
|
||||||
no_default_features = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no default features are enabled, we need to add the rendererless features
|
// If default features are enabled, we need to add the default features
|
||||||
if no_default_features {
|
// which don't enable a renderer
|
||||||
|
if !no_default_features {
|
||||||
features.extend(Self::rendererless_features(main_package));
|
features.extend(Self::rendererless_features(main_package));
|
||||||
features.dedup();
|
features.dedup();
|
||||||
features.sort();
|
features.sort();
|
||||||
@@ -987,7 +980,9 @@ impl BuildRequest {
|
|||||||
Ok(Self {
|
Ok(Self {
|
||||||
features,
|
features,
|
||||||
bundle,
|
bundle,
|
||||||
no_default_features,
|
// We hardcode passing `--no-default-features` to Cargo because dx manually enables
|
||||||
|
// the default features we want.
|
||||||
|
no_default_features: true,
|
||||||
all_features,
|
all_features,
|
||||||
crate_package,
|
crate_package,
|
||||||
crate_target,
|
crate_target,
|
||||||
|
|||||||
@@ -255,7 +255,27 @@ async fn test_harnesses() {
|
|||||||
let server = t.server.unwrap();
|
let server = t.server.unwrap();
|
||||||
assert_eq!(server.bundle, BundleFormat::Server);
|
assert_eq!(server.bundle, BundleFormat::Server);
|
||||||
assert_eq!(server.triple, Triple::host());
|
assert_eq!(server.triple, Triple::host());
|
||||||
})
|
}),
|
||||||
|
TestHarnessBuilder::new("harness-web-with-no-default-features")
|
||||||
|
.deps(r#"dioxus = { workspace = true }"#)
|
||||||
|
.fetr(r#"default=["other"]"#)
|
||||||
|
.fetr(r#"other=[]"#)
|
||||||
|
.asrt(r#"dx build --no-default-features --web"#, |targets| async move {
|
||||||
|
let t = targets.unwrap();
|
||||||
|
assert_eq!(t.client.bundle, BundleFormat::Web);
|
||||||
|
assert_eq!(t.client.features, vec!["dioxus/web"]);
|
||||||
|
assert!(t.server.is_none());
|
||||||
|
}),
|
||||||
|
TestHarnessBuilder::new("harness-web-with-default-features")
|
||||||
|
.deps(r#"dioxus = { workspace = true }"#)
|
||||||
|
.fetr(r#"default=["other"]"#)
|
||||||
|
.fetr(r#"other=[]"#)
|
||||||
|
.asrt(r#"dx build --web"#, |targets| async move {
|
||||||
|
let t = targets.unwrap();
|
||||||
|
assert_eq!(t.client.bundle, BundleFormat::Web);
|
||||||
|
assert_eq!(t.client.features.iter().map(|s| s.as_str()).collect::<HashSet<_>>(), ["dioxus/web", "other"].into_iter().collect::<HashSet<_>>());
|
||||||
|
assert!(t.server.is_none());
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user