• Edward Z. Yang's avatar
    Library names, with Cabal submodule update · f9687caf
    Edward Z. Yang authored
    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: default avatarEdward 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
    f9687caf
safePkg01.stdout 1.3 KB