Archive for 2013年2月|Monthly archive page
Puppy Linux に newLISP をインストールする...または libffi の導入
Puppy Linux は 4.X.X 系の日本語版を使っていましたが、5.X.X 系も日本が版が出ています。古い機種は 4.X.X 系と相性がいいですが、新しいハードウェアには 5.X.X 系の方が良さそうです。
そこで、5.X.X 系を使ってみることに、、、ついでに懸案だった libffi の導入にも取り組みました。
1.Puppy Linux の導入
http://openlab.jp/puppylinux/ から Lupu-528JP本体と開発環境を lupu_devx_528jp.sfs ダウンロードして、インストールする。インスト-ル方法は、http://openlab.jp/puppylinux/ を参照してください。
2.libffiをインストールする。
http://sourceware.org/libffi/ から libffi-3.0.12.tar.gz をダウンロードして適当なフォルダーに展開。
例えば、
/usr/local/source/
あたりに。
展開されたディレクトリ(/usr/local/source/libffi-3.0.12)に入り、
./configure
して
make
する。成功したら、
make install
してから、ffi.hとffitarget.hを /usr/include にコピーする。
(4.X.X 系でインストールでしても newLISP を make できなかったのは、これに気づかなかったから、、、)
3.newLISPをインストールする
http://www.newlisp.org/ から newlisp-10.4.6.tgz をダウンロードして適当なフォルダーに展開
例えば、
/usr/local/source/
あたりに。
展開されたディレクトリ(/usr/local/source/newlisp-10.4.6)に入り、
make
する。
これは、
make -f makefile_linux_utf8_ffi
と同じ。
ffilib をインストールしていないなら、
make -f makefile_linux_utf8
を実行する。
makeに成功したら、
make install
する。
これで完了です。ここで気づかれた方もいるかもしれませんが、コンパイル・オプションを変更していません。それでも、make できるのです!
改めて、makefile_linux_utf8_ffi の中をのぞくと、
default: $(OBJS)
$(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -lffi -o newlisp # for UBUNTU Debian
# $(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -ltermcap -o newlisp # slackware
# $(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -lncurses -o newlisp # other Linux Dist
# $(CC) $(OBJS) -m32 -g -lm -ldl -o newlisp # without readline support
strip newlisp
5.X.X 系は 4.X.X 系とカーネルが違うから?
まっ、動くんだから問題はありません(笑)。この実行ファイルが 4.X.X 系で動くことはないでしょうけど、、、
さて、よく見るとコメントアウトされた行に libffi を含める -lffi がありません。たぶん忘れたのでしょうね。
default: $(OBJS)
$(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -lffi -o newlisp # for UBUNTU Debian
# $(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -ltermcap -lffi -o newlisp # slackware
# $(CC) $(OBJS) -m32 -g -lm -ldl -lreadline -lncurses -lffi -o newlisp # other Linux Dist
# $(CC) $(OBJS) -m32 -g -lm -ldl -lffi -o newlisp # without readline support
strip newlisp
とすべきところでしょう。
以上、如何でしょうか?
あっ、JAVA のダウンロードとインストール方法は http://java.com/ja/download/ でどうぞ。
file? を使う...または、開発版v.10.4.6の紹介
newLISP の file? はファイルの有無をチェックしますが、ディレクトリに対しても true を返します。
newLISP v.10.4.5 on Win32 IPv4/6 libffi, execute 'newlisp -h' for options. > (file? "newlisp.exe") true > (file? "newlisp.exe" true) "newlisp.exe" > (file? "modules") true > (file? "modules" true) modules > (file? ".") true > (file? "." true) "." >
第二引数に true を指定するとファイル名を返してくれます。当然、ディレクトリ名もそのまま返します。
しかし、開発版の v.10.4.6 からは、第二引数に true を指定するとファイル名だけを返します。
newLISP v.10.4.6 on Win32 IPv4/6 libffi, execute 'newlisp -h' for options. > (file? "newlisp.exe") true > (file? "newlisp.exe" true) "newlisp.exe" > (file? "modules") true > (file? "modules" true) nil > (file? ".") true > (file? "." true) nil >
こんな感じ。だから、v.10.4.6 の file? を使えば、ディレクトリ下のファイル名だけを取り出すことができます。
> (clean nil? (map (hayashi file? true) (directory))) ("CodePatterns.html" "COPYING" "guiserver.jar" "guiserver.lsp" "manual_frame-jp. html" "manual_frame.html" "md5-checksums.txt" "newLISP-10.4.6-Release.html" "newlisp- edit.lsp" "newlisp-win.ico" "newlisp.dll" "newlisp.exe" "newLISPdoc.html" "newlisp_index- jp.html" "newlisp_index.html" "newlisp_manual-jp.html" "newlisp_manual.html" "uninstall. exe") >
ここで、
(hayashi file? true)
の hayashi は拙作のマクロ(newlisp-utility.lspに定義してあります)、
(lambda (x) (file? x true))
と等価です。
さて、v.10.4.6 では、JSON データ用の関数 json-parse と json-error が新設され、Android 版のmakeファイルがあったりします。開発版とはいえ、試してみる価値はありそうです(笑)。
こちらに、日本語併記のマニュアル(newlisp_manual-10406.zip)があります。興味のある方はどうぞ。
以上、如何でしょうか?