Personal tools

WxHaskell/Mac

From HaskellWiki

< WxHaskell(Difference between revisions)
Jump to: navigation, search
(Installing on MacOS X)
(hello world?)
Line 15: Line 15:
 
<li> Check your path to make sure you are using your wxWidgets and not the default Mac one
 
<li> Check your path to make sure you are using your wxWidgets and not the default Mac one
 
<li> <code>cabal install wx cabal-macosx</code>
 
<li> <code>cabal install wx cabal-macosx</code>
  +
<li>Compile and run a [https://raw.github.com/jodonoghue/wxHaskell/master/samples/wxcore/HelloWorld.hs sample wxcore application]:
  +
<br><pre>ghc --make HelloWorld.hs
  +
cabal-macosx HelloWorld
  +
./HelloWorld.app/Contents/MacOS/HelloWorld
  +
</pre>
  +
</li>
 
</ol>
 
</ol>
   
Compiling a sample application is as simple as typing (assuming GHC >= 7.0)
 
<br><code>ghc HelloWorld.hs</code>
 
 
<ul>
 
<ul>
 
<li>If you use MacPorts, you may run into a problem with the iconv library. Tell GHC that you prefer the system libraries first.
 
<li>If you use MacPorts, you may run into a problem with the iconv library. Tell GHC that you prefer the system libraries first.

Revision as of 11:04, 31 May 2012

Contents

1 Installing on MacOS X

  1. Install the Developer Tools
  2. Install wxWidgets 2.9 by hand
    • If you use HomeBrew:
      brew install wxmac --devel
      or on Lion, possibly brew install wxmac --use-llvm --devel)
    • If you use MacPorts:
      sudo port install wxWidgets-devel +universal
  3. Check your path to make sure you are using your wxWidgets and not the default Mac one
  4. cabal install wx cabal-macosx
  5. Compile and run a sample wxcore application:
    ghc --make HelloWorld.hs
    cabal-macosx HelloWorld
    ./HelloWorld.app/Contents/MacOS/HelloWorld
    
  • If you use MacPorts, you may run into a problem with the iconv library. Tell GHC that you prefer the system libraries first.
    ghc HelloWorld.hs -L/usr/lib

2 Known working configurations

Date Arch OS/XCode GHC Haskell Platform wxWidgets wxHaskell
2012-04 Intel 64-bit Lion (10.7.3), XCode 4.3 7.4.1 2.9.3 (HomeBrew) 0.90 (see notes)
2012-04 Intel 64-bit Lion (10.7.3), Xcode 4.3 7.0.4 2011.4.0.0 2.9.3 (HomeBrew) 0.90
2012-04 Intel 32-bit Snow Leopard (10.6.8), Xcode 3.2.6 7.0.4 2011.4.0.0 2.9.3 (MacPorts) 0.90 (see notes)

3 Notes

These notes tend to be a bit ephemeral and are thus dated to help you figure out if they may still apply or not.

  • 2012-04-17: The MacPorts version of wxWidgets 2.9.3 can be used, though I added a few flags to the Portfile. I seem to have a few issues with functionality, but they may not necessarily be related to MacPorts.
  • 2012-04-14: On MacOS X Lion, to install wxWidgets 2.9 with HomeBrew, you may need to run brew install wxmac --use-llvm --devel

4 Using wxHaskell on MacOS X platforms

Even though graphical applications on MacOS X look great, it is a still a developers nightmare to get them working :-). Furthermore, the MacOS X port of wxWidgets is the least mature and still has some quirks. This page describes how to circumvent some of the pitfalls.


  • Executables generated with GHC do not work when executed directly if they use the graphical API; they need to be upgraded into so called application bundles for MacOS X. Use the cabal-macosx package to automate this. It can be integrated with Cabal and/or used as a standalone `macosx-app` script.
  • Note: The following no longer applies to (future) versions of wxcore > 0.90.

    Due to complicated MacOS X restrictions, graphical wxHaskell applications do not work directly when used from GHCi. Fortunately, Wolfgang Thaller has kindly provided an ingenious Haskell module that solves this problem. Just import the (compiled) module EnableGUI in your program and issue the following command to run main from your GHCi prompt:

    > enableGUI >> main

    Compiling and using enableGUI needs some command line flags:

    > ghc -XForeignFunctionInterface -c EnableGUI.hs
    > ghci -framework Carbon HelloWorld.hs
    GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
    Loading package base ... linking ... done.
    Loading object (framework) Carbon ... done
    final link ... done
    [2 of 2] Compiling Main             ( Main.hs, interpreted )
    Ok, modules loaded: Main, EnableGUI.
    *Main> enableGUI
    *Main> main
  • The dynamic link libraries used by wxHaskell can not always be found. If your application seems to start (the icon bounces) but terminates mysteriously, you need to set the dynamic link library search path to the wxHaskell library directory. For example:

    > setenv DYLD_LIBRARY_PATH /usr/local/wxhaskell/lib

    or

    > setenv DYLD_LIBRARY_PATH $HOME/.cabal/local/lib/wxhaskell-0.11.0/lib

5 Troubleshooting

See WxHaskell/Troubleshooting for help getting your wxhaskell applications running

  1. Why do I have to macosx-app my binaries?
    • 2009-04-01: we don't know for sure yet. macosx-app is just a shell script that runs Rez and also creates an application bundle. If you are a MacOS developer, especially a wxWidgets one, we would love some help answering this question.
    • 2009-11-24: Please see also Andy Gimblett's cabal-macosx project