packages feed

cabal-cache-1.2.0.0: app/App/Static/Posix.hs

module App.Static.Posix
  ( cabalDirectory,
  ) where

import HaskellWorks.CabalCache.Location ((</>))
import HaskellWorks.Prelude

import qualified App.Static.Base as S
import qualified System.Directory as IO
import qualified System.Environment as IO
import qualified System.IO as IO
import qualified System.IO.Unsafe as IO

cabalDirectory :: FilePath
cabalDirectory =
  IO.unsafePerformIO do
    IO.lookupEnv "CABAL_DIR" >>= \case
      Just dir -> pure dir
      Nothing -> do
        let oldCabalDir = S.homeDirectory </> ".cabal"
        let newCabaldir = S.homeDirectory </> ".local/state/cabal/store"
        oldExists <- IO.doesDirectoryExist oldCabalDir
        newExists <- IO.doesDirectoryExist newCabaldir
        case (oldExists, newExists) of
          (True, True) -> do
            IO.hPutStrLn IO.stderr "Warning: Both ~/.cabal and ~/.local/state/cabal/store exist"
            pure newCabaldir
          (True, _) -> pure oldCabalDir
          (_, True) -> pure newCabaldir
          _ -> fail "No cabal directory found"