Fix interface hashes including time stamp of dependent files.
authorNiklas Hamb├╝chen <mail@nh2.me>
Thu, 22 Aug 2013 02:05:56 +0000 (11:05 +0900)
committerAustin Seipp <aseipp@pobox.com>
Thu, 22 Aug 2013 21:25:02 +0000 (16:25 -0500)
commit677820ee3a3aadbf2ed414deb3926381d94b13a8
treed0e19887f49fca9b339310d4a395bebf396f2afb
parent16ae2f0c3ff45e0c78b90ae0761a0f86c70188bd
Fix interface hashes including time stamp of dependent files.

Fixes #8144.

Before, the modification time of e.g. #included files (and everything
that ends up as a UsageFile, e.g. via addDependentFile) was taken as
input for the interface hash of a module.

This lead to different hashes for identical inputs on every compilation.

We now use file content hashes instead.

This changes the interface file format.
You will get "Binary.get(Usage): 50" when you try to do an incremental
using .hi files that were created with a GHC 7.7 (only) older than this commit.

To calculate the md5 hash (`Fingerprint`) of a file in constant space,
there now is GHC.Fingerprint.getFileHash, and a fallback version
for older GHCs that needs to load the file into memory completely
(only used when compiling stage1 with an older GHC).

Signed-off-by: Austin Seipp <aseipp@pobox.com>
compiler/iface/MkIface.lhs
compiler/main/HscTypes.lhs
compiler/utils/Fingerprint.hsc