Auto merge of #93685 - Mark-Simulacrum:drop-time, r=Mark-Simulacrum

Drop time dependency from bootstrap

This was only used for the inclusion of 'current' dates into our manpages, but
it is not clear that this is practically necessary. The manpage is essentially
never updated, and so we can likely afford to keep a manual date in these files.
It also seems possible to just omit it, but that may cause other tools trouble,
so avoid doing that for now.

This is largely done to reduce bootstrap complexity; the time crate is not particularly
small and in #92480 would have started pulling in num-threads, which does runtime
thread count detection. I would prefer to avoid that, so filing this to just drop the nearly
unused dependency entirely.

r? `@pietroalbini`
This commit is contained in:
bors 2022-02-13 15:12:21 +00:00
commit 05d1652337
6 changed files with 16 additions and 46 deletions

View File

@ -227,7 +227,6 @@ dependencies = [
"pretty_assertions", "pretty_assertions",
"serde", "serde",
"serde_json", "serde_json",
"time",
"toml", "toml",
"winapi", "winapi",
] ]

View File

@ -44,14 +44,22 @@ libc = "0.2"
serde = { version = "1.0.8", features = ["derive"] } serde = { version = "1.0.8", features = ["derive"] }
serde_json = "1.0.2" serde_json = "1.0.2"
toml = "0.5" toml = "0.5"
time = "0.1"
ignore = "0.4.10" ignore = "0.4.10"
opener = "0.5" opener = "0.5"
once_cell = "1.7.2" once_cell = "1.7.2"
[target.'cfg(windows)'.dependencies.winapi] [target.'cfg(windows)'.dependencies.winapi]
version = "0.3" version = "0.3"
features = ["fileapi", "ioapiset", "jobapi2", "handleapi", "winioctl", "psapi", "impl-default"] features = [
"fileapi",
"ioapiset",
"jobapi2",
"handleapi",
"winioctl",
"psapi",
"impl-default",
"timezoneapi",
]
[dev-dependencies] [dev-dependencies]
pretty_assertions = "0.7" pretty_assertions = "0.7"

View File

@ -24,7 +24,6 @@ use crate::tarball::{GeneratedTarball, OverlayKind, Tarball};
use crate::tool::{self, Tool}; use crate::tool::{self, Tool};
use crate::util::{exe, is_dylib, timeit}; use crate::util::{exe, is_dylib, timeit};
use crate::{Compiler, DependencyType, Mode, LLVM_TOOLS}; use crate::{Compiler, DependencyType, Mode, LLVM_TOOLS};
use time::{self, Timespec};
pub fn pkgname(builder: &Builder<'_>, component: &str) -> String { pub fn pkgname(builder: &Builder<'_>, component: &str) -> String {
format!("{}-{}", component, builder.rust_package_vers()) format!("{}-{}", component, builder.rust_package_vers())
@ -422,33 +421,15 @@ impl Step for Rustc {
let man_src = builder.src.join("src/doc/man"); let man_src = builder.src.join("src/doc/man");
let man_dst = image.join("share/man/man1"); let man_dst = image.join("share/man/man1");
// Reproducible builds: If SOURCE_DATE_EPOCH is set, use that as the time.
let time = env::var("SOURCE_DATE_EPOCH")
.map(|timestamp| {
let epoch = timestamp
.parse()
.map_err(|err| format!("could not parse SOURCE_DATE_EPOCH: {}", err))
.unwrap();
time::at(Timespec::new(epoch, 0))
})
.unwrap_or_else(|_| time::now());
let month_year = t!(time::strftime("%B %Y", &time));
// don't use our `bootstrap::util::{copy, cp_r}`, because those try // don't use our `bootstrap::util::{copy, cp_r}`, because those try
// to hardlink, and we don't want to edit the source templates // to hardlink, and we don't want to edit the source templates
for file_entry in builder.read_dir(&man_src) { for file_entry in builder.read_dir(&man_src) {
let page_src = file_entry.path(); let page_src = file_entry.path();
let page_dst = man_dst.join(file_entry.file_name()); let page_dst = man_dst.join(file_entry.file_name());
let src_text = t!(std::fs::read_to_string(&page_src));
let new_text = src_text.replace("<INSERT VERSION HERE>", &builder.version);
t!(std::fs::write(&page_dst, &new_text));
t!(fs::copy(&page_src, &page_dst)); t!(fs::copy(&page_src, &page_dst));
// template in month/year and version number
builder.replace_in_file(
&page_dst,
&[
("<INSERT DATE HERE>", &month_year),
("<INSERT VERSION HERE>", &builder.version),
],
);
} }
// Debugger scripts // Debugger scripts

View File

@ -106,8 +106,7 @@
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::env; use std::env;
use std::fs::{self, File, OpenOptions}; use std::fs::{self, File};
use std::io::{Read, Seek, SeekFrom, Write};
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::process::{self, Command}; use std::process::{self, Command};
use std::str; use std::str;
@ -1335,23 +1334,6 @@ impl Build {
} }
} }
/// Search-and-replaces within a file. (Not maximally efficiently: allocates a
/// new string for each replacement.)
pub fn replace_in_file(&self, path: &Path, replacements: &[(&str, &str)]) {
if self.config.dry_run {
return;
}
let mut contents = String::new();
let mut file = t!(OpenOptions::new().read(true).write(true).open(path));
t!(file.read_to_string(&mut contents));
for &(target, replacement) in replacements {
contents = contents.replace(target, replacement);
}
t!(file.seek(SeekFrom::Start(0)));
t!(file.set_len(0));
t!(file.write_all(contents.as_bytes()));
}
/// Copies the `src` directory recursively to `dst`. Both are assumed to exist /// Copies the `src` directory recursively to `dst`. Both are assumed to exist
/// when this function is called. /// when this function is called.
pub fn cp_r(&self, src: &Path, dst: &Path) { pub fn cp_r(&self, src: &Path, dst: &Path) {

View File

@ -1,4 +1,4 @@
.TH RUSTC "1" "<INSERT DATE HERE>" "rustc <INSERT VERSION HERE>" "User Commands" .TH RUSTC "1" "April 2019" "rustc <INSERT VERSION HERE>" "User Commands"
.SH NAME .SH NAME
rustc \- The Rust compiler rustc \- The Rust compiler
.SH SYNOPSIS .SH SYNOPSIS

View File

@ -1,4 +1,4 @@
.TH RUSTDOC "1" "<INSERT DATE HERE>" "rustdoc <INSERT VERSION HERE>" "User Commands" .TH RUSTDOC "1" "July 2018" "rustdoc <INSERT VERSION HERE>" "User Commands"
.SH NAME .SH NAME
rustdoc \- generate documentation from Rust source code rustdoc \- generate documentation from Rust source code
.SH SYNOPSIS .SH SYNOPSIS