From e005f4cad598c7278dfcef52ac7cbe1203c963f2 Mon Sep 17 00:00:00 2001
From: Josh Triplett <josh@joshtriplett.org>
Date: Sat, 19 Sep 2020 20:38:54 -0700
Subject: [PATCH] Consolidate handling of libutil, and handle crt-static

The two library blocks that specify `#[link(name = "util")]` do not
actually reference any functions in `libutil`; the functions that do use
`libutil` don't have any reference to it. And having two library blocks
specify it results in two separate inclusions of `-lutil` on the linker
command line. Move the link lines up to `src/unix/mod.rs`, making it
easier to see all the libraries `libc` links to.

This also makes `libutil` respect `target-feature=+crt-static`.
---
 src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs | 1 -
 src/unix/linux_like/linux/gnu/mod.rs                | 1 -
 src/unix/mod.rs                                     | 3 +++
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
index 64a6de9c..56170c4e 100644
--- a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
+++ b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
@@ -410,7 +410,6 @@ pub const SYS_pkey_alloc: ::c_long = 330;
 pub const SYS_pkey_free: ::c_long = 331;
 pub const SYS_statx: ::c_long = 332;
 
-#[link(name = "util")]
 extern "C" {
     pub fn sysctl(
         name: *mut ::c_int,
diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs
index 44232e98..9ea34dec 100644
--- a/src/unix/linux_like/linux/gnu/mod.rs
+++ b/src/unix/linux_like/linux/gnu/mod.rs
@@ -1362,7 +1362,6 @@ extern "C" {
     ) -> ::c_int;
 }
 
-#[link(name = "util")]
 extern "C" {
     pub fn ioctl(fd: ::c_int, request: ::c_ulong, ...) -> ::c_int;
     pub fn backtrace(buf: *mut *mut ::c_void, sz: ::c_int) -> ::c_int;
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 3b2cc3f2..32e8d932 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -301,6 +301,8 @@ cfg_if! {
     } else if #[cfg(all(target_os = "linux",
                         target_env = "gnu",
                         feature = "rustc-dep-of-std"))] {
+        #[link(name = "util", kind = "static-nobundle",
+            cfg(target_feature = "crt-static"))]
         #[link(name = "rt", kind = "static-nobundle",
             cfg(target_feature = "crt-static"))]
         #[link(name = "pthread", kind = "static-nobundle",
@@ -313,6 +315,7 @@ cfg_if! {
             cfg(target_feature = "crt-static"))]
         #[link(name = "gcc", kind = "static-nobundle",
             cfg(target_feature = "crt-static"))]
+        #[link(name = "util", cfg(not(target_feature = "crt-static")))]
         #[link(name = "rt", cfg(not(target_feature = "crt-static")))]
         #[link(name = "pthread", cfg(not(target_feature = "crt-static")))]
         #[link(name = "m", cfg(not(target_feature = "crt-static")))]
-- 
GitLab