import Distribution.PackageDescription ( HookedBuildInfo, emptyHookedBuildInfo ) import Distribution.Simple ( Args, UserHooks ( preSDist ), defaultMainWithHooks, simpleUserHooks ) import Distribution.Simple.Setup ( SDistFlags ) -- | This requires the process package from, -- -- https://hackage.haskell.org/package/process -- import System.Process ( callCommand ) -- | This will use almost the default implementation, except we switch -- out the default pre-sdist hook with our own, 'myPreSDist'. -- main = defaultMainWithHooks myHooks where myHooks = simpleUserHooks { preSDist = myPreSDist } -- | This hook will be executed before e.g. @cabal sdist@. It runs -- pandoc to create the man page from shellcheck.1.md. If the pandoc -- command is not found, this will fail with an error message: -- -- /bin/sh: pandoc: command not found -- -- Since the man page is listed in the Extra-Source-Files section of -- our cabal file, a failure here should result in a failure to -- create the distribution tarball (that's a good thing). -- myPreSDist :: Args -> SDistFlags -> IO HookedBuildInfo myPreSDist _ _ = do putStrLn "Building the man page..." putStrLn pandoc_cmd callCommand pandoc_cmd return emptyHookedBuildInfo where pandoc_cmd = "pandoc -s -t man shellcheck.1.md -o shellcheck.1"