X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FPackageConfig.hs;h=c070ca2efb772b285855d309af191ab71c38e26e;hb=dfcbf782fc0571014e1d3302d38b33537142159a;hp=e19a10dbc53fbee3e6395749e34e036a958a9811;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs index e19a10d..c070ca2 100644 --- a/compiler/main/PackageConfig.hs +++ b/compiler/main/PackageConfig.hs @@ -4,30 +4,34 @@ module PackageConfig ( -- * PackageId - PackageId, - mkPackageId, stringToPackageId, packageIdString, packageConfigId, - packageIdFS, fsToPackageId, + mkPackageId, packageConfigId, unpackPackageId, -- * The PackageConfig type: information about a package PackageConfig, - InstalledPackageInfo(..), showPackageId, + InstalledPackageInfo_(..), showPackageId, Version(..), PackageIdentifier(..), - defaultPackageConfig + defaultPackageConfig, ) where #include "HsVersions.h" +import Module import Distribution.InstalledPackageInfo import Distribution.Package import Distribution.Version -import FastString +import Distribution.Compat.ReadP ( readP_to_S ) + +-- warning suppression +_unused :: FS.FastString +_unused = FSLIT("") -- ----------------------------------------------------------------------------- -- 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_ ModuleName +defaultPackageConfig :: PackageConfig defaultPackageConfig = emptyInstalledPackageInfo -- ----------------------------------------------------------------------------- @@ -44,26 +48,15 @@ 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 packageConfigId :: PackageConfig -> PackageId packageConfigId = mkPackageId . package - +unpackPackageId :: PackageId -> Maybe PackageIdentifier +unpackPackageId p + = case [ pid | (pid,"") <- readP_to_S parsePackageId str ] of + [] -> Nothing + (pid:_) -> Just pid + where str = packageIdString p