-- |-- Package configuration information: essentially the interface to Cabal, with-- some utilities---- (c) The University of Glasgow, 2004--modulePackageConfig(-- $package_naming-- * PackageIdmkPackageId,packageConfigId,-- * The PackageConfig type: information about a packagePackageConfig,InstalledPackageInfo_(..),display,Version(..),PackageIdentifier(..),defaultPackageConfig,packageConfigToInstalledPackageInfo,installedPackageInfoToPackageConfig)where#include "HsVersions.h"importDistribution.InstalledPackageInfoimportDistribution.ModuleNameimportDistribution.Packagehiding(PackageId)importDistribution.TextimportDistribution.VersionimportMaybesimportModule-- ------------------------------------------------------------------------------- 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.typePackageConfig=InstalledPackageInfo_Module.ModuleNamedefaultPackageConfig::PackageConfigdefaultPackageConfig=emptyInstalledPackageInfo-- ------------------------------------------------------------------------------- PackageId (package names with versions)-- $package_naming-- #package_naming#-- Mostly the compiler deals in terms of 'PackageName's, which don't-- have the version suffix. This is so that we don't need to know the-- version for the @-package-name@ flag, or know the versions of-- wired-in packages like @base@ & @rts@. Versions are confined to the-- package sub-system.---- This means that in theory you could have multiple base packages installed-- (for example), and switch between them using @-package@\/@-hide-package@.---- A 'PackageId' is a string of the form @<pkg>-<version>@.-- | Turn a Cabal 'PackageIdentifier' into a GHC 'PackageId'mkPackageId::PackageIdentifier->PackageIdmkPackageId=stringToPackageId.display-- | Get the GHC 'PackageId' right out of a Cabalish 'PackageConfig'packageConfigId::PackageConfig->PackageIdpackageConfigId=mkPackageId.sourcePackageId-- | Turn a 'PackageConfig', which contains GHC 'Module.ModuleName's into a Cabal specific-- 'InstalledPackageInfo' which contains Cabal 'Distribution.ModuleName.ModuleName'spackageConfigToInstalledPackageInfo::PackageConfig->InstalledPackageInfopackageConfigToInstalledPackageInfo(pkgconf@(InstalledPackageInfo{exposedModules=e,hiddenModules=h}))=pkgconf{exposedModules=mapconverte,hiddenModules=mapconverth}whereconvert::Module.ModuleName->Distribution.ModuleName.ModuleNameconvert=(expectJust"packageConfigToInstalledPackageInfo").simpleParse.moduleNameString-- | Turn an 'InstalledPackageInfo', which contains Cabal 'Distribution.ModuleName.ModuleName's-- into a GHC specific 'PackageConfig' which contains GHC 'Module.ModuleName'sinstalledPackageInfoToPackageConfig::InstalledPackageInfo_String->PackageConfiginstalledPackageInfoToPackageConfig(pkgconf@(InstalledPackageInfo{exposedModules=e,hiddenModules=h}))=pkgconf{exposedModules=mapmkModuleNamee,hiddenModules=mapmkModuleNameh}