Auto merge of #9927 - xFrednet:0000-rustc-tool-macro-update, r=matthiaskrgr

Cleanup `rustc_tool_util` and add a convenient macro for `build.rs`

changelog: none
<!-- changelog_checked -->

If possible, I'd like to have a new release for this, maybe `v0.3.0` to use the changes in another project. Then we can also remove the `path = "./rustc_tools_util"` from `Cargo.toml`. I'd be happy to help with the release on crates.io if you'd like the help :)

r? `@matthiaskrgr`
This commit is contained in:
bors 2022-12-15 12:04:30 +00:00
commit f43e4f30d8
9 changed files with 62 additions and 57 deletions

View File

@ -23,7 +23,7 @@ path = "src/driver.rs"
[dependencies] [dependencies]
clippy_lints = { path = "clippy_lints" } clippy_lints = { path = "clippy_lints" }
semver = "1.0" semver = "1.0"
rustc_tools_util = "0.2.1" rustc_tools_util = "0.3.0"
tempfile = { version = "3.2", optional = true } tempfile = { version = "3.2", optional = true }
termize = "0.1" termize = "0.1"
@ -56,7 +56,7 @@ tokio = { version = "1", features = ["io-util"] }
rustc-semver = "1.1" rustc-semver = "1.1"
[build-dependencies] [build-dependencies]
rustc_tools_util = "0.2.1" rustc_tools_util = "0.3.0"
[features] [features]
deny-warnings = ["clippy_lints/deny-warnings"] deny-warnings = ["clippy_lints/deny-warnings"]

View File

@ -3,17 +3,5 @@ fn main() {
println!("cargo:rustc-env=PROFILE={}", std::env::var("PROFILE").unwrap()); println!("cargo:rustc-env=PROFILE={}", std::env::var("PROFILE").unwrap());
// Don't rebuild even if nothing changed // Don't rebuild even if nothing changed
println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=build.rs");
// forward git repo hashes we build at rustc_tools_util::setup_version_info!();
println!(
"cargo:rustc-env=GIT_HASH={}",
rustc_tools_util::get_commit_hash().unwrap_or_default()
);
println!(
"cargo:rustc-env=COMMIT_DATE={}",
rustc_tools_util::get_commit_date().unwrap_or_default()
);
println!(
"cargo:rustc-env=RUSTC_RELEASE_CHANNEL={}",
rustc_tools_util::get_channel()
);
} }

View File

@ -0,0 +1,6 @@
# Changelog
## Version 0.3.0
* Added `setup_version_info!();` macro for automated scripts.
* `get_version_info!()` no longer requires the user to import `rustc_tools_util::VersionInfo` and `std::env`

View File

@ -1,6 +1,6 @@
[package] [package]
name = "rustc_tools_util" name = "rustc_tools_util"
version = "0.2.1" version = "0.3.0"
description = "small helper to generate version information for git packages" description = "small helper to generate version information for git packages"
repository = "https://github.com/rust-lang/rust-clippy" repository = "https://github.com/rust-lang/rust-clippy"
readme = "README.md" readme = "README.md"

View File

