-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Provides the SHA1 hash of the program executable -- -- See README.md @package executable-hash @version 0.2.0.1 -- | Internals related to reading and writing an injected executable hash. module System.Executable.Hash.Internal -- | This generates an expression which yields the injected SHA1 hash. -- -- The generated expression yields a Just value when the injected -- SHA1 hash is present in the executable. This hash is usually injected -- due to a usage of injectExecutableHash / -- maybeInjectExecutableHash. injectedExecutableHash :: Q Exp -- | Given the path to an executable, computes its hash and injects it into -- the binary, such that when that program demands the value of -- injectedExecutableHash, it yields a Just value. -- -- See the documentation in System.Executable.Hash for an example -- of how to use this with a cabal postBuild hook injectExecutableHash :: FilePath -> IO () -- | Injects an executable hash into the specified binary. If it doesn't -- exist, then this prints a message to stdout indicating that it failed -- to inject the hash. maybeInjectExecutableHash :: FilePath -> IO () -- | 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)
module System.Executable.Hash
-- | 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.
executableHash :: Q Exp
-- | Computes the SHA1 hash of the program executable.
--
-- This yields Nothing when run with runhaskell or
-- ghci.
computeExecutableHash :: IO (Maybe ByteString)