Skip to content

ghc-pkg, package database path containing a trailing slash, and ${pkgroot}

When passing a package database to ghc-pkg via GHC_PACKAGE_PATH or --package-db, ${pkgroot} does not get computed properly if the input path contains a trailing slash.

Default behavior:

$ ghc-pkg describe base | grep pkgroot

pkgroot: "/usr/lib/ghc-7.10.2"

Correct behavior (no trailing slash):

$ ghc-pkg --package-db /usr/lib/ghc-7.10.2/package.conf.d describe base | grep pkgroot

pkgroot: "/usr/lib/ghc-7.10.2"

$ GHC_PACKAGE_PATH=/usr/lib/ghc-7.10.2/package.conf.d ghc-pkg describe base | grep pkgroot

pkgroot: "/usr/lib/ghc-7.10.2"

Incorrect behavior (with trailing slash):

$ ghc-pkg --package-db /usr/lib/ghc-7.10.2/package.conf.d/ describe base | grep pkgroot

pkgroot: "/usr/lib/ghc-7.10.2/package.conf.d"

$ GHC_PACKAGE_PATH=/usr/lib/ghc-7.10.2/package.conf.d/ ghc-pkg describe base | grep pkgroot

pkgroot: "/usr/lib/ghc-7.10.2/package.conf.d"

When this bug happens, ghc-pkg check complains about missing files for packages using ${pkgroot}.

This bug happens because ${pkgroot} is computed using takeDirectory. It should instead use (takeDirectory . dropTrailingPathSeparator)

Trac metadata
Trac field Value
Version 8.0.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component ghc-pkg
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information