概要
FreeBSD 5, 6 系にて,mule が X Window System の上で動作せず,core dump します. その対策を提示します.
検討した環境は次のようなものです.
- OS は FreeBSD 4.11, 5.3, 6.2 です. (4.11 は比較のため.)
- X Window System と gcc, ld とは,各々の OS の標準のものです.
- mule は各々の ports/packages の mule-freewnn, mule-wnn7 です.
概要
FreeBSD 5, 6 系にて,mule が X Window System の上で動作せず,core dump します. その対策を提示します.
検討した環境は次のようなものです.
また,FreeBSD 7.2 にて mule を make したので,その方法を提示します.
FreeBSD 5, 6 系にて,mule が X Window System の上で独自の Window を開く形では動作しなくなっています.
起動すると core dump します.
一方,console や (option に -nw を付けての) kterm の上では動作します.
FreeBSD 4 系では X Window System の上で独自の Window を開く形でも動作しています.
当方にて確認した環境は下表の通りですが,原理的には現存するすべての 5, 6 系の共通の問題です.
| FreeBSD | X Window System | gcc | ld | 備考 |
|---|---|---|---|---|
| 4.11 | XFree86 4.4.0 | 2.95.4 | 2.12.1 | それ以前の 4 系でも動作していた. |
| 5.3 | X.Org 6.7.0 | 3.4.2 | 2.15 | 5 系は 5.3 以外は確認せず. |
| 6.2 | X.Org 6.9.0 | 3.4.6 | 2.15 | 6 系は 6.2 以外は確認せず. |
ソースを次のように修正すれば解決できます.
この patch はこの中にあります.
→ mule.tgz
修正の手順は同封の文書である README をお読み下さい.
--- src/s/freebsd.h.org Thu Jun 28 22:40:44 2007 +++ src/s/freebsd.h Thu Jun 28 22:45:23 2007 @@ -134,3 +143,14 @@ /* XIM does not work very well, so the next is set (by taoka@FreeBSD.org) */ #define X_I18N_INHIBITED + +/* The `combreloc' setting became the default, and it seems to be + incompatible with unexec. Symptom is an immediate SEGV in + XtInitializeWidget when starting Emacs under X11. */ + +#if defined __FreeBSD_version && __FreeBSD_version >= 500042 +#define LD_SWITCH_SYSTEM_TEMACS -znocombreloc +#else +#define LD_SWITCH_SYSTEM_TEMACS +#endif + --- src/Makefile.in.org Tue Aug 18 14:48:35 1998 +++ src/Makefile.in Wed Jun 27 22:35:15 2007 @@ -473,7 +473,7 @@ #endif /* not COFF_ENCAPSULATE */ #endif /* not ORDINARY_LINK */ -ALL_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE LD_SWITCH_WNN LD_SWITCH_CANNA $(LDFLAGS) +ALL_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE LD_SWITCH_WNN LD_SWITCH_CANNA LD_SWITCH_SYSTEM_TEMACS $(LDFLAGS) /* A macro which other sections of Makefile can redefine to munge the flags before they're passed to LD. This is helpful if you have
この修正は /usr/ports/editors/emacs のそれに倣ったもので,compile の際に ld に option -znocombreloc を加えるものです.
この対策は 2007.6.29 に send-pr しました. しかし,2007.9.10 に editors/mule は ports/packages からはずした旨返答がありました. 従って,FreeBSD 6.3 以降は自分で別途 mule を工面しない限り使えなくなります. この点に関しては その後 も御覧下さい.
(ここは 2007 年の時点での記述です.) この 4 月に,久々に FreeBSD を version up しました. 4.11, 5.3 から 6.2 ですから 2 年ぶりです.
そもそも私が mule のこの問題に気付き,むきになって取り組んだのは,6.2 の ports/packages に現在常用している ja-xemacs-mule-freewnn がなく,そ の一方で過去に使い慣らした ja-mule-{freewnn,wnn7} があったからです.
emacs20, 21 は使ったことがないので「無意識に」選択肢からはずしていましたが,今後 emacs (emacs21) も使ってみて,乗り換えの候補にした方が良いかもしれないと考えています.
当分はまとまった時間が取れないので,FreeBSD 6.2 では mule を使い続けます.
(今回 mule に費やした時間をそちらに使っていれば... ということは考えないことにします.)
emacs として emacs21, emacs22 を使ってみました. これらは以前から使っていた xemacs も含めて非力な PC では重いので,使い分けたいと考えて FreeBSD 7.2 でも mule の make を試みました.
結論としては,相当手間をかけないと make できません.
FreeBSD の ports としてのメンテがされなくなったら,一気に敷居が高くなりました.
(逆に言えば,今までメンテして下さった方の御苦労が実感できます.)
なんとか make, make install ができて動く状態にまでしました.
patch は mule.tgz に同封しておきましたので,参考にして下さい.
(ただし,これをやるには昔の ports と mule のソースが必要です.)
そこそこの性能の CPU を載せた PC をお使いならば,これを試みないことをお勧めします.