[GHC] #15478: ghc-pkg package config validation too strict

GHC ghc-devs at haskell.org
Sun Aug 5 07:24:02 UTC 2018


#15478: ghc-pkg package config validation too strict
-------------------------------------+-------------------------------------
           Reporter:  mboes          |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.6.1
          Component:  Compiler       |           Version:  8.4.3
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Registration of a package using the following config works:

 {{{
 name: frob
 version: 0.1.0.0
 id: frob-0.1.0.0-inplace
 key: frob-0.1.0.0-inplace
 exposed: True
 exposed-modules:
     Baz from base-4.11.1.0:Data.Bool,
     Foo from base-4.11.1.0:Data.List,
     Frob
 depends:
     base-4.11.1.0
 }}}

 But while GHC is happy to work with the following variant of the above
 configuration added by hand to the package database, it's not possible to
 add it via `ghc-pkg register`, because it's rejected at validation phase:

 {{{
 name: frob
 version: 0.1.0.0
 id: frob-0.1.0.0-inplace
 key: frob-0.1.0.0-inplace
 exposed: True
 exposed-modules:
     Baz from base:Data.Bool,
     Foo from base:Data.List,
     Frob
 depends:
     base
 }}}

 We get the following error:

 {{{
 $ ghc-pkg register frob.conf
 frob-0.1.0.0: module reexport refers to a non-existent defining package:
 base (use --force to override)
 }}}

 This is unfortunate, because in general unit-id's don't just have version
 numbers but also hashes, and in some settings these can be hard to guess.

 The general point is that ghc-pkg should be exactly as permissive as GHC
 itself, not less or more. One way to achieve that is to make the
 `checkModule` function in `utils/ghc-pkg/Main.hs` (called by
 `validatePackageConfig`) use `lookupPackageName` as a fallback to
 `lookupUnitId`, and say that if `lookupPackageName` returns exactly one
 result (i.e. the name is unambiguous) then that should be considered okay.
 Perhaps not A-okay, because the name could become ambiguous in the future
 when more entries are added to the database, but that should at most be a
 warning, not an error, I think.

 Note: in principle we should be able to use the `--force` flag here to
 bypass the results of configuration validation. But oddly enough,
 `--force` ''filters out'' entries that it objects about, rather than just
 letting them pass through. So `--force` is not a workable workaround.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15478>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list