Personal tools

GHC under Wine

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Headings, change language slightly)
Line 1: Line 1:
GHC runs fairly well under wine. Here's a guide on how to get it working.
+
[[GHC]] runs fairly well under WINE. Here's a guide on how to get it working.
  +
==Installation==
  +
First, get the latest version of WINE from http://www.winehq.com/site/download and install it.
   
Firstly get the letest version of wine from http://www.winehq.com/site/download and install it.
+
Next, grab the latest [[windows]] version of GHC from http://haskell.org/ghc/download.html
   
Next, grab the latest windows version of GHC from http://haskell.org/ghc/download.html
+
Using the precompiled version of ghc requires adding MSI support to WINE. Luckily, work has been done on developing a native version of MSI for wine. Get it at http://wiki.winehq.org/NativeMsi and follow the instructions to install it.
 
I used the precompiled version of ghc. It's distributed using MSI which can pose a small problem for wine. Luckily, work has been done on developing a native version of MSI for wine. Get it at http://wiki.winehq.org/NativeMsi and follow the instructions to install it.
 
   
 
Now go to the directory where you've put your download of ghc. install it:
 
Now go to the directory where you've put your download of ghc. install it:
<code>wine msiexec.exe /i ghc-VERSION.msi</code>
+
::<code>wine msiexec.exe /i ghc-VERSION.msi</code>
   
 
This should start up the installer and walk you through the installation.
 
This should start up the installer and walk you through the installation.
   
 
Once this is all done, you should be good to start using GHC. You might want to add GHC to your path. To do this fire up regedit:<br/>
 
Once this is all done, you should be good to start using GHC. You might want to add GHC to your path. To do this fire up regedit:<br/>
<code>wine regedit</code><br/>
+
::<code>wine regedit</code><br/>
and go to <code>HKEY_LOCAL_MACHINE->System->CurrentControlSet->Control->Session Manager->Environment->Path</code> and add GHC's installation to the pathlist. It will probably be something like <code>C:\ghc\ghc-VERSION\bin</code>
+
and go to <code>HKEY_LOCAL_MACHINE->System->CurrentControlSet->Control->Session Manager->Environment->Path</code>. Add GHC's installation to the pathlist. It will probably be something like <code>C:\ghc\ghc-VERSION\bin</code>
   
Now test it.
+
==Testing==
   
 
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/>
 
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/>
Line 35: Line 35:
   
 
== Known Problems ==
 
== Known Problems ==
+
===Windows DLL's===
 
wine's builtin msvcrt.dll may not work nicely with compilation of more complicated programs. To get around this a native version of the DLL can be found at places such as http://www.dll-files.com/dllindex/index.shtml . Disclaimer: I am unsure of what the legal implications of using this DLL without a licensed copy of windows might be.
 
wine's builtin msvcrt.dll may not work nicely with compilation of more complicated programs. To get around this a native version of the DLL can be found at places such as http://www.dll-files.com/dllindex/index.shtml . Disclaimer: I am unsure of what the legal implications of using this DLL without a licensed copy of windows might be.
   
hSetBuffering doesn't seem to work well from terminals. This creates problems with GHCi:
+
===IO issues===
  +
<hask>hSetBuffering</hask> doesn't seem to work well from terminals. This creates problems with GHCi:
   
 
<code><pre>$ wine ghci
 
<code><pre>$ wine ghci

Revision as of 19:43, 1 December 2006

GHC runs fairly well under WINE. Here's a guide on how to get it working.

Contents

1 Installation

First, get the latest version of WINE from http://www.winehq.com/site/download and install it.

Next, grab the latest windows version of GHC from http://haskell.org/ghc/download.html

Using the precompiled version of ghc requires adding MSI support to WINE. Luckily, work has been done on developing a native version of MSI for wine. Get it at http://wiki.winehq.org/NativeMsi and follow the instructions to install it.

Now go to the directory where you've put your download of ghc. install it:

wine msiexec.exe /i ghc-VERSION.msi

This should start up the installer and walk you through the installation.

Once this is all done, you should be good to start using GHC. You might want to add GHC to your path. To do this fire up regedit:

wine regedit

and go to HKEY_LOCAL_MACHINE->System->CurrentControlSet->Control->Session Manager->Environment->Path. Add GHC's installation to the pathlist. It will probably be something like C:\ghc\ghc-VERSION\bin

2 Testing

Create a simple haskell program to compile. Hello World examples are good. Try compiling it:

$ wine ghc -o hello --make HelloWorld.hs
Chasing modules from: HelloWorld.hs
Compiling Main             ( HelloWorld.hs, HelloWorld.o )
fixme:msvcrt:MSVCRT__sopen : pmode 0x01b6 ignored
fixme:msvcrt:MSVCRT__sopen : pmode 0x01b6 ignored
Linking ...
Wine exited with a successful status

And try running it:

$ wine hello
Hello, world!
Wine exited with a successful status

If it all works well then you should hopefully be able to compile your haskell programs for windows from wine.


3 Known Problems

3.1 Windows DLL's

wine's builtin msvcrt.dll may not work nicely with compilation of more complicated programs. To get around this a native version of the DLL can be found at places such as http://www.dll-files.com/dllindex/index.shtml . Disclaimer: I am unsure of what the legal implications of using this DLL without a licensed copy of windows might be.

3.2 IO issues

hSetBuffering
doesn't seem to work well from terminals. This creates problems with GHCi:
$ wine ghci
WARNING: GHCi invoked via 'ghci.exe' in *nix-like shells (cygwin-bash, in particular)
         doesn't handle Ctrl-C well; use the 'ghcii.sh' shell wrapper instead
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.4.2, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
<stdin>: hSetBuffering: failed (failed to set buffering)
Wine exited with a successful status