executable-hash- Provides the SHA1 hash of the program executable

Safe HaskellNone



This module provides functions for accessing or computing a SHA1 hash of the program's executable. Most users are expected to use the executableHash function.

To inject the hash into the executable, you can use the inject-executable-hash program installed along with this package. Alternatively, to do this automatically with cabal, place this in your Setup.hs:

     import Distribution.Simple (defaultMainWithHooks, simpleUserHooks, postBuild)
     import Distribution.Simple.LocalBuildInfo (buildDir)
     import System.Executable.Hash.Internal (maybeInjectExecutableHash)
     import System.FilePath ((</>))

     main :: IO ()
     main = defaultMainWithHooks $ simpleUserHooks
         { postBuild = _ _ _ buildInfo ->
             maybeInjectExecutableHash (buildDir buildInfo </> "exeName/exeName")

(Note: you'll need to change the executable path)



executableHash :: Q Exp Source #

This generates an expression which yields a SHA1 hash. The generated expression has the type IO (Maybe ByteString), just like computeExecutableHash.

If a SHA1 hash of the executable has been injected into it, then it's directly yielded by this expression. Otherwise, a hash is computed with computeExecutableHash.

Note that you shouldn't rely on the result being the actual SHA1 hash of the executable, because injecting the hash modifies the binary, and so changes the result of computeExecutableHash. Instead, this should only be used as a way to uniquely identify the contents of the executable.

This yields Nothing when run with runhaskell or ghci.

computeExecutableHash :: IO (Maybe ByteString) Source #

Computes the SHA1 hash of the program executable.

This yields Nothing when run with runhaskell or ghci.