151 lines
4.8 KiB
Rust
151 lines
4.8 KiB
Rust
|
extern crate wayland_scanner;
|
||
|
|
||
|
use std::env::var;
|
||
|
use std::path::Path;
|
||
|
use wayland_scanner::*;
|
||
|
|
||
|
type StableProtocol<'a> = (&'a str, &'a [(&'a str, &'a str)]);
|
||
|
type UnstableProtocol<'a> = (&'a str, &'a [(&'a str, &'a [(&'a str, &'a str)])]);
|
||
|
|
||
|
static STABLE_PROTOCOLS: &[StableProtocol] =
|
||
|
&[("presentation-time", &[]), ("viewporter", &[]), ("xdg-shell", &[])];
|
||
|
|
||
|
static UNSTABLE_PROTOCOLS: &[UnstableProtocol] = &[
|
||
|
("fullscreen-shell", &[("v1", &[])]),
|
||
|
("idle-inhibit", &[("v1", &[])]),
|
||
|
("input-method", &[("v1", &[])]),
|
||
|
("input-timestamps", &[("v1", &[])]),
|
||
|
("keyboard-shortcuts-inhibit", &[("v1", &[])]),
|
||
|
("linux-dmabuf", &[("v1", &[])]),
|
||
|
(
|
||
|
"linux-explicit-synchronization",
|
||
|
&[(
|
||
|
"v1",
|
||
|
&[
|
||
|
("zwp_linux_buffer_release_v1", "fenced_release"),
|
||
|
("zwp_linux_buffer_release_v1", "immediate_release"),
|
||
|
],
|
||
|
)],
|
||
|
),
|
||
|
("pointer-constraints", &[("v1", &[])]),
|
||
|
("pointer-gestures", &[("v1", &[])]),
|
||
|
("primary-selection", &[("v1", &[])]),
|
||
|
("relative-pointer", &[("v1", &[])]),
|
||
|
("tablet", &[("v1", &[]), ("v2", &[])]),
|
||
|
("text-input", &[("v1", &[]), ("v3", &[])]),
|
||
|
("xdg-decoration", &[("v1", &[])]),
|
||
|
("xdg-foreign", &[("v1", &[]), ("v2", &[])]),
|
||
|
("xdg-output", &[("v1", &[])]),
|
||
|
("xdg-shell", &[("v5", &[]), ("v6", &[])]),
|
||
|
("xwayland-keyboard-grab", &[("v1", &[])]),
|
||
|
];
|
||
|
|
||
|
static WLR_UNSTABLE_PROTOCOLS: &[UnstableProtocol] = &[
|
||
|
("wlr-data-control", &[("v1", &[])]),
|
||
|
("wlr-export-dmabuf", &[("v1", &[])]),
|
||
|
("wlr-foreign-toplevel-management", &[("v1", &[])]),
|
||
|
("wlr-gamma-control", &[("v1", &[])]),
|
||
|
("wlr-input-inhibitor", &[("v1", &[])]),
|
||
|
("wlr-layer-shell", &[("v1", &[])]),
|
||
|
("wlr-output-management", &[("v1", &[])]),
|
||
|
("wlr-output-power-management", &[("v1", &[])]),
|
||
|
("wlr-screencopy", &[("v1", &[])]),
|
||
|
("wlr-virtual-pointer", &[("v1", &[])]),
|
||
|
];
|
||
|
|
||
|
static MISC_PROTOCOLS: &[StableProtocol] = &[("gtk-primary-selection", &[])];
|
||
|
|
||
|
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");
|
||
|
println!("cargo:rerun-if-changed-env=CARGO_FEATURE_UNSTABLE_PROTOCOLS");
|
||
|
|
||
|
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}/{name}.xml", name = name);
|
||
|
generate_protocol(
|
||
|
name,
|
||
|
&Path::new("./protocols/stable").join(&file),
|
||
|
out_dir,
|
||
|
client,
|
||
|
server,
|
||
|
dest_events,
|
||
|
);
|
||
|
}
|
||
|
|
||
|
for &(name, dest_events) in MISC_PROTOCOLS {
|
||
|
let file = format!("{name}.xml", name = name);
|
||
|
generate_protocol(
|
||
|
name,
|
||
|
&Path::new("./misc").join(&file),
|
||
|
out_dir,
|
||
|
client,
|
||
|
server,
|
||
|
dest_events,
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if var("CARGO_FEATURE_UNSTABLE_PROTOCOLS").ok().is_some() {
|
||
|
for &(name, versions) in UNSTABLE_PROTOCOLS {
|
||
|
for &(version, dest_events) in versions {
|
||
|
let file =
|
||
|
format!("{name}/{name}-unstable-{version}.xml", name = name, version = version);
|
||
|
generate_protocol(
|
||
|
&format!("{name}-{version}", name = name, version = version),
|
||
|
&Path::new("./protocols/unstable").join(file),
|
||
|
out_dir,
|
||
|
client,
|
||
|
server,
|
||
|
dest_events,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
for &(name, versions) in WLR_UNSTABLE_PROTOCOLS {
|
||
|
for &(version, dest_events) in versions {
|
||
|
let file = format!("{name}-unstable-{version}.xml", name = name, version = version);
|
||
|
generate_protocol(
|
||
|
&format!("{name}-{version}", name = name, version = version),
|
||
|
&Path::new("./wlr-protocols/unstable").join(file),
|
||
|
out_dir,
|
||
|
client,
|
||
|
server,
|
||
|
dest_events,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|