import Control.Monad import Distribution.Simple import System.Environment --import System.IO -- Surprisingly, if the user types "cabal install --enable-tests", -- `args` will *not* be ["install", "--enable-tests"]. Instead, cabal will -- run Setup.hs repeatedly with different arguments: -- -- ["configure","--verbose=1","--builddir=dist/dist-sandbox-28d8356a","--ghc","--prefix=...",...] -- ["build","--verbose=1","--builddir=dist/dist-sandbox-28d8356a"] -- ["test","--builddir=dist/dist-sandbox-28d8356a"] -- ["install","--verbose=1","--builddir=dist/dist-sandbox-28d8356a"] -- -- We need to manipulate `args` via `substitute` in order to preserve those -- extra arguments. substitute :: Eq a => [(a, [a])] -> [a] -> [a] substitute substitutions = (>>= go) where go x = case lookup x substitutions of Just xs -> xs Nothing -> return x main = do args <- getArgs --withFile "Setup.log" AppendMode $ \h -> do -- hPutStrLn h (show args) when ("test" `elem` args) $ do -- unlike most packages, this one needs to be installed before it can be tested. defaultMainArgs (substitute [ ("test", ["install","--verbose=1"]) -- remove test-specific arguments , ("--log=$pkgid-$test-suite.log", []) , ("--machine-log=$pkgid.log", []) , ("--show-details=failures", []) ] args) defaultMainArgs args