// Copyright 2024, Linaro Limited // Author(s): Manos Pitsidianakis // 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}; use version_check as rustc; fn main() -> Result<()> { // Placing bindings.inc.rs in the source directory is supported // but not documented or encouraged. let path = env::var("MESON_BUILD_ROOT") .unwrap_or_else(|_| format!("{}/src", env!("CARGO_MANIFEST_DIR"))); let file = format!("{}/bindings.inc.rs", path); 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!("{}/bindings.inc.rs", out_dir); let dest_path = Path::new(&dest_path); if dest_path.symlink_metadata().is_ok() { remove_file(dest_path)?; } symlink_file(file, dest_path)?; // Check for available rustc features if rustc::is_min_version("1.77.0").unwrap_or(false) { println!("cargo:rustc-cfg=has_offset_of"); } println!("cargo:rerun-if-changed=build.rs"); Ok(()) }