about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/libelf
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libelf')
-rw-r--r--nixpkgs/pkgs/development/libraries/libelf/default.nix10
-rw-r--r--nixpkgs/pkgs/development/libraries/libelf/fix-configure-main.patch12
2 files changed, 21 insertions, 1 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libelf/default.nix b/nixpkgs/pkgs/development/libraries/libelf/default.nix
index 3302d127d4d3..0a1a7175296e 100644
--- a/nixpkgs/pkgs/development/libraries/libelf/default.nix
+++ b/nixpkgs/pkgs/development/libraries/libelf/default.nix
@@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
     # Fix warnings from preprocessor instructions.
     # https://github.com/NixOS/nixpkgs/issues/59929
     ./preprocessor-warnings.patch
+    # `configure` defines a test `main` with an implicit `int` return, which clang 16 disallows.
+    ./fix-configure-main.patch
   ];
 
   enableParallelBuilding = true;
@@ -55,7 +57,13 @@ stdenv.mkDerivation rec {
        # cross-compiling, but `autoreconfHook` brings in `makeWrapper` which
        # doesn't work with the bootstrapTools bash, so can only do this for
        # cross builds when `stdenv.shell` is a newer bash.
-    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) autoreconfHook;
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform
+       # The provided `configure` script fails on clang 16 because some tests have a `main`
+       # returning an implicit `int`, which clang 16 treats as an error. Running `autoreconf` fixes
+       # the test and allows `configure` to detect clang properly.
+       # This is done only for clang on Darwin because the Darwin stdenv bootstrap does not use
+       # libelf, so should be safe because it will always be run with a compatible version of bash.
+       || (stdenv.cc.isClang && stdenv.isDarwin)) autoreconfHook;
 
   meta = {
     description = "ELF object file access library";
diff --git a/nixpkgs/pkgs/development/libraries/libelf/fix-configure-main.patch b/nixpkgs/pkgs/development/libraries/libelf/fix-configure-main.patch
new file mode 100644
index 000000000000..cc7e5f4c41d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libelf/fix-configure-main.patch
@@ -0,0 +1,12 @@
+diff -ur a/configure.in b/configure.in
+--- a/configure.in	2008-05-23 04:17:56.000000000 -0400
++++ b/configure.in	2023-06-01 19:16:04.801921924 -0400
+@@ -282,7 +282,7 @@
+ #define memmove(d,s,n) bcopy((s),(d),(n))
+ #endif
+ extern int strcmp();
+-main() {
++int main() {
+   char buf[] = "0123456789";
+   memmove(buf + 1, buf, 9);
+   if (strcmp(buf, "0012345678")) exit(1);