From bded4b9221671df1bbe7c3697a7f70c2e2dad3cd Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Tue, 5 Apr 2016 06:59:52 -0700 Subject: [PATCH] tools: expand shake file, show help by default --- shake.hs => Shake.hs | 89 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 76 insertions(+), 13 deletions(-) rename shake.hs => Shake.hs (52%) diff --git a/shake.hs b/Shake.hs similarity index 52% rename from shake.hs rename to Shake.hs index 6726bb1cf..83519d137 100755 --- a/shake.hs +++ b/Shake.hs @@ -1,10 +1,55 @@ #!/usr/bin/env stack --- stack runghc --package shake +{- stack runghc + --package base-prelude + --package directory + --package extra + --package here + --package safe + --package shake + --package time +-} +{- +Usage: see below. +Shake.hs is a more powerful Makefile, providing a number of commands +for performing useful tasks. Compiling this script is suggested, so that +it runs quicker and will not be affected eg when exploring old code versions. +More about Shake: http://shakebuild.com/manual +Requires: https://www.haskell.org/downloads#stack -import Development.Shake -import Development.Shake.FilePath -import Data.List -import System.Directory as S (getDirectoryContents) +Shake notes: +notes: + unclear: + want + oracles + wishlist: + wildcards in phony rules + multiple individually accessible wildcards + just one shake import +-} + +{-# LANGUAGE PackageImports, QuasiQuotes #-} + +import Prelude () +import "base-prelude" BasePrelude +-- import "base" System.Console.GetOpt +import "extra" Data.List.Extra +import "here" Data.String.Here +import "safe" Safe +import "shake" Development.Shake +import "shake" Development.Shake.FilePath +import "time" Data.Time +import "directory" System.Directory as S (getDirectoryContents) + +usage = [i|Usage: + ./Shake.hs compile # compile this script (optional) + ./Shake # show commands + ./Shake --help # show options + ./Shake [--color] COMMAND + +Commands: + compile + manpages +|] manpages :: [String] manpages = [ @@ -33,17 +78,35 @@ main = do map ("tools" ). nub . sort . map (-<.> "") . filter ("pandoc" `isPrefixOf`) <$> S.getDirectoryContents "tools" - -- man pages, still markdown but with man-only sections removed. - -- (We let hakyll do the html rendering since it's good - -- at applying the site style, table of contents etc.) - let manpageFilteredMds = ["site" p <.>".md" | p <- manpages] + shakeArgs + shakeOptions{ + shakeFiles=buildDir + ,shakeVerbosity=Loud + -- ,shakeReport=[".shake.html"] + } $ do - -- man pages, converted to man nroff with web-only sections removed - let manpageNroffs = [manpageDir p p | p <- manpages] + want ["help"] - shakeArgs shakeOptions{shakeFiles=buildDir} $ do + phony "help" $ liftIO $ putStrLn usage - want $ manpageNroffs ++ manpageFilteredMds + phony "compile" $ need ["Shake"] + + "Shake" %> \out -> do + need ["Shake.hs"] + cmd "stack ghc Shake.hs" :: Action ExitCode + putLoud "Compiled ./Shake, you can now use this instead of ./Shake.hs" + + -- docs + + -- man pages, still markdown but with man-only sections removed. + -- (We let hakyll do the html rendering since it's good + -- at applying the site style, table of contents etc.) + let manpageFilteredMds = ["site" p <.>".md" | p <- manpages] + + -- man pages, converted to man nroff with web-only sections removed + let manpageNroffs = [manpageDir p p | p <- manpages] + + phony "manpages" $ need $ manpageNroffs ++ manpageFilteredMds manpageNroffs |%> \out -> do let