Skip to content

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
Edited by Sebastian Graf
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information