SPIN645あたりから,SPINのインストールがますます面倒になっている….今回は,Cygwin でなくMSYS2 を使うことにしてみた.
まず,MSYS2 のインストール.64bit用のバイナリをダウンロードして,インストール.基本的にMSYS2ウェブサイトに書いてあるとおりにやればよいのだが,最初の pacman -Syu のとき,途中で止まって帰ってこなくなる.(どうもそんなものらしい.) Ctrl-C とかをするべきではなく,ウィンドウごと終わって,別のMSYS2シェルを立ち上げてもう一回 pacman -Syu とするのが正しいらしい.
これが終わっても,gcc は入っていない.MSYS2シェルで次を実行する.
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
どれをインストールするか? と聞かれるのだが,めんどくさいので全部インストールしてしまった.これで,gcc も動くようになった… のだが.
MSYS2 には,3つのパッケージが入っている.MSYS, MINGW64, MINGW32 である.このうち,MSYS は,管理業務を行うために使う.pacman とかその類.MINGW64 や,MINGW32 は,おのおの64-bitバイナリを作る時,32-bit バイナリを作る時に使う.で,3つのシェルをそのように使い分ければ良いはずだったのだが,なぜかMINGW64シェルを立ち上げても,MSYS2用のgccなどが動いてしまう.(結果として,できあがった .exe に対して ldd コマンドを実行してみると,msys2.dll に依存していることがわかる.) この原因は,自分の $HOME/.bashrc で,/usr/bin を PATH に加えるように書いてあることだった.MSYS2用の gcc は,/usr/bin (として見える場所) に入るので,こういうことになるわけだ..bashrc を書き換えて,環境変数 MSYSTEM が定義されている時にはPATHを触らないようにした.
(もっとも,SPINを使うためにMSYS2を入れる,という観点からは,別にどうでも良いことではあるのだが.)
SPIN の main.c に,gcc-3 や gcc-4 があるかどうかを確認して,あったらそっちを動かす,というコードが書いてあるのだが,これが Windows だと機能しない.こんな感じになる.
E:\home\yo\windows\desktop\pc_spin647>spin.exe -a abp.pml 'gcc-4' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'gcc-3' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
(多分,627 の時には,そんなもんは無かったのに.) こころみにそこを削除してspin.exeをビルドしてみるとちゃんと動いた.しかし,それを人に使えと言うのもどうかとおもうので,回避策として,以下をとらせることにした
- C:\msys64\mingw64\bin をパスの前の方に加える
- そのディレクトリで,gcc.exe を gcc-3.exe, gcc-4.exe という名前でコピーする.
SPIN自体は,pc_spin647.zip を持って来て展開すれば良い.
参考になったページ:
神戸大「Spinのインストール」http://herb.h.kobe-u.ac.jp/spin_install_document.html