libelf: fix build with clang 16 on Darwin
Clang 16 does not allow `main` with an implicit `int`, which causes the configure script to misdetect clang as a non-working compiler. Patching `configure.in` and regenerating `configure` allows libelf to build. Due to the comment regarding bootstrap tools, this patching is only done on Darwin with clang.
This commit is contained in:
parent
323e9a44c2
commit
9cd4e84a4d
|
@ -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";
|
||||
|
|
12
pkgs/development/libraries/libelf/fix-configure-main.patch
Normal file
12
pkgs/development/libraries/libelf/fix-configure-main.patch
Normal file
|
@ -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);
|
Loading…
Reference in a new issue