Build failure -- missing dependency? Help!

Sylvain Henry sylvain at
Mon Mar 15 08:29:36 UTC 2021

Hi Simon,

The issue is that:
1. Make build system doesn't respect package dependencies, only module 
dependencies (afaik)
2. The build system isn't aware that most modules implicitly depend on 
GHC.Num.Integer/Natural (to desugar Integer/Natural literals)

That's why we have several fake imports in `base` that look like:

 > import GHC.Num.Integer () -- See Note [Depend on GHC.Num.Integer] in 

Note [Depend on GHC.Num.Integer]

The Integer type is special because GHC.Iface.Tidy uses constructors in
GHC.Num.Integer to construct Integer literal values. Currently it reads the
interface file whether or not the current module *has* any Integer 
literals, so
it's important that GHC.Num.Integer is compiled before any other module.

(There's a hack in GHC to disable this for packages ghc-prim and ghc-bignum
which aren't allowed to contain any Integer literals.)

Likewise we implicitly need Integer when deriving things like Eq instances.

The danger is that if the build system doesn't know about the dependency
on Integer, it'll compile some base module before GHC.Num.Integer,
resulting in:
   Failed to load interface for ‘GHC.Num.Integer’
     There are files missing in the ‘ghc-bignum’ package,

Bottom line: we make GHC.Base depend on GHC.Num.Integer; and everything
else either depends on GHC.Base, or does not have NoImplicitPrelude
(and hence depends on Prelude).

Note: this is only a problem with the make-based build system. Hadrian 
seem to interleave compilation of modules from separate packages and 
the dependency between `base` and `ghc-bignum`.

So we should add a similar fake import into 
libraries/base/GHC/Exception/Type.hs-boot. I will open a MR.


On 14/03/2021 21:53, Simon Peyton Jones via ghc-devs wrote:
> I’m getting this (with ‘sh validate –legacy’).  Oddly
>   * It does not happen on HEAD
>   * It does happen on wip/T19495, a tiny patch with one innocuous
>     change to GHC.Tc.Gen.HsType
> I can’t see how my patch could possible cause “missing files” in 
> ghc-bignum!
> I’m guessing that there is a missing dependency that someone doesn’t 
> show up in master, but does in my branch, randomly.
> There’s something funny about ghc-bignum; it doesn’t seem to be a 
> regular library
> Can anyone help?
> Thanks
> Simon
> "inplace/bin/ghc-stage1" -hisuf hi -osuf  o -hcsuf hc -static  -O 
> -H64m -Wall -fllvm-fill-undef-with-garbage    -Werror    -this-unit-id 
> base- -hide-all-packages -package-env - -i -ilibraries/base/. 
> -ilibraries/base/dist-install/build 
> -Ilibraries/base/dist-install/build 
> -ilibraries/base/dist-install/build/./autogen 
> -Ilibraries/base/dist-install/build/./autogen -Ilibraries/base/include 
> -Ilibraries/base/dist-install/build/include    -optP-include 
> -optPlibraries/base/dist-install/build/./autogen/cabal_macros.h 
> -package-id ghc-bignum-1.0 -package-id ghc-prim-0.8.0 -package-id rts 
> -this-unit-id base -Wcompat -Wnoncanonical-monad-instances 
> -XHaskell2010 -O -dcore-lint -ticky -Wwarn  -no-user-package-db 
> -rtsopts -Wno-trustworthy-safe -Wno-deprecated-flags 
> -Wnoncanonical-monad-instances  -outputdir 
> libraries/base/dist-install/build  -dynamic-too -c 
> libraries/base/./GHC/Exception/Type.hs-boot -o 
> libraries/base/dist-install/build/GHC/Exception/Type.o-boot -dyno 
> libraries/base/dist-install/build/GHC/Exception/Type.dyn_o-boot
> Failed to load interface for ‘GHC.Num.Integer’
> There are files missing in the ‘ghc-bignum’ package,
> try running 'ghc-pkg check'.
> Use -v (or `:set -v` in ghci) to see a list of the files searched for.
> make[1]: *** [libraries/base/ 
> libraries/base/dist-install/build/GHC/Exception/Type.o-boot] Error 1
> make[1]: *** Waiting for unfinished jobs....
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list