{- |
- Module : $Header$
- Description : The blubber server Cabal setup file.
- Copyright : (c) plaimi 2015
- License : AGPL-3
-
- Maintainer : blubber@plaimi.net
- -}
import Control.Exception
(
catch,
)
import Control.Monad
(
unless,
)
import Data.Text
(
pack,
toTitle,
unpack,
)
import Distribution.Simple
(
defaultMainWithHooks,
preBuild,
simpleUserHooks,
)
import System.Exit
(
ExitCode (ExitSuccess),
)
import System.IO.Error
(
isAlreadyExistsError,
ioeGetErrorString,
)
import System.Posix
(
createDirectory,
)
import System.Process
(
rawSystem,
)
import Text.Printf
(
printf,
)
main :: IO ()
-- | Make web/src.tar.gz pre-build, so an URL may be served to clients upon
-- request.
main = defaultMainWithHooks
$ simpleUserHooks
{preBuild = \args buildFlags -> do
createDirectory "web" 0o755 `catch` \e ->
unless (isAlreadyExistsError e) $
printf ("couldn't make the web directory: %s\n"
++ "please do it yourself. we need it!")
$ unpack . toTitle . pack $ ioeGetErrorString e
exitCode <- rawSystem "tar" $ tarOut ++ tarIn
putStrLn $ echoOut exitCode
preBuild simpleUserHooks args buildFlags
}
tarOut :: [String]
-- | The file generated by tar.
tarOut = ["cfz", "web/src.tar.gz"]
tarIn :: [String]
-- | The files passed to tar.
tarIn = ["Setup.hs"
,"blubber-server.cabal"
,"src"
,"src-exec"
]
echoOut :: ExitCode -> String
-- | Make an output text to echo, depending on the passed in 'ExitCode'.
echoOut ExitSuccess = "'put src in web/src.tar.gz'"
echoOut _ = "'uh-oh! couldn't make a gzipped tarball of the src! "
++ "you need to put the src of your blubber server in a "
++ "file \"web/src.tar.gz\" before building. this is to "
++ "comply with the GNU AGPLv3."