XMPP reverse proxy and outgoing proxy
https://github.com/moparisthebest/xmpp-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
use std::{env, fs::File, io::Write, path::Path}; |
|
|
|
fn main() { |
|
println!("cargo:rerun-if-changed=build.rs"); |
|
|
|
let out_dir = env::var_os("OUT_DIR").unwrap(); |
|
let dest_path = Path::new(&out_dir).join("version.rs"); |
|
|
|
let mut w = File::create(dest_path).unwrap(); |
|
|
|
let allowed_features = [ |
|
"c2s-incoming", |
|
"c2s-outgoing", |
|
"s2s-incoming", |
|
"s2s-outgoing", |
|
"tls", |
|
"quic", |
|
"websocket", |
|
"tls-ca-roots-native", |
|
"tls-ca-roots-bundled", |
|
"logging", |
|
"systemd", |
|
]; |
|
let optional_deps = [ |
|
"rustls", |
|
"tokio-rustls", |
|
"rustls-pemfile", |
|
"quinn", |
|
"tokio-tungstenite", |
|
"futures-util", |
|
"trust-dns-resolver", |
|
"reqwest", |
|
"lazy-static", |
|
"rustls-native-certs", |
|
"webpki-roots", |
|
"env-logger", |
|
"rand", |
|
"nix", |
|
]; |
|
let mut features = Vec::new(); |
|
let mut optional = Vec::new(); |
|
for (mut key, value) in env::vars() { |
|
//writeln!(&mut w, "{key}: {value}", ).unwrap(); |
|
if value == "1" && key.starts_with("CARGO_FEATURE_") { |
|
let mut key = key.split_off(14).replace('_', "-"); |
|
key.make_ascii_lowercase(); |
|
if allowed_features.contains(&key.as_str()) { |
|
features.push(key); |
|
} else if optional_deps.contains(&key.as_str()) { |
|
optional.push(key); |
|
} |
|
} |
|
} |
|
features.sort_by(|a, b| { |
|
allowed_features |
|
.iter() |
|
.position(|&r| r == a) |
|
.unwrap() |
|
.partial_cmp(&allowed_features.iter().position(|&r| r == b).unwrap()) |
|
.unwrap() |
|
}); |
|
optional.sort_by(|a, b| { |
|
optional_deps |
|
.iter() |
|
.position(|&r| r == a) |
|
.unwrap() |
|
.partial_cmp(&optional_deps.iter().position(|&r| r == b).unwrap()) |
|
.unwrap() |
|
}); |
|
let features = features.join(","); |
|
let optional = optional.join(","); |
|
|
|
let name = env!("CARGO_PKG_NAME"); |
|
let version = env!("CARGO_PKG_VERSION"); |
|
|
|
let target = env::var("TARGET").unwrap(); |
|
|
|
writeln!( |
|
&mut w, |
|
"{{println!( |
|
\"{name} {version} ({target}) |
|
Features: {features} |
|
Optional crates: {optional}\");}}" |
|
) |
|
.unwrap(); |
|
}
|
|
|