diff --git a/cabal-install/Distribution/Client/Exec.hs b/cabal-install/Distribution/Client/Exec.hs index 26292e6d5299f44531b55349f9c98dba5a30fe21..2d59681fba4bec2022f6b283d005bbe1f7a3e716 100644 --- a/cabal-install/Distribution/Client/Exec.hs +++ b/cabal-install/Distribution/Client/Exec.hs @@ -12,6 +12,10 @@ module Distribution.Client.Exec ( exec ) where +import Control.Monad (unless) + +import Data.Foldable (forM_) + import qualified Distribution.Simple.GHC as GHC import qualified Distribution.Simple.GHCJS as GHCJS @@ -25,11 +29,12 @@ import Distribution.Simple.Program.Db (ProgramDb, requireProgram, modifyProgram import Distribution.Simple.Program.Find (ProgramSearchPathEntry(..)) import Distribution.Simple.Program.Run (programInvocation, runProgramInvocation) import Distribution.Simple.Program.Types ( simpleProgram, ConfiguredProgram(..) ) -import Distribution.Simple.Utils (die) +import Distribution.Simple.Utils (die, warn) import Distribution.System (Platform) import Distribution.Verbosity (Verbosity) +import System.Directory ( doesDirectoryExist ) import System.FilePath (searchPathSeparator, (</>)) #if !MIN_VERSION_base(4,8,0) import Control.Applicative ((<$>)) @@ -87,6 +92,12 @@ sandboxEnvironment verbosity sandboxDir comp platform programDb = gDb <- getGlobalPackageDB verbosity program sandboxConfigFilePath <- getSandboxConfigFilePath mempty let compilerPackagePath = hcPackagePath gDb + -- Packages database must exist, otherwise things will start + -- failing in mysterious ways. + forM_ compilerPackagePath $ \fp -> do + exists <- doesDirectoryExist fp + unless exists $ warn verbosity $ "Package database is not a directory: " ++ fp + -- Build the environment return [ (packagePathEnvVar, compilerPackagePath) , ("CABAL_SANDBOX_PACKAGE_PATH", compilerPackagePath) , ("CABAL_SANDBOX_CONFIG", Just sandboxConfigFilePath)