extern crate wayland_scanner;
use std::env::var;
use std::path::Path;
use wayland_scanner::*;
#[rustfmt::skip]
type StableProtocol<'a> = (&'a str, &'a [(&'a str, &'a str)]);
static STABLE_PROTOCOLS: &[StableProtocol] =
&[("gamescope-pipewire", &[]), ("gamescope-xwayland", &[]), ("gamescope-input-method", &[])];
fn generate_protocol(
name: &str,
protocol_file: &Path,
out_dir: &Path,
client: bool,
server: bool,
dest_events: &[(&str, &str)],
) {
println!("cargo:rerun-if-changed={}", protocol_file.display());
if client {
generate_code_with_destructor_events(
&protocol_file,
out_dir.join(&format!("{}_client_api.rs", name)),
Side::Client,
dest_events,
);
}
if server {
generate_code_with_destructor_events(
&protocol_file,
out_dir.join(&format!("{}_server_api.rs", name)),
Side::Server,
dest_events,
);
}
}
fn main() {
println!("cargo:rerun-if-changed-env=CARGO_FEATURE_CLIENT");
println!("cargo:rerun-if-changed-env=CARGO_FEATURE_SERVER");
let out_dir_str = var("OUT_DIR").unwrap();
let out_dir = Path::new(&out_dir_str);
let client = var("CARGO_FEATURE_CLIENT").ok().is_some();
let server = var("CARGO_FEATURE_SERVER").ok().is_some();
for &(name, dest_events) in STABLE_PROTOCOLS {
let file = format!("{name}.xml", name = name);
generate_protocol(
name,
&Path::new("./gamescope/protocol/").join(&file),
out_dir,
client,
server,
dest_events,
);
}
}