15a5110d2SManos Pitsidianakis // Copyright 2024, Linaro Limited
25a5110d2SManos Pitsidianakis // Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
35a5110d2SManos Pitsidianakis // SPDX-License-Identifier: GPL-2.0-or-later
45a5110d2SManos Pitsidianakis
5cb7ada54SPaolo Bonzini #[cfg(unix)]
6cb7ada54SPaolo Bonzini use std::os::unix::fs::symlink as symlink_file;
7cb7ada54SPaolo Bonzini #[cfg(windows)]
8cb7ada54SPaolo Bonzini use std::os::windows::fs::symlink_file;
9cb7ada54SPaolo Bonzini use std::{env, fs::remove_file, io::Result, path::Path};
105a5110d2SManos Pitsidianakis
main() -> Result<()>11cb7ada54SPaolo Bonzini fn main() -> Result<()> {
12cb7ada54SPaolo Bonzini // Placing bindings.inc.rs in the source directory is supported
13cb7ada54SPaolo Bonzini // but not documented or encouraged.
14cb7ada54SPaolo Bonzini let path = env::var("MESON_BUILD_ROOT")
15cb7ada54SPaolo Bonzini .unwrap_or_else(|_| format!("{}/src", env!("CARGO_MANIFEST_DIR")));
16cb7ada54SPaolo Bonzini
17*c6b04613SPaolo Bonzini let file = format!("{path}/bindings.inc.rs");
18cb7ada54SPaolo Bonzini let file = Path::new(&file);
19cb7ada54SPaolo Bonzini if !Path::new(&file).exists() {
20cb7ada54SPaolo Bonzini panic!(concat!(
21cab1d0bcSPaolo Bonzini "\n",
22cab1d0bcSPaolo Bonzini " No generated C bindings found! Maybe you wanted one of\n",
23cab1d0bcSPaolo Bonzini " `make clippy`, `make rustfmt`, `make rustdoc`?\n",
24cab1d0bcSPaolo Bonzini "\n",
25cab1d0bcSPaolo Bonzini " For other uses of `cargo`, start a subshell with\n",
26cab1d0bcSPaolo Bonzini " `pyvenv/bin/meson devenv`, or point MESON_BUILD_ROOT to\n",
27cab1d0bcSPaolo Bonzini " the top of the build tree."
28cb7ada54SPaolo Bonzini ));
295a5110d2SManos Pitsidianakis }
30f3518400SJunjie Mao
31cb7ada54SPaolo Bonzini let out_dir = env::var("OUT_DIR").unwrap();
32*c6b04613SPaolo Bonzini let dest_path = format!("{out_dir}/bindings.inc.rs");
33cb7ada54SPaolo Bonzini let dest_path = Path::new(&dest_path);
34cb7ada54SPaolo Bonzini if dest_path.symlink_metadata().is_ok() {
35cb7ada54SPaolo Bonzini remove_file(dest_path)?;
36cb7ada54SPaolo Bonzini }
37cb7ada54SPaolo Bonzini symlink_file(file, dest_path)?;
38cb7ada54SPaolo Bonzini
39f3518400SJunjie Mao println!("cargo:rerun-if-changed=build.rs");
40cb7ada54SPaolo Bonzini Ok(())
415a5110d2SManos Pitsidianakis }
42