
#289: symlink binaries into ~/bin ---------------------------------+------------------------------------------ Reporter: duncan | Owner: Type: enhancement | Status: new Priority: normal | Milestone: Cabal-1.4 Component: cabal-install tool | Version: Severity: normal | Resolution: Keywords: | Difficulty: very easy (<1 hour) Ghcversion: 6.8.2 | Platform: ---------------------------------+------------------------------------------ Comment (by Isaac Dupree): Replying to [comment:6 duncan]:
I guess you can tell cabal to put symlinks in ~/.cabal/bin instead of ~/bin and to use versioned binaries. Would that do?
if it works, it's fine with me
Mess what mess? There will be some symlinks in `~/bin` pointing to `~/.cabal/bin`. Using `ls -l` they will be easily identifiable if you want to delete them.
yes, that mess. And then there's always the risk that they come back next time (next time I use Cabal, that is), unless I found out how to disable it in the config, changed it, and didn't make any typoes or other mistakes. (Changing a config file is not the sort of thing you get instant feedback on.)
This should just work. You have `/usr/bin` in your `$PATH` before `$HOME/bin`
no I don't, I have `$HOME/bin` earlier. Usually when I install things locally it's because the package-manager version is older and I want to use the newer version! For completeness, here's my current `$PATH`: {{{ $ echo $PATH /Users/me/inst/bin:/Users/me/scripts:/Users/me/HOME/bin:/Users/me/HOME/.cabal/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/Users/me/inst/stow /fish-darcs20080706+open-help-fix/bin:/usr/X11R6/bin }}}
Ok, but do you have any specific problems with what we're proposing? If so what is your suggestion for the best default behavior?
er, sorry for the rants, did it explain anything? I think if all
I suggest that if the config file is empty, then if anything looks suspicious ($HOME/bin is not in PATH or is a symlink), you ask the user what they want to do, and record that choice in the config file. Actually it'd probably be a service to ask even if they have no $HOME/bin, and create it if they want one, and otherwise record otherwise in the config file. Is it a problem, being interactive? Or simpler: just ask any time the config file doesn't say anything about it and you're installing a binary. programs had always been as polite as Cabal is planning to be, I ''might'' have appreciated it doing that automatically...
So you mean this sounds ok?
okay as long as no one else complains about it -- and certainly aids discoverability, because anyone who looks in their `$HOME/bin` will implicitly be able to find out about the existence of `$HOME/.cabal`!
We're not really so concerned with people who know what they're doing, except to the extent that we do not annoy them. What we want is for things to "Just Work"(tm) for users who don't know and don't care. The current behavior of installing just to `~/.cabal/bin` fails that test.
Yeah, that's why we need to worry about what happens for users that don't have a `$HOME/bin` currently. And if we ever create `$HOME/bin` ourselves, about distros that don't add `$HOME/bin` to `$PATH`, because e.g. modifying files like `.bashrc` isn't going to be very reliable. I noticed I have a directory "$HOME/perl", probably from using CPAN sometime, but I don't remember if I chose that directory-name or it did: {{{
ls $HOME/perl/ bin/ lib/ ls $HOME/perl/bin/ config_data* ptar* ptardiff* pwhich* shasum* ysh* # and $HOME/perl/lib/perl5/(lots of directories and stuff) }}}
Probably the best we can do is output a message explaining the situation whenever (or the first time) we install a binary, possibly with the addition of some choices. Probably the message needs to be different on Windows too (If I was suddenly on Windows, I would need a helpful message like that :-) -Isaac -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/289#comment:7 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects