これはSmalltalk Advent Calendar 2017の記事です。穴が空きそうだったので、あわてて作りました。
Ubuntu Linuxなどでパッケージ配布されているScratchのVMでは、ScratchSourceCodeのイメージで起動することができません。(真っ白な画面が表示されてフリーズします)
ScratchのVMは実際にはSqueak SmalltalkのVMですが、どうやらバージョン4系のVMはどれもScratchSourceCodeのイメージで起動できないようです。
そこでSqueak-3.9-8のVMをビルドして使うことにします。32bit版を作るため、普段使っている64bit版のUbuntuではなく、32bit版のUbuntuでビルドします。私はVirtualBox上のlinuxBeanを使ってビルドしました。
64bit版のUbuntuでもビルド可能ですが、i386パッケージを大量にインストールする必要があるので、あえて32bit版をインストールしてビルドしました。
必要なパッケージの入手
VMをビルドするために必要なパッケージをインストールしておきます。
$ sudo apt-get install cmake g++ xorg-dev $ sudo apt-get install libcairo2-dev libpango1.0-dev $ sudo apt-get install uuid-dev libpulse-dev libasound2-dev libffi-dev libdbus-1-dev
ソースの入手
Squeak-3.9-8のVMのソースは以下のURLから入手できます。
http://files.squeak.org/3.9/unix-linux/
Squeak-3.9-8.src.tar.gz をダウンロードして、適当なフォルダに展開します。
$ tar xzf Squeak-3.9-8.src.tar.gz $ cd Squeak-3.9-8
パッチを当てる
このままビルドしてもコンパイルエラーが発生します。原因はソース中にちりばめられている dprintf というマクロが再定義されているからです。新しいVMでは debugf という名前に変えられているので、こちらもそのように変更します。
私はsedを用いてdprintfを含むソースをすべて変換しました。
sed -i".orig" -e "s/dprintf/debugf/g" *.c
せっかくなので、関係するソースをすべて変更するパッチファイルを提供します。
squeak-3.9-8.patch
上記ファイルをダウンロードしたら、ソースを展開したフォルダ内でパッチを適用します。
$ patch -p1 < squeak-3.9-8.patch_.txt patching file platforms/unix/vm/sqUnixExternalPrims.c patching file platforms/unix/vm/dlfcn-dyld.c patching file platforms/unix/vm/debug.c patching file platforms/unix/vm/debug.h patching file platforms/unix/vm/sqUnixMemory.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDev.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevKeyboard.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevMouseADB.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevFramebuffer.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevMousePS2.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevKeymap.c patching file platforms/unix/vm-display-fbdev/sqUnixFBDevMouse.c
ビルドする
$ mkdir bld $ cd bld $ ../platforms/unix/config/configure --prefix=`pwd`/target CFLAGS="-Wno-unused-result" $ make $ make install
targetにVMやプラグインが格納されるので、適当なフォルダ(例えば /usr/local/ 以下)にコピーして使います。
これでUbuntu Linux環境でも問題なくScratchSourceCodeのイメージを起動できるはずです。