Skip to content

Commit 7faff65

Browse files
authored
Merge pull request #434 from rust-lang/fix/platform-specific-function
Rework the download function to only contain the platform-specific code
2 parents ac708d9 + 5d5137c commit 7faff65

File tree

1 file changed

+78
-78
lines changed

1 file changed

+78
-78
lines changed

build_system/src/config.rs

+78-78
Original file line numberDiff line numberDiff line change
@@ -190,83 +190,6 @@ impl ConfigInfo {
190190
command
191191
}
192192

193-
fn download_gccjit(
194-
&self,
195-
output_dir: &Path,
196-
libgccjit_so_name: &str,
197-
commit: &str,
198-
) -> Result<(), String> {
199-
// Download time!
200-
let tempfile_name = format!("{}.download", libgccjit_so_name);
201-
let tempfile = output_dir.join(&tempfile_name);
202-
let is_in_ci = std::env::var("GITHUB_ACTIONS").is_ok();
203-
204-
let url = format!(
205-
"https://github.com/antoyo/gcc/releases/download/master-{}/libgccjit.so",
206-
commit,
207-
);
208-
209-
println!("Downloading `{}`...", url);
210-
// Try curl. If that fails and we are on windows, fallback to PowerShell.
211-
let mut ret = run_command_with_output(
212-
&[
213-
&"curl",
214-
&"--speed-time",
215-
&"30",
216-
&"--speed-limit",
217-
&"10", // timeout if speed is < 10 bytes/sec for > 30 seconds
218-
&"--connect-timeout",
219-
&"30", // timeout if cannot connect within 30 seconds
220-
&"-o",
221-
&tempfile_name,
222-
&"--retry",
223-
&"3",
224-
&"-SRfL",
225-
if is_in_ci { &"-s" } else { &"--progress-bar" },
226-
&url.as_str(),
227-
],
228-
Some(&output_dir),
229-
);
230-
if ret.is_err() && cfg!(windows) {
231-
eprintln!("Fallback to PowerShell");
232-
ret = run_command_with_output(
233-
&[
234-
&"PowerShell.exe",
235-
&"/nologo",
236-
&"-Command",
237-
&"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;",
238-
&format!(
239-
"(New-Object System.Net.WebClient).DownloadFile('{}', '{}')",
240-
url,
241-
tempfile_name,
242-
).as_str(),
243-
],
244-
Some(&output_dir),
245-
);
246-
}
247-
ret?;
248-
249-
let libgccjit_so = output_dir.join(libgccjit_so_name);
250-
// If we reach this point, it means the file was correctly downloaded, so let's
251-
// rename it!
252-
std::fs::rename(&tempfile, &libgccjit_so).map_err(|err| {
253-
format!(
254-
"Failed to rename `{}` into `{}`: {:?}",
255-
tempfile.display(),
256-
libgccjit_so.display(),
257-
err,
258-
)
259-
})?;
260-
261-
println!("Downloaded libgccjit.so version {} successfully!", commit);
262-
// We need to create a link named `libgccjit.so.0` because that's what the linker is
263-
// looking for.
264-
create_symlink(
265-
&libgccjit_so,
266-
output_dir.join(&format!("{}.0", libgccjit_so_name)),
267-
)
268-
}
269-
270193
fn download_gccjit_if_needed(&mut self) -> Result<(), String> {
271194
let output_dir = Path::new(
272195
std::env::var("CARGO_TARGET_DIR")
@@ -313,7 +236,38 @@ impl ConfigInfo {
313236
let libgccjit_so_name = "libgccjit.so";
314237
let libgccjit_so = output_dir.join(libgccjit_so_name);
315238
if !libgccjit_so.is_file() && !self.no_download {
316-
self.download_gccjit(&output_dir, libgccjit_so_name, commit)?;
239+
// Download time!
240+
let tempfile_name = format!("{}.download", libgccjit_so_name);
241+
let tempfile = output_dir.join(&tempfile_name);
242+
let is_in_ci = std::env::var("GITHUB_ACTIONS").is_ok();
243+
244+
let url = format!(
245+
"https://github.com/antoyo/gcc/releases/download/master-{}/libgccjit.so",
246+
commit,
247+
);
248+
249+
println!("Downloading `{}`...", url);
250+
download_gccjit(url, &output_dir, tempfile_name, !is_in_ci)?;
251+
252+
let libgccjit_so = output_dir.join(libgccjit_so_name);
253+
// If we reach this point, it means the file was correctly downloaded, so let's
254+
// rename it!
255+
std::fs::rename(&tempfile, &libgccjit_so).map_err(|err| {
256+
format!(
257+
"Failed to rename `{}` into `{}`: {:?}",
258+
tempfile.display(),
259+
libgccjit_so.display(),
260+
err,
261+
)
262+
})?;
263+
264+
println!("Downloaded libgccjit.so version {} successfully!", commit);
265+
// We need to create a link named `libgccjit.so.0` because that's what the linker is
266+
// looking for.
267+
create_symlink(
268+
&libgccjit_so,
269+
output_dir.join(&format!("{}.0", libgccjit_so_name)),
270+
)?;
317271
}
318272

319273
self.gcc_path = output_dir.display().to_string();
@@ -547,3 +501,49 @@ impl ConfigInfo {
547501
);
548502
}
549503
}
504+
505+
fn download_gccjit(
506+
url: String,
507+
output_dir: &Path,
508+
tempfile_name: String,
509+
with_progress_bar: bool,
510+
) -> Result<(), String> {
511+
// Try curl. If that fails and we are on windows, fallback to PowerShell.
512+
let mut ret = run_command_with_output(
513+
&[
514+
&"curl",
515+
&"--speed-time",
516+
&"30",
517+
&"--speed-limit",
518+
&"10", // timeout if speed is < 10 bytes/sec for > 30 seconds
519+
&"--connect-timeout",
520+
&"30", // timeout if cannot connect within 30 seconds
521+
&"-o",
522+
&tempfile_name,
523+
&"--retry",
524+
&"3",
525+
&"-SRfL",
526+
if with_progress_bar { &"--progress-bar" } else { &"-s" },
527+
&url.as_str(),
528+
],
529+
Some(&output_dir),
530+
);
531+
if ret.is_err() && cfg!(windows) {
532+
eprintln!("Fallback to PowerShell");
533+
ret = run_command_with_output(
534+
&[
535+
&"PowerShell.exe",
536+
&"/nologo",
537+
&"-Command",
538+
&"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;",
539+
&format!(
540+
"(New-Object System.Net.WebClient).DownloadFile('{}', '{}')",
541+
url,
542+
tempfile_name,
543+
).as_str(),
544+
],
545+
Some(&output_dir),
546+
);
547+
}
548+
ret
549+
}

0 commit comments

Comments
 (0)