开发者

wxHaskell on OS X

I want to use wxHaskell on OS X (Snow Leopard, MacBook Pro). I was able to install the library successfully and the script below:

module Main where
import Graphics.UI.WX

main :: IO ()
main = start hello

hello :: IO ()
hello
  = do f    <- frame    [text := "H开发者_StackOverflowello!"]
       quit <- button f [text := "Quit", on command := close f]
       set f [layout := widget quit]

does result in a window being displayed with a single button, as specified. However, nothing happens when I click the button - I don't even get the visual response of the button turning blue to indicate that it's been depressed (haha, no pun intended).

I've heard that you have to run a package called "macosx-app" on wxHaskell binaries to get them to run, but I can't find this anywhere. It's not on my machine or (as far as I can tell) in the WX or wxHaskell distros.

Anyone know what I need to do to get this to work?


The source release includes a file named macosx-app-template in the bin directory. This file is used by the following part of the configure script to create macosx-app:

cat > config/macosx-app-temp << EOF
#!/bin/sh
rezcomp="$wxinstallrezcomp"
rezfile="$wxinstallrezfile"

EOF
cat config/macosx-app-temp bin/macosx-app-template > config/macosx-app
rm -f config/macosx-app-temp
chmod a+x config/macosx-app

If you already have wxHaskell installed and aren't using the configure script, you could presumably just duplicate these steps—i.e., copy macosx-app-template to macosx-app, make it executable, and add the following lines at the top:

#!/bin/sh

libdir=""

wxrezcomp="`wx-config --rezflags`"
wxrezfile=""
if test "$wxrezcomp"; then
  for word in $wxrezcomp; do
    temp="`echo $word | grep '[^_]*_mac-[^r]*r'`"
    if test "$temp"; then
      wxrezfile="$temp"
    fi
  done
fi

if test "$wxrezfile"; then
  wxrezdir="`echo $wxrezfile | sed -e 's|\(.*\)/libwx_mac.*|\1|'`"
  wxinstallrezcomp="`echo \"${wxrezcomp}\" | sed -e \"s|${wxrezdir}|${libdir}|g\"`"
  wxinstallrezfile="`echo \"${wxrezfile}\" | sed -e \"s|${wxrezdir}|${libdir}|g\"`"
fi

rezcomp="$wxinstallrezcomp"
rezfile="$wxinstallrezfile"

Note that you need to change libdir="" to specify the directory where the wxHaskell library files are installed, and if wx-config isn't in your path you'll need to change that line as well.


I installed wxhaskell using cabal, and reading the other explanations I proceed as follows in order to have the macosx-app working:

  1. I download the wxhaskell sources from http://haskell.org/haskellwiki/WxHaskell/Download

  2. I unzip the downloaded file:

    wxhaskell-src-XXX.zip

    where XXX is the version number.

  3. I run configure in the unzipped directory. This creates from the template the file config/macosx-app

    .configure

  4. I copy using sudo the file to the bin directory /usr/local/bin

    sudo cp config/macosx-app /usr/local/bin

  5. I delete the directories with the source files

That works for me!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