mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-09-20 04:19:00 +02:00
libredirect: fix build with clang 16
* Preferentially use the stdenv clang if it is new enough to produce arm64e binaries; and * Fix incompatible function pointer conversions (results in an error with clang 16).
This commit is contained in:
parent
97e4060597
commit
d02150a783
|
@ -1,5 +1,12 @@
|
|||
{ lib, stdenv, bintools-unwrapped, llvmPackages_13, coreutils }:
|
||||
{ lib, stdenv, bintools-unwrapped, llvmPackages, llvmPackages_13, coreutils }:
|
||||
|
||||
let
|
||||
# aarch64-darwin needs a clang that can build arm64e binaries, so make sure a version of LLVM
|
||||
# is used that can do that, but prefer the stdenv one if it is new enough.
|
||||
llvmPkgs = if (lib.versionAtLeast (lib.getVersion llvmPackages.clang) "13")
|
||||
then llvmPackages
|
||||
else llvmPackages_13;
|
||||
in
|
||||
if stdenv.hostPlatform.isStatic
|
||||
then throw ''
|
||||
libredirect is not available on static builds.
|
||||
|
@ -39,11 +46,11 @@ else stdenv.mkDerivation rec {
|
|||
# and the library search directory for libdl.
|
||||
# We can't build this on x86_64, because the libSystem we point to doesn't
|
||||
# like arm64(e).
|
||||
PATH=${bintools-unwrapped}/bin:${llvmPackages_13.clang-unwrapped}/bin:$PATH \
|
||||
PATH=${bintools-unwrapped}/bin:${llvmPkgs.clang-unwrapped}/bin:$PATH \
|
||||
clang -arch x86_64 -arch arm64 -arch arm64e \
|
||||
-isystem ${llvmPackages_13.clang.libc}/include \
|
||||
-isystem ${llvmPackages_13.libclang.lib}/lib/clang/*/include \
|
||||
-L${llvmPackages_13.clang.libc}/lib \
|
||||
-isystem ${llvmPkgs.clang.libc}/include \
|
||||
-isystem ${llvmPkgs.libclang.lib}/lib/clang/*/include \
|
||||
-L${llvmPkgs.clang.libc}/lib \
|
||||
-Wl,-install_name,$libName \
|
||||
-Wall -std=c99 -O3 -fPIC libredirect.c \
|
||||
-shared -o "$libName"
|
||||
|
|
|
@ -106,7 +106,7 @@ static int open_needs_mode(int flags)
|
|||
|
||||
WRAPPER(int, open)(const char * path, int flags, ...)
|
||||
{
|
||||
int (*open_real) (const char *, int, mode_t) = LOOKUP_REAL(open);
|
||||
int (*open_real) (const char *, int, ...) = LOOKUP_REAL(open);
|
||||
mode_t mode = 0;
|
||||
if (open_needs_mode(flags)) {
|
||||
va_list ap;
|
||||
|
@ -139,7 +139,7 @@ WRAPPER_DEF(open64)
|
|||
|
||||
WRAPPER(int, openat)(int dirfd, const char * path, int flags, ...)
|
||||
{
|
||||
int (*openat_real) (int, const char *, int, mode_t) = LOOKUP_REAL(openat);
|
||||
int (*openat_real) (int, const char *, int, ...) = LOOKUP_REAL(openat);
|
||||
mode_t mode = 0;
|
||||
if (open_needs_mode(flags)) {
|
||||
va_list ap;
|
||||
|
|
Loading…
Reference in a new issue