Library names, with Cabal submodule update
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 23 Jun 2015 20:15:17 +0000 (13:15 -0700)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Thu, 23 Jul 2015 20:35:45 +0000 (13:35 -0700)
commitf9687caf337d409e4735d5bb4cf73a7dc629a58c
tree3f4d0bc7fcd74b66ad750eed4d134c4afdcb7803
parent5ff4daddd9bc8f424d8f71fb01ebbbae9d608cdf
Library names, with Cabal submodule update

A library name is a package name, package version, and hash of the
version names of all textual dependencies (i.e. packages which were included.) A library
name is a coarse approximation of installed package IDs, which are suitable for
inclusion in package keys (you don't want to put an IPID in a package key, since
it means the key will change any time the source changes.)

    - We define ShPackageKey, which is the semantic object which
      is hashed into a PackageKey.  You can use 'newPackageKey'
      to hash a ShPackageKey to a PackageKey

    - Given a PackageKey, we can lookup its ShPackageKey with
      'lookupPackageKey'.  The way we can do this is by consulting
      the 'pkgKeyCache', which records a reverse mapping from
      every hash to the ShPackageKey.  This means that if you
      load in PackageKeys from external sources (e.g. interface
      files), you also need to load in a mapping of PackageKeys
      to their ShPackageKeys so we can populate the cache.

    - We define a 'LibraryName' which encapsulates the full
      depenency resolution that Cabal may have selected; this
      is opaque to GHC but can be used to distinguish different
      versions of a package.

    - Definite packages don't have an interesting PackageKey,
      so we rely on Cabal to pass them to us.

    - We can pretty-print package keys while displaying the
      instantiation, but it's not wired up to anything (e.g.
      the Outputable instance of PackageKey).

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1056

GHC Trac Issues: #10566
13 files changed:
compiler/backpack/ShPackageKey.hs [new file with mode: 0644]
compiler/ghc.cabal.in
compiler/main/DynFlags.hs
compiler/main/PackageConfig.hs
compiler/main/Packages.hs
docs/users_guide/packages.xml
libraries/Cabal
testsuite/tests/cabal/sigcabal01/Makefile
testsuite/tests/cabal/sigcabal01/all.T
testsuite/tests/cabal/sigcabal02/Makefile
testsuite/tests/safeHaskell/check/pkg01/safePkg01.stdout
testsuite/tests/th/TH_Roles2.stderr
utils/ghc-cabal/Main.hs