Skip to content

Commit

Permalink
Auto merge of #106520 - ehuss:update-mdbook, r=Mark-Simulacrum
Browse files Browse the repository at this point in the history
Update mdbook

This updates mdbook from 0.4.21 to 0.4.25. The list of changes is [here](https://github.com/rust-lang/mdBook/blob/master/CHANGELOG.md#mdbook-0425). The only user-visible changes are some changes around the theme picker, and change to the copy-to-clipboard ignoring hidden lines.

Internally there were some dependency updates and small fixes.

This also updates `clap` from 4.0.15 to 4.0.32 whose changelog is [here](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md#4032---2022-12-22). This impacts tools like cargo. I don't see anything particularly noteworthy there, though there are some small user-visible changes.

Unfortunately this required adding a hack for building `rustix` with a bootstrap tool. The comment explains why. I am unable to think of some other workaround (or even a cleaner way to set the rustflag). Ideas are welcome if you can think of alternatives. I'm struggling to even think of a long-term solution, other than asking projects not to do auto-nightly feature detection.

One medium-term solution is to avoid the clap dependency for the mdbook library (which is how rustix gets pulled in). That is one of my goals for the 0.5 release of mdbook, but that probably won't happen until later this year. It would also require dropping clap from `rustbook` and using some other means to parse arguments (there's only two options, so it can probably be done manually).
  • Loading branch information
bors committed Jan 14, 2023
2 parents ca5d92d + 2717f60 commit e9e0908
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 49 deletions.
49 changes: 30 additions & 19 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ dependencies = [
"cargo-test-macro",
"cargo-test-support",
"cargo-util",
"clap 4.0.15",
"clap 4.0.32",
"crates-io",
"curl",
"curl-sys",
Expand Down Expand Up @@ -644,26 +644,27 @@ dependencies = [

[[package]]
name = "clap"
version = "4.0.15"
version = "4.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bf8832993da70a4c6d13c581f4463c2bdda27b9bf1c5498dc4365543abe6d6f"
checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39"
dependencies = [
"atty",
"bitflags",
"clap_derive 4.0.13",
"clap_derive 4.0.21",
"clap_lex 0.3.0",
"is-terminal",
"once_cell",
"strsim",
"termcolor",
"terminal_size",
]

[[package]]
name = "clap_complete"
version = "3.1.1"
version = "4.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df6f3613c0a3cddfd78b41b10203eb322cb29b600cbdf808a7d3db95691b8e25"
checksum = "10861370d2ba66b0f5989f83ebf35db6421713fd92351790e7fdd6c36774c56b"
dependencies = [
"clap 3.2.20",
"clap 4.0.32",
]

[[package]]
Expand All @@ -681,9 +682,9 @@ dependencies = [

[[package]]
name = "clap_derive"
version = "4.0.13"
version = "4.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42f169caba89a7d512b5418b09864543eeb4d497416c917d7137863bd2076ad"
checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
dependencies = [
"heck",
"proc-macro-error",
Expand Down Expand Up @@ -2273,7 +2274,7 @@ name = "jsondoclint"
version = "0.1.0"
dependencies = [
"anyhow",
"clap 4.0.15",
"clap 4.0.32",
"fs-err",
"rustdoc-json-types",
"serde",
Expand Down Expand Up @@ -2529,21 +2530,21 @@ dependencies = [

[[package]]
name = "mdbook"
version = "0.4.21"
version = "0.4.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23f3e133c6d515528745ffd3b9f0c7d975ae039f0b6abb099f2168daa2afb4f9"
checksum = "d1ed28d5903dde77bd5182645078a37ee57014cac6ccb2d54e1d6496386648e4"
dependencies = [
"ammonia",
"anyhow",
"chrono",
"clap 3.2.20",
"clap 4.0.32",
"clap_complete",
"elasticlunr-rs",
"env_logger 0.9.0",
"env_logger 0.10.0",
"handlebars 4.3.3",
"lazy_static",
"log",
"memchr",
"once_cell",
"opener",
"pulldown-cmark 0.9.2",
"regex",
Expand Down Expand Up @@ -3498,7 +3499,7 @@ dependencies = [
name = "rustbook"
version = "0.1.0"
dependencies = [
"clap 3.2.20",
"clap 4.0.32",
"env_logger 0.7.1",
"mdbook",
]
Expand Down Expand Up @@ -5478,6 +5479,16 @@ dependencies = [
"winapi-util",
]

[[package]]
name = "terminal_size"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb20089a8ba2b69debd491f8d2d023761cbf196e999218c591fa1e7e15a21907"
dependencies = [
"rustix",
"windows-sys",
]

[[package]]
name = "termize"
version = "0.1.1"
Expand Down Expand Up @@ -5693,9 +5704,9 @@ dependencies = [

[[package]]
name = "topological-sort"
version = "0.1.0"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa7c7f42dea4b1b99439786f5633aeb9c14c1b53f75e282803c2ec2ad545873c"
checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"

[[package]]
name = "tracing"
Expand Down
35 changes: 35 additions & 0 deletions src/bootstrap/bin/rustc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,41 @@ fn main() {
cmd.arg("-Z").arg("force-unstable-if-unmarked");
}

// allow-features is handled from within this rustc wrapper because of
// issues with build scripts. Some packages use build scripts to
// dynamically detect if certain nightly features are available.
// There are different ways this causes problems:
//
// * rustix runs `rustc` on a small test program to see if the feature is
// available (and sets a `cfg` if it is). It does not honor
// CARGO_ENCODED_RUSTFLAGS.
// * proc-macro2 detects if `rustc -vV` says "nighty" or "dev" and enables
// nightly features. It will scan CARGO_ENCODED_RUSTFLAGS for
// -Zallow-features. Unfortunately CARGO_ENCODED_RUSTFLAGS is not set
// for build-dependencies when --target is used.
//
// The issues above means we can't just use RUSTFLAGS, and we can't use
// `cargo -Zallow-features=…`. Passing it through here ensures that it
// always gets set. Unfortunately that also means we need to enable more
// features than we really want (like those for proc-macro2), but there
// isn't much of a way around it.
//
// I think it is unfortunate that build scripts are doing this at all,
// since changes to nightly features can cause crates to break even if the
// user didn't want or care about the use of the nightly features. I think
// nightly features should be opt-in only. Unfortunately the dynamic
// checks are now too wide spread that we just need to deal with it.
//
// If you want to try to remove this, I suggest working with the crate
// authors to remove the dynamic checking. Another option is to pursue
// https://github.com/rust-lang/cargo/issues/11244 and
// https://github.com/rust-lang/cargo/issues/4423, which will likely be
// very difficult, but could help expose -Zallow-features into build
// scripts so they could try to honor them.
if let Ok(allow_features) = env::var("RUSTC_ALLOW_FEATURES") {
cmd.arg(format!("-Zallow-features={allow_features}"));
}

if let Ok(flags) = env::var("MAGIC_EXTRA_RUSTFLAGS") {
for flag in flags.split(' ') {
cmd.arg(flag);
Expand Down
52 changes: 40 additions & 12 deletions src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1381,18 +1381,29 @@ impl<'a> Builder<'a> {
// this), as well as #63012 which is the tracking issue for this
// feature on the rustc side.
cargo.arg("-Zbinary-dep-depinfo");
match mode {
Mode::ToolBootstrap => {
// Restrict the allowed features to those passed by rustbuild, so we don't depend on nightly accidentally.
rustflags.arg("-Zallow-features=binary-dep-depinfo");
}
Mode::ToolStd => {
// Right now this is just compiletest and a few other tools that build on stable.
// Allow them to use `feature(test)`, but nothing else.
rustflags.arg("-Zallow-features=binary-dep-depinfo,test,proc_macro_internals,proc_macro_diagnostic,proc_macro_span");
let allow_features = match mode {
Mode::ToolBootstrap | Mode::ToolStd => {
// Restrict the allowed features so we don't depend on nightly
// accidentally.
//
// binary-dep-depinfo is used by rustbuild itself for all
// compilations.
//
// Lots of tools depend on proc_macro2 and proc-macro-error.
// Those have build scripts which assume nightly features are
// available if the `rustc` version is "nighty" or "dev". See
// bin/rustc.rs for why that is a problem. Instead of labeling
// those features for each individual tool that needs them,
// just blanket allow them here.
//
// If this is ever removed, be sure to add something else in
// its place to keep the restrictions in place (or make a way
// to unset RUSTC_BOOTSTRAP).
"binary-dep-depinfo,proc_macro_span,proc_macro_span_shrink,proc_macro_diagnostic"
.to_string()
}
Mode::Std | Mode::Rustc | Mode::Codegen | Mode::ToolRustc => {}
}
Mode::Std | Mode::Rustc | Mode::Codegen | Mode::ToolRustc => String::new(),
};

cargo.arg("-j").arg(self.jobs().to_string());

Expand Down Expand Up @@ -1915,7 +1926,7 @@ impl<'a> Builder<'a> {
}
}

Cargo { command: cargo, rustflags, rustdocflags }
Cargo { command: cargo, rustflags, rustdocflags, allow_features }
}

/// Ensure that a given step is built, returning its output. This will
Expand Down Expand Up @@ -2094,6 +2105,7 @@ pub struct Cargo {
command: Command,
rustflags: Rustflags,
rustdocflags: Rustflags,
allow_features: String,
}

impl Cargo {
Expand Down Expand Up @@ -2138,6 +2150,18 @@ impl Cargo {
self.command.current_dir(dir);
self
}

/// Adds nightly-only features that this invocation is allowed to use.
///
/// By default, all nightly features are allowed. Once this is called, it
/// will be restricted to the given set.
pub fn allow_features(&mut self, features: &str) -> &mut Cargo {
if !self.allow_features.is_empty() {
self.allow_features.push(',');
}
self.allow_features.push_str(features);
self
}
}

impl From<Cargo> for Command {
Expand All @@ -2152,6 +2176,10 @@ impl From<Cargo> for Command {
cargo.command.env("RUSTDOCFLAGS", rustdocflags);
}

if !cargo.allow_features.is_empty() {
cargo.command.env("RUSTC_ALLOW_FEATURES", cargo.allow_features);
}

cargo.command
}
}
4 changes: 1 addition & 3 deletions src/bootstrap/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -346,9 +346,7 @@ impl Step for RustAnalyzer {
&["rust-analyzer/in-rust-tree".to_owned()],
);

cargo.rustflag(
"-Zallow-features=proc_macro_internals,proc_macro_diagnostic,proc_macro_span",
);
cargo.allow_features(crate::tool::RustAnalyzer::ALLOW_FEATURES);

// For ./x.py clippy, don't check those targets because
// linting tests and benchmarks can produce very noisy results
Expand Down
4 changes: 3 additions & 1 deletion src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ impl Step for RustAnalyzer {
SourceType::InTree,
&["sysroot-abi".to_owned()],
);
cargo.allow_features(tool::RustAnalyzer::ALLOW_FEATURES);

let dir = builder.src.join(workspace_path);
// needed by rust-analyzer to find its own text fixtures, cf.
Expand Down Expand Up @@ -690,7 +691,7 @@ impl Step for CompiletestTest {
// We need `ToolStd` for the locally-built sysroot because
// compiletest uses unstable features of the `test` crate.
builder.ensure(compile::Std::new(compiler, host));
let cargo = tool::prepare_tool_cargo(
let mut cargo = tool::prepare_tool_cargo(
builder,
compiler,
Mode::ToolStd,
Expand All @@ -700,6 +701,7 @@ impl Step for CompiletestTest {
SourceType::InTree,
&[],
);
cargo.allow_features("test");

try_run(builder, &mut cargo.into());
}
Expand Down
Loading

0 comments on commit e9e0908

Please sign in to comment.