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 GHC.Base
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 doesn't
seem to interleave compilation of modules from separate packages
and respects
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.
Sylvain
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-4.16.0.0 -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/ghc.mk:4: libraries/base/dist-install/build/GHC/Exception/Type.o-boot] Error 1
make[1]: *** Waiting for unfinished jobs....
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs