diff --git a/src/System/Plugins/Env.hs b/src/System/Plugins/Env.hs index 64a840c..8bb0e8d 100644 --- a/src/System/Plugins/Env.hs +++ b/src/System/Plugins/Env.hs @@ -73,7 +73,9 @@ import System.IO.Error ( catch, ioError, isDoesNotExistError ) import Control.Concurrent.MVar ( MVar(), newMVar, withMVar ) -import Distribution.Package +import Distribution.Package hiding (PackageName, packageName, depends) +import Distribution.Text (display, simpleParse) + import Text.ParserCombinators.ReadP import qualified Data.Map as M @@ -284,9 +286,9 @@ addPkgConf f = do union :: PkgEnvs -> [PackageConfig] -> PkgEnvs union ls ps' = let fm = emptyFM -- new FM for this package.conf - in foldr (\p fm' -> if packageName_ p == "base" -- ghc doesn't supply a version with 'base' + in foldr (\p fm' -> if display (packageName_ p) == "base" -- ghc doesn't supply a version with 'base' -- for some reason. - then addToFM (addToFM fm' (packageName_ p) p) (packageName p) p + then addToFM (addToFM fm' (packageName p) p) (packageName p) p else addToFM fm' (packageName p) p) fm ps' : ls -- @@ -330,7 +332,7 @@ addStaticPkg pkg = modifyStaticPkgEnv env $ \set -> return $ S.insert pkg set isStaticPkg :: PackageName -> IO Bool isStaticPkg pkg - = case readP_to_S parsePackageName pkg of + = case reads pkg of ((pkgName,_):_) -> withStaticPkgEnv env $ \set -> return $ S.member pkgName set [] -> return False @@ -513,4 +515,3 @@ addMerge a b z = modifyMerged env $ \fm -> return $ addToFM fm (a,b) z -- () :: FilePath -> FilePath -> FilePath [] b = b -a b = a ++ "/" ++ b diff --git a/src/System/Plugins/PackageAPI.hs b/src/System/Plugins/PackageAPI.hs index 7ac4201..ba8db23 100644 --- a/src/System/Plugins/PackageAPI.hs +++ b/src/System/Plugins/PackageAPI.hs @@ -40,7 +40,8 @@ module System.Plugins.PackageAPI ( #if CABAL == 1 || __GLASGOW_HASKELL__ >= 604 import Distribution.InstalledPackageInfo -import Distribution.Package +import Distribution.Package hiding (PackageName, packageName, depends) +import Distribution.Text (display) #else import System.Plugins.Package #endif @@ -57,9 +58,9 @@ type PackageName = String type PackageConfig = InstalledPackageInfo -packageName = showPackageId . package +packageName = display . package packageName_ = pkgName . package -packageDeps = (map showPackageId) . depends +packageDeps = (map display) . depends updImportDirs f pk@(InstalledPackageInfo { importDirs = idirs }) = pk { importDirs = f idirs } diff --git a/src/System/Plugins/ParsePkgConfCabal.hs b/src/System/Plugins/ParsePkgConfCabal.hs index eba427e..2f7c13b 100644 --- a/src/System/Plugins/ParsePkgConfCabal.hs +++ b/src/System/Plugins/ParsePkgConfCabal.hs @@ -6,18 +6,27 @@ module System.Plugins.ParsePkgConfCabal ( ) where import Distribution.InstalledPackageInfo -import Distribution.Package +import Distribution.Package hiding (depends) +import Distribution.ModuleName (components, ModuleName) +import Distribution.Text (simpleParse) + import Distribution.Version import Data.Char ( isSpace, isAlpha, isAlphaNum, isUpper, isDigit ) -import Data.List ( break ) +import Data.List ( break, intercalate ) +import Data.Maybe ( fromJust ) import Data.Array + #if __GLASGOW_HASKELL__ >= 503 import GHC.Exts #else import GlaExts #endif +moduleName :: [String] -> [ModuleName] +moduleName = map (sParse "module name") +sParse what = (\s -> maybe (error ("couldn't parse " ++ what ++ ", string: " ++ s)) id (simpleParse s)) + -- parser produced by Happy Version 1.15 newtype HappyAbsSyn = HappyAbsSyn (() -> ()) @@ -269,8 +278,8 @@ happyReduction_13 happy_x_3 case happyOut16 happy_x_3 of { happy_var_3 -> happyIn9 (\p -> case happy_var_1 of - "exposedModules" -> p{exposedModules = happy_var_3} - "hiddenModules" -> p{hiddenModules = happy_var_3} + "exposedModules" -> p{exposedModules = moduleName happy_var_3 } + "hiddenModules" -> p{hiddenModules = moduleName happy_var_3} "importDirs" -> p{importDirs = happy_var_3} "libraryDirs" -> p{libraryDirs = happy_var_3} "hsLibraries" -> p{hsLibraries = happy_var_3} @@ -316,7 +325,7 @@ happyReduction_15 (happy_x_10 `HappyStk` = case happyOutTok happy_x_5 of { (ITstring happy_var_5) -> case happyOut11 happy_x_9 of { happy_var_9 -> happyIn10 - (PackageIdentifier{ pkgName = happy_var_5, + (PackageIdentifier{ pkgName = sParse "package name" happy_var_5, pkgVersion = happy_var_9 } ) `HappyStk` happyRest}} diff --git a/src/System/Plugins/ParsePkgConfCabal.y_in b/src/System/Plugins/ParsePkgConfCabal.y_in index ddd4516..38bb068 100644 --- a/src/System/Plugins/ParsePkgConfCabal.y_in +++ b/src/System/Plugins/ParsePkgConfCabal.y_in @@ -36,12 +36,18 @@ module System.Plugins.ParsePkgConfCabal ( ) where import Distribution.InstalledPackageInfo -import Distribution.Package +import Distribution.Package hiding (depends) import Distribution.Version +import Distribution.ModuleName (components, ModuleName) +import Distribution.Text (simpleParse) import Data.Char ( isSpace, isAlpha, isAlphaNum, isUpper, isDigit ) -import Data.List ( break ) +import Data.List ( break, intercalate ) +import Data.Maybe ( fromJust ) +moduleName :: [String] -> [ModuleName] +moduleName = map (sParse "module name") +sParse what = (\s -> maybe (error ("couldn't parse " ++ what ++ ", string: " ++ s)) id (simpleParse s)) } %token @@ -102,8 +108,8 @@ field :: { PackageConfig -> PackageConfig } | VARID '=' strlist {\p -> case $1 of - "exposedModules" -> p{exposedModules = $3} - "hiddenModules" -> p{hiddenModules = $3} + "exposedModules" -> p{exposedModules = moduleName $3} + "hiddenModules" -> p{hiddenModules = moduleName $3} "importDirs" -> p{importDirs = $3} "libraryDirs" -> p{libraryDirs = $3} "hsLibraries" -> p{hsLibraries = $3} @@ -130,7 +136,7 @@ field :: { PackageConfig -> PackageConfig } pkgid :: { PackageIdentifier } : CONID '{' VARID '=' STRING ',' VARID '=' version '}' - { PackageIdentifier{ pkgName = $5, + { PackageIdentifier{ pkgName = sParse "package name" $5, pkgVersion = $9 } } version :: { Version }