Emacs 21.2


本質的には Psion5 の時に等しい。 source tree とは別に native 向け object tree とcross 向け object tree を並行しつつ temacs まで作り、実機に object tree を持ち込んで dump する。 emacs20, emacs21, xemacs21 と微妙に差はあるが、 どれも基本線はこの方法で make 出来た。 NFS で直接 tree を mount できるぶん、Psion5 の時より楽だった。

... あくまで作るだけならだけど。検証作業のほうがなんぼかめんどくさい。 なにしろ普段使ってるのは mule に emacs20 を併用という状況だ。 emacs21, xemacs21 はバイナリはあれど .emacs 未整備で、凝ったコトした時に何が起きるか分からん。

Emacs21

一番 make が易しいのが emacs21。まず、こいつから。
% cd /home/src/emacs
% apt-get source emacs21
% md emacs21-i386
% md emacs21-arm
% cd emacs21-i386
% ../emacs21-21.2/configure  --without-x --srcdir=/home/src/emacs/emacs21-21.2
% make
ソースツリーが emacs21-21.2 とは限らないが、そのへんは適当に。 これで native 向け emacs が出来る。 続いて ──
% cd ../emacs21-arm
% CC=/opt/Embedix/tools/bin/arm-linux-gcc
% ../emacs21-21.2/configure  --without-x --srcdir=/home/src/emacs/emacs21-21.2 \
  --build=i686-linux --target=arm-linux arm-linux-gnu

実際に make に入ると、コマンドが実行できないと言って何度か止まる。 emacs21 では lib-src/test-distrib, lib-src/make-docfile, src/prefix-args がそうだ。事前にこれらを emacs21-i386 のほうから同じ位置へコピーしておく。

% cp ../emacs21-i386/lib-src/test-distrib  lib-src
% cp ../emacs21-i386/lib-src/make-docfile  lib-src
% cp ../emacs21-i386/src/prefix-args  src
それと、make 時に /usr/lib/ 下の crt1.o, crti.o, crtn.o を使おうとする。これらを /opt/Embedix/tools/arm-linux/lib/ のものに振り替える。
% pushd src
% mv Makefile Makefile.org
% sed 's#/usr/lib#/opt/Embedix/tools/arm-linux/lib#g' < Makefile.org > Makefile
% popd

というわけで、準備完了。

% make |& tee ../make.log
temacs が出来るところまで進むが、temacs を実行しようとして make は止まる:
LC_ALL=C ./temacs -batch -l loadup dump
/bin/sh: ./temacs: cannot execute binary file
make[1]: *** [emacs] エラー 126
make[1]: Leaving directory `/home/src/emacs/emacs21-arm/src'
make: *** [src] エラー 2

A300 にリモートログインし、object tree を同じ位置において手で dump する。

# mount -t nfs kuhn:/home/src/emacs /home/src/emacs
# cd /home/src/emacs/emacs21-arm/src
# strip temacs
# LC_ALL=C ./temacs -batch -l loadup dump 
# cd
# umount /home/src/emacs
再び母艦に戻り、make を続行する。 と、その前に emacs を実行して止まるので、"emacs" という名前のバイナリを i386 のものに差し替えておく (arm バイナリは emacs-21.2.1 という名前で残っている)。
% pushd src
% rm emacs
% cp ../../emacs21-i386/src/emacs .
% popd
% make
% pushd src
% rm emacs
% ln emacs-21.2.1 emacs
% popd
この時、emacs for i386 をコンパイラに使って大丈夫か (i386 系なパス名が .elc に埋め込まれたりしないか) というのが気になるが、 とりあえず大丈夫そう。

これで make 全工程を終わる。

Install から packaging にあたっては A300 のほうに /usr/bin/make 置けばすみそうだが、 そんなもんではすまなかった (ぜんぜんコマンドが足りんかった) ので、母艦上で整備する。 もちろん母艦上で本当に install する訳にはいかないので、 chroot jail の中で:

# mkdirhier /home/src/SUBSYSTEM/sid/home/src/emacs
# mkdirhier /home/src/SUBSYSTEM/sid/opt/Embedix/tools/arm-linux/lib
# cd /home/src/emacs
# tar -cvp emacs21-21.2.1 emacs21-arm | tar -xpC /home/src/SUBSYSTEM/sid/home/src/emacs
# pushd /opt/Embedix/tools/arm-linux/lib
# tar -xvp crt*.o | tar -xpC /home/src/SUBSYSTEM/sid/opt/Embedix/tools/arm-linux/lib
# popd
# cd /home/src/SUBSYSTEM/sid
# chroot . /bin/zsh
# cd /home/src/emacs/emacs21-arm
# make -i install |& tee ../install.log
もちろん /home/src/SUBSYSTEM/sid/ は一通りのシステムを入れてある。 空の /home/src/SUBSYSTEM/sid/ で↑をしてもダメなので念のため。

さて。install.log 見ながらファイルをかき集める。

# tar -cv  /usr/local/libexec/emacs/21.2/arm-linux-gnu \
           /usr/local/info/emacs* /usr/local/man/man1/ \
           /usr/local/share/emacs/site-lisp/subdirs.el \
           /usr/local/share/emacs/21.2 /usr/local/bin | gzip -1 > ../emacs21.2.1-20021120.tar.gz
それはいいんだが、ここから man, info, *.el を消してまわって packaging することになる ... この段階がいちばん疲れた ...

スクリーンショット

素の emacs 起動まで 5-6 秒、そこから .elc 読んで立ち上がるまで約 30 秒。 redraw が一回かんで白紙に戻るので segmentation fault でも起きたかと不安にかられるが、 大丈夫。

>src="../images/emacs.png" width=240 height=320< ... むぅ、X 用のやつでイメージファイルが上書きされてしまた。

オープニングメッセージ読むにはちと幅が狭いな。 最下段のミニバッファが 2 行っぽいのは、 もしかしてこれだけの狭幅に対応してないのか、あるいはこれで正しいのか。 ssh で入って起動するぶんには快適だけども。

パッケージ

ipk (11MB) は実行バイナリと .elc 等。tar.gz (22MB) のほうは実行バイナリ、.el, elc そのほか全部。 ipk のほうは /home/root/usr/local を指定したのでカードにもインストールできると思う、 たぶん。qinstall の挙動よく知らんのと、 /mnt/card が emacs 入れられるほど空いてないのでテストできない。

XEmacs21 その他

xemacs21, emacs20, mule ... という項を作りかけたが、emacs21 の packaging でダウンしたので略。

追記

いきなり回線が無茶苦茶重くなった。 細い回線にモノの規模が規模なので zaurus-ja に上げた。 そちらから download されたし。

追記、その 2.

うーむ、これでも SD に直接インストールできないんか ... /home/QtPalmtop 下だけとか?

追記、その 3.

SL-C700 上で emacs21 を動したスクリーンショットが公開された (zaurus-ja ml #560)。 <URL:http://sst.gaiax.com/home/sssss>から「かわらばん」 を辿ったところにある。

追記、その 4.

バイナリを feed/ から feed/old/ へ移動。

追記、その 5.

パッケージを feed/old から消去。zanrus-ja から拾われたし。(Jan. 15, 2003).


[日記へ] [目次へ]