- 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.
jhbuild shell
tar -xf gtkglext-1.2.0.osx-hack.tar
cd gtkglext-1.2.0
patch -p1 < gtkglext_c.patch
./configure && make
touch docs/reference/gtkglext/html/index.sgml
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.
jhbuild shell
cabal unpack gtk
cd gtk
patch -p1 < gtk.patch
cabal install
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:
- gdk_gl_config_get_screen
- gdk_gl_config_get_depth
- gdk_gl_context_get_gl_config
- gdk_gl_context_get_share_list
- gdk_gl_context_is_direct
- gdk_gl_context_get_render_type
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.
jhbuild shell
cabal unpack gtkglext
cd gtkglext-0.12.0
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/"
cd demo
make
./RotatingCube
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.