[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: inputmethod/unicon-im



kayです。

In article <20030322.021521.133829336.kei_sun@ba2.so-net.ne.jp>, SUNAGAWA Keiki <kei_sun@ba2.so-net.ne.jp> writes:

SUNAGAWA>どんな環境でどういうエラーが出るのでしょうか。

layna# uname -a
NetBSD layna.kaynet.or.jp 1.6Q NetBSD 1.6Q (LAYNA) #0: Thu Mar 20 14:55:17 JST 2003  root@layna.kaynet.or.jp:/sys/arch/i386/compile/LAYNA i386
layna# make
=> Checksum OK for unicon-1.2.tar.gz.
===> Extracting for unicon-im-1.2
===> Required installed package libtool-base>=1.4.20010614nb11: libtool-base-1.4.20010614nb13 found
===> Required installed package x11-links>=0.12: x11-links-0.12 found
===> Patching for unicon-im-1.2
===> Applying pkgsrc patches for unicon-im-1.2
===> Buildlinking for unicon-im-1.2
lafile="/usr/pkgsrc/inputmethod/unicon-im/work/.buildlink/lib/libpthread.la";			 libpattern="/usr/lib/libpthread.*";	 if [ ! -f $lafile ]; then					 case ELF in					 Mach-O) _lib=`/bin/ls -1 $libpattern 2>/dev/null | /usr/bin/head -1` ;;  *)      _lib=`/bin/ls -1r $libpattern 2>/dev/null | /usr/bin/head -1` ;;  esac;							 if [ -n "$_lib" ]; then				 true "Creating libtool archive: $lafile";  /usr/pkgsrc/inputmethod/unicon-im/work/.buildlink/bin/.fake-la $_lib > $lafile;		 fi;							 fi
===> Configuring for unicon-im-1.2
creating cache ./config.cache
checking for mawk... no
(略)
creating ImmModules/TL-1/Makefile
===> Building for unicon-im-1.2
cd server; make
/usr/pkgsrc/inputmethod/unicon-im/work/.buildlink/bin/libtool  --mode=compile c++ -Wall -I. -I../include -O2 -I/usr/pkg/include -I/usr/X11R6/include -c TLS_HzInput.cpp -o TLS_HzInput.o
mkdir .libs
(略)
c++ -Wall -I. -I../include -O2 -I/usr/pkgsrc/inputmethod/unicon-im/work/.buildlink/include -I/usr/pkgsrc/inputmethod/unicon-im/work/.buildlink-x11/include -c TLS_PthSocket.cpp  -fPIC -DPIC -o .libs/TLS_PthSocket.o
TLS_PthSocket.cpp:8: pth.h: No such file or directory
*** Error code 1
(以下略)

という感じになります。

  unicon-1.2/INSTALL にも

Installation procedure
======================
#default install path is /usr/local

# pth package install
# be sure to install pth package;
# if not, please recompile it in the pth directory.
cd pth
tar zxvf pthxxxxx.tar.gz
cd pthxxxxx
./configure
make
make install

# compile and install
(以下略)

の様に書かれています。

  pth に関連していそうな部分を調べるとこんな感じです。

layna# egrep pth_ unicon-1.2/*/*
server/TLS_PthSocket.cpp:        t = pth_read_ev(fd, p, len, NULL);
server/TLS_PthSocket.cpp:        t = pth_write_ev(fd, p, len, NULL);
server/TLS_TcpipMain.cpp:        pth_yield (NULL);
server/TLS_TcpipMain.cpp:        //pth_write(fd, MemOut->pGetBuf (), MemOut->GetBufLen());
server/TLS_TcpipMain.cpp:        pth_sleep(5);
server/TLS_TcpipMain.cpp:        pth_ctrl(PTH_CTRL_GETAVLOAD, &avload);
server/TLS_TcpipMain.cpp:pth_attr_t attr;
server/TLS_TcpipMain.cpp:    pth_kill();
server/TLS_TcpipMain.cpp:    pth_attr_destroy(attr);
server/TLS_TcpipMain.cpp:    pth_init();
server/TLS_TcpipMain.cpp:    attr = pth_attr_new();
server/TLS_TcpipMain.cpp:    pth_attr_set(attr, PTH_ATTR_NAME, "ticker");
server/TLS_TcpipMain.cpp:    pth_attr_set(attr, PTH_ATTR_JOINABLE, FALSE);
server/TLS_TcpipMain.cpp:    pth_attr_set(attr, PTH_ATTR_STACK_SIZE, 32*1024);
server/TLS_TcpipMain.cpp://    pth_spawn(attr, ticker, NULL);
server/TLS_TcpipMain.cpp:    pth_attr_set(attr, PTH_ATTR_NAME, "handler");
server/TLS_TcpipMain.cpp:        if ((sr = pth_accept(s, (struct sockaddr *)&peer_addr, &peer_len)) == -1) {
server/TLS_TcpipMain.cpp:            pth_sleep(1);
server/TLS_TcpipMain.cpp:        if (pth_ctrl(PTH_CTRL_GETTHREADS) >= REQ_MAX) {
server/TLS_TcpipMain.cpp:        pth_spawn(attr, handler, (void *)((long)sr));

  pthread はあまり詳しくないので pth のこれらの機能が pthread で実装可
能かどうかがわかりません。まあ、あまり問題になりそうなものは無いとは思
うのですが………。

  また、pth は non-preemptive なので native pthread の preemptive で正
しく動作するかどうかをちゃんと確認する必要がありそうです。

SUNAGAWA>pth特有の機能を使っているために仕方のない場合以外はNetBSDの
SUNAGAWA>native libpthreadで動くように頑張れといわれそうです。libedit 
SUNAGAWA>とGNU readline、あるいはlibtermcapとncursesと同様なスタンスで
SUNAGAWA>す。

  pth の native API を使っているので少なくともそのままでは pthread で
は動かせません。可能であれば pthread を使って書き直せば良いと思います
が、現在は pthread として pth 以外を使用している場合には build できま
せんので、pth に DEPEND させるか BROKEN にした方がいいのではないかと思
います。
-- 
吉田恵介@川崎市高津区千年 (kay@kaynet.or.jp)
ホームページ http://www.kaynet.or.jp/~kay/