continuwuity/src/macros/rustc.rs
Jade Ellis 910a3182f7
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Successful in 56s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m26s
Release Docker Image / Build linux-amd64 (release) (pull_request) Successful in 6m29s
Release Docker Image / Build linux-arm64 (release) (pull_request) Successful in 6m26s
Release Docker Image / Create Multi-arch Release Manifest (pull_request) Successful in 15s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 17m28s
Release Docker Image / Build linux-amd64 (max-perf) (pull_request) Successful in 14m29s
Release Docker Image / Build linux-arm64 (max-perf) (pull_request) Successful in 14m26s
Release Docker Image / Create Max-Perf Manifest (pull_request) Successful in 14s
Checks / Prek / Pre-commit & Formatting (push) Successful in 1m29s
Checks / Prek / Clippy and Cargo Tests (push) Has been cancelled
Documentation / Build and Deploy Documentation (push) Has been cancelled
Release Docker Image / Build linux-arm64 (release) (push) Has been cancelled
Release Docker Image / Build linux-amd64 (release) (push) Has been cancelled
Release Docker Image / Create Multi-arch Release Manifest (push) Has been cancelled
Release Docker Image / Build linux-amd64 (max-perf) (push) Has been cancelled
Release Docker Image / Build linux-arm64 (max-perf) (push) Has been cancelled
Release Docker Image / Create Max-Perf Manifest (push) Has been cancelled
fix: Prevent crash on process exit on MacOS
2025-10-26 17:42:08 +00:00

29 lines
820 B
Rust

use proc_macro::TokenStream;
use quote::quote;
pub(super) fn flags_capture(args: TokenStream) -> TokenStream {
let cargo_crate_name = std::env::var("CARGO_CRATE_NAME");
let crate_name = match cargo_crate_name.as_ref() {
| Err(_) => return args,
| Ok(crate_name) => crate_name.trim_start_matches("conduwuit_"),
};
let flag = std::env::args().collect::<Vec<_>>();
let flag_len = flag.len();
let ret = quote! {
pub static RUSTC_FLAGS: [&str; #flag_len] = [#( #flag ),*];
#[ctor]
fn _set_rustc_flags() {
conduwuit_core::info::rustc::FLAGS.lock().expect("locked").insert(#crate_name, &RUSTC_FLAGS);
}
// static strings have to be yanked on module unload
#[dtor]
fn _unset_rustc_flags() {
conduwuit_core::info::rustc::FLAGS.lock().expect("locked").remove(#crate_name);
}
};
ret.into()
}