cc-wrapper: fix on darwin
The ld-wrapper.sh script calls `readlink` in some circumstances. We need to ensure that this is the `readlink` from the `coreutils` package so that flag support is as expected. This is accomplished by explicitly setting PATH at the top of each shell script. Without doing this, the following happens with a trivial `main.c`: ``` nix-env -f "<nixpkgs>" -iA pkgs.clang $ clang main.c -L /nix/../nix/store/2ankvagznq062x1gifpxwkk7fp3xwy63-xnu-2422.115.4/Library -o a.out readlink: illegal option -- f usage: readlink [-n] [file ...] ``` The key element is the `..` in the path supplied to the linker via a `-L` flag. With this patch, the above invocation works correctly on darwin, whose native `/usr/bin/readlink` does not support the `-f` flag. The explicit path also ensures that the `grep` called by `cc-wrapper.sh` is the one from Nix. Fixes #6447
This commit is contained in:
parent
322a691377
commit
d96893647d
@ -1,4 +1,8 @@
|
||||
#! @shell@ -e
|
||||
path_backup=$PATH
|
||||
if [ -n "@coreutils@" ]; then
|
||||
PATH="@coreutils@/bin:@gnugrep@/bin"
|
||||
fi
|
||||
|
||||
if [ -n "$NIX_CC_WRAPPER_START_HOOK" ]; then
|
||||
source "$NIX_CC_WRAPPER_START_HOOK"
|
||||
@ -141,4 +145,5 @@ if [ -n "$NIX_CC_WRAPPER_EXEC_HOOK" ]; then
|
||||
source "$NIX_CC_WRAPPER_EXEC_HOOK"
|
||||
fi
|
||||
|
||||
PATH=$path_backup
|
||||
exec @prog@ ${extraBefore[@]} "${params[@]}" "${extraAfter[@]}"
|
||||
|
@ -9,13 +9,14 @@
|
||||
, cc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? stdenv.shell
|
||||
, zlib ? null, extraPackages ? [], extraBuildCommands ? ""
|
||||
, dyld ? null # TODO: should this be a setup-hook on dyld?
|
||||
, isGNU ? false, isClang ? cc.isClang or false
|
||||
, isGNU ? false, isClang ? cc.isClang or false, gnugrep ? null
|
||||
}:
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
assert nativeTools -> nativePrefix != "";
|
||||
assert !nativeTools -> cc != null && binutils != null && coreutils != null;
|
||||
assert !nativeTools ->
|
||||
cc != null && binutils != null && coreutils != null && gnugrep != null;
|
||||
assert !nativeLibc -> libc != null;
|
||||
|
||||
# For ghdl (the vhdl language provider to gcc) we need zlib in the wrapper.
|
||||
@ -37,9 +38,11 @@ stdenv.mkDerivation {
|
||||
|
||||
inherit cc shell;
|
||||
libc = if nativeLibc then null else libc;
|
||||
binutils = if nativeTools then null else binutils;
|
||||
# The wrapper scripts use 'cat', so we may need coreutils.
|
||||
coreutils = if nativeTools then null else coreutils;
|
||||
binutils = if nativeTools then "" else binutils;
|
||||
# The wrapper scripts use 'cat' and 'grep', so we may need coreutils
|
||||
# and gnugrep.
|
||||
coreutils = if nativeTools then "" else coreutils;
|
||||
gnugrep = if nativeTools then "" else gnugrep;
|
||||
|
||||
passthru = { inherit nativeTools nativeLibc nativePrefix isGNU isClang; };
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
#! @shell@ -e
|
||||
path_backup=$PATH
|
||||
if [ -n "@coreutils@" ]; then
|
||||
PATH="@coreutils@/bin"
|
||||
fi
|
||||
|
||||
if [ -n "$NIX_GNAT_WRAPPER_START_HOOK" ]; then
|
||||
source "$NIX_GNAT_WRAPPER_START_HOOK"
|
||||
@ -100,4 +104,5 @@ if [ -n "$NIX_GNAT_WRAPPER_EXEC_HOOK" ]; then
|
||||
source "$NIX_GNAT_WRAPPER_EXEC_HOOK"
|
||||
fi
|
||||
|
||||
PATH=$path_backup
|
||||
exec @prog@ ${extraBefore[@]} "${params[@]}" ${extraAfter[@]}
|
||||
|
@ -1,4 +1,8 @@
|
||||
#! @shell@ -e
|
||||
path_backup=$PATH
|
||||
if [ -n "@coreutils@" ]; then
|
||||
PATH="@coreutils@/bin"
|
||||
fi
|
||||
|
||||
if [ -n "$NIX_LD_WRAPPER_START_HOOK" ]; then
|
||||
source "$NIX_LD_WRAPPER_START_HOOK"
|
||||
@ -163,4 +167,5 @@ if [ -n "$NIX_LD_WRAPPER_EXEC_HOOK" ]; then
|
||||
source "$NIX_LD_WRAPPER_EXEC_HOOK"
|
||||
fi
|
||||
|
||||
PATH=$path_backup
|
||||
exec @prog@ ${extraBefore[@]} "${params[@]}" ${extra[@]}
|
||||
|
@ -278,7 +278,7 @@ in rec {
|
||||
inherit stdenv shell;
|
||||
nativeTools = false;
|
||||
nativeLibc = false;
|
||||
inherit (pkgs) coreutils binutils;
|
||||
inherit (pkgs) coreutils binutils gnugrep;
|
||||
inherit (pkgs.darwin) dyld;
|
||||
cc = pkgs.llvmPackages.clang-unwrapped;
|
||||
libc = pkgs.darwin.Libsystem;
|
||||
|
Loading…
Reference in New Issue
Block a user