<div dir="ltr">The problem is that the package db contains only what ghc needs to be able to use the library; not the additional information needed to safely remove it. (There are other package systems with this problem, notably Apple's. Apple decided that instead of solving it, they would only support applications that are complete bundles in and of themselves.) And arguably it doesn't actually belong in ghc-pkg insofar as it's not intended to do anything but store the information needed for ghc to link against packages.<div><br></div><div>This is something of a nasty problem, considering that storing uninstall information separately is not particularly robust. Perhaps ghc-pkg should, if it doesn't already, support extension fields that e.g. cabal can use to store uninstall information. (But even that potentially has problems, given that people are known to copy package registration information between package databases. If there is uninstall information in there, what happens if someone uninstalls via one or the other copy?)</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 12, 2017 at 10:53 PM, Evan Laforge <span dir="ltr"><<a href="mailto:qdunkan@gmail.com" target="_blank">qdunkan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">For a very long time, I've used a local script to uninstall libraries.<br>
Initially it was very simple: use ghc-pkg field to find and remove<br>
library-dirs, import-dirs, and haddock-html, and call ghc-pkg<br>
unregister.<br>
<br>
It served well for a long time, but eventually I got tired of copy<br>
paste games and extended it to be able to recursively delete<br>
dependents too.  Unfortunately now it's no longer so simple.  The main<br>
problem is that the only way I know to find dependents is to ghc-pkg<br>
unregister, and see what the error message complains about.  That's<br>
obviously pretty bad, since by that time you've already unregistered,<br>
so it's too late to back out.  The non-atomic nature of unregister+rm<br>
has always caused problems anyway, since if unregister succeeds, but<br>
the remove fails, we are stuck with a partial install.  Recursive<br>
delete is too error prone, so I reverted that.<br>
<br>
And then I discovered that hmatrix helpfully includes /opt/local/lib<br>
and /usr/local/lib in its library-dirs, so clearly just deleting<br>
whatever the package tells me is not very safe.  All this has led me<br>
to believe uninstalling packages is not so simple, and maybe there<br>
should be an actual real way to do it, not everyone hacking up their<br>
own dangerous shell scripts.<br>
<br>
So... is there?  Should there be one?  Is there interest in one?  How<br>
do other people uninstall libraries?  Is there a better interface to<br>
the pkg db than ghc-pkg?  Is there a better way to find dependents<br>
than ghc-pkg unregister?<br>
______________________________<wbr>_________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.<wbr>org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/glasgow-<wbr>haskell-users</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div>