import Distribution.Helper import System.Environment.Extra (lookupEnv) import System.Posix.Env (setEnv) import System.Process import System.Exit import Data.Maybe import Data.Either import Data.Version import Data.Functor import Control.Exception import Control.Arrow import CabalHelper.Common import CabalHelper.Compile import CabalHelper.Types main :: IO () main = do flip (setEnv "HOME") True =<< fromMaybe "/tmp" <$> lookupEnv "TMPDIR" writeAutogenFiles readProcess "." "./dist" _ <- system "cabal update" let vers :: [(Version, [Version])] vers = map (parseVer *** map parseVer) [ ("7.4", [ "1.14.0" ]), ("7.6", [ "1.16.0" , "1.16.0.1" , "1.16.0.2" , "1.16.0.3" ]), ("7.8", [ -- "1.18.0" -- , "1.18.1" "1.18.1.1" -- , "1.18.1.2" , "1.18.1.3" , "1.18.1.4" , "1.18.1.5" , "1.18.1.6" , "1.20.0.0" , "1.20.0.1" , "1.20.0.2" , "1.20.0.3" , "1.22.0.0" , "1.22.1.0" , "1.22.1.1" ]), ("7.10", [ "1.22.2.0" , "1.22.3.0" , "1.22.4.0" ]) ] ghcVer <- ghcVersion defaultOptions let cabalVers = concat $ map snd $ dropWhile (( IO (Either ExitCode FilePath) compilePrivatePkgDb cabalVer = do db <- installCabal defaultOptions cabalVer `catch` \(SomeException _) -> errorInstallCabal cabalVer "dist" compileWithPkg "." (Just db) cabalVer compileWithPkg :: FilePath -> Maybe FilePath -> Version -> IO (Either ExitCode FilePath) compileWithPkg chdir mdb ver = compile "dist" defaultOptions $ Compile chdir Nothing mdb ver [cabalPkgId ver] cabalPkgId :: Version -> String cabalPkgId v = "Cabal-" ++ showVersion v