##### Views

(Difference between revisions)
 Revision as of 12:43, 17 September 2010 (edit)m ← Previous diff Current revision (15:33, 19 July 2011) (edit) (undo)m (→Quick start) (18 intermediate revisions not shown.) Line 1: Line 1: - === For the very lazy === + === Quick start === - You need to have wxWidgets 2.8.10 installed on your machine (and compiled with MSYS g++ if using Windows). Windows users should also get the [http://wxconfig.googlepages.com/ Windows port of wx-config]. + Getting wxHaskell is easy on MacOS X and Linux. It's slightly less easy on Windows. - You have correctly configured all of the recommended wxWidgets environment variables, and have a recent version of GHC with an up to date cabal install. + Basically, - This is all you need: + # Get g++ (MinGW on Windows, Developer Tools on Mac) + # Get wxWidgets + # Build wxHaskell > cabal install wx > cabal install wx - (but if you plan to use styledTextCtrl, check [[WxHaskell/Building_with_styledTextCtrl_support|here]]) + See the platform specific quick starts for more details: + + * [[../Windows/]] + * [[../MacOS X/]] + * [[../Linux/]] === Supported Configurations === === Supported Configurations === Line 15: Line 21: The build process has been tested against three main platforms: The build process has been tested against three main platforms: - * '''unix-gtk'''. General unix systems with GTK. + * '''unix-gtk'''. General Unix systems with GTK. * '''macosx'''. Mac OS X. * '''macosx'''. Mac OS X. * '''windows'''. General windows systems (i.e. win95 to winXP).
* '''windows'''. General windows systems (i.e. win95 to winXP).
Line 22: Line 28: wxHaskell has been built successfully on (at least) the following configurations: wxHaskell has been built successfully on (at least) the following configurations: - * '''windows'''. Windows 98, windows 2000, and windowsXP, using wxMSW 2.8.x. + * '''windows'''. Windows 98, 2000, XP, and 7, using wxMSW 2.8.x. - * '''macosx'''. Mac OS X 10.4 (Tiger) and 10.5 (Leopard) with ghc 6.10.x and wxMAC 2.8.x. + * '''macosx'''. Mac OS X 10.5 (Leopard) and 10.6 with wxMAC 2.8.x. * '''unix-gtk'''. Red Hat Linux 10 (Fedora), FreeBSD, and Gentoo Linux, using wxGTK 2.8.x. * '''unix-gtk'''. Red Hat Linux 10 (Fedora), FreeBSD, and Gentoo Linux, using wxGTK 2.8.x. (Unfortunately, there are still build problems on Sun Solaris – we are looking for build volunteers :-) (Unfortunately, there are still build problems on Sun Solaris – we are looking for build volunteers :-) Line 29: Line 35: === Prerequisites === === Prerequisites === - Ensure you have a recent [http://www.haskell.org/ghc GHC] compiler – version 6.10.3 or higher is recommended. In principle, any Haskell98 compiler that supports the standard FFI libraries along with cabal install should work. We have discontinued support for building without cabal. + Ensure you have a recent [http://www.haskell.org/ghc GHC] compiler – version 6.10.3 or higher is recommended. In principle, any Haskell 98 compiler that supports the standard FFI libraries along with cabal install should work. We have discontinued support for building without cabal. * '''Windows''': You will need wx-config for Windows, MinGW 5.1.6 and MSYS 0.1.11 (these are the latest versions at the time of writing). You must select the C++ compiler option when installing MinGW. * '''Windows''': You will need wx-config for Windows, MinGW 5.1.6 and MSYS 0.1.11 (these are the latest versions at the time of writing). You must select the C++ compiler option when installing MinGW. Line 41: Line 47: We assume in this guide that the variable $wxwin points to your wxWidgets installation directory, for example: ~/dev/wxGTK-2.8.10. We assume in this guide that the variable$wxwin points to your wxWidgets installation directory, for example: ~/dev/wxGTK-2.8.10. - - ''Note: To set this in windows, right click on My Computer >> Properties >> Advanced Tab >> Environment Variables >> New...'' - Variable Name: WXWIN - Variable Value: C:\path\to\wxWidgets-2.8.10 === Getting wxWidgets === === Getting wxWidgets === Line 51: Line 53: * Windows: * Windows: - ** You will need to build using the MinGW compiler - instructions below. + ** You can use the [http://wxpack.sourceforge.net wxPack] prebuilt binaries (the MinGW ones) + ** Alternatively, you can build using the MinGW compiler - instructions below. * Mac OS X * Mac OS X ** Tiger - do '''not''' use the wxMac 2.5 that comes pre-installed. ** Tiger - do '''not''' use the wxMac 2.5 that comes pre-installed. Line 57: Line 60: * Linux - the wxWidgets that ships with your system (as long as it's the 2.8 one and not the 2.6 one) should work. * Linux - the wxWidgets that ships with your system (as long as it's the 2.8 one and not the 2.6 one) should work. ** [http://wiki.wxpython.org/InstallingOnUbuntuOrDebian Backport of wxWidgets 2.8 for Debian and Ubuntu] ** [http://wiki.wxpython.org/InstallingOnUbuntuOrDebian Backport of wxWidgets 2.8 for Debian and Ubuntu] - ** wxGTK - wxhaskell supports wxGTK. + ** wxGTK - wxHaskell supports wxGTK. - ** wxX11 - wxhaskell does '''not''' support wxX11 now. Use wxGTK instead. + ** wxX11 - wxHaskell does '''not''' support wxX11 now. Use wxGTK instead. See [http://wxwidgets.org the wxWidgets site] for more details. See [http://wxwidgets.org the wxWidgets site] for more details. - ==== building wxWidgets ==== + === Building wxWidgets (usually optional) === ==== On Windows ==== ==== On Windows ==== Line 70: Line 73: '''Note:''' ''The Haskell Platform 2010.1.0.0 installer shipped without C++ support. If you want to build wxHaskell on Windows using this Haskell Platform, please see [http://wewantarock.wordpress.com/2010/05/05/haskell-platform-2010-1-0-0-and-wxhaskell-on-windows/]'' '''Note:''' ''The Haskell Platform 2010.1.0.0 installer shipped without C++ support. If you want to build wxHaskell on Windows using this Haskell Platform, please see [http://wewantarock.wordpress.com/2010/05/05/haskell-platform-2010-1-0-0-and-wxhaskell-on-windows/]'' - Using the MSYS shell, and making sure that you have the C++ compiler option installed for MinGW as it is 'not' the default (Note: a reboot is recommended before running the following commands): + '''Note:''' ''At the time of this writing there is a MinGW bug that may prevent you from building wxWidgets. The solution for now is to use [http://tdm-gcc.tdragon.net/ tdm-gcc]. Check the [http://wiki.wxwidgets.org/Compiling_wxWidgets_with_MinGW wxWidgets wiki] for details.'' + + Using the MSYS shell, and making sure that you have the C++ compiler option installed for MinGW as it is 'not' the default: > cd /c/path/to/wxWidgets-2.8.10/build/msw > cd /c/path/to/wxWidgets-2.8.10/build/msw > mingw32-make -f makefile.gcc BUILD=release MONOLITHIC=1 SHARED=1 UNICODE=1 > mingw32-make -f makefile.gcc BUILD=release MONOLITHIC=1 SHARED=1 UNICODE=1 - This will take quite a while and generate lots of text in the MSYS shell - if it doesn't, reboot and try again. A DLL is generated in /c/path/to/wxWidgets/gcc_dll, which you will need to copy to a location where it can be found when running your executables. + This will take quite some time and generate lots of text in the MSYS shell. Assuming it is successful, a DLL is generated in /c/path/to/wxWidgets/gcc_dll, which you will need to copy to a location where it can be found when running your executables. ==== On Unix systems ==== ==== On Unix systems ==== Line 106: Line 111:
> wx-config -v
> wx-config -v
- ChengWei: I've found that if you put wx-config in some system directories, such as c:\windows\system32, 'cabal install wx' will complain "wx-config: does not exist". To put it in another directory in %PATH% will solve this problem. Tested on Windows 7, haskell platform 2010 2.0.0.0. + ChengWei: I've found that if you put wx-config in some system directories, such as c:\windows\system32, 'cabal install wx' will complain "wx-config: does not exist". To put it in another directory in %PATH% will solve this problem. Tested on Windows 7, Haskell platform 2010 2.0.0.0. === Building wxHaskell === === Building wxHaskell === Line 113: Line 118: For all platforms installation is straightforward, provided that: For all platforms installation is straightforward, provided that: - # wx-config is somewhere in the path; + # wx-config is somewhere in the path - #* Note: to set this in windows, right click on My Computer >> Properties >> Advanced Tab >> Environment Variables >> Path >> Edit... + # The WXWIN environment variable points to the root of your wxWidgets installation - # The WXWIN environment variable points to the root of your wxWidgets installation (see Section 3); + # WINDOWS PLATFORMS ONLY: You may also need to set WXCFG=gcc_dll\mswu - # WINDOWS PLATFORMS ONLY: You may also need to set WXCFG=gcc_dll/mswu. + You can then install wxhaskell as follows (''in a Windows cmd.exe shell, not an MSys shell''): You can then install wxhaskell as follows (''in a Windows cmd.exe shell, not an MSys shell''): Line 123: Line 127: > cabal install wx > cabal install wx - Note that on Windows 7 machines, your command window must be running as Adminstrator. + Note that on Windows 7 machines, your command window must be running as Administrator. Note that on Unix systems, you may prefer something like Note that on Unix systems, you may prefer something like Line 140: Line 144: ==== Out of memory errors ==== ==== Out of memory errors ==== - There have been reports of out of memory errors when compiling wxcore on some machines, notably 64 bit Linux hosts. Wxcore contains some very large autogenerated source files, and increasing the memory available to the GHC runtime can help. + There have been reports of out of memory errors when compiling wxcore on some machines, notably 64 bit Linux hosts. Wxcore contains some very large auto-generated source files, and increasing the memory available to the GHC runtime can help. Try something like: Try something like: Line 146: Line 150: > export GHCRTS='-M512m' > export GHCRTS='-M512m' - to allocate 512MB to the GHC RTS. This has been reported to be sufficient. + to allocate 512 MB to the GHC RTS. This has been reported to be sufficient. === Source Release === === Source Release === - You can obtain a source release of wxHaskell from the [http://code.haskell.org/wxhaskell/ darcs repository]. Darcs creates a wxhaskell directory for you; we assume in the following example that your $wxhaskell directory will be ~/dev/wxhaskell. + You can obtain a source release of wxHaskell from the [http://code.haskell.org/wxhaskell/ darcs repository]. Darcs creates a wxHaskell directory for you; we assume in the following example that your$wxHaskell directory will be ~/dev/wxhaskell.
> cd ~/dev
> cd ~/dev
You then build each of the key components in order: You then build each of the key components in order:

## Contents

### 1 Quick start

Getting wxHaskell is easy on MacOS X and Linux. It's slightly less easy on Windows.

Basically,

1. Get g++ (MinGW on Windows, Developer Tools on Mac)
2. Get wxWidgets
> cabal install wx


See the platform specific quick starts for more details:

### 2 Supported Configurations

The build process has been tested against three main platforms:

• unix-gtk. General Unix systems with GTK.
• macosx. Mac OS X.
• windows. General windows systems (i.e. win95 to winXP).
 We support building only with the gnu mingw32 C compiler (windows-mingw). Please note that we have discontinued support for Microsoft compilers in the build system.


wxHaskell has been built successfully on (at least) the following configurations:

• windows. Windows 98, 2000, XP, and 7, using wxMSW 2.8.x.
• macosx. Mac OS X 10.5 (Leopard) and 10.6 with wxMAC 2.8.x.
• unix-gtk. Red Hat Linux 10 (Fedora), FreeBSD, and Gentoo Linux, using wxGTK 2.8.x.

(Unfortunately, there are still build problems on Sun Solaris – we are looking for build volunteers :-)

### 3 Prerequisites

Ensure you have a recent GHC compiler – version 6.10.3 or higher is recommended. In principle, any Haskell 98 compiler that supports the standard FFI libraries along with cabal install should work. We have discontinued support for building without cabal.

• Windows: You will need wx-config for Windows, MinGW 5.1.6 and MSYS 0.1.11 (these are the latest versions at the time of writing). You must select the C++ compiler option when installing MinGW.
• Mac OS X: you need to install the gcc compiler, which is part of the Apple Developer Tools. These tools are shipped with Panther and are installed by invoking Applications/Installers/Developer Tools/Developer.mdmg.

You should install the current stable version (2.8.10) of wxWidgets for your platform - versions older than 2.8.1 are no longer supported. Build instructions are given for Windows - on most other platforms you should be able to obtain wxWidgets using your package manager (you may need -developer packages).

We assume in this guide that the variable $wxwin points to your wxWidgets installation directory, for example: ~/dev/wxGTK-2.8.10. ### 4 Getting wxWidgets wxHaskell 0.12.x.x supports wxWidgets > 2.8. • Windows: • You can use the wxPack prebuilt binaries (the MinGW ones) • Alternatively, you can build using the MinGW compiler - instructions below. • Mac OS X • Tiger - do not use the wxMac 2.5 that comes pre-installed. • Leopard - wxHaskell now supports wxWidgets 2.8. • Linux - the wxWidgets that ships with your system (as long as it's the 2.8 one and not the 2.6 one) should work. See the wxWidgets site for more details. ### 5 Building wxWidgets (usually optional) #### 5.1 On Windows Note: Microsoft compilers are no longer supported. The cabal build system cannot understand the output of wx-config for Microsoft compilers. Note: The Haskell Platform 2010.1.0.0 installer shipped without C++ support. If you want to build wxHaskell on Windows using this Haskell Platform, please see [1] Note: At the time of this writing there is a MinGW bug that may prevent you from building wxWidgets. The solution for now is to use tdm-gcc. Check the wxWidgets wiki for details. Using the MSYS shell, and making sure that you have the C++ compiler option installed for MinGW as it is 'not' the default: > cd /c/path/to/wxWidgets-2.8.10/build/msw > mingw32-make -f makefile.gcc BUILD=release MONOLITHIC=1 SHARED=1 UNICODE=1  This will take quite some time and generate lots of text in the MSYS shell. Assuming it is successful, a DLL is generated in /c/path/to/wxWidgets/gcc_dll, which you will need to copy to a location where it can be found when running your executables. #### 5.2 On Unix systems You should follow the instructions on the wxWidgets website if there are no suitable packages for your environment. You probably want to use GCC to build wxWidgets, as this makes it more likely that cabal will understand the output of wx-config. On most Unix platforms, wxWidgets build goes something like: create a mybuild directory in the wxWidgets directory, and run configure and make from that directory (and take the time to get some coffee :-). > cd$wxwin
> mkdir mybuild
> cd mybuild
> ../configure --enable-unicode
> make
> make install
> cd ../contrib/src
> make
> make install

#### 5.3 Testing wxWidgets build

Now try out a few samples of wxWidgets to see if it all works correctly:

> cd ../../samples/controls
> make
> ./controls

Note that you build from the local samples directory that resides in the mybuild directory.

And also try if wx-config works too:

> wx-config -v

ChengWei: I've found that if you put wx-config in some system directories, such as c:\windows\system32, 'cabal install wx' will complain "wx-config: does not exist". To put it in another directory in %PATH% will solve this problem. Tested on Windows 7, Haskell platform 2010 2.0.0.0.

Since wxHaskell 0.12.1.1, we only support building using Cabal.

For all platforms installation is straightforward, provided that:

1. wx-config is somewhere in the path
2. The WXWIN environment variable points to the root of your wxWidgets installation
3. WINDOWS PLATFORMS ONLY: You may also need to set WXCFG=gcc_dll\mswu

You can then install wxhaskell as follows (in a Windows cmd.exe shell, not an MSys shell):

> cabal update
> cabal install wx


Note that on Windows 7 machines, your command window must be running as Administrator.

Note that on Unix systems, you may prefer something like

> sudo cabal install --global wx


Windows developers who don't update environment variables can do something like this in an MS-DOS shell:

> Set CPLUS_INCLUDE_PATH=C:\MinGW\include\c++\3.4.5;C:\MinGW\include\c++\3.4.5\mingw32\
> Set WXWIN=C:\path\to\wxWidgets-2.8.10
> Set WXCFG=gcc_dll\mswu
> cabal install wx


The Windows installation is global by default.

#### 6.1 Out of memory errors

There have been reports of out of memory errors when compiling wxcore on some machines, notably 64 bit Linux hosts. Wxcore contains some very large auto-generated source files, and increasing the memory available to the GHC runtime can help.

Try something like:

> export GHCRTS='-M512m'


to allocate 512 MB to the GHC RTS. This has been reported to be sufficient.

### 7 Source Release

You can obtain a source release of wxHaskell from the darcs repository. Darcs creates a wxHaskell directory for you; we assume in the following example that your \$wxHaskell directory will be ~/dev/wxhaskell.

> cd ~/dev
> darcs get --lazy --set-scripts-executable http://code.haskell.org/wxhaskell/

You then build each of the key components in order:

> cd ~/dev/wxhaskell/wxdirect
> cabal install
> cd ../wxcore
> cabal install
> cd ../wx
> cabal install


If everything succeeded, you should be able to run a test program.

> cd samples/wx
> ghc -package wx -o helloworld HelloWorld.hs
> ./helloworld

Notes:

macosx: wxHaskell programs need to be turned into application bundles before they can be run. Look at the Mac OS X notes for more information. You can also run the examples from GHCi – a great development environment!

> ghci -package wx BouncingBalls.hs
> main

Notes:

wxHaskell programs are not always properly reïnitialized when started the second time from a GHCi prompt. This is due static variables in the wxWidgets C++ code, and we are working with wxWidgets developers to remove those bugs. Currently, GHCi only works well with wxWidgets 2.4.2. gtk: Unfortunately, one can only start a wxWidgets program once with GHCi on GTK (rendering it useless). macosx. You need to use a special command to run wxHaskell applications, see the Mac OS X notes from more information. Have fun!