Use MD5 checksums for recompilation checking (fixes #1372, #1959)
authorSimon Marlow <marlowsd@gmail.com>
Wed, 28 May 2008 12:52:58 +0000 (12:52 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 28 May 2008 12:52:58 +0000 (12:52 +0000)
commit526c3af1dc98987b6949f4df73c0debccf9875bd
treee9dd06d73e2f4281cec06d1f46ae63f1063799e6
parent842e9d6628a27cf1f420d53f6a5901935dc50c54
Use MD5 checksums for recompilation checking (fixes #1372, #1959)

This is a much more robust way to do recompilation checking.  The idea
is to create a fingerprint of the ABI of an interface, and track
dependencies by recording the fingerprints of ABIs that a module
depends on.  If any of those ABIs have changed, then we need to
recompile.

In bug #1372 we weren't recording dependencies on package modules,
this patch fixes that by recording fingerprints of package modules
that we depend on.  Within a package there is still fine-grained
recompilation avoidance as before.

We currently use MD5 for fingerprints, being a good compromise between
efficiency and security.  We're not worried about attackers, but we
are worried about accidental collisions.

All the MD5 sums do make interface files a bit bigger, but compile
times on the whole are about the same as before.  Recompilation
avoidance should be a bit more accurate than in 6.8.2 due to fixing
#1959, especially when using -O.
25 files changed:
compiler/Makefile
compiler/basicTypes/Module.lhs
compiler/basicTypes/Name.lhs
compiler/basicTypes/OccName.lhs
compiler/coreSyn/CoreLint.lhs
compiler/ghci/InteractiveUI.hs
compiler/iface/BinIface.hs
compiler/iface/IfaceSyn.lhs
compiler/iface/LoadIface.lhs
compiler/iface/MkIface.lhs
compiler/main/HscMain.lhs
compiler/main/HscTypes.lhs
compiler/main/TidyPgm.lhs
compiler/rename/RnNames.lhs
compiler/simplCore/OccurAnal.lhs
compiler/simplCore/SimplUtils.lhs
compiler/typecheck/TcRnDriver.lhs
compiler/typecheck/TcRnTypes.lhs
compiler/types/Type.lhs
compiler/utils/Binary.hs
compiler/utils/FastMutInt.lhs
compiler/utils/Fingerprint.hsc [new file with mode: 0644]
compiler/utils/md5.c [new file with mode: 0644]
compiler/utils/md5.h [new file with mode: 0644]
utils/hsc2hs/Makefile