From d927da8dae1c4ff0c492d41e00835cfd08ff84d7 Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Mon, 19 Jan 2015 11:08:59 -0600 Subject: [PATCH] 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. --- pkgs/build-support/gcc-wrapper/default.nix | 3 +- .../gcc-wrapper/setup-hook-stdinc.sh | 38 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 12 ++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 pkgs/build-support/gcc-wrapper/setup-hook-stdinc.sh diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix index aed1ab817aa..853a1b0717e 100644 --- a/pkgs/build-support/gcc-wrapper/default.nix +++ b/pkgs/build-support/gcc-wrapper/default.nix @@ -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 diff --git a/pkgs/build-support/gcc-wrapper/setup-hook-stdinc.sh b/pkgs/build-support/gcc-wrapper/setup-hook-stdinc.sh new file mode 100644 index 00000000000..b6a6673575b --- /dev/null +++ b/pkgs/build-support/gcc-wrapper/setup-hook-stdinc.sh @@ -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++ diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c2b480389e7..1f29eaefb0c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 { };