X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FPackageConfig.hs;h=a93a7e527686aad2775cc4beb77122da9ef29eb4;hb=9412e62942ebab0599c7fb0b358a9d4869647b67;hp=e19a10dbc53fbee3e6395749e34e036a958a9811;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs index e19a10d..a93a7e5 100644 --- a/compiler/main/PackageConfig.hs +++ b/compiler/main/PackageConfig.hs @@ -4,30 +4,35 @@ module PackageConfig ( -- * PackageId - PackageId, - mkPackageId, stringToPackageId, packageIdString, packageConfigId, - packageIdFS, fsToPackageId, + mkPackageId, packageConfigId, unpackPackageId, -- * The PackageConfig type: information about a package PackageConfig, - InstalledPackageInfo(..), showPackageId, + InstalledPackageInfo_(..), display, Version(..), PackageIdentifier(..), - defaultPackageConfig + 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 FastString +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 +type PackageConfig = InstalledPackageInfo_ Module.ModuleName +defaultPackageConfig :: PackageConfig defaultPackageConfig = emptyInstalledPackageInfo -- ----------------------------------------------------------------------------- @@ -44,26 +49,33 @@ defaultPackageConfig = emptyInstalledPackageInfo -- -- A PackageId is a string of the form -. -newtype PackageId = PId FastString deriving( Eq, Ord ) -- includes the version - -- easier not to use a newtype here, because we need instances of - -- Binary & Outputable, and we're too early to define them - -fsToPackageId :: FastString -> PackageId -fsToPackageId = PId - -packageIdFS :: PackageId -> FastString -packageIdFS (PId fs) = fs - -stringToPackageId :: String -> PackageId -stringToPackageId = fsToPackageId . mkFastString - -packageIdString :: PackageId -> String -packageIdString = unpackFS . packageIdFS - 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 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