older cabal-install sometimes omits the .inplace database, workaround

This commit is contained in:
Luite Stegeman 2013-03-02 23:27:06 +01:00
parent aafecf5787
commit 2ffc083cc9
2 changed files with 22 additions and 8 deletions

View File

@ -201,7 +201,7 @@ devel opts passThroughArgs = withSocketsDo $ withManager $ \manager -> do
_ <- recompDeps hsSourceDirs _ <- recompDeps hsSourceDirs
list <- liftIO $ getFileList hsSourceDirs [cabal] list <- liftIO $ getFileList hsSourceDirs [cabal]
success <- liftIO rebuild success <- liftIO rebuild
pkgArgs <- liftIO ghcPackageArgs pkgArgs <- liftIO (ghcPackageArgs opts)
let devArgs = pkgArgs ++ ["devel.hs"] let devArgs = pkgArgs ++ ["devel.hs"]
let loop list0 = do let loop list0 = do
(haskellFileChanged, list1) <- liftIO $ (haskellFileChanged, list1) <- liftIO $
@ -387,8 +387,8 @@ ghcVersion = fmap getNumber $ readProcess "runghc" ["--numeric-version", "0"] []
where where
getNumber = filter (\x -> isNumber x || x == '.') getNumber = filter (\x -> isNumber x || x == '.')
ghcPackageArgs :: IO [String] ghcPackageArgs :: DevelOpts -> IO [String]
ghcPackageArgs = getBuildFlags >>= getPackageArgs ghcPackageArgs opts = getBuildFlags >>= getPackageArgs (buildDir opts)
lookupDevelLib :: D.GenericPackageDescription -> D.CondTree D.ConfVar c a -> Maybe a lookupDevelLib :: D.GenericPackageDescription -> D.CondTree D.ConfVar c a -> Maybe a
lookupDevelLib gpd ct | found = Just (D.condTreeData ct) lookupDevelLib gpd ct | found = Just (D.condTreeData ct)

View File

@ -26,7 +26,7 @@ import System.Environment (getEnvironment)
import CmdLineParser import CmdLineParser
import Data.Char (toLower) import Data.Char (toLower)
import Data.List (isPrefixOf, partition) import Data.List (isPrefixOf, isSuffixOf, partition)
import Data.Maybe (fromMaybe) import Data.Maybe (fromMaybe)
import DriverPhases (Phase (..), anyHsc, isHaskellSrcFilename, import DriverPhases (Phase (..), anyHsc, isHaskellSrcFilename,
isSourceFilename, startPhase) isSourceFilename, startPhase)
@ -74,8 +74,8 @@ prependHsenvArgv argv = do
where hsenvArgv = words $ fromMaybe "" (lookup "PACKAGE_DB_FOR_GHC" env) where hsenvArgv = words $ fromMaybe "" (lookup "PACKAGE_DB_FOR_GHC" env)
-- construct a command line for loading the right packages -- construct a command line for loading the right packages
getPackageArgs :: [Located String] -> IO [String] getPackageArgs :: Maybe String -> [Located String] -> IO [String]
getPackageArgs argv2 = do getPackageArgs buildDir argv2 = do
(mode, argv3, modeFlagWarnings) <- parseModeFlags argv2 (mode, argv3, modeFlagWarnings) <- parseModeFlags argv2
GHC.runGhc (Just libdir) $ do GHC.runGhc (Just libdir) $ do
dflags0 <- GHC.getSessionDynFlags dflags0 <- GHC.getSessionDynFlags
@ -93,13 +93,27 @@ getPackageArgs argv2 = do
convertPkgFlag (DF.TrustPackage p) = "-trust" ++ p convertPkgFlag (DF.TrustPackage p) = "-trust" ++ p
convertPkgFlag (DF.DistrustPackage p) ="-distrust" ++ p convertPkgFlag (DF.DistrustPackage p) ="-distrust" ++ p
#if __GLASGOW_HASKELL__ >= 705 #if __GLASGOW_HASKELL__ >= 705
extra df = concatMap convertExtra (extraConfs df) extra df = inplaceConf ++ extra'
where
extra' = concatMap convertExtra (extraConfs df)
-- old cabal-install sometimes misses the .inplace db, fix it here
inplaceConf
| any (".inplace" `isSuffixOf`) extra' = []
| otherwise = ["-package-db" ++ fromMaybe "dist" buildDir
++ "/package.conf.inplace"]
extraConfs df = GHC.extraPkgConfs df [] extraConfs df = GHC.extraPkgConfs df []
convertExtra DF.GlobalPkgConf = [ ] convertExtra DF.GlobalPkgConf = [ ]
convertExtra DF.UserPkgConf = [ ] convertExtra DF.UserPkgConf = [ ]
convertExtra (DF.PkgConfFile file) = [ "-package-db" ++ file ] convertExtra (DF.PkgConfFile file) = [ "-package-db" ++ file ]
#else #else
extra df = map ("-package-conf"++) (GHC.extraPkgConfs df) extra df = inplaceConf ++ extra'
where
extra' = map ("-package-conf"++) (GHC.extraPkgConfs df)
-- old cabal-install sometimes misses the .inplace db, fix it here
inplaceConf
| any (".inplace" `isSuffixOf`) extra' = []
| otherwise = ["-package-conf" ++ fromMaybe "dist" buildDir
++ "/package.conf.inplace"]
#endif #endif
#if __GLASGOW_HASKELL__ >= 707 #if __GLASGOW_HASKELL__ >= 707