From 78046e9057c0a9a85924f74eae63c6e3f05aecfc Mon Sep 17 00:00:00 2001 From: zhutoulala Date: Wed, 9 Feb 2022 17:53:55 -0800 Subject: [PATCH] fix for issue#3130 - Compile example contracts failed on Windows (#3135) * fix for issue#3130 - Compile example contracts failed on Windows * run cargo fmt * revert a wrongly merged file * merge with the latest --- vm/compiler/src/lib.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/vm/compiler/src/lib.rs b/vm/compiler/src/lib.rs index 9add6b83d9..fe2b3ea7e3 100644 --- a/vm/compiler/src/lib.rs +++ b/vm/compiler/src/lib.rs @@ -82,6 +82,17 @@ fn substitute_variable( .to_string() } +/// perform Windows style line ending (CRLF) to Unix stype (LF) conversion in given file +fn windows_line_ending_to_unix_in_file(file_path: &str) -> Result<&str> { + let content = std::fs::read_to_string(file_path)?; + let converted = content.replace("\r\n", "\n"); + // only write back when conversion actually takes place + if converted != content { + std::fs::write(file_path, converted)?; + } + Ok(file_path) +} + //TODO find a graceful method to do source file pre process and replace placeholders. /// Replace {{variable}} placeholders in source file, default variable is `sender`. pub fn process_source_tpl( @@ -161,12 +172,19 @@ pub fn compile_source_string_no_report( )> { let temp_dir = tempfile::tempdir()?; let temp_file = temp_dir.path().join("temp.move"); - let processed_source = process_source_tpl(source, sender, HashMap::new()); + let processed_source = process_source_tpl( + source.replace("\r\n", "\n").as_str(), + sender, + HashMap::new(), + ); std::fs::write(temp_file.as_path(), processed_source.as_bytes())?; let targets = vec![temp_file .to_str() .expect("temp file path must is str.") .to_string()]; + for dep in deps { + windows_line_ending_to_unix_in_file(dep)?; + } let compiler = move_compiler::Compiler::new(&targets, deps) .set_named_address_values(starcoin_framework_named_addresses()) .set_flags(Flags::empty().set_sources_shadow_deps(true));