[Haskell-cafe] Listing package dependencies from GHC
Thomas Schilling
nominolo at googlemail.com
Thu May 3 10:15:03 EDT 2007
> If I'm doing development between ghci and vim, all the different
> dependencies I need get linked in when required without me asking.
> Similarly if I call "ghc --make" from the command line. But I have to
> write them in manually to my *.cabal file otherwise the compilation
> process will fail.
>
> Until now I've just loaded the program in to ghci and noted down all
> the dependencies it links in. Am I missing a trick? There must be an
> easier way, especially for multiple source files.
I once used this perl script to determine the files I was actually
used (to have proper LOC stats). It uses ghc -M which usually
outputs the dependencies as makefile targets, and then grep over this
to get all the .hs files. If you have different file types you might
want to modify this:
#!/usr/bin/env perl
# Prints the .hs files that are actually used to STDOUT
$tmpfile = '/tmp/deps';
$mainfile = 'Foo.hs';
$ghc_deps = `ghc -M $mainfile -optdep-f -optdep$tmpfile`; die "ghc -M
failed\n" if $? != 0;
open(INF, "< $tmpfile") || die "Could not open $tempfile\n";
@files = ();
while (<INF>) {
m/(\w+\.hs)/;
push(@files, $1);
}
close (INF);
undef %saw;
@nodups = grep(!$saw{$_}++, @files); # remove duplictes
print join(' ', at nodups), "\n";
More information about the Haskell-Cafe
mailing list