
For some time now I'd been unable to build GHC 9.6 from source. The reason turned out to be that my hadrian command-line selected an explicit build directory that was not an immediate child of the source directory (default it seems is "_build"). With the source tree under "$HOME/dev/ghc/", the hardrian command $ hadrian/build -V -V -o"$HOME/dev/buildghc" --docs=no-sphinx binary-dist-dir after building stage0, and running "configure" in libraries/base, reports an error finding HsFFI.h: Reading parameters from $HOME/dev/buildghc/stage1/libraries/base/build/base.buildinfo /usr/bin/cc '-fuse-ld=gold' /tmp/2303653-4.c -o /tmp/2303653-5 '-D__GLASGOW_HASKELL__=906' \ '-Dlinux_BUILD_OS=1' \ '-Dx86_64_BUILD_ARCH=1' \ '-Dlinux_HOST_OS=1' \ '-Dx86_64_HOST_ARCH=1' \ -I$HOME/dev/buildghc/stage1/libraries/base/build/autogen \ -I$HOME/dev/buildghc/stage1/libraries/base/build/include \ -Ilibraries/base/include \ -Ilibraries/base \ -I/usr/include \ -I$HOME/dev/buildghc/stage1/inplace/../../..//libraries/ghc-bignum/include/ \ -I$HOME/dev/buildghc/stage1/libraries/ghc-bignum/build/include/ \ -I$HOME/dev/buildghc/stage1/inplace/../../..//libraries/ghc-bignum/include \ -I$HOME/dev/buildghc/stage1/libraries/ghc-bignum/build/include \ -I$HOME/dev/buildghc/stage1/inplace/../../..//rts/include \ -I$HOME/dev/buildghc/stage1/rts/build/include \ '-I$HOME/dev/buildghc/stage1/inplace/../../..//rts/@FFIIncludeDir@' \ '-I$HOME/dev/buildghc/stage1/rts/build/@FFIIncludeDir@' \ '-I$HOME/dev/buildghc/stage1/inplace/../../..//rts/@LibdwIncludeDir@' \ '-I$HOME/dev/buildghc/stage1/rts/build/@LibdwIncludeDir@' \ -L$HOME/dev/buildghc/stage1/inplace/../libraries/ghc-bignum/build \ -L$HOME/dev/buildghc/stage1/inplace/../libraries/ghc-prim/build \ -L$HOME/dev/buildghc/stage1/inplace/../rts/build -iquote \ $HOME/dev/ghc/libraries/base \ '-fuse-ld=gold' There are two issues to note here: - "hadrian" fails to substitute @FFIIncludeDir@ and @LibdwIncludeDir@. This used to be handled by "configure", but the job of turning "rts.cabal.in" into "rts.cabal" seems to have been reassigned to "hadrian". - With the build output directory a sibling rather than a child of the source tree, the path to "rts/include" is not constructed correctly. The path: -I$HOME/dev/buildghc/stage1/inplace/../../..//rts/include should have been: -I$HOME/dev/buildghc/stage1/inplace/../../../ghc/rts/include Switching to the default path proved to be a viable work-around, but perhaps other choices should also work. -- Viktor.