From 85c31b9ce730bd5ffe41589c353d935a14baaa96 Mon Sep 17 00:00:00 2001 From: Andrei Marinica Date: Mon, 21 Oct 2024 02:30:31 +0300 Subject: [PATCH] sc-config.toml default-features --- .../multi-contract-features/multicontract.toml | 1 + .../Cargo.toml | 1 + framework/meta-lib/src/cargo_toml_contents.rs | 17 +++++++++++++---- framework/meta-lib/src/contract/meta_config.rs | 2 ++ .../sc_config/contract_variant_builder.rs | 1 + .../sc_config/contract_variant_settings.rs | 4 ++++ .../src/contract/sc_config/sc_config_serde.rs | 4 ++++ .../src/contract/wasm_cargo_toml_data.rs | 1 + .../src/contract/wasm_cargo_toml_generate.rs | 6 ++++-- 9 files changed, 31 insertions(+), 6 deletions(-) diff --git a/contracts/feature-tests/multi-contract-features/multicontract.toml b/contracts/feature-tests/multi-contract-features/multicontract.toml index 92d196560c..b9822321bc 100644 --- a/contracts/feature-tests/multi-contract-features/multicontract.toml +++ b/contracts/feature-tests/multi-contract-features/multicontract.toml @@ -33,6 +33,7 @@ add-labels = ["mcs-external-view"] [contracts.multi-contract-example-feature] add-unlabelled = true # optional here, since the default is true features = ["example_feature"] +default-features = false [contracts.multi-contract-alt-impl] add-unlabelled = false diff --git a/contracts/feature-tests/multi-contract-features/wasm-multi-contract-example-feature/Cargo.toml b/contracts/feature-tests/multi-contract-features/wasm-multi-contract-example-feature/Cargo.toml index f966c16b07..8c43be1852 100644 --- a/contracts/feature-tests/multi-contract-features/wasm-multi-contract-example-feature/Cargo.toml +++ b/contracts/feature-tests/multi-contract-features/wasm-multi-contract-example-feature/Cargo.toml @@ -27,6 +27,7 @@ panic = "abort" [dependencies.multi-contract-features] path = ".." features = ["example_feature"] +default-features = false [dependencies.multiversx-sc-wasm-adapter] version = "0.53.2" diff --git a/framework/meta-lib/src/cargo_toml_contents.rs b/framework/meta-lib/src/cargo_toml_contents.rs index ac6f851ba3..e078bcdfab 100644 --- a/framework/meta-lib/src/cargo_toml_contents.rs +++ b/framework/meta-lib/src/cargo_toml_contents.rs @@ -288,7 +288,11 @@ impl CargoTomlContents { result } - pub fn change_features_for_parent_crate_dep(&mut self, features: &[String]) { + pub fn change_features_for_parent_crate_dep( + &mut self, + features: &[String], + default_features: Option, + ) { let deps_mut = self.dependencies_mut(); for (_, dep) in deps_mut { if is_dep_path_above(dep) { @@ -296,9 +300,14 @@ impl CargoTomlContents { .iter() .map(|feature| Value::String(feature.clone())) .collect(); - dep.as_table_mut() - .expect("malformed crate Cargo.toml") - .insert("features".to_string(), Value::Array(feature_values)); + let deps_table = dep.as_table_mut().expect("malformed crate Cargo.toml"); + deps_table.insert("features".to_string(), Value::Array(feature_values)); + if let Some(default_features_value) = default_features { + deps_table.insert( + "default-features".to_string(), + Value::Boolean(default_features_value), + ); + } } } } diff --git a/framework/meta-lib/src/contract/meta_config.rs b/framework/meta-lib/src/contract/meta_config.rs index b69a11a16a..79a0e20c31 100644 --- a/framework/meta-lib/src/contract/meta_config.rs +++ b/framework/meta-lib/src/contract/meta_config.rs @@ -73,6 +73,7 @@ impl MetaConfig { framework_version: main_cargo_toml_contents.dependency_version(FRAMEWORK_NAME_BASE), framework_path: main_cargo_toml_contents.dependency_path(FRAMEWORK_NAME_BASE), contract_features: contract.settings.features.clone(), + contract_default_features: contract.settings.default_features, }; generate_wasm_cargo_toml(&cargo_toml_data, crate_name.as_str()) .save_to_file(contract.cargo_toml_path()); @@ -228,6 +229,7 @@ members = [\".\"] framework_version: "x.y.z".to_string(), framework_path: Option::Some("../../../framework/base".to_string()), contract_features: Vec::::new(), + contract_default_features: None, }; let crate_name = "test-crate-name".to_string(); let generated_contents = diff --git a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs index 8bf9793f39..6564bdea65 100644 --- a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs +++ b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs @@ -78,6 +78,7 @@ impl ContractVariantBuilder { allocator: parse_allocator(&cms.allocator), stack_size: parse_stack_size(&cms.stack_size), features: cms.features.clone(), + default_features: cms.default_features, kill_legacy_callback: cms.kill_legacy_callback, profile: ContractVariantProfile::from_serde(&cms.profile), }, diff --git a/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs b/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs index b0af57deef..660604bd37 100644 --- a/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs +++ b/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs @@ -29,6 +29,9 @@ pub struct ContractVariantSettings { /// Features that are activated on the contract crate, from wasm. pub features: Vec, + /// Allows disabling default features in the contract crate, from wasm. + pub default_features: Option, + /// Forcibly remove the original contrct legacy callback. pub kill_legacy_callback: bool, @@ -44,6 +47,7 @@ impl Default for ContractVariantSettings { allocator: Default::default(), stack_size: DEFAULT_STACK_SIZE, features: Default::default(), + default_features: None, kill_legacy_callback: false, profile: Default::default(), } diff --git a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs index c3c6b94d30..fbe4543e5a 100644 --- a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs +++ b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs @@ -55,6 +55,10 @@ pub struct ContractVariantSerde { #[serde(default)] pub features: Vec, + #[serde(default)] + #[serde(rename = "default-features")] + pub default_features: Option, + #[serde(default)] pub kill_legacy_callback: bool, diff --git a/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs b/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs index 0cfaa89f8a..7a0d651b56 100644 --- a/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs +++ b/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs @@ -8,4 +8,5 @@ pub struct WasmCargoTomlData { pub framework_version: String, pub framework_path: Option, pub contract_features: Vec, + pub contract_default_features: Option, } diff --git a/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs b/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs index 90b33229be..aadcf1edc0 100644 --- a/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs +++ b/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs @@ -39,8 +39,10 @@ pub fn generate_wasm_cargo_toml( //check features if !cargo_toml_data.contract_features.is_empty() { - new_cargo - .change_features_for_parent_crate_dep(cargo_toml_data.contract_features.as_slice()); + new_cargo.change_features_for_parent_crate_dep( + cargo_toml_data.contract_features.as_slice(), + cargo_toml_data.contract_default_features, + ); } //insert default workspace