本質的には 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 未整備で、凝ったコトした時に何が起きるか分からん。
% 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.logtemacs が出来るところまで進むが、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 することになる
... この段階がいちばん疲れた ...
>src="../images/emacs.png" width=240 height=320<... むぅ、X 用のやつでイメージファイルが上書きされてしまた。
オープニングメッセージ読むにはちと幅が狭いな。 最下段のミニバッファが 2 行っぽいのは、 もしかしてこれだけの狭幅に対応してないのか、あるいはこれで正しいのか。 ssh で入って起動するぶんには快適だけども。
パッケージを feed/old から消去。zanrus-ja から拾われたし。(Jan. 15, 2003).