もはや、知る人は珍しい、X Window System ですが、しつこく使ってます。なのだが、
Perl/Tk が動かない
Tcl/Tk は、tcl 言語を除けば使いやすいGUI libraryなんだけど、それを Perl から使えるようにしたものですね。Aquaでそのまま使えれば良いのだが、なぜか、X11。Tcl.Tk は Aqua で動くので、さぼっているだけでしょう。というか、GUIはAPIが多いので移植するのは大変なんだよな。
DB<2> $m = MainWindow->new
zsh: abort perl -de 0
かなり初期の部分で落ちるので、Tk.pm の実装の問題だなと思って、lldb でdebugしようとするんですが、つまらんセキュリティのせいでままならん。でも、root でやればなんとかなった。stack trace を見ると...
5 libsystem_c.dylib`__chk_fail_overflow
6 libsystem_c.dylib`__strcpy_chk
7 Tk.bundle`AllocStringEntry
8 Tk.bundle`Tcl_CreateHashEntry
strcpy_chk? あぁ、なんか、strcpy をそれに強制的にmapしたんだな。で、ソースから直そうかと思ったですが「元のソースは、どうせgithubだろ?」と探しに行ったら、
https://github.com/eserte/perl-tk
cpanm baseのソースと違う
なるほど。で、git diff してみると、
strcpy が軒並み memcpy に書き換えられてる
まぁ、そうだよな。で、git から取ってきたので、ちゃんと動きました。なのだが、
Xquartz のApplication menuからだと起動しない
くそ〜どういうこと? で、menu の所に、>& /tmp/ers と書けるということがわかったので、
Tk::Event object version 804.033 does not match bootstrap parameter 804.032 at /System/Library/Perl/5.18/XSLoader.pm line 95.
そうか、違うTkを見てるな。なんどか install したからな。
perlbrew ってのがあって、複数の版のperlを使い分けられるものなんですが、それが悪さをしているらしい。Perlは、Ruby とか Python と違って、minor version で雨後かなくなるってのは珍しい(最近は少しある)ので、不要なんだよ。なんだが、Tkが動かなかったので入れてしまったのですが、さっそくやられました。
X11の起動には zsh ではなく sh を使っていたんだけど、perlbrewは zsh の修正にいくらしい。そもそも、
system 関係のライブラリのperlを個人のコマンドでversion毎に切り替えるのか?
なので、環境変数を unset して/
/usr/bin/perl Makfile.PL
make -j 4
sudo make install
で、構築しなおし。まぁ、xinitrc をzshに直しても良かったんだが...
XQuartz のApplication menuは、
~/Library/Preferences/org.macosforge.xquartz.X11.plist
にあるので、これをコピーすれば、そのまま移行できるのですが、
~/Library/Caches/org.macosforge.xquartz.X11
の削除が必要でした。Time Machine で full inherite するなら、それも自動的に行われるわけですが...
次は、xterm の font 設定の話なはずです。
No comments:
Post a Comment