@ -13,43 +13,39 @@ build = "build.rs"
List rustc_tools_util as regular AND build dependency. List rustc_tools_util as regular AND build dependency.
````toml ````toml
[dependencies] [dependencies]
rustc_tools_util = "0.2.1" rustc_tools_util = "0.3.0"
[build-dependencies] [build-dependencies]
rustc_tools_util = "0.2.1" rustc_tools_util = "0.3.0"
```` ````
In `build.rs`, generate the data in your `main()` In `build.rs`, generate the data in your `main()`
````rust
fn main() {
println!(
"cargo:rustc-env=GIT_HASH={}",
rustc_tools_util::get_commit_hash().unwrap_or_default()
);
println!(
"cargo:rustc-env=COMMIT_DATE={}",
rustc_tools_util::get_commit_date().unwrap_or_default()
);
println!(
"cargo:rustc-env=RUSTC_RELEASE_CHANNEL={}",
rustc_tools_util::get_channel().unwrap_or_default()
);
}
```` ```rust
fn main() {
rustc_tools_util::setup_version_info!();
}
```
Use the version information in your main.rs Use the version information in your main.rs
````rust
use rustc_tools_util::*;
```rust
fn show_version() { fn show_version() {
let version_info = rustc_tools_util::get_version_info!(); let version_info = rustc_tools_util::get_version_info!();
println!("{}", version_info); println!("{}", version_info);
} }
```` ```
This gives the following output in clippy:
`clippy 0.0.212 (a416c5e 2018-12-14)`
This gives the following output in clippy:
`clippy 0.1.66 (a28f3c8 2022-11-20)`
## Repository
This project is part of the rust-lang/rust-clippy repository. The source code
can be found under `./rustc_tools_util/`.
The changelog for `rustc_tools_util` is available under:
[`rustc_tools_util/CHANGELOG.md`](https://github.com/rust-lang/rust-clippy/blob/master/rustc_tools_util/CHANGELOG.md)
## License ## License

View File

@ -1,20 +1,20 @@
#![cfg_attr(feature = "deny-warnings", deny(warnings))] #![cfg_attr(feature = "deny-warnings", deny(warnings))]
use std::env; /// This macro creates the version string during compilation from the
/// current environment
#[macro_export] #[macro_export]
macro_rules! get_version_info { macro_rules! get_version_info {
() => {{ () => {{
let major = env!("CARGO_PKG_VERSION_MAJOR").parse::<u8>().unwrap(); let major = std::env!("CARGO_PKG_VERSION_MAJOR").parse::<u8>().unwrap();
let minor = env!("CARGO_PKG_VERSION_MINOR").parse::<u8>().unwrap(); let minor = std::env!("CARGO_PKG_VERSION_MINOR").parse::<u8>().unwrap();
let patch = env!("CARGO_PKG_VERSION_PATCH").parse::<u16>().unwrap(); let patch = std::env!("CARGO_PKG_VERSION_PATCH").parse::<u16>().unwrap();
let crate_name = String::from(env!("CARGO_PKG_NAME")); let crate_name = String::from(std::env!("CARGO_PKG_NAME"));
let host_compiler = option_env!("RUSTC_RELEASE_CHANNEL").map(str::to_string); let host_compiler = std::option_env!("RUSTC_RELEASE_CHANNEL").map(str::to_string);
let commit_hash = option_env!("GIT_HASH").map(str::to_string); let commit_hash = std::option_env!("GIT_HASH").map(str::to_string);
let commit_date = option_env!("COMMIT_DATE").map(str::to_string); let commit_date = std::option_env!("COMMIT_DATE").map(str::to_string);
VersionInfo { $crate::VersionInfo {
major, major,
minor, minor,
patch, patch,
@ -26,6 +26,24 @@ macro_rules! get_version_info {
}}; }};
} }
/// This macro can be used in `build.rs` to automatically set the needed
/// environment values, namely `GIT_HASH`, `COMMIT_DATE` and
/// `RUSTC_RELEASE_CHANNEL`
#[macro_export]
macro_rules! setup_version_info {
() => {{
println!(
"cargo:rustc-env=GIT_HASH={}",
$crate::get_commit_hash().unwrap_or_default()
);
println!(
"cargo:rustc-env=COMMIT_DATE={}",
$crate::get_commit_date().unwrap_or_default()
);
println!("cargo:rustc-env=RUSTC_RELEASE_CHANNEL={}", $crate::get_channel());
}};
}
// some code taken and adapted from RLS and cargo // some code taken and adapted from RLS and cargo
pub struct VersionInfo { pub struct VersionInfo {
pub major: u8, pub major: u8,
@ -101,7 +119,7 @@ pub fn get_commit_date() -> Option<String> {
#[must_use] #[must_use]
pub fn get_channel() -> String { pub fn get_channel() -> String {
match env::var("CFG_RELEASE_CHANNEL") { match std::env::var("CFG_RELEASE_CHANNEL") {
Ok(channel) => channel, Ok(channel) => channel,
Err(_) => { Err(_) => {
// if that failed, try to ask rustc -V, do some parsing and find out // if that failed, try to ask rustc -V, do some parsing and find out
@ -136,8 +154,8 @@ mod test {
fn test_struct_local() { fn test_struct_local() {
let vi = get_version_info!(); let vi = get_version_info!();
assert_eq!(vi.major, 0); assert_eq!(vi.major, 0);
assert_eq!(vi.minor, 2); assert_eq!(vi.minor, 3);
assert_eq!(vi.patch, 1); assert_eq!(vi.patch, 0);
assert_eq!(vi.crate_name, "rustc_tools_util"); assert_eq!(vi.crate_name, "rustc_tools_util");
// hard to make positive tests for these since they will always change // hard to make positive tests for these since they will always change
assert!(vi.commit_hash.is_none()); assert!(vi.commit_hash.is_none());
@ -147,7 +165,7 @@ fn test_struct_local() {
#[test] #[test]
fn test_display_local() { fn test_display_local() {
let vi = get_version_info!(); let vi = get_version_info!();
assert_eq!(vi.to_string(), "rustc_tools_util 0.2.1"); assert_eq!(vi.to_string(), "rustc_tools_util 0.3.0");
} }
#[test] #[test]
@ -156,7 +174,7 @@ fn test_debug_local() {
let s = format!("{vi:?}"); let s = format!("{vi:?}");
assert_eq!( assert_eq!(
s, s,
"VersionInfo { crate_name: \"rustc_tools_util\", major: 0, minor: 2, patch: 1 }" "VersionInfo { crate_name: \"rustc_tools_util\", major: 0, minor: 3, patch: 0 }"
); );
} }
} }

View File

@ -19,7 +19,6 @@
use rustc_interface::interface; use rustc_interface::interface;
use rustc_session::parse::ParseSess; use rustc_session::parse::ParseSess;
use rustc_span::symbol::Symbol; use rustc_span::symbol::Symbol;
use rustc_tools_util::VersionInfo;
use std::borrow::Cow; use std::borrow::Cow;
use std::env; use std::env;

View File

@ -2,7 +2,6 @@
// warn on lints, that are included in `rust-lang/rust`s bootstrap // warn on lints, that are included in `rust-lang/rust`s bootstrap
#![warn(rust_2018_idioms, unused_lifetimes)] #![warn(rust_2018_idioms, unused_lifetimes)]
use rustc_tools_util::VersionInfo;
use std::env; use std::env;
use std::path::PathBuf; use std::path::PathBuf;
use std::process::{self, Command}; use std::process::{self, Command};

View File

@ -2,7 +2,6 @@
#![warn(rust_2018_idioms, unused_lifetimes)] #![warn(rust_2018_idioms, unused_lifetimes)]
#![allow(clippy::single_match_else)] #![allow(clippy::single_match_else)]
use rustc_tools_util::VersionInfo;
use std::fs; use std::fs;
#[test] #[test]