Mac OS 10.9上でのHaskellゲーム開発環境を整えるまで
そんなこんなでゲームを書く事になって、free-gameのようなライブラリも有るとの事なのでHasellでゲームを作ろうとして環境構築に時間がかかった話。
普通にプロジェクトを立ち上げてライブラリを整備する
まずはお約束の呪文
git init
今時はどの言語もグローバル環境(/usr/libとか)に言語のライブラリを配置する事が少なくなりましたね。
Haskellではcabal sandboxを使うとよいそうです。*1
cabal sandbox init
で、この上でcabal installをすればプロジェクトローカルな場所にインストールしてくれるそうです。
cabal install free-game
あとはどっかのプロジェクトから.cabalファイルをパクって自分のプロジェクト仕様にしましょう。
何が起きた
で、幸せになれたなら世界は平和なのですが、道を外れた人に厳しいのはどの世界も同じな様で。いくつかの問題が出ました。
- cabalが古いのでsandbox機能が無い
- iconvが無いそうだ
- そもそもfree-gameのインストールに失敗した
直すのにやたら時間がかかったのでメモ
cabalが古い?
cabal update
cabal install cabal-update
で十分かと思ったらghcも古い。macportsのhaskell-platformがずいぶん古い。仕方無いので直接haskell-platformを入れようとした。
sudo port uninstall --follow-dependencies haskell-platform
iconvが無い
_iconvという関数がないとldさんから怒られる問題が有りまして。
Macportsを使ってインストールされるlibiconvと元々のlibiconvとは名前が変わっているそうだ。*3
この場合は/usr/libの方のiconvを読んでもらえば良いので、常にそっちがパスにくるように設定する。正確には、~/.cabal/configに以下の様に書き加える。
program-default-options ghc-options: -L/usr/lib
ライブラリ入らんやん
どうも入っているOpenGLRawが1.5.0.0で必要なのが1.4.0.0らしい。バージョン名を指定しながらインストール出来るのは良い時代ですね。プロジェクトローカルにcabal install。
[ 3 of 200] Compiling Graphics.Rendering.OpenGL.Raw.EXT.SceneMarker ( src/Graphics/Rendering/OpenGL/Raw/EXT/SceneMarker.hs, dist/build/Graphics/Rendering/OpenGL/Raw/EXT/SceneMarker.o ) src/Graphics/Rendering/OpenGL/Raw/EXT/SceneMarker.hs:30:44: parse error on input `glBeginScene'
なんとC言語っぽいところでコンパイルエラー。この問題はとうの昔に報告されていて、Macのgccが内部的にはclang(!)で有る事に由来する問題だそうです。*4
解決法も示されていて、Macportsとかでインストールしたgccをプリプロセッサに使うようにghcを書き換えてしまえば良いそうです。
すなわち、/Library/Frameworks/GHC.framework/Versions/Current/usr/lib/ghc-7.8.3/settingsにある(バージョン次第)設定ファイルを
("C compiler command","/usr/bin/gcc") ("Haskell CPP command","/usr/bin/gcc")
から
("C compiler command","/opt/local/bin/gcc") ("Haskell CPP command","/opt/local/bin/gcc")
に書き換えてやれば良い事になります。(Macportsでgccを入れたなら)
私の環境ではこれでやっとこ入りました。