Skip to content
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

sc-config.toml default-features #1824

Merged
merged 1 commit into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading