雑文発散

«前の日記(2016-06-24) 最新 次の日記(2016-06-26)» 編集
過去の日記

2016-06-25 [長年日記]

[Emacs] Emacs の HEAD でコンパイルに失敗する原因を探っていた

数日前から自分用の homebrew-emacs のビルドが失敗するようになっていた。Travis CI で毎日ビルドしているのだけど、失敗の通知メールが来るようになって、その事に気がついた。

この homebrew-emacs では、これもオレオレの emacs-inline-patch を使っているので、そのパッチが Emacs HEAD の変更に追従できなくなったのだと思って調べていたのだけど、emacs-inline-patch は無関係だった。パッチを当てる前の状態でビルドしてもエラーが出ていたのだ。

  CC       nsfns.o
nsfns.m:728:35: error: expression is not assignable
  FRAME_INTERNAL_BORDER_WIDTH (f) = XINT (arg);
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
nsfns.m:730:37: error: expression is not assignable
    FRAME_INTERNAL_BORDER_WIDTH (f) = 0;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^

これなんだろうなーと、git blame や git log を見てアタリをつけていると、どうやらこの commit の変更が要因らしいということが分かった。

この修正で FRAME_INTERNAL_BORDER_WIDTH の実装が変わっている。従来は FRAME_INTERNAL_BORDER_WIDTH (f) に直接代入することができていたようなのだが、それができなくなったみたいだ。

その代わりに内部の実装で使っている f->internal_border_width に直接代入してやればいいのでは?と思って、次のようにしてみた。

  /* FRAME_INTERNAL_BORDER_WIDTH (f) = XINT (arg); */
  f->internal_border_width = XINT(arg);
    /* FRAME_INTERNAL_BORDER_WIDTH (f) = 0; */
    f->internal_border_width = 0;

これで試しに make してみると、先ほどまで出ていたエラーは出なくなった。

さらに Emacs のメーリングリストを眺めていたら、このメールを見つけた。

これは Windows 用 Emacs のビルドが失敗する問題を修正したものなのだけど、オレがやってみた修正と同じ方法を取っている。それであれば、先ほどの修正内容で正しそうな気がしてきた。更に Windows は改善したけど Mac は未対応ということであれば、、、もしかして、Emacs のソースコードに貢献するチャンスなのでは!?と思って、どうやって修正を送るかを調べてみた。

Emacs は Git を使ってソースコード管理をしているのだけど、そのホストは git://git.sv.gnu.org/emacs.git になっている。GitHub 上でコードの閲覧ができるようになっているけど、それはミラーされているだけのもの。従って GitHub 上での pull request 運用は行われていない。

リポジトリ内の CONTRIBUTE を見てみると、結構長々と書かれていて、ちょっとカジュアルさがない(泣)

どうやら次のようにして bug-gnu-emacs[at]gnu.org へ送信しろってことみたいだ。

git send-email --to=bug-gnu-emacs[at]gnu.org 0001-DESCRIPTION.patch

実際に送った場合はどうなるんだろう?と、この宛先であるメーリングリストのアーカイブを眺めていたら、このメールを発見した。

これは上記の git send-mail で送ったものでは無さそうだけど、指摘箇所も修正箇所もオレのと全く同じ。既に1日前には報告と修正があがっていたのであった。

ということで、Emacs の commit log に自分の名前が刻めるかも!?と思って、Emacs の内部のことはほとんど分からないながらも頑張って調べてみたのだけど、残念ながら既に対応済みの案件であった。