Boot GHC's libffi installation path leaks into stage1 build
Starting yesterday, I'm having problems building GHC from a nix-shell --pure https://github.com/alpmestan/ghc.nix/archive/master.tar.gz
.
Build comes to a halt after/while configuring the RTS, because it can't find libffi.h in a global nix store installation that I can't find anywhere in my env
. That nix-store path certainly exists and has an installation of libffi
, but without an include path (probably since recently, haven't had problems before).
After some debugging, I figured out that this path leaks in through ghc-cabal
crawling through the Package DB of the host GHC. These are the libraries it finds out about this way (dumped by inserting putStrLn (unlines (forDeps Installed.includeDirs))
in line 388 of utils/ghc-cabal/Main.hs
:
/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/base-4.12.0.0/include
/nix/store/5c9pfgazxid22ik3smh8zi805cp1i03y-gmp-6.1.2-dev/include
/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/integer-gmp-1.0.2.0/include
/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/include
/nix/store/karxq4hlfmfj0c3yk4wv5mfaz06p70k8-libffi-3.2.1/include
They are then passed on to DEP_INCLUDE_DIRS_SINGLE_QUOTED
and wreak havoc from there.
Which of these paths are vital? The libffi
path at least seems to shadow the local tarballs for me. This concerns Hadrian and the Make-based build system.
For completeness, this is the error I'm eventually seeing:
FFI.hsc:9:10: fatal error: ffi.h: No such file or directory
compilation terminated.
compiling _build/stage0/libraries/ghci/build/GHCi/FFI_hsc_make.c failed (exit code 1)
command was: /nix/store/8zfm4i1aw4c3l5n6ay311ds6l8vd9983-gcc-wrapper-7.4.0/bin/cc -c _build/stage0/libraries/ghci/build/GHCi/FFI_hsc_make.c -o _build/stage0/libraries/ghci/build/GHCi/FFI_hsc_make.o -I/nix/store/891h83mar65k138156v41kzryc9ij0v3-ghc-build-environment/include -I_build/generated -I_build/stage0/libraries/ghci/build -I/nix/store/891h83mar65k138156v41kzryc9ij0v3-ghc-build-environment/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/unix-2.7.2.2/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/time-1.8.0.2/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/bytestring-0.10.8.2/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/base-4.12.0.0/include -I/nix/store/5c9pfgazxid22ik3smh8zi805cp1i03y-gmp-6.1.2-dev/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/integer-gmp-1.0.2.0/include -I/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-ghc-8.6.3/lib/ghc-8.6.3/include -I/nix/store/karxq4hlfmfj0c3yk4wv5mfaz06p70k8-libffi-3.2.1/include -Wall -Werror=unused-but-set-variable -Wno-error=inline -include _build/stage0/libraries/ghci/build/autogen/cabal_macros.h -Dx86_64_HOST_ARCH=1 -Dlinux_HOST_OS=1 -D__GLASGOW_HASKELL__=806