WxHaskellをWindows 8.1でビルドする
WxHaskellをSurface Pro 3上でビルドした。 公式のwiki に従うべきだが、ハマったところを書いておく。
Haskell Platform の導入
以前にインストールしたものを使ったので割愛。2014.2.0.0を利用。
MinGW と msys の導入
こちらも以前にインストールしたものを使ったので割愛。 sh.exe
を利用するためにmsysまで導入しておく必要がある。
wxWidgets のビルド
wxWidgetsのダウンロードページ のWindows Installerを使ってソースコードを用意した。これをMinGWでビルドするのだけど、ポイントはHaskell Platformに付属する gcc
でビルドすること。原則公式のWikiに従えばいいのだけど、PATHが結構違ったりするので確認しながら作業したい。こちらの環境では以下のようにコマンドを実行した。
C:\wxWidgets-3.0.2\build\msw> Set HASKELL_COMPILER_DIR=C:\Program Files\Haskell Platform\2014.2.0.0
C:\wxWidgets-3.0.2\build\msw> Set PATH=%HASKELL_COMPILER_DIR%\mingw\libexec\gcc\mingw32\4.8.1\;%HASKELL_COMPILER_DIR%\lib\extralibs\bin;%HASKELL_COMPILER_DIR%\bin;%HASKELL_COMPILER_DIR%\mingw\bin;C:\MinGW\msys\1.0\bin
C:\wxWidgets-3.0.2\build\msw> Set LIBRARY_PATH=%HASKELL_COMPILER_DIR%\mingw\lib;%HASKELL_COMPILER_DIR%\mingw\lib\gcc\mingw32\4.8.1
C:\wxWidgets-3.0.2\build\msw> sh -c "C:/MinGW/bin/mingw32-make.exe -j -f makefile.gcc clean"
C:\wxWidgets-3.0.2\build\msw> sh -c "C:/MinGW/bin/mingw32-make.exe -j -f makefile.gcc all"
ここでハマったのが cmd.exe
とシェルでの "
の振舞の違い。 %PATH%
などを Set
する際にスペース入りのパスを "
で包んで補完してくる癖にこれらの環境変数には "
が入ってはいけないっぽい。が、シェルでは逆に空白スペース入りのパスをうまく使えないようだったので、シェルから呼ぶ mingw32-make.exe
は明示的に指定した。この辺はなにかWindowsやMinGWの流儀に沿ってないことをやってる気もしつつ、とりあえずwxWidgetsのビルドは完了。
wx-config.exe の準備
公式ページで指示されたURLからDLするだけ。PATHが通ってるとこに置くのだけど、後述する git clone
した wxHaskell
フォルダの中に放り込んでおけば十分。もしくは .cabal-sandbox\bin
に PATH を通してそこに置くか。
wxHaskell のビルド
言われるままに git
でソースコードをとってきてビルドした。ディレクトリは適当なとこに移った上で、以下のような感じ。公式ページでは男らしくグローバルに突っ込む手順になっているが、恐ろしすぎるので cabal sandbox
利用した。
...> git clone https://github.com/wxHaskell/wxHaskell.git
...> Cd wxHaskell
...> Set WXCFG=gcc_dll\mswu
...> Set CPLUS_INCLUDE_PATH=%HASKELL_COMPILER_DIR%\mingw\lib\gcc\mingw32\4.8.1\include\c++;%WXWIN%\include
...> Set LIBRARY_PATH=%WXWIN%\lib\gcc_lib;%HASKELL_COMPILER_DIR%\mingw\lib\
...> cabal sandbox init
...> cabal install .\wxdirect
...> cabal install .\wxc
...> cabal install .\wxcore
...> cabal install .\wx
サンプルの実行
サンドボックスを使ったのでそれを ghc
に教える必要がある。後、各種 .dll
があるディレクトリを PATH に入れる必要がある。
...> ghc -package-db .cabal-sandbox\x86_64-windows-ghc-7.8.3-packages.conf.d samples\wxcore\BouncingBalls.hs
...> Set PATH=c:\wxWidgets-3.0.2\lib\gcc_dll\;.cabal-sandbox\x86_64-windows-ghc-7.8.3\wxc-0.92.0.0;%HASKELL_COMPILER_DIR%\mingw\bin;
...> samples\wxcore\BouncingBalls.exe