[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