summaryrefslogtreecommitdiff
path: root/compiler/main/PackageConfig.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/main/PackageConfig.hs')
-rw-r--r--compiler/main/PackageConfig.hs69
1 files changed, 69 insertions, 0 deletions
diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs
new file mode 100644
index 0000000000..e19a10dbc5
--- /dev/null
+++ b/compiler/main/PackageConfig.hs
@@ -0,0 +1,69 @@
+--
+-- (c) The University of Glasgow, 2004
+--
+
+module PackageConfig (
+ -- * PackageId
+ PackageId,
+ mkPackageId, stringToPackageId, packageIdString, packageConfigId,
+ packageIdFS, fsToPackageId,
+
+ -- * The PackageConfig type: information about a package
+ PackageConfig,
+ InstalledPackageInfo(..), showPackageId,
+ Version(..),
+ PackageIdentifier(..),
+ defaultPackageConfig
+ ) where
+
+#include "HsVersions.h"
+
+import Distribution.InstalledPackageInfo
+import Distribution.Package
+import Distribution.Version
+import FastString
+
+-- -----------------------------------------------------------------------------
+-- 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
+defaultPackageConfig = emptyInstalledPackageInfo
+
+-- -----------------------------------------------------------------------------
+-- PackageId (package names with versions)
+
+-- Mostly the compiler deals in terms of PackageNames, 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>.
+
+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
+
+