X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FPackageConfig.hs;h=a93a7e527686aad2775cc4beb77122da9ef29eb4;hp=d5569c4a85e06697d18177b096fc1bad225a19cd;hb=cb906a124e36cb5054784a5bc44eb9d099d20709;hpb=e47ddd4edb7e57b5a93a5fdd00ce18809010ee33 diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs index d5569c4..a93a7e5 100644 --- a/compiler/main/PackageConfig.hs +++ b/compiler/main/PackageConfig.hs @@ -12,22 +12,26 @@ module PackageConfig ( Version(..), PackageIdentifier(..), defaultPackageConfig, + packageConfigToInstalledPackageInfo, + installedPackageInfoToPackageConfig, ) where #include "HsVersions.h" +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 ) +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 @@ -57,3 +61,21 @@ unpackPackageId p [] -> 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