48 lines
1.6 KiB
Rust
48 lines
1.6 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};
|
|
|
|
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(())
|
|
}
|