squeakをコンパイルしてみる。

どうもdebianをutf8運用しているとsqueakland.jpのイメージはキーボードを押した瞬間に落ちてしまう。


http://ftp.squeak.org/3.9/unix-linux/Squeak-3.9-8.src.tar.gz
ここからソースファイルをダウンロード
XIMのパッチを以下より入手 
http://www.nabble.com/-Squeak-ja-3A-3367--3.9-8VM-E7-94-A8-E3-81-AESqueakImmX11Plugin-E3-83-91-E3-83-83-E3-83-81-to8473203.html

$ tar xzf Squeak-3.9-8.src.tar.gz
$ cd Squeak-3.9-8
$ tar xzf ../SqueakImmX11Plugin3.9-8.tar.gz
$ patch -p0 < ImmX11.patch
$ mkdir bld
$ cd bld
$../platforms/unix/config/configure
$make
$ ./squeak SqueakPlugin.image

Segmentation fault

2025728400 ProcessorScheduler class>idleProcess
2025385784 [] in ProcessorScheduler class>startUp
2025385876 [] in BlockContext>newProcess
アボートしました

現在のところパッチを当てないとXIMがつかえない(日本語が入力できない)どころかキーボードを押した瞬間にsqueak自身が落ちる。
パッチを当てずに使えばsqueakland.jpにある SqueakPlugin.imageで動くので問題はパッチの方だというところまでわかった。

もう少しサーチしてみると以下の記事を発見。

まずUbuntu(Linux)でsqueak.の症状はwww.squeakland.jp/から
ダウンロード・展開したオブジェクトで起動するとキーボード
入力した時点でSegmentation faultになってしまうというもの
でした。そこでgdbで調査するとsqUnixX11.cのXCreateFontSet
関数がNULLを返すのが原因だと分かったので、応急処置として

#define FONTNAME "-*-Fixed-Medium-R-Normal--14-*-ISO8859-1"
と変更しました。思うにUbuntuのデフォルトロケールがUTF8
なので、いけなかったのではと思ってたり。

$ vi ../platforms/unix/vm-display-X11/sqUnixX11.c
#define FONTNAME      "-*-*-medium-r-normal--14-*"

これを以下に変更

#define FONTNAME      "-*-Fixed-Medium-R-Normal--14-*-ISO8859-1"

そしてconfigureからやりなおし。
実行してみたらXIMから入力できるようになったが文字化け。

しかも音もなってなかった。くやしい。今のところは 3.9-7でXIM抜きで我慢するか。

残念なスナップショットをのせておく。

その後、同じ掲示板で以下を発見。

うまく動くか VM 3.7-7 で試してみました。
FC 5 ではとりあえず日本語入力できています。
utf-8 のコードをパッチに組み込んでおいて本当によかったと,
胸をなでおろしています。

2c を 3.7-7 向けにパスを修正したのを,
http://opinion.nucba.ac.jp/~tsutomu/squeak/SqueakImmX11Plugin3a.tar.gz
に置きました。

3.7-7でチャレンジ。

$ tar xzf Squeak-3.7-7.src.tar.gz
$ cd Squeak-3.7-7
$ tar xzf ../SqueakImmX11Plugin3a.tar.gz
$ patch -p0 < ImmX11.patch
$ mkdir bld
$ cd bld
$../platforms/unix/config/configure
$make

だめだ、キーボード押した瞬間に落ちる(笑

まてよ。さっきのFONTNAMEを同様に編集してみると…動いた。
XIMの入力も化けない!
ということで、勝利の四角形。

ゲコゲコと音もするし今のところ問題無し。

よし、パッケージ作るぞ。
make installしたくないので動作するのに必要なのはvmプラグインを同一のフォルダに置けばいいみたいだ。

$ mkdir test
$ cd test
$ cp squeak test
$ for i in vm-* ; do cp $i/.libs/$i test ;done
$ cp ImmX11Plugin/.libs/ImmX11Plugin test

一応以下のパッケージで動く模様。

ImmX11Plugin
SqueakPlugin.image
squeak
vm-display-X11
vm-display-fbdev
vm-display-null
vm-sound-OSS
vm-sound-null

良かった。良かった。