From cd87d38e728c527aea6ab8b8038a28dfa499a4eb Mon Sep 17 00:00:00 2001 From: Chris Frantz Date: Fri, 10 Dec 2021 15:31:46 -0800 Subject: [PATCH 1/3] Use the cargo-supplied RUSTC environment variable. When executing build scripts, [cargo sets several environment variables](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts). Use the cargo-supplied value for `RUSTC`. This _also_ allows `libudev-sys` to be build by [bazel](https://bazel.build) using rules created by `cargo raze`. Signed-off-by: Chris Frantz --- build.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 20cf4a0..3b6adc5 100644 --- a/build.rs +++ b/build.rs @@ -25,7 +25,8 @@ fn check_func(function_name: &str) -> bool { writeln!(&mut test_file, "}}").unwrap(); } - let output = Command::new("rustc"). + let rustc = env::var("RUSTC").unwrap(); + let output = Command::new(rustc). arg(&test_file_name). arg("--out-dir").arg(&out_dir). arg("-l").arg("udev"). From 220890f832a5b82416dc0c2a3ff02004af439050 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Tue, 21 Nov 2023 19:45:29 +0100 Subject: [PATCH 2/3] correctly cross compile in buildscript --- build.rs | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/build.rs b/build.rs index 3b6adc5..08f1349 100644 --- a/build.rs +++ b/build.rs @@ -7,7 +7,7 @@ use std::process::Command; use std::io::prelude::*; -fn check_func(function_name: &str) -> bool { +fn check_func(function_name: &str, lib: pkg_config::Library) -> bool { let out_dir = env::var_os("OUT_DIR").unwrap(); let test_file_name = Path::new(&out_dir).join(format!("check_{}.rs", function_name)); @@ -24,21 +24,54 @@ fn check_func(function_name: &str) -> bool { writeln!(&mut test_file, " }}").unwrap(); writeln!(&mut test_file, "}}").unwrap(); } - let rustc = env::var("RUSTC").unwrap(); - let output = Command::new(rustc). - arg(&test_file_name). - arg("--out-dir").arg(&out_dir). - arg("-l").arg("udev"). - output().unwrap(); + let mut cmd = Command::new(rustc); + + cmd.arg(&test_file_name).arg("--out-dir").arg(&out_dir); + + for path in lib.link_paths { + cmd.arg("-L").arg(path); + } - output.status.success() + for lib in lib.libs { + cmd.arg("-l").arg(lib); + } + + cmd.args(["--target", &std::env::var("TARGET").unwrap()]); + cmd.args([ + "-C", + &format!("linker={}", std::env::var("RUSTC_LINKER").unwrap()), + ]); + + let output = cmd.output().unwrap(); + if !output.status.success() { + println!( + "cargo:warning=Failed to compile test program for udev function `{}`", + function_name + ); + println!("cargo:warning=Using command`{:?}`", cmd); + println!( + "cargo:warning=stdout={}", + String::from_utf8_lossy(&output.stdout) + .trim() + .replace("\n", "\ncargo:warning=") + ); + println!( + "cargo:warning=stderr={}", + String::from_utf8_lossy(&output.stderr) + .trim() + .replace("\n", "\ncargo:warning=") + ); + false + } else { + true + } } fn main() { - pkg_config::find_library("libudev").unwrap(); + let lib = pkg_config::probe_library("libudev").unwrap(); - if check_func("udev_hwdb_new") { + if check_func("udev_hwdb_new", lib) { println!("cargo:rustc-cfg=hwdb"); println!("cargo:hwdb=true"); } From 808a604d27d0afc1305bbcc5d27c6c083c99dfa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Wed, 22 Nov 2023 10:42:07 +0100 Subject: [PATCH 3/3] don't set linker unless it's been specified --- build.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/build.rs b/build.rs index 08f1349..ad1c05b 100644 --- a/build.rs +++ b/build.rs @@ -38,10 +38,9 @@ fn check_func(function_name: &str, lib: pkg_config::Library) -> bool { } cmd.args(["--target", &std::env::var("TARGET").unwrap()]); - cmd.args([ - "-C", - &format!("linker={}", std::env::var("RUSTC_LINKER").unwrap()), - ]); + if let Ok(linker) = std::env::var("RUSTC_LINKER") { + cmd.args(["-C", &format!("linker={linker}")]); + } let output = cmd.output().unwrap(); if !output.status.success() { @@ -54,13 +53,13 @@ fn check_func(function_name: &str, lib: pkg_config::Library) -> bool { "cargo:warning=stdout={}", String::from_utf8_lossy(&output.stdout) .trim() - .replace("\n", "\ncargo:warning=") + .replace('\n', "\ncargo:warning=") ); println!( "cargo:warning=stderr={}", String::from_utf8_lossy(&output.stderr) .trim() - .replace("\n", "\ncargo:warning=") + .replace('\n', "\ncargo:warning=") ); false } else { @@ -74,8 +73,7 @@ fn main() { if check_func("udev_hwdb_new", lib) { println!("cargo:rustc-cfg=hwdb"); println!("cargo:hwdb=true"); - } - else { + } else { println!("cargo:hwdb=false"); } }