読者です 読者をやめる 読者になる 読者になる

なんとな~くしあわせ?の日記

ClojureとかAWSの設定とかをメモする技術ブログ

CLISP + msys + mintty

MinGW msys CLISP


msys + mintty + CLISP で割と綺麗にコンソールが使えるようだ
やったことはWindowsのPATHに「C:\c\Program Files (x86)\clisp-2.49」を追加したのみ。
ただ、Ctrl + D で対話モードを強制終了した後ウィンドウを消すとセグる。

f:id:panzer-jagdironscrap1:20120602000649j:plain

とか考えてたんですが、eclipse + CLISP の素晴らしいプラグインを開発されてた方がいました
http://sourceforge.net/projects/dandelion-ecl/

インストール方法
新規ソフトウェアのインストールに
http://dandelion-ecl.sourceforge.net/update

を入力し、インストール、再起動。それだけ。
他のeclipseプラグインと同じくウィンドウ->Lispと辿ることで設定変更可能。
異なるCLISPの処理系を使い分けることができそうだ。

CLISPLispのコードからバイトコードを生成するというところが気に入りました。
あと、GNUだし。

ただここ見てるとhttp://cl.cddddr.org/index.cgi?%BD%E8%CD%FD%B7%CF
Lispの処理系多すぎなんだよなあ

f:id:panzer-jagdironscrap1:20120602005951j:plain

CLISPのビルド

上記のdandelionプラグイン使っときゃLispは楽しめるんだが、他にもいろいろなモジュールがあるみたいで(gtk2,zlib,postgresql,etc.)試してみたいのが人の性。
ビルドの手順を示す

MinGWclisp-2.49をビルド

必要な物は多い

依存関係にあるものでインストール可能なもの
・libsigsegv … v2.6なら素でインストール可能
・libiconv … 特に難しくないので頑張って
・gettext … mingwパッケージを使うかパッチを当てるか
・libffcall

無理そう
・readline…そもそもMSWでインストール不可能

libsigsegv-2.6

# mingwgccで-mno-cygwinオプションなんて意味ないけど、
# コンパイル・テスト・インストールまで済んだので良しとする

CC="gcc -mno-cygwin" ./configure --host=i386-pc-mingw32 --prefix=/mingw
make
make check
make install

libffcall

GNUのlibffcallのページ、なんだこりゃw
GNU ffcall library

TODO for Bruno Haible

Integrate patches into the cvs tree.
Make a release into ftp://ftp.gnu.org/pub/gnu/libffcall/.
Update FM.
Update Free Software Directory.
If you are not Bruno Haible, please do send him a polite note and ask him to take a look at this TODO list!

とりあえずインストールしていく

$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/libffcall co ffcall
$ cd ffcall
$ ./configure --host=i686-pc-mingw32 --prefix=/mingw && make && make check && make

※ffcallのインストールなしにCLISPをインストールしようとすると親切にもこのインストール方法が示される。ありがてえ。

clisp-2.49

# clisp-2.49フォルダ・INSTALL内の文言
# * on Win32 using mingw: see unix/INSTALL and pass --with-mingw to configure.

# 最終的なコンフィグ

・「-ansi」をつけていると一部コンパイル不可な部分が出てくる
・CLFLAGS ="-Wl,--stack,10485760"を付けないとLisp特有の再帰処理のためのテストで落ちる
参考サイト:GSL for MinGW

$ CC="gcc -Wall" CLFLAGS ="-Wl,--stack,10485760" ./configure --prefix=/mingw --with-mingw --without-readline --with-libsigsegv --with-module=bindings/win32 --with-module=rawsock --with-modules=regexp --with-module=zlib --with-libffcall
Configure findings:
  FFI:        yes (user requested: default)
  readline:   no (user requested: no)
  libsigsegv: yes
./makemake --with-dynamic-ffi  --prefix=/mingw --win32gcc --without-readline --with-libsigsegv --with-module=bindings/win32 --with-module=rawsock --with-modules=regexp --with-module=zlib --with-libffcall    > Makefile
make: `config.lisp' is up to date.

To continue building CLISP, the following commands are recommended
  (cf. unix/INSTALL step 4 ff):
    cd src
    vi config.lisp
# The default stack size on your platform is insufficient
# and must be increased to at least 16384.  You must do either
# 'ulimit -s 16384' (for Bourne shell derivatives, e.g., bash and zsh)
# or 'limit stacksize 16384' (for C shell derivarives, e.g., tcsh)
    make
    make check


ビルドする・「make check」のテストは通らなかったがまあいいや

$ cd /usr/local/src/clisp-2.49/src
$ make
$ make check

こぼれ話

・stackのサイズ変更はこれまでも必要な時があったが、今回初めてそれを使ったビルドを成功させた
SourceForge.net: MinGW - Minimalist GNU for Windows: mingw-users
上記のメーリングリストにも言及されているが、stdlib.hさえインクルードしておけばenvironの中に勝手に環境変数が入っている。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
  char** epp;
  for (epp = environ; *epp; epp++)
    printf(" -> %s\n",*epp);
  return 0;
}

こいつをコンパイルして実行すると面白い、Javahttp://java.sun.com/javase/ja/6/docs/ja/api/java/lang/System.html#getProperties():Systemプロパティに似てる

$ gcc env.c -o env
$ ./env
 -> ALLUSERSPROFILE=C:\ProgramData
 -> APPDATA=C:\Users\learning\AppData\Roaming
 -> COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files
 -> COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files
 -> COMMONPROGRAMW6432=C:\Program Files\Common Files
・
・
・