packunused: Tool for detecting redundant Cabal package dependencies

[ bsd3, distribution, program ] [ Propose Tags ] [ Report a vulnerability ]

This simple CLI tool allows to find out which of the packages listed as build-depends in a Cabal package description file are redundant.

packunused works by taking advantage of GHC's -ddump-minimal-imports feature which creates .import files for each compiled module containing a minimal set of explicit import declarations. These .import files together with Cabal's generated package configuration meta-data is analyzed by packunused to detect potentially redundant package dependencies.

In order to use packunused you have to configure the package as usual. See the example session below:

cabal clean
rm *.imports
cabal configure -O0 --disable-library-profiling
cabal build --ghc-option=-ddump-minimal-imports
packunused

Experimental support for stack:

stack setup --upgrade-cabal  # necessary only when stack's global Cabal installation is out of date
stack clean
stack build --ghc-options '-ddump-minimal-imports -O0'
packunused

The -O0 --disable-library-profiling options are just to speed up compilation. In some cases you might want to pass additional options to the configure step, such as --enable-benchmark or --enable-tests.

When run, packunused prints a report to standard output listing its findings for each component built. The following is an example for the packunused package itself, with a redundant dependency added for demonstration on purpose:

detected package components
~~~~~~~~~~~~~~~~~~~~~~~~~~~

 - executable(s): packunused

(component names suffixed with '*' are not configured to be built)

executable(packunused)
~~~~~~~~~~~~~~~~~~~~~~

The following package dependencies seem redundant:

 - criterion-0.6.2.0-9dd4d764629a47662168743b2dfda9bc

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.1.0, 0.1.1.1, 0.1.1.2, 0.1.1.3, 0.1.1.4, 0.1.2
Change log changelog.md
Dependencies base (>=4.5 && <4.10), Cabal (>=1.24 && <1.25), directory (>=1.1 && <1.4), filepath (>=1.3 && <1.5), haskell-src-exts (>=1.18.2 && <1.20), optparse-applicative (>=0.8 && <0.14), process (>=1.1 && <1.7), split (>=0.2 && <0.3) [details]
Tested with ghc ==8.0.2, ghc ==7.10.3, ghc ==7.8.4, ghc ==7.6.3, ghc ==7.4.2
License BSD-3-Clause
Copyright © 2014 Herbert Valerio Riedel
Author Herbert Valerio Riedel
Maintainer Herbert Valerio Riedel <hvr@gnu.org>
Revised Revision 1 made by HerbertValerioRiedel at 2017-06-03T11:13:25Z
Category Distribution
Home page https://github.com/hvr/packunused
Bug tracker https://github.com/hvr/packunused/issues
Source repo head: git clone https://github.com/hvr/packunused.git
Uploaded by HerbertValerioRiedel at 2017-05-05T16:38:49Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Executables packunused
Downloads 8684 total (22 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2017-05-05 [all 2 reports]