
On 20 Mar 2009, at 21:05, David Leimbach wrote:
Since GHC is written in Haskell, do you need to have another Haskell compiler installed before GHC 6.10.1 can be installed through MacPorts?
It bootstraps itself.
??? GHC does or MacPorts does. My experience was that you needed GHC to build GHC :-)
MacPort developers tweak sources into packages which can install by themselves. So one just types sudo port install ghc and it does the rest. Here is info about ghc:
$ port info ghc ghc 6.8.3, Revision 1, lang/ghc (Variants: universal, darwin_6, darwin_7, darwin_8_powerpc, darwin_8_i386, darwin_9_powerpc, darwin_9_i386, no_opengl) http://haskell.org/
The Glasgow Haskell Compiler is a robust, fully-featured, optimising compiler and interactive environment for Haskell 98, GHC compiles Haskell to either native code or C. It implements numerous experimental language extensions to Haskell 98, for example: concurrency, a foreign language interface, multi-parameter type classes, scoped type variables, existential and universal quantification, unboxed types, exceptions, weak pointers, and so on. GHC comes with a generational garbage collector, and a space and time profiler.
Library Dependencies: readline, gmp Runtime Dependencies: perl5.8 Platforms: darwin Maintainers: gwright@macports.org
However, as someone needs to do the packaging, the versions tend to be older than from direct sources. So the latter is to be preferred, but the package manager does the package chasing for you (which is a problem with Gtk+ installed directly). Therefore, as mentioned before, it might be best to install the GHC binaries and install libraries like Gtk+ from MacPorts. There is also Intel Gtk+ that binds directly to Aqua, the Mac OS X native GUI (for making native Mac OS X Applications): http://www.gtk-osx.org/ You need to set of environmental variables UNIX style, but there is a Mac OS X way, too (see below). In the traditional way, one must be aware of that the shell 'bash' (see 'man bash') reads different startup files when called as a login shell (as from the Terminal) and non-login-shell (as from X11 and xterm). For the former, one can put the stuff in .profile, and the latter .bashrc. To make things simple, one can put in .bashrc: source ~/.profile thus reading .profile. In .profile, one might put something like the stuff at the bottom of this letter (which also adds support for the other package manager, as well admitting user binaries to be installed). There is another, Mac OS X specific way (also see below): go to Terminal, and make a directory: cd mkdir .MacOSX cd .MacOSX touch environment.plist open -a Xcode environment.plist The last command opens the file into the Xcode editor, which has a facility to create the special format for these files. Pne drawback of this method is the one has to log out and login again to set them. This assumes you have installed Xcode, wither from the installation disk, or by signing up as a developer at http://developer.apple.com/ When working with files, it is convenient to set them so that they open in your favorite program. For that, I have found it convenient to install a System Preferences panel 'Default Apps' found at http://www.rubicode.com/Software/ I see now they have one for editing the environment.plist file. If you come from a non-UNIX (POSIX) platform, then note that in order to work as root, it is most of the time sufficient to use (from an administrator account) sudo -s The 'root' account is by default disabled (can be started from the Directory Utility). Also never edit in /usr/ outside /usr/local/, the other system directories, or /System/ as they belong to the system installation (Mac OS X user modified system files are out into / Library/, but often via some other program which does safety checks.) Hans Aberg ---- # Add to end of searchpath: append_path() { if ! eval test -z "\"\${$1##*:$2:*}\"" -o -z "\"\${$1%%*:$2}\"" -o - z "\"\${$1##$2:*}\"" -o -z "\"\${$1##$2}\"" ; then eval "$1=\$$1:$2" fi } # Add to beginning of searchpath: prepend_path() { if ! eval test -z "\"\${$1##*:$2:*}\"" -o -z "\"\${$1%%*:$2}\"" -o - z "\"\${$1##$2:*}\"" -o -z "\"\${$1##$2}\"" ; then eval "$1=$2:\$$1" fi } # Set system searchpaths: # In the case a directory may exist (depending on the program) both with and without # parent directory 'share/' (like in the cae of MANPATH and INFOPATH), the 'share/' # version is put first, as it is what is used in /usr on Mac OS X FreeSD UNIX. # The idea is that if a program is somehow adapted to this platform, the the stuff will # be moved to the 'share/' variation, and should thus be ovverride the unadapted versions. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin MANPATH=/usr/share/man:/usr/X11R6/man INFOPATH=/usr/share/info LIBPATH=/usr/lib:/usr/X11R6/lib # Prepend Fink searchpaths: test -r /sw/bin/init.sh && . /sw/bin/init.sh # Prepend MacPorts (former DarwinPorts) searchpaths: prepend_path PATH /opt/local/bin:/opt/local/sbin prepend_path MANPATH /opt/local/share/man:/opt/local/man prepend_path INFOPATH /opt/local/share/info:/opt/local/info prepend_path LIBPATH /opt/local/lib # Prepend MacTeX paths prepend_path PATH /usr/texbin prepend_path MANPATH /usr/local/texlive/2007/texmf/doc/man prepend_path INFOPATH /usr/local/texlive/2007/texmf/doc/info # Prepend /usr/local/ searchpaths: prepend_path PATH /usr/local/bin:/usr/local/X11R6/bin prepend_path MANPATH /usr/local/share/man:/usr/local/man prepend_path INFOPATH /usr/local/share/info:/usr/local/info prepend_path LIBPATH /usr/local/lib # Prepend $HOME searchpaths: prepend_path PATH $HOME/local/bin prepend_path MANPATH $HOME/local/share/man:$HOME/local/man prepend_path INFOPATH $HOME/local/share/info:$HOME/local/info prepend_path LIBPATH $HOME/local/lib # Export changed paths: export PATH export MANPATH export INFOPATH export LIBPATH ----