Personal tools

WxHaskell/Mac

From HaskellWiki

< WxHaskell(Difference between revisions)
Jump to: navigation, search
(Installing on MacOS X: frankly, if you're developing on Mac, you might as well grab cabal-macosx as well)
m (Troubleshooting)
(20 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
== Installing on MacOS X ==
 
== Installing on MacOS X ==
   
# Install the Developer Tools
+
<ol>
# Install wxWidgets 2.9 by hand (HomeBrew makes this easy: <code>brew install wxmac --devel</code>; or on Lion, possibly <code>brew install wxmac --use-llvm --devel</code>)
+
<li> Install the Developer Tools
# Check your path to make sure you are using your wxWidgets and not the default Mac one
+
<li> Install wxWidgets 2.9 by hand
# <code>cabal install wx cabal-macosx</code>
+
<ul>
  +
<li>If you use the [http://mxcl.github.com/homebrew/ HomeBrew] package manager:
  +
<br><code>brew install wxmac --devel</code>
  +
<br>or on Lion, possibly <code>brew install wxmac --use-llvm --devel</code>
  +
<li>If you use the [http://www.macports.org/ MacPorts] package manager:<br>
  +
<code>
  +
sudo port install wxWidgets-devel +universal
  +
</code>
  +
<li>Manual installation is not recommended, but if you want to do it anyway, download the source code and install it with the following flags
  +
<pre>
  +
./configure --enable-unicode --disable-debug --with-osx_cocoa
  +
--prefix=/usr/local --enable-stc --enable-aui
  +
--enable-propgrid --enable-xrc --enable-ribbon
  +
--enable-richtext --enable-webkit --with-opengl
  +
make && make install
  +
</pre>
  +
</ul>
  +
<li> (OS X 10.6 or below) Check your path to make sure you are using your wxWidgets and not the default Mac one. The command
  +
<br>
  +
<code>which wx-config</code>
  +
<br>should ''not'' return the file path <code>/usr/bin/wx-config</code>.
  +
<li>Now it's time to install the wxHaskell libraries proper:
  +
<br>
  +
<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>(see note 2012-04-24-MacPorts if you use MacPorts)
  +
</li>
  +
</ol>
   
 
== Known working configurations ==
 
== Known working configurations ==
Line 16: Line 16:
 
!|wxWidgets
 
!|wxWidgets
 
!|wxHaskell
 
!|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
 
|2012-04
Line 21: Line 29:
 
|Lion (10.7.3), Xcode 4.3
 
|Lion (10.7.3), Xcode 4.3
 
|7.0.4
 
|7.0.4
|2011.3.0.0
+
|2011.4.0.0
 
|2.9.3 (HomeBrew)
 
|2.9.3 (HomeBrew)
 
|0.90
 
|0.90
 
|-
 
|-
 
|2012-04
 
|2012-04
|Intel 64-bit
+
|Intel 32-bit
|Lion (10.7.3), XCode 4.3
+
|Snow Leopard (10.6.8), Xcode 3.2.6
|7.4.1
+
|7.0.4
|
+
|2011.4.0.0
|2.9.3 (HomeBrew)
+
|2.9.3 (MacPorts)
 
|0.90 (see notes)
 
|0.90 (see notes)
  +
|-
  +
|2012-11
  +
|Intel 64-bit
  +
|Mountain Lion (10.8.2), Xcode 4.5.2
  +
|7.4.2
  +
|2012.4.0.0
  +
|2.9.4
  +
|0.90.0.1 (see notes)
 
|}
 
|}
   
Line 38: Line 54:
 
These notes tend to be a bit ephemeral and are thus dated to help you figure out if they may still apply or not.
 
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-24 MacPorts: If you use MacPorts, you may run into a problem with the iconv library. Tell GHC that you prefer the system libraries first: <code>ghc HelloWorld.hs -L/usr/lib</code>
  +
* 2012-04-17: The MacPorts version of wxWidgets 2.9.3 can be used. I added a few flags to the Portfile, but they are probably not necessary.
 
* 2012-04-14: On MacOS X Lion, to install wxWidgets 2.9 with HomeBrew, you may need to run <code>brew install wxmac --use-llvm --devel</code>
 
* 2012-04-14: On MacOS X Lion, to install wxWidgets 2.9 with HomeBrew, you may need to run <code>brew install wxmac --use-llvm --devel</code>
* 2012-04-14: The recent XCode 4.3 moves some tools from /Developer to /Applications/XCode.app/Contents/Developer. I just made a symlink back for the old location until some dust settles from this.
 
* 2012-04-14: With GHC 7.4.1, you may get some complaints from wxc 0.90 due to an old haskell98 import in Setup.hs. You can either just grab the darcs version of wxHaskell or wait for the next point release to come out.
 
   
 
== Using wxHaskell on MacOS X platforms ==
 
== 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.
+
Even though graphical applications on MacOS X look great, it is a still a developers nightmare to get them working :-). This page describes how to circumvent some of the pitfalls.
 
   
 
<ul>
 
<ul>
<li>Graphical applications generated with GHC do not work if executed directly ; they need to be upgraded into MacOS X ''applications''. See [https://github.com/gimbo/cabal-macosx cabal-macosx] to automate this. It can be integrated with Cabal and/or used as a standalone `macosx-app` script.
+
<li>Executables generated with GHC do not work when executed directly if they use the graphical API; they need to be upgraded into so called [https://en.wikipedia.org/wiki/Application_Bundle application bundles] for MacOS X. Use the [https://github.com/gimbo/cabal-macosx cabal-macosx] package to automate this. It can be integrated with Cabal and/or used as a standalone <code>macosx-app</code> script.
 
</li>
 
</li>
<li><p>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 [http://wxhaskell.sourceforge.net/download/EnableGUI.hs Haskell module] that solves this problem. Just import the (compiled) module [http://wxhaskell.sourceforge.net/download/EnableGUI.hs <tt>EnableGUI</tt>] in your program and issue the following command to run <tt>main</tt> from your GHCi prompt:</p>
+
<li><p>''Note: The following no longer applies to <code>wxcore >= 0.90.0.1</code>.''</p>
  +
<p>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 [http://wxhaskell.sourceforge.net/download/EnableGUI.hs Haskell module] that solves this problem. Just import the (compiled) module [http://wxhaskell.sourceforge.net/download/EnableGUI.hs <tt>EnableGUI</tt>] in your program and issue the following command to run <tt>main</tt> from your GHCi prompt:</p>
 
<pre>&gt; enableGUI &gt;&gt; main</pre>
 
<pre>&gt; enableGUI &gt;&gt; main</pre>
 
<p>Compiling and using enableGUI needs some command line flags:</p>
 
<p>Compiling and using enableGUI needs some command line flags:</p>
Line 63: Line 79:
 
*Main&gt; main</pre>
 
*Main&gt; main</pre>
 
</li>
 
</li>
<li><p>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:</p>
+
</ul>
  +
  +
== Troubleshooting ==
  +
  +
See [[../Troubleshooting]] for help getting your wxhaskell applications running
  +
  +
<ul><li><p>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:</p>
 
<pre>&gt; setenv DYLD_LIBRARY_PATH /usr/local/wxhaskell/lib</pre>
 
<pre>&gt; setenv DYLD_LIBRARY_PATH /usr/local/wxhaskell/lib</pre>
   
 
or
 
or
   
<pre>&gt; setenv DYLD_LIBRARY_PATH $HOME/.cabal/local/lib/wxhaskell-0.11.0/lib</pre></li></li></ul>
+
<pre>&gt; setenv DYLD_LIBRARY_PATH $HOME/.cabal/local/lib/wxhaskell-0.11.0/lib</pre>
   
== Troubleshooting ==
+
or (MacOSX Lion tested only)
   
See [[../Troubleshooting]] for help getting your wxhaskell applications running
+
Copy (and patch) shared libraries into the app bundle using macosx-make-standalone [http://hackage.haskell.org/package/macosx-make-standalone]
  +
  +
</li></li></ul>
   
# Why do I have to <code>macosx-app</code> my binaries?
 
#* 2009-04-01: we don't know for sure yet. <code>macosx-app</code> is just a shell script that runs <code>Rez</code> 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 [https://github.com/gimbo/cabal-macosx cabal-macosx] project
 
   
 
[[Category:wxHaskell|MacOS X]]
 
[[Category:wxHaskell|MacOS X]]

Revision as of 12:57, 14 December 2012

Contents

1 Installing on MacOS X

  1. Install the Developer Tools
  2. Install wxWidgets 2.9 by hand
    • If you use the HomeBrew package manager:
      brew install wxmac --devel
      or on Lion, possibly brew install wxmac --use-llvm --devel
    • If you use the MacPorts package manager:
      sudo port install wxWidgets-devel +universal
    • Manual installation is not recommended, but if you want to do it anyway, download the source code and install it with the following flags
       ./configure --enable-unicode --disable-debug --with-osx_cocoa
                   --prefix=/usr/local --enable-stc --enable-aui
                   --enable-propgrid --enable-xrc --enable-ribbon
                   --enable-richtext --enable-webkit --with-opengl
       make && make install
      
  3. (OS X 10.6 or below) Check your path to make sure you are using your wxWidgets and not the default Mac one. The command
    which wx-config
    should not return the file path /usr/bin/wx-config.
  4. Now it's time to install the wxHaskell libraries proper:
    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
    
    (see note 2012-04-24-MacPorts if you use MacPorts)

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)
2012-11 Intel 64-bit Mountain Lion (10.8.2), Xcode 4.5.2 7.4.2 2012.4.0.0 2.9.4 0.90.0.1 (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-24 MacPorts: 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
  • 2012-04-17: The MacPorts version of wxWidgets 2.9.3 can be used. I added a few flags to the Portfile, but they are probably not necessary.
  • 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 :-). 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 wxcore >= 0.90.0.1.

    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

5 Troubleshooting

See WxHaskell/Troubleshooting for help getting your wxhaskell applications running

  • 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

    or (MacOSX Lion tested only)

    Copy (and patch) shared libraries into the app bundle using macosx-make-standalone [1]