module SanityCheck (sanityCheck) where import Control.Monad (when) import System.Directory (doesDirectoryExist) import Util.IO (getEnvVar, which) import Types import HsenvMonad import Paths (hseDirStructure, dotDirName) -- check if any virtual env is already active checkHSE :: Hsenv () checkHSE = do hsEnvVar <- liftIO $ getEnvVar "HSENV" case hsEnvVar of Nothing -> return () Just path -> do hsEnvNameVar <- liftIO $ getEnvVar "HSENV_NAME" case hsEnvNameVar of Nothing -> do debug $ "warning: HSENV environment variable is defined" ++ ", but no HSENV_NAME environment variable defined." throwError $ HsenvException $ "There is already active Virtual Haskell Environment (at " ++ path ++ ")." Just name -> throwError $ HsenvException $ "There is already active " ++ name ++ " Virtual Haskell Environment (at " ++ path ++ ")." checkHsenvAlreadyExists :: Hsenv () checkHsenvAlreadyExists = do dirStructure <- hseDirStructure flag <- liftIO $ doesDirectoryExist $ hsEnvDir dirStructure dotDir <- dotDirName when flag $ throwError $ HsenvException $ "There is already " ++ dotDir ++ " directory at " ++ hsEnv dirStructure -- check if cabal binary exist on PATH checkCabalInstall :: Hsenv () checkCabalInstall = do cabalInstallPath <- liftIO $ which Nothing "cabal" case cabalInstallPath of Just _ -> return () Nothing -> throwError $ HsenvException "Couldn't find cabal binary (from cabal-install package) in your $PATH." -- check if GHC tools (ghc, ghc-pkg) exist on PATH -- skip the check if using GHC from a tarball checkGhc :: Hsenv () checkGhc = do ghcSrc <- asks ghcSource case ghcSrc of System -> do ghcPath <- liftIO $ which Nothing "ghc" case ghcPath of Just _ -> return () Nothing -> throwError $ HsenvException "Couldn't find ghc binary in your $PATH." ghc_pkgPath <- liftIO $ which Nothing "ghc-pkg" case ghc_pkgPath of Just _ -> return () Nothing -> throwError $ HsenvException "Couldn't find ghc-pkg binary in your $PATH." _ -> return () -- check if everything is sane sanityCheck :: Hsenv () sanityCheck = do checkHSE checkHsenvAlreadyExists checkCabalInstall checkGhc