[project @ 2004-11-26 16:32:44 by simonmar]
authorsimonmar <unknown>
Fri, 26 Nov 2004 16:32:44 +0000 (16:32 +0000)
committersimonmar <unknown>
Fri, 26 Nov 2004 16:32:44 +0000 (16:32 +0000)
Further integration with the new package story.  GHC now supports
pretty much everything in the package proposal.

  - GHC now works in terms of PackageIds (<pkg>-<version>) rather than
    just package names.  You can still specify package names without
    versions on the command line, as long as the name is unambiguous.

  - GHC understands hidden/exposed modules in a package, and will refuse
    to import a hidden module.  Also, the hidden/eposed status of packages
    is taken into account.

  - I had to remove the old package syntax from ghc-pkg, backwards
    compatibility isn't really practical.

  - All the package.conf.in files have been rewritten in the new syntax,
    and contain a complete list of modules in the package.  I've set all
    the versions to 1.0 for now - please check your package(s) and fix the
    version number & other info appropriately.

  - New options:

-hide-package P    sets the expose flag on package P to False
-ignore-package P  unregisters P for this compilation

For comparison, -package P sets the expose flag on package P
        to True, and also causes P to be linked in eagerly.

        -package-name is no longer officially supported.  Unofficially, it's
a synonym for -ignore-package, which has more or less the same effect
as -package-name used to.

Note that a package may be hidden and yet still be linked into
the program, by virtue of being a dependency of some other package.
To completely remove a package from the compiler's internal database,
        use -ignore-package.

The compiler will complain if any two packages in the
        transitive closure of exposed packages contain the same
        module.

You *must* use -ignore-package P when compiling modules for
        package P, if package P (or an older version of P) is already
        registered.  The compiler will helpfully complain if you don't.
The fptools build system does this.

   - Note: the Cabal library won't work yet.  It still thinks GHC uses
     the old package config syntax.

Internal changes/cleanups:

   - The ModuleName type has gone away.  Modules are now just (a
     newtype of) FastStrings, and don't contain any package information.
     All the package-related knowledge is in DynFlags, which is passed
     down to where it is needed.

   - DynFlags manipulation has been cleaned up somewhat: there are no
     global variables holding DynFlags any more, instead the DynFlags
     are passed around properly.

   - There are a few less global variables in GHC.  Lots more are
     scheduled for removal.

   - -i is now a dynamic flag, as are all the package-related flags (but
     using them in {-# OPTIONS #-} is Officially Not Recommended).

   - make -j now appears to work under fptools/libraries/.  Probably
     wouldn't take much to get it working for a whole build.

ghc/compiler/main/PackageConfig.hs [new file with mode: 0644]

diff --git a/ghc/compiler/main/PackageConfig.hs b/ghc/compiler/main/PackageConfig.hs
new file mode 100644 (file)
index 0000000..2cb3c56
--- /dev/null
@@ -0,0 +1,60 @@
+--
+-- (c) The University of Glasgow, 2004
+--
+
+module PackageConfig (
+       -- * PackageId
+       PackageId, 
+       mkPackageId, stringToPackageId, packageIdString, packageConfigId,
+       
+       -- * The PackageConfig type: information about a package
+       PackageConfig,
+       InstalledPackageInfo(..), showPackageId,
+       Version(..),
+       PackageIdentifier(..),
+       defaultPackageConfig
+  ) where
+
+#include "HsVersions.h"
+
+import Distribution.InstalledPackageInfo
+import Distribution.Package
+import Data.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>.
+
+type PackageId = FastString  -- 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
+
+stringToPackageId :: String -> PackageId
+stringToPackageId = mkFastString
+
+mkPackageId :: PackageIdentifier -> PackageId
+mkPackageId = stringToPackageId . showPackageId
+
+packageConfigId :: PackageConfig -> PackageId
+packageConfigId = mkPackageId . package
+
+packageIdString :: PackageId -> String
+packageIdString = unpackFS