top page > PC unix > here

mule on X Window System


2007.6.29 に大幅に改訂しました. それ以前の内容を参考にされた方は,新しい対策と patch とをご利用下さい.

概要

FreeBSD 5, 6 系にて,mule が X Window System の上で動作せず,core dump します. その対策を提示します.

検討した環境は次のようなものです.

  1. OS は FreeBSD 4.11, 5.3, 6.2 です. (4.11 は比較のため.)
  2. X Window System と gcc, ld とは,各々の OS の標準のものです.
  3. mule は各々の ports/packages の mule-freewnn, mule-wnn7 です.

目次

1. 状況
2. 対策
3. あとがき

1. 状況

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.11XFree86 4.4.02.95.42.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 以外は確認せず.

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 を工面しない限り使えなくなります.

3. あとがき

この 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 に費やした時間をそちらに使っていれば... ということは考えないことにします.)