From 5f589d8d5de328e6831188c44b26f0ad17fe4ea0 Mon Sep 17 00:00:00 2001 From: Ben Hipple Date: Tue, 26 Nov 2019 00:55:16 +0000 Subject: [PATCH] stdenv: Fix gcc -idirafter shell glob in cc-wrapper If an empty string is passed to `-idirafter`, it breaks gcc. This commit makes the stdenv less fragile by expanding out the shell glob and ensuring no empty arguments get passed. --- pkgs/build-support/cc-wrapper/default.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 2c35fdb1a3c..32501a1ffeb 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -235,7 +235,7 @@ stdenv.mkDerivation { fi '' - + optionalString (libc != null) '' + + optionalString (libc != null) ('' ## ## General libc support ## @@ -251,11 +251,17 @@ stdenv.mkDerivation { # compile, because it uses "#include_next " to find the # limits.h file in ../includes-fixed. To remedy the problem, # another -idirafter is necessary to add that directory again. - echo "-B${libc_lib}${libc.libdir or "/lib/"} -idirafter ${libc_dev}${libc.incdir or "/include"} ${optionalString isGNU "-idirafter ${cc}/lib/gcc/*/*/include-fixed"}" > $out/nix-support/libc-cflags + echo "-B${libc_lib}${libc.libdir or "/lib/"}" >> $out/nix-support/libc-cflags + echo "-idirafter ${libc_dev}${libc.incdir or "/include"}" >> $out/nix-support/libc-cflags + '' + optionalString isGNU '' + for dir in "${cc}"/lib/gcc/*/*/include-fixed; do + echo '-idirafter' ''${dir} >> $out/nix-support/libc-cflags + done + '' + '' echo "${libc_lib}" > $out/nix-support/orig-libc echo "${libc_dev}" > $out/nix-support/orig-libc-dev - '' + '') + optionalString (!nativeTools) '' ##