mirror of
https://github.com/qemu/qemu.git
synced 2025-08-06 11:19:49 +00:00

The build.rs had supported placing bindings.inc.rs in rust/qemu-api/src,
but this "not encouraged" feature is broken.
Considering that manually copying bindings.inc.rs to the development
directory is also useful, fix the bindings.inc.rs path generation to
give this feature another chance.
Fixes: commit 1ae4ca0463
("rust: move rust.bindgen to qemu-api crate")
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/r/20250623073436.1833357-1-zhao1.liu@intel.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
44 lines
1.5 KiB
Rust
44 lines
1.5 KiB
Rust
// Copyright 2024, Linaro Limited
|
|
// Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#[cfg(unix)]
|
|
use std::os::unix::fs::symlink as symlink_file;
|
|
#[cfg(windows)]
|
|
use std::os::windows::fs::symlink_file;
|
|
use std::{env, fs::remove_file, io::Result, path::Path};
|
|
|
|
fn main() -> Result<()> {
|
|
let file = if let Ok(root) = env::var("MESON_BUILD_ROOT") {
|
|
format!("{root}/rust/qemu-api/bindings.inc.rs")
|
|
} else {
|
|
// Placing bindings.inc.rs in the source directory is supported
|
|
// but not documented or encouraged.
|
|
format!("{}/src/bindings.inc.rs", env!("CARGO_MANIFEST_DIR"))
|
|
};
|
|
|
|
let file = Path::new(&file);
|
|
if !Path::new(&file).exists() {
|
|
panic!(concat!(
|
|
"\n",
|
|
" No generated C bindings found! Maybe you wanted one of\n",
|
|
" `make clippy`, `make rustfmt`, `make rustdoc`?\n",
|
|
"\n",
|
|
" For other uses of `cargo`, start a subshell with\n",
|
|
" `pyvenv/bin/meson devenv`, or point MESON_BUILD_ROOT to\n",
|
|
" the top of the build tree."
|
|
));
|
|
}
|
|
|
|
let out_dir = env::var("OUT_DIR").unwrap();
|
|
let dest_path = format!("{out_dir}/bindings.inc.rs");
|
|
let dest_path = Path::new(&dest_path);
|
|
if dest_path.symlink_metadata().is_ok() {
|
|
remove_file(dest_path)?;
|
|
}
|
|
symlink_file(file, dest_path)?;
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
Ok(())
|
|
}
|