gcc-wrapper: parameterize setup-hook

The default setup-hook for gcc-wrapper adds include directories with
-isystem, which upsets the order -I flags are processed. This adds an
alternative setup-hook that only uses -I flags. The build system's
ordering of -I flags is then respected. This is important when different
packages provide includes with the same name, such as building packages
that depend on Qt4 and Qt5.
This commit is contained in:
Thomas Tuegel 2015-01-19 11:08:59 -06:00
parent bf3260a1b5
commit d927da8dae
3 changed files with 52 additions and 1 deletions

View File

@ -8,6 +8,7 @@
{ name ? "", stdenv, nativeTools, nativeLibc, nativePrefix ? ""
, gcc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? stdenv.shell
, zlib ? null, extraPackages ? []
, setupHook ? ./setup-hook.sh
}:
with stdenv.lib;
@ -199,7 +200,7 @@ stdenv.mkDerivation {
''
+ ''
substituteAll ${./setup-hook.sh} $out/nix-support/setup-hook
substituteAll ${setupHook} $out/nix-support/setup-hook
substituteAll ${./add-flags} $out/nix-support/add-flags.sh
cp -p ${./utils.sh} $out/nix-support/utils.sh

View File

@ -0,0 +1,38 @@
export NIX_CC=@out@
addCVars () {
if [ -d $1/include ]; then
export NIX_CFLAGS_COMPILE+=" -I $1/include"
fi
if [ -d $1/lib64 -a ! -L $1/lib64 ]; then
export NIX_LDFLAGS+=" -L$1/lib64"
fi
if [ -d $1/lib ]; then
export NIX_LDFLAGS+=" -L$1/lib"
fi
}
envHooks+=(addCVars)
# Note: these come *after* $out in the PATH (see setup.sh).
if [ -n "@gcc@" ]; then
addToSearchPath PATH @gcc@/bin
fi
if [ -n "@binutils@" ]; then
addToSearchPath PATH @binutils@/bin
fi
if [ -n "@libc@" ]; then
addToSearchPath PATH @libc@/bin
fi
if [ -n "@coreutils@" ]; then
addToSearchPath PATH @coreutils@/bin
fi
export CC=gcc
export CXX=g++

View File

@ -4087,6 +4087,18 @@ let
inherit stdenv gcc binutils libc shell name cross;
});
wrapGCCStdInc = glibc: baseGCC: (import ../build-support/gcc-wrapper) {
nativeTools = stdenv.cc.nativeTools or false;
nativeLibc = stdenv.cc.nativeLibc or false;
nativePrefix = stdenv.cc.nativePrefix or "";
gcc = baseGCC;
libc = glibc;
inherit stdenv binutils coreutils zlib;
setupHook = ../build-support/gcc-wrapper/setup-hook-stdinc.sh;
};
gccStdInc = wrapGCCStdInc glibc gcc.gcc;
# prolog
yap = callPackage ../development/compilers/yap { };