Skip to content

Commit

Permalink
Merge pull request #1824 from multiversx/sc-config-default-features
Browse files Browse the repository at this point in the history
sc-config.toml default-features
  • Loading branch information
andrei-marinica authored Oct 21, 2024
2 parents a2e0e61 + 85c31b9 commit 46385c8
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
17 changes: 13 additions & 4 deletions framework/meta-lib/src/cargo_toml_contents.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,17 +288,26 @@ 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<bool>,
) {
let deps_mut = self.dependencies_mut();
for (_, dep) in deps_mut {
if is_dep_path_above(dep) {
let feature_values = features
.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),
);
}
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions framework/meta-lib/src/contract/meta_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down Expand Up @@ -228,6 +229,7 @@ members = [\".\"]
framework_version: "x.y.z".to_string(),
framework_path: Option::Some("../../../framework/base".to_string()),
contract_features: Vec::<String>::new(),
contract_default_features: None,
};
let crate_name = "test-crate-name".to_string();
let generated_contents =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ pub struct ContractVariantSettings {
/// Features that are activated on the contract crate, from wasm.
pub features: Vec<String>,

/// Allows disabling default features in the contract crate, from wasm.
pub default_features: Option<bool>,

/// Forcibly remove the original contrct legacy callback.
pub kill_legacy_callback: bool,

Expand All @@ -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(),
}
Expand Down
4 changes: 4 additions & 0 deletions framework/meta-lib/src/contract/sc_config/sc_config_serde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ pub struct ContractVariantSerde {
#[serde(default)]
pub features: Vec<String>,

#[serde(default)]
#[serde(rename = "default-features")]
pub default_features: Option<bool>,

#[serde(default)]
pub kill_legacy_callback: bool,

Expand Down
1 change: 1 addition & 0 deletions framework/meta-lib/src/contract/wasm_cargo_toml_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ pub struct WasmCargoTomlData {
pub framework_version: String,
pub framework_path: Option<String>,
pub contract_features: Vec<String>,
pub contract_default_features: Option<bool>,
}
6 changes: 4 additions & 2 deletions framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 46385c8

Please sign in to comment.