X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FPackageConfig.hs;h=a93a7e527686aad2775cc4beb77122da9ef29eb4;hb=2377596a0f1992347edbaa7dcd8b431f93e196a7;hp=c070ca2efb772b285855d309af191ab71c38e26e;hpb=1a7d1b77334529ca96ed4cbc03fcb5f55dc2de4a;p=ghc-hetmet.git diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs index c070ca2..a93a7e5 100644 --- a/compiler/main/PackageConfig.hs +++ b/compiler/main/PackageConfig.hs @@ -8,29 +8,30 @@ module PackageConfig ( -- * The PackageConfig type: information about a package PackageConfig, - InstalledPackageInfo_(..), showPackageId, + InstalledPackageInfo_(..), display, Version(..), PackageIdentifier(..), defaultPackageConfig, + packageConfigToInstalledPackageInfo, + installedPackageInfoToPackageConfig, ) where #include "HsVersions.h" -import Module +import Data.Maybe +import Module import Distribution.InstalledPackageInfo +import Distribution.ModuleName import Distribution.Package +import Distribution.Text import Distribution.Version -import Distribution.Compat.ReadP ( readP_to_S ) - --- warning suppression -_unused :: FS.FastString -_unused = FSLIT("") +import Distribution.Compat.ReadP -- ----------------------------------------------------------------------------- -- Our PackageConfig type is just InstalledPackageInfo from Cabal. Later we -- might need to extend it with some GHC-specific stuff, but for now it's fine. -type PackageConfig = InstalledPackageInfo_ ModuleName +type PackageConfig = InstalledPackageInfo_ Module.ModuleName defaultPackageConfig :: PackageConfig defaultPackageConfig = emptyInstalledPackageInfo @@ -49,14 +50,32 @@ defaultPackageConfig = emptyInstalledPackageInfo -- A PackageId is a string of the form -. mkPackageId :: PackageIdentifier -> PackageId -mkPackageId = stringToPackageId . showPackageId +mkPackageId = stringToPackageId . display packageConfigId :: PackageConfig -> PackageId packageConfigId = mkPackageId . package unpackPackageId :: PackageId -> Maybe PackageIdentifier unpackPackageId p - = case [ pid | (pid,"") <- readP_to_S parsePackageId str ] of + = case [ pid | (pid,"") <- readP_to_S parse str ] of [] -> Nothing (pid:_) -> Just pid where str = packageIdString p + +packageConfigToInstalledPackageInfo :: PackageConfig -> InstalledPackageInfo +packageConfigToInstalledPackageInfo + (pkgconf@(InstalledPackageInfo { exposedModules = e, + hiddenModules = h })) = + pkgconf{ exposedModules = map convert e, + hiddenModules = map convert h } + where convert :: Module.ModuleName -> Distribution.ModuleName.ModuleName + convert = fromJust . simpleParse . moduleNameString + +installedPackageInfoToPackageConfig :: InstalledPackageInfo -> PackageConfig +installedPackageInfoToPackageConfig + (pkgconf@(InstalledPackageInfo { exposedModules = e, + hiddenModules = h })) = + pkgconf{ exposedModules = map convert e, + hiddenModules = map convert h } + where convert :: Distribution.ModuleName.ModuleName -> Module.ModuleName + convert = mkModuleName . display