Windows版(MSYS/Cygwin版)moshのビルド方法

Windows版のmoshはCMakeの他にMSYSやCygwinでもビルドすることができる。
非常にややこしいが、Windows上で動作するmoshにはN種類ある。

  • Win32で動作するMinGW+CMake版
  • Win32で動作するVisualStudio+CMake版
  • Win64で動作するVisualStudio+CMake版
  • Win32で動作するMinGW+autotools版
  • Win32で動作するCygwin+autotools版

普段Cygwinを使っているなら、Cygwin+autotools版が多分一番安定している。インストール方法はLinux同様なので省略。。Cygwin上では、Moshの備える殆どの機能が使える。
問題はMinGW版とVisualStudio版で、それぞれで仕様が微妙に異なる。。一般に、MinGW版の方が動作が高速で機能が多く、VisualStudio版の方がビルドが高速で開発しやすい。個人的には、仕事でVisualStudio上のWin32/64版を使っていて、VisualStudio版の方がMinGW版よりも安定している可能性が高い。
VisualStudioでのビルド方法は既に書いた( http://d.hatena.ne.jp/mjt/20101108/p1 )ので、以下はMinGW版のビルド方法。

MSYS or Cygwin ?

個人的には、"Cygwin上でMinGWコンパイラを使用してビルド"を推奨。MSYSはCygwinの縮小版なので、特にHDD容量に余裕が無いといった理由が無い限りはCygwinの方が好ましい。
Cygwinで開発環境を揃えるには、

の各パッケージを導入する。(MinGW64という名前になっているが、このコンパイラは32bitバイナリを出力する。。moshのBoehmGCはまだMinGW64をサポートしていないので、MinGWを使ってwin64バイナリを出力することはできない)

onigurumaとGMPのインストール

今回は~/moshprefixに各種ライブラリをインストールすることにする。
onigurumaとGMPは以下のように

./configure --host=i686-w64-mingw32 --prefix=$HOME/moshprefix --disable-shared

configureして普通にmake && make installでOK。
host=i686-w64-mingw32は、i686-w64-mingw32-で始まる名前のgccやldを使うという指示。
disable-sharedはDLLではなく静的リンクライブラリを使用する指示。基本的には不要だがCygwin上で一度onigurumaやGMPをインストールしている時はこれが無いと失敗することがある。(Cygwin版のライブラリとMinGW版のライブラリの区別が付かないため)

moshのビルド

もし、onig-configコマンドが有るなら、それを一旦削除する必要がある。which onig-configコマンドで探し、適当なところにmvする。
moshのconfigureもコツが必要で、

CFLAGS="-DGC_NOT_DLL -L$HOME/moshprefix/lib -I$HOME/moshprefix/include" \
CXXFLAGS="$CFLAGS" ./configure --host=i686-w64-mingw32 \
--prefix=$HOME/moshprefix --disable-profiler
  • CFLAGSには-DGC_NOT_DLL、-Lと-Iを含める
  • CXXFLAGSもCFLAGSと同様に設定する
  • configureのオプションには先と同様の--hostと--disable-profilerを含める

ちなみにCygwinでconfigureした場合はmake checkやmake testは機能しない。MinGWビルドのmoshCygwin形式のpathを解釈できないため。