import Distribution.PackageDescription ( HookedBuildInfo, emptyHookedBuildInfo ) import Distribution.Simple ( Args, UserHooks ( preSDist ), defaultMainWithHooks, simpleUserHooks ) import Distribution.Simple.Setup ( SDistFlags ) import System.Process ( system ) 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 (shellcheck.1) with pandoc..." putStrLn pandoc_cmd result <- system pandoc_cmd putStrLn $ "pandoc exited with " ++ show result return emptyHookedBuildInfo where pandoc_cmd = "pandoc -s -f markdown-smart -t man shellcheck.1.md -o shellcheck.1"