123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // 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(())
- }
|