Personal tools

Gtk2Hs/Mac

From HaskellWiki

< Gtk2Hs(Difference between revisions)
Jump to: navigation, search
(table of configurations)
(HomeBrew (64 bit, last checked 2012-04))
(31 intermediate revisions by 6 users not shown)
Line 6: Line 6:
 
!|OS
 
!|OS
 
!|GTK
 
!|GTK
  +
!|Gtk2Hs
 
!|GHC
 
!|GHC
 
!|Haskell Platform
 
!|Haskell Platform
  +
|-
  +
|2012-04
  +
|Intel 64-bit
  +
|Lion - 10.7.3, Xcode 4.3
  +
|HomeBrew
  +
|0.12.3
  +
|7.0.4
  +
|2011.3.0.0
  +
|-
  +
|2012-02
  +
|Intel 64-bit
  +
|Lion - 10.7.3, Xcode 4.1
  +
|MacPorts
  +
|darcs HEAD 2012-02-20
  +
|7.4.1 (built from source, 64-bit)
  +
|
 
|-
 
|-
 
|2011-08
 
|2011-08
|Intel 32 bit
+
|Intel 32-bit
 
|Snow Leopard
 
|Snow Leopard
|2.24.5 HomeBrew
+
|2.24.5 Homebrew
  +
|gtk-0.12.0
 
|7.0.3
 
|7.0.3
 
|2011.2.0.1
 
|2011.2.0.1
 
|-
 
|-
 
|2011-03
 
|2011-03
|Intel 64 bit
+
|Intel 64-bit
 
|Leopard
 
|Leopard
 
|MacPorts
 
|MacPorts
  +
|
 
|6.10
 
|6.10
  +
|
 
|}
 
|}
   
== HomeBrew (last checked 2011-08) ==
+
== HomeBrew (64 bit, last checked 2012-08) ==
  +
  +
These instructions come from [https://gist.github.com/2420144 a gist by Carter Schonwald]
  +
  +
1. Install the gtk library and dependencies
  +
  +
<pre>
  +
brew install glib cairo gtk gettext fontconfig
  +
brew deps gtk # see below
  +
brew deps gtk | xargs brew link
  +
brew link cairo gettext fontconfig
  +
gtk-demo
  +
</pre>
  +
  +
2. Build freetype by hand ([http://sourceforge.net/projects/freetype/files/freetype2/2.4.8/freetype-2.4.8.tar.bz2/download?use_mirror=iweb download])
  +
  +
<pre>
  +
brew install stow
  +
mkdir /usr/local/stow
  +
cd freetype-2.4.8
  +
./configure --prefix /usr/local/stow/freetype-2.4.8
  +
make
  +
make install
  +
cd /usr/local/stow
  +
stow freetype-2.4.8
  +
</pre>
  +
  +
3. Install Haskell GTK
  +
<pre>
  +
cabal install gtk2hs-buildtools
  +
cabal install gtk
  +
</pre>
  +
  +
4. Update for Mountain Lion (OSX 10.8)
  +
  +
This OS release uses xquartz project X11 implementation, that may yield errors while building the package.
  +
  +
In the above step 3 (cabal install gtk) I had errors that were resolved by:
  +
  +
4.1 Fixing any detail reported by "brew doctor"
  +
  +
4.2. Accepting the XCode 4.4 command line tool's license:
  +
<pre>sudo xcodebuild -license</pre>
  +
  +
4.3. Setting pkg-config search path to:
  +
  +
<pre>
  +
export PKG_CONFIG_PATH=~/Source/gtk/source/libpng-1.4.8/:/opt/X11/lib/pkgconfig
  +
</pre>
  +
  +
4.4. Building (as cited in gtk2hs mac instructions) with
  +
<pre>
  +
cabal install gtk -fhave-quartz-gtk
  +
</pre>
  +
  +
== HomeBrew (32 bit, last checked 2011-08) ==
   
 
<pre>
 
<pre>
Line 30: Line 49:
 
gtk-demo
 
gtk-demo
 
</pre>
 
</pre>
If the gtk-demo appears to work, proceed to the rest of the ThreadScope install.
+
If the gtk-demo appears to work, proceed to the rest of the gtk2hs install.
   
 
=== Troubleshooting ===
 
=== Troubleshooting ===
Line 38: Line 57:
 
Try running the gtk-demo program. Does it also fail?
 
Try running the gtk-demo program. Does it also fail?
   
If so, did you try updating your port? For example, if you are using Howebrew try:<pre>brew update brew install gtk+</pre>
+
If so, did you try updating your port? For example, if you are using Howebrew try:
   
Then try gtk-demo again and finally<pre>cabal install --renistall gtkhs</pre>
+
<pre>
  +
brew update
  +
brew install gtk+
  +
</pre>
   
It may be worthwhile to try a [http://projects.haskell.org/gtk2hs/documentation/#hello_world gtkhs helloworld]
+
Then try gtk-demo again and finally
   
== The Quick-Guide for OS X 10.6, 64bit, MacPorts ==
+
<pre>cabal install --renistall gtk</pre>
  +
  +
It may be worthwhile to try a [http://projects.haskell.org/gtk2hs/documentation/#hello_world gtkhs helloworld]
   
Setbacks: old ghc (6.10.4 as of 2011-03-10)
+
== MacPorts (last checked 2011-03-10) ==
   
* Install MacPorts (macports.org)
+
* Install [http://www.macports.org/ MacPorts]
* Add +universal to /opt/local/etc/macports/variants.conf (not needed on 32bit)
+
* Add <tt>+universal</tt> to <tt>/opt/local/etc/macports/variants.conf</tt> (not needed on 32bit)
* execute: sudo port install ghc gtk2 gvfs cairo librsvg libglade2 gtkglext gtksourceview2 && sudo port install gtk2hs -universal
+
* execute:<pre>sudo port install ghc gtk2 gvfs cairo librsvg libglade2 gtkglext gtksourceview2 && sudo port install gtk2hs -universal</pre>
   
== Using MacPorts and Snow Leopard ==
+
=== Detailed instructions ===
   
 
This explains how to install Gtk2Hs-0.10.1 on Mac OS X 10.6 Snow Leopard, in combination with GTK+ from MacPorts.
 
This explains how to install Gtk2Hs-0.10.1 on Mac OS X 10.6 Snow Leopard, in combination with GTK+ from MacPorts.
   
 
* Install the [http://hackage.haskell.org/platform/ Haskell Platform] for Mac
 
* Install the [http://hackage.haskell.org/platform/ Haskell Platform] for Mac
* Download gtk2hs from [http://www.haskell.org/gtk2hs/ gtk2hs website] and untar it.
+
* Download gtk2hs from [http://www.haskell.org/gtk2hs/ Gtk2Hs website] and untar it.
* Install gtk, cairo, etc. from MacPorts like this (note that the +universal is needed; if you already installed gtk or one of its dependencies, it is recommended you reinstall those as detailed in the NB at the end of this section).
+
* Install gtk, cairo, etc. from MacPorts like this (note that the <tt>+universal</tt> is needed; if you already installed gtk or one of its dependencies, it is recommended you reinstall those as detailed in the NB at the end of this section).
:::sudo port install gtk +universal
+
<pre>sudo port install gtk +universal</pre>
* go to the directory where gtk2hs is untarred and run
+
* Go to the directory where gtk2hs is untarred and run
:::./configure --disable-split-objs --disable-gio
+
<pre>./configure --disable-split-objs --disable-gio
:::make
+
make
:::sudo make install
+
sudo make install</pre>
   
 
Alternatively, if you wish to follow the Mac OS X style of directory layout, you can use this configure command instead:
 
Alternatively, if you wish to follow the Mac OS X style of directory layout, you can use this configure command instead:
:::./configure --with-pkgconf=/Users/username/.ghc/i386-darwin-6.10.4/package.conf --prefix=/Users/username/Library/Haskell/packages/gtk2hs --disable-split-objs --disable-gio
+
<pre>./configure --with-pkgconf=/Users/$USER/.ghc/i386-darwin-6.10.4/package.conf --prefix=/Users/$USER/Library/Haskell/packages/gtk2hs --disable-split-objs --disable-gio</pre>
   
Where username is your username ofcourse. Right now you should be able to run the demos. Unfortunately, to build any libraries depending on gtk2hs, such as [http://hackage.haskell.org/package/Chart/ Chart], you need to edit one more file. You will need to find "package.conf" for your ghc by doing
+
Right now you should be able to run the demos. Unfortunately, to build any libraries depending on Gtk2Hs, such as [http://hackage.haskell.org/package/Chart/ Chart], you need to edit one more file. You will need to find <tt>package.conf</tt> for your installed GHC by running
:::ghc-pkg list
+
In the output you will see the full directory to your package.conf file. In this file, you need to search for "gthread", and everywhere you can find it, add "/opt/local/lib" (with quotes) to the libraryDirs array before it.
+
<pre>ghc-pkg list</pre>
  +
  +
In the output you will see the full directory to your <tt>package.conf</tt> file. In this file, you need to search for "gthread", and everywhere you can find it, add <tt>"/opt/local/lib"</tt> (with quotes) to the <tt>libraryDirs</tt> array before it.
   
 
If all went well, it should be properly installed now.
 
If all went well, it should be properly installed now.
   
NB: If compiling fails with architecture errors for certain dynlibs, you need to reinstall the packages these dynlibs belong to with +universal by doing
+
NB: If compiling fails with architecture errors for certain dynlibs, you need to reinstall the packages these dynlibs belong to with <tt>+universal</tt> by doing
:::sudo port upgrade packagename --enforce-variants +universal
+
  +
<pre>sudo port upgrade packagename --enforce-variants +universal</pre>
  +
 
Alternatively, and this is recommended, you can follow the steps on [http://passingcuriosity.com/2009/haskell-on-snow-leopard/ Haskell On Snow Leopard Blogpost] to immediately add the universal variant of each package:
 
Alternatively, and this is recommended, you can follow the steps on [http://passingcuriosity.com/2009/haskell-on-snow-leopard/ Haskell On Snow Leopard Blogpost] to immediately add the universal variant of each package:
# Edit /opt/local/macports/variants.conf and add +universal to the end of this file
+
# Edit <tt>/opt/local/macports/variants.conf</tt> and add <tt>+universal</tt> to the end of this file
 
# sudo port selfupdate
 
# sudo port selfupdate
 
# sudo port sync
 
# sudo port sync
# sudo port upgrade --force-installed
+
# sudo port upgrade --force installed
   
== Using the GTK+ OS X Framework ==
+
== GTK+ OS X Framework ==
   
 
This explains how to install Gtk2Hs on Macs using the native [http://gtk-osx.sourceforge.net/ GTK+ OS X Framework], a port of GTK+ to the Mac that does '''not''' depend on X11, and hence, is better integrated into the Mac desktop - i.e., menus actually appear in the menu bar, where they belong. It also avoids the often tedious installation of GTK+ via MacPorts. However, it misses support for optional Gtk2Hs packages that are currently not supported by the [http://gtk-osx.sourceforge.net/ GTK+ OS X Framework], most notably support for Glade. It does include support for Cairo, though.
 
This explains how to install Gtk2Hs on Macs using the native [http://gtk-osx.sourceforge.net/ GTK+ OS X Framework], a port of GTK+ to the Mac that does '''not''' depend on X11, and hence, is better integrated into the Mac desktop - i.e., menus actually appear in the menu bar, where they belong. It also avoids the often tedious installation of GTK+ via MacPorts. However, it misses support for optional Gtk2Hs packages that are currently not supported by the [http://gtk-osx.sourceforge.net/ GTK+ OS X Framework], most notably support for Glade. It does include support for Cairo, though.
Line 102: Line 121:
   
 
NB: Thanks to Ross Mellgren for his post on the gtk2hs-users list that outlined the use of <tt>PKG_CONFIG_PATH</tt>.
 
NB: Thanks to Ross Mellgren for his post on the gtk2hs-users list that outlined the use of <tt>PKG_CONFIG_PATH</tt>.
 
== Article as of Mid 2008 ==
 
Installing Gtk2Hs on Mac requires some finesse, at least until Haskell Libary Platform is built or ghc-6.8.3 is
 
available in macports. (These are planned for late 2008.)
 
 
* Install [http://macports.org MacPorts]
 
* Install dependencies:
 
sudo port install glade3 libglade2 gstreamer gst-plugins-base gtksourceview cairo librsvg gtkglext firefox
 
* Update PKG_CONFIG_PATH (for libraries)
 
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/opt/local/lib/pkgconfig
 
* Update ghc to use macports libs: Edit your main <tt>ghc</tt> driver program and change the last line to:
 
exec $GHCBIN $TOPDIROPT ${1+"$@"} -L/opt/local/lib -I/opt/local/include
 
* Download Gtk2Hs following instructions at [http://www.haskell.org/gtk2hs/downloads/ Gtk2Hs Download page]
 
* Check configuration:
 
./configure --enable-docs --enable-profiling
 
 
...
 
 
**************************************************
 
* Configuration completed successfully.
 
*
 
* The following packages will be built:
 
*
 
* glib : yes
 
* gtk : yes
 
* glade : yes
 
* cairo : yes
 
* svgcairo : yes
 
* gtkglext : yes
 
* gconf : yes
 
* sourceview : yes
 
* mozembed : yes
 
* soegtk : yes
 
* gnomevfs : yes
 
* gstreamer : yes
 
* documentation : yes
 
*
 
* Now do "(g)make" followed by "(g)make install"
 
**************************************************
 
* Build and Install:
 
make
 
sudo make install
 
 
== Recent experiences ==
 
I successfully installed the latest version on Mac OS 10.5 by:
 
* Installing Macports.
 
* <tt>sudo port install ghc</tt>
 
* <tt>sudo port install gtk2hs</tt> - which does not complete successfully. It does however, install the appropriate dependencies. Note that there are so many, you may need to install a couple of times due to time outs etc.. The build of Gtk2HS will fail, but that is ok - continue as below. Also note that ghc configure will give up if your perl5.8 is not new enough, if so deactivate it and try again.
 
* Remove the build directory under <tt>/opt/.../build/gtk2hs</tt>
 
* Download Gtk2Hs via darcs as per [http://haskell.org/gtk2hs/development/#darcs the gtk2hs download instructions]
 
* do a <tt>sudo port install automake</tt>
 
* do a <tt>sudo port install alex</tt>
 
* do a <tt>sudo port install happy</tt> (Note this also fails and must be built from source. See the [[Happy]] page for details.)
 
* Follow the build instructions on the [http://haskell.org/gtk2hs/development/#darcs the gtk2hs download page]. I would suggest using <tt>./configure --prefix=/opt/local</tt> to get it in the same place as ports - personal preference though.
 
Good luck - as usual, your mileage may vary.
 

Revision as of 04:45, 1 August 2012

Contents

1 Known configurations

Date Arch OS GTK Gtk2Hs GHC Haskell Platform
2012-04 Intel 64-bit Lion - 10.7.3, Xcode 4.3 HomeBrew 0.12.3 7.0.4 2011.3.0.0
2012-02 Intel 64-bit Lion - 10.7.3, Xcode 4.1 MacPorts darcs HEAD 2012-02-20 7.4.1 (built from source, 64-bit)
2011-08 Intel 32-bit Snow Leopard 2.24.5 Homebrew gtk-0.12.0 7.0.3 2011.2.0.1
2011-03 Intel 64-bit Leopard MacPorts 6.10

2 HomeBrew (64 bit, last checked 2012-08)

These instructions come from a gist by Carter Schonwald

1. Install the gtk library and dependencies

brew install glib cairo gtk gettext fontconfig
brew deps gtk # see below
brew deps gtk | xargs brew link
brew link cairo gettext fontconfig
gtk-demo

2. Build freetype by hand (download)

brew install stow
mkdir /usr/local/stow
cd freetype-2.4.8
./configure --prefix /usr/local/stow/freetype-2.4.8
make
make install
cd /usr/local/stow
stow freetype-2.4.8

3. Install Haskell GTK

cabal install gtk2hs-buildtools 
cabal install gtk

4. Update for Mountain Lion (OSX 10.8)

This OS release uses xquartz project X11 implementation, that may yield errors while building the package.

In the above step 3 (cabal install gtk) I had errors that were resolved by:

4.1 Fixing any detail reported by "brew doctor"

4.2. Accepting the XCode 4.4 command line tool's license:

sudo xcodebuild -license

4.3. Setting pkg-config search path to:

export PKG_CONFIG_PATH=~/Source/gtk/source/libpng-1.4.8/:/opt/X11/lib/pkgconfig

4.4. Building (as cited in gtk2hs mac instructions) with

cabal install gtk -fhave-quartz-gtk

3 HomeBrew (32 bit, last checked 2011-08)

brew update 
brew install gtk+ libglade
gtk-demo

If the gtk-demo appears to work, proceed to the rest of the gtk2hs install.

3.1 Troubleshooting

Problem: Bus error

Try running the gtk-demo program. Does it also fail?

If so, did you try updating your port? For example, if you are using Howebrew try:

brew update
brew install gtk+

Then try gtk-demo again and finally

cabal install --renistall gtk

It may be worthwhile to try a gtkhs helloworld

4 MacPorts (last checked 2011-03-10)

  • Install MacPorts
  • Add +universal to /opt/local/etc/macports/variants.conf (not needed on 32bit)
  • execute:
    sudo port install ghc gtk2 gvfs cairo librsvg libglade2 gtkglext gtksourceview2 && sudo port install gtk2hs -universal

4.1 Detailed instructions

This explains how to install Gtk2Hs-0.10.1 on Mac OS X 10.6 Snow Leopard, in combination with GTK+ from MacPorts.

  • Install the Haskell Platform for Mac
  • Download gtk2hs from Gtk2Hs website and untar it.
  • Install gtk, cairo, etc. from MacPorts like this (note that the +universal is needed; if you already installed gtk or one of its dependencies, it is recommended you reinstall those as detailed in the NB at the end of this section).
sudo port install gtk +universal
  • Go to the directory where gtk2hs is untarred and run
./configure --disable-split-objs --disable-gio
make
sudo make install

Alternatively, if you wish to follow the Mac OS X style of directory layout, you can use this configure command instead:

./configure --with-pkgconf=/Users/$USER/.ghc/i386-darwin-6.10.4/package.conf --prefix=/Users/$USER/Library/Haskell/packages/gtk2hs --disable-split-objs --disable-gio

Right now you should be able to run the demos. Unfortunately, to build any libraries depending on Gtk2Hs, such as Chart, you need to edit one more file. You will need to find package.conf for your installed GHC by running

ghc-pkg list

In the output you will see the full directory to your package.conf file. In this file, you need to search for "gthread", and everywhere you can find it, add "/opt/local/lib" (with quotes) to the libraryDirs array before it.

If all went well, it should be properly installed now.

NB: If compiling fails with architecture errors for certain dynlibs, you need to reinstall the packages these dynlibs belong to with +universal by doing

sudo port upgrade packagename --enforce-variants +universal

Alternatively, and this is recommended, you can follow the steps on Haskell On Snow Leopard Blogpost to immediately add the universal variant of each package:

  1. Edit /opt/local/macports/variants.conf and add +universal to the end of this file
  2. sudo port selfupdate
  3. sudo port sync
  4. sudo port upgrade --force installed

5 GTK+ OS X Framework

This explains how to install Gtk2Hs on Macs using the native GTK+ OS X Framework, a port of GTK+ to the Mac that does not depend on X11, and hence, is better integrated into the Mac desktop - i.e., menus actually appear in the menu bar, where they belong. It also avoids the often tedious installation of GTK+ via MacPorts. However, it misses support for optional Gtk2Hs packages that are currently not supported by the GTK+ OS X Framework, most notably support for Glade. It does include support for Cairo, though.

Here is how to install the library:

  1. Download and install GTK+ OS X Framework (this uses the standard Mac package installer).
  2. Install pkg-config, either by compiling it from source or via MacPorts.
  3. Download and unpack the Gtk2Hs tar ball from the Gtk2Hs download page (I tested 0.10.0).
  4. Configure with (you may want to remove the two backslashes and put everything on one line)
     env PKG_CONFIG_PATH=/Library/Frameworks/Cairo.framework/Resources/dev/lib/pkgconfig:\ 
     /Library/Frameworks/GLib.framework/Resources/dev/lib/pkgconfig:\ 
     /Library/Frameworks/Gtk.framework/Resources/dev/lib/pkgconfig ./configure --disable-gio
  1. Build with
     make
  1. Install (to /usr/local/ unless a --prefix option was passed to configure) with
     sudo make install

The library is now registered with the package database of the GHC you used for compiling.

NB: Thanks to Ross Mellgren for his post on the gtk2hs-users list that outlined the use of PKG_CONFIG_PATH.