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