- install gtkglext (c library)
- install gtk (Haskell package)
- install gtkglext (Haskell package)
I downloaded the "Quartz hack full patched source" and followed the instructions at http://answerpot.com/showthread.php?324502-GtkGLExt+OS+X+Quartz+hack+patch. There are a few problems:
The file "docs/reference/gtkglext/html/index.sgml" doesn't exist.
The headers aren't installed.
Several references are made to undefined constants. Unfortunately this error doesn't show up until much later, when GHC tries to link every symbol under the sun.
tar -xf gtkglext-1.2.0.osx-hack.tar
patch -p1 < gtkglext_c.patch
./configure && make
sudo make install
2. Install gtk (Haskell)
The Haskell package "gtk" currently (as of gtk-0.12.0) doesn't build with a quartz-based gtk+. I downloaded the source ("cabal unpack") and edited the file "Graphics/UI/Gtk/General/Structs.hsc" to disable the drawableGetID function.
If you installed the gtkglext libraries to a standard folder this should be all that's necessary. If cabal can't find gdkglext-quartz or gtkglext-quartz, you'll need to add the library paths at this stage.
cabal unpack gtk
patch -p1 < gtk.patch
3. Install gtkglext (Haskell package)
This was painful.
There are a few different problems to deal with:
1. The gtkglext install didn't install the headers, so we need to specify them manually.
2. We're not using pkg-config, so we edit the gtkglext.cabal file, remove the pkg-config check, and specify the libraries to link to.
3. Several symbols are undefined in gtkglext, so we need to remove references to them from the Haskell source. The undefined symbols are:
There's also another argument to glWindowNew, which we need to add.
Finally, the demo program needs to be patched, otherwise it just sits there and doesn't update.
So execute the following, replacing PATH_TO_GTKGLEXT with wherever you unpacked/built gtkglext:
And you should get a new window with a colorful cube, spinning in full OpenGL glory.
cabal unpack gtkglext
patch -p1 < gtkglext.patch
cabal install --extra-include-dir="PATH_TO_GTKGLEXT" --extra-include-dir="PATH_TO_GTKGLEXT/gdk" --extra-include-dir="$PREFIX/include/cairo/" --extra-include-dir="$PREFIX/include/glib-2.0/" --extra-include-dir="$PREFIX/lib/glib-2.0/include/" --extra-include-dir="$PREFIX/include/gtk-2.0/" --extra-include-dir="$PREFIX/include/pango-1.0/" --extra-include-dir="$PREFIX/include/atk-1.0/" --extra-include-dir="$PREFIX/lib/gtk-2.0/include/"
I don't know why it's necessary to specify all the gtk+ header locations manually here, when they're automatically found for building gtk.
The patch files can be downloaded from here.