作者: Atsushi SHICHI
日時: 2002/8/10(05:35)
しちです。おはようございます。

At Fri, 09 Aug 2002 23:35:32 +0900,
Keiichi Takahashi <bitwalk@...> wrote:
> 
> ビットウォークの高橋です。
> 
> 早速、自分の環境で問題の症状が再現するか確認してみました。使用した環境は、
(略)
> 残念ながら、デモサンプル/usr/bin/widgetを実行して「Vertical scale」のデ
> モをおこなってみましたが特に不具合が見られませんでした。

早速のお返事有難うございます。しかも確認までして頂けるとは。m(__)m

> RPMのスペックファイルをチェックしましたが、(廣島さんに教えてもらって)
> manのインストール先を調べて変数にしている他は、ビルド/インストールで特
> 別なことはしていません(と思います)。

specファイル拝見させて頂きました。結論から申しますと、specファイル
の一部修正により、私の投稿しました Scale/Makefile.PL への場当たり的
なパッチを当てずとも

> perl: error in loading shared libraries: /usr/lib/perl5/site_perl
> /5.005/i386-linux/auto/Tk/Scale/Scale.so: undefined symbol: XSetFont
> (実際は一行)

このエラーは出なくなりました。修正した箇所は以下の通りです。
関係なさそうなファイルまで(perl -i により)上書きされるのを防ぐように
してみました。

--^
--- perl-Tk.spec.orig	Sat Aug 10 02:25:57 2002
+++ perl-Tk.spec	Sat Aug 10 03:45:45 2002
@@ -36,7 +36,7 @@
 %setup -q -n Tk800.0%{myversion}
 %patch0 -p1
 
-find . -type f | xargs perl -pi -e 's|!.*/bin/perl\S*|!/usr/bin/perl|'
+find . -type f | xargs grep -l '^#!.*perl' | xargs perl -pi -e 's|^#!.*perl\S*|#!/usr/bin/perl|'
 
 %build
 perl Makefile.PL LDDLFLAGS="-shared -L%{_libdir}" LDFLAGS="-L%{_libdir}"
--$

specファイルに辿り着いた経緯を書きますと、廣島さんの日本語化パッチの

==== perltk800.024-020417jp.patch.gz から引用 ここから ====
diff -uNr Tk800.024.old/pTk/Xlib.h Tk800.024.new/pTk/Xlib.h
--- Tk800.024.old/pTk/Xlib.h    Tue Mar  5 22:55:48 2002
+++ Tk800.024.new/pTk/Xlib.h    Wed Apr 17 13:52:34 2002
@@ -1,6 +1,11 @@
 #ifndef _XLIB
 #define _XLIB
 #ifndef _XLIB_H_
+#ifdef KANJI
+extern int XSetFont _ANSI_ARGS_((Display *, GC, Font));
+#else
+#define XSetFont
+#endif /* KANJI */
 extern XFontStruct *XLoadQueryFont  _ANSI_ARGS_((Display *, const char *));
 extern XModifierKeymap *XGetModifierMapping  _ANSI_ARGS_((Display *));
 extern XImage *XCreateImage  _ANSI_ARGS_((Display *, Visual *, unsigned int, int, int, char *, unsign
ed int, unsigned int, int, int));
==== perltk800.024-020417jp.patch.gz から引用 ここまで ====

この部分が気になったので、その周辺(Xlib.h)を調べているうちに、
ビルド後の pTk/Xlib.{h,m,t} の修正時刻が同じである事に気付きました。
Xlib.{m,t} は

/usr/bin/perl mkVFunc -m x Xlib.h
/usr/bin/perl mkVFunc -t x Xlib.h

のように Xlib.h から生成されるようですが、修正時刻が同じであった為
古い Xlib.{m,t} をそのまま使っていた事がエラーの原因のようです。
specファイルを修正したところ、Xlib.m には

#ifndef XSetFont
#  define XSetFont (*XlibVptr->V_XSetFont)
#endif

という行が追加され、Xlib.t には

#ifndef XSetFont
VFUNC(int,XSetFont,V_XSetFont,_ANSI_ARGS_((Display *, GC, Font)))
#endif

という行が追加されていました。これらの意味は、perldoc mkVFunc を
ご覧になるとよく分かるかもしれません。

> 同じような現象についてポストされていないか、過去のcomp.lang.perl.tkを調
> べてみます。

わざわざ有難うございます。

> 今自分が使っているTkモジュールは、確かRed Hat 7.2の時にビルド/インス
> トールしたものがそのまま残っているものだと思うので、念のためビルドし直し
> たものでもう一度確認もしてみます。

もしビルドし直したもので、同じエラーが出ないのなら不思議ですね。
perl-5.6.1-34.99.6 では、-i オプションを付けても実際に変更が無け
れば上書き(更新)されないのでしょうか?


それで、エラーは出なくなったのですが、

> $ perl -MTk -e \
> 'MainWindow->new->Scale(-label => "Scale Widget")->pack; MainLoop;'
> 
> とラベルを指定すると、ウィンドウには「SaeWde」と1文字おき
> に表示され、日本語を指定すると化けるようになりました。^^;

こちらの問題は改善しませんでした。

> 追伸:
> nosrc.rpmのリビルド時に、XSetFontに関してエラーか警告が出ていませんか?

これは上記の問題と関係無いかもしれませんが、例えばビルド時のログに
対して grep XSetFont としましても、それらしきメッセージはありません
でした。

> 今は何が原因なのか良く分からないので、情報を得られたらまたポストします。

引き続き、情報をお待ちしております。
こちらでも、廣島さんの日本語化パッチをよく読んだり、デバッガで追う
などしてみたいと思います。

-- 
Atsushi SHICHI <ats7@...>