diff --git a/src/cmd/build.rs b/src/cmd/build.rs index 0435cfe2532f97f44248ae030adc4c7f067ece76..39c628dda0c303f0afe1533a849a19f1482749cd 100644 --- a/src/cmd/build.rs +++ b/src/cmd/build.rs @@ -138,7 +138,7 @@ fn build_cargo_project( ); let cargo_build = |manifest_path: &ManifestPath| { - let target_dir = &crate_metadata.cargo_meta.target_directory; + let target_dir = &crate_metadata.target_directory; util::invoke_cargo( "build", &[ @@ -313,7 +313,7 @@ fn execute( dest_wasm: maybe_dest_wasm, dest_metadata: None, dest_bundle: None, - target_directory: crate_metadata.cargo_meta.target_directory, + target_directory: crate_metadata.target_directory, optimization_result: maybe_optimization_result, build_artifact, }; @@ -378,7 +378,7 @@ mod tests { cmd::new::execute("new_project", Some(path)).expect("new project creation failed"); let manifest_path = ManifestPath::new(&path.join("new_project").join("Cargo.toml")).unwrap(); - super::execute( + let res = super::execute( &manifest_path, None, true, @@ -386,6 +386,13 @@ mod tests { UnstableFlags::default(), ) .expect("build failed"); + + // we can't use `/target/ink` here, since this would match + // for `/target` being the root path. but since `ends_with` + // always matches whole path components we can be sure + // the path can never be e.g. `foo_target/ink` -- the assert + // would fail for that. + assert!(res.target_directory.ends_with("target/ink")); Ok(()) }) } diff --git a/src/cmd/metadata.rs b/src/cmd/metadata.rs index d93565adf6e3d2997ec7dd91da81c01af4f3c34b..8ca48262d2df889cac8af9bd83c7674aa5dd39c2 100644 --- a/src/cmd/metadata.rs +++ b/src/cmd/metadata.rs @@ -55,13 +55,11 @@ impl GenerateMetadataCommand { pub fn exec(&self) -> Result { util::assert_channel()?; - let cargo_meta = &self.crate_metadata.cargo_meta; - let out_path_metadata = cargo_meta.target_directory.join(METADATA_FILE); + let target_directory = self.crate_metadata.target_directory.clone(); + let out_path_metadata = target_directory.join(METADATA_FILE); let fname_bundle = format!("{}.contract", self.crate_metadata.package_name); - let out_path_bundle = cargo_meta.target_directory.join(fname_bundle); - - let target_directory = cargo_meta.target_directory.clone(); + let out_path_bundle = target_directory.join(fname_bundle); // build the extended contract project metadata let ExtendedMetadataResult { @@ -120,15 +118,18 @@ impl GenerateMetadataCommand { if self.unstable_options.original_manifest { generate_metadata(&self.crate_metadata.manifest_path)?; } else { - Workspace::new(&cargo_meta, &self.crate_metadata.root_package.id)? - .with_root_package_manifest(|manifest| { - manifest - .with_added_crate_type("rlib")? - .with_profile_release_lto(false)?; - Ok(()) - })? - .with_metadata_gen_package()? - .using_temp(generate_metadata)?; + Workspace::new( + &self.crate_metadata.cargo_meta, + &self.crate_metadata.root_package.id, + )? + .with_root_package_manifest(|manifest| { + manifest + .with_added_crate_type("rlib")? + .with_profile_release_lto(false)?; + Ok(()) + })? + .with_metadata_gen_package()? + .using_temp(generate_metadata)?; } let dest_bundle = if self.build_artifact == BuildArtifacts::All { diff --git a/src/crate_metadata.rs b/src/crate_metadata.rs index 60837b73dfcf5f4a63f6b53bab025336fbf9a71e..1e57e950e14cc4815925d7dda555e7c5614e7eef 100644 --- a/src/crate_metadata.rs +++ b/src/crate_metadata.rs @@ -36,6 +36,7 @@ pub struct CrateMetadata { pub documentation: Option, pub homepage: Option, pub user: Option>, + pub target_directory: PathBuf, } impl CrateMetadata { @@ -43,18 +44,21 @@ impl CrateMetadata { pub fn collect(manifest_path: &ManifestPath) -> Result { let (metadata, root_package) = get_cargo_metadata(manifest_path)?; + let mut target_directory = metadata.target_directory.clone(); + target_directory.push("ink"); + // Normalize the package name. let package_name = root_package.name.replace("-", "_"); // {target_dir}/wasm32-unknown-unknown/release/{package_name}.wasm - let mut original_wasm = metadata.target_directory.clone(); + let mut original_wasm = target_directory.clone(); original_wasm.push("wasm32-unknown-unknown"); original_wasm.push("release"); original_wasm.push(package_name.clone()); original_wasm.set_extension("wasm"); // {target_dir}/{package_name}.wasm - let mut dest_wasm = metadata.target_directory.clone(); + let mut dest_wasm = target_directory.clone(); dest_wasm.push(package_name.clone()); dest_wasm.set_extension("wasm"); @@ -86,6 +90,7 @@ impl CrateMetadata { documentation, homepage, user, + target_directory, }; Ok(crate_metadata) } diff --git a/src/main.rs b/src/main.rs index 6fed88ddee63af6b147eb35e10e17137e5c547a5..6619d5802dcf3aba7f68f86de58d2b380ba629ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -303,7 +303,7 @@ enum Command { Deploy { #[structopt(flatten)] extrinsic_opts: ExtrinsicOpts, - /// Path to wasm contract code, defaults to `./target/-pruned.wasm` + /// Path to wasm contract code, defaults to `./target/ink/-pruned.wasm` #[structopt(parse(from_os_str))] wasm_path: Option, },