しちです。おはようございます。
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@...>