Revert "Batch merge"
[ghc.git] / compiler / utils / Fingerprint.hsc
1 {-# LANGUAGE CPP #-}
2
3 -- ----------------------------------------------------------------------------
4 --
5 --  (c) The University of Glasgow 2006
6 --
7 -- Fingerprints for recompilation checking and ABI versioning.
8 --
9 -- http://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidance
10 --
11 -- ----------------------------------------------------------------------------
12
13 module Fingerprint (
14         readHexFingerprint,
15         fingerprintByteString,
16         -- * Re-exported from GHC.Fingerprint
17         Fingerprint(..), fingerprint0,
18         fingerprintFingerprints,
19         fingerprintData,
20         fingerprintString,
21         getFileHash
22    ) where
23
24 #include "md5.h"
25 ##include "HsVersions.h"
26
27 import GhcPrelude
28
29 import Foreign
30 import GHC.IO
31 import Numeric          ( readHex )
32
33 import qualified Data.ByteString as BS
34 import qualified Data.ByteString.Unsafe as BS
35
36 import GHC.Fingerprint
37
38 -- useful for parsing the output of 'md5sum', should we want to do that.
39 readHexFingerprint :: String -> Fingerprint
40 readHexFingerprint s = Fingerprint w1 w2
41  where (s1,s2) = splitAt 16 s
42        [(w1,"")] = readHex s1
43        [(w2,"")] = readHex (take 16 s2)
44
45 fingerprintByteString :: BS.ByteString -> Fingerprint
46 fingerprintByteString bs = unsafeDupablePerformIO $
47   BS.unsafeUseAsCStringLen bs $ \(ptr, len) -> fingerprintData (castPtr ptr) len