Where should cabal install to by default?

apfelmus apfelmus at quantentunnel.de
Mon Aug 4 07:36:34 EDT 2008

Duncan Coutts wrote:
> Manuel M T Chakravarty wrote:
>> * On OS X, its not generally appropriate to install into /usr/local  
>> either.  Each user has ~/Applications and ~/Library directories that  
>> are usually used for per-user installs.  Just generally using sudo and  
>> put binaries into /usr/local is also bad because not every user will  
>> have admin rights on the machine.
> Oh, great. I didn't know OS X had a standard location for per-user
> installs. That's excellent. So is there a preferred layout for those
> dirs? I'm guessing there probably is.

~/Applications seems to be new in OS X 10.5, I sure don't have it in 10.4. But 
it seems sensible nonetheless. (And it's documented here 

Note however that the ~/Applications directory is not directly comparable to a 
UNIX /bin . That's because applications in Mac OS X have binaries, data and all 
other batteries included in one folder, the "application bundle". For instance, 
the Thunderbird application is really a folder "Thunderbird.app" and looks 
something like this

   ~/Applications/Thunderbird.app/Contents/MacOS/thunderbird-bin      -- binary
   ~/Applications/Thunderbird.app/Contents/MacOS/ ...
   ~/Applications/Thunderbird.app/Contents/Resources/thunderbird.icns -- icons
   ~/Applications/Thunderbird.app/Contents/en.lproj/                  -- 
language specific
   ... etc

Bare-bones UNIX binaries like cabal-install itself and those produced by cabal 
don't really fit that scheme. That's why Mac OS X has a standard UNIX-style tree 
in /usr/local . Not sure what to do with per-user cabal, I'd make a fresh 
UNIX-tree at


or even


so we have



>> * ~/.cabal is bad on Mac OS, too.  Preferences ought to go into ~/ 
>> Library/Preferences/
> Ok. BTW, in that case we should probably fix
> System.Directory.getAppUserDataDirectory to follow the system convention
> on OSX. Currently it uses $HOME/.appname on all unix systems (and the
> Windows convention on Windows). If necessary we may want to
> split getAppUserDataDirectory into a variant for config and another for
> data.

System.Directory.getAppUserDataDirectory  should return


for programs that are packaged as OS X application bundle. Of course, that 
doesn't apply to most UNIX software...

However, configuration files are to go in


which is sufficiently similar to /etc .

> Since cabal-install is a program should it still be
> using ~/Library/Preferences/ or is there are
> corresponding ~/Applications/Preferences/ ? Where would be
> appropriate for cabal-install put its download cache and build logs?

The ~/Library/  folder is more like /usr/etc and /usr/share than /usr/lib , so 
it works for both executable and shared libraries.

     for configuration files.

~/Library/Application Support/
     for application data that you don't need to run the application.
     Like examples files or clip arts.

     for cache files.

     for logs.

Some documentation from Apple:


More information about the Libraries mailing list