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

[freewnn:01000] Re: merge from canuum



青野です。こんばんは。

<863cgsh39v.wl@XXXX>の記事において
hiroo@XXXXさんは書きました。

>> At Fri, 25 Jul 2003 16:55:52 JST,
>> aono@XXXX wrote:

>> > 「以前ftp.tohoku.ac.jpに置いてあったSolaris/HPUX用パッチを
>> > ベースに」書き直したそうですが、この場合従来のパッチを作成
>> > された方の了承まで得ないと取り込めないのでしょうか…?  青
>> > 野も(多分その流れを汲む)Wnn4.2用のパッチは持っているのです
>> > が、連絡を怠ってマージできずじまいです…。
>> 
>> かべさんに連絡をとりました。
>> もとの作者は、西村浩二さん <kouji@XXXX> だそうですが、
>> 「ほとんど原型を止めていない」そうです。
>> すぐではないですが、西村さんにも連絡します。

原型を止めていないのであればいいのかな、という気もしますが、
引き続きよろしくお願いします。
#同じ分野で2つパッチが出たのは珍しいのでなんとか取り込みたいですね。

>> At Wed, 23 Jul 2003 10:51:12 JST,
>> aono@XXXX wrote:
>> > Solaris 2.4/8で試してみました(ただしbuilddirをsrcdirと分離
>> > するための修正を加えています)が、jhlp.cが
>> > 
>> > In file included from ../../../current/Wnn/uum/sdefine.h:66,
>> >                  from ../../../current/Wnn/uum/jhlp.c:105:
>> > /usr/include/term.h:1040: field `Ottyb' has incomplete type
>> > /usr/include/term.h:1041: field `Nttyb' has incomplete type
>> > 
>> > といった感じになってコンパイルできません。テストした環境で

…の部分をもう少し詳しく書いてみます。
#都合によりSolaris 2.4の方で…。

>> ・termios.h, termio.h の両方が存在する。

はい。さらにはsys/termio.h や sgtty.hも存在します。

>> ・term.h が利用しているのは termio.h で定義される struct termio の方。

はい。実際のtypedefはcurses.hの中で行われているのですが、
VINTRが定義されていない場合はtermio.hを #include するよう
です。それで、そのVINTRは(grep -r VINTR /usr/include で調
べた限りは)termios.hでのみ定義されているようです。
#以上は定数SYSVが定義されている場合です。そうでない場合は
#sgtty.hが基準になるようです。

>> ・term.h は termio.h を include しない。

はい。#include文はないようです。

ですので、Solarisのことだけを考えれば jhlp.c の termios.h 
などの #include部分を#include "sdefine.h"の後にすれば
(termio.hはcurses.h内で#includeされるので)コンパイルは通る
ようです。

#余談ですが、configure中のAC_CHECK_HEADERS(term.h)でも他
#のヘッダに依存する型があるせいで、
#> WARNING: term.h: present but cannot be compiled
#> WARNING: term.h: check for missing prerequisite headers?
#> WARNING: term.h: proceeding with the preprocessor's result
#とconfigureにお叱りを受けます。ただし存在するものとして
#先へ進むので今のところ実害はありません。

似た部分がWnn/conv/cvt_read.c にもあるのですが、
#include <curses.h> などの後に持ってくればいけそうです(未
確認)。でもそもそもtermios.h などincludeしなくてもコンパイ
ルは通るようです。

書いててもややこしいのですが、まとめると
curses.h -> (#ifndef VINTRの場合のみ)#include <termio.h> する
term.h   -> #includeはないが そこで記述されている型定義がある
            curses.h / termio.hに依存
termio.h -> #define VINTR している。(調査不足のため必要性について不詳)
…という風になっているようです。

上記のjhlp.c / cvt_read.c のほか、いくつかいじってようやく
uumが動作するようになりました。でも(Solaris付属の)cshのファ
イル名補完機能を使うと一文字辺り2〜8倍に膨れ上がってしまう
のが謎です。(ex. 「less 」の後で補完するようにC-dを使うと
「lleessss 」と表示され、入力も表示通りになってしまいます。)
20030726版パッチを適用して青野が変更したところを一応挙げて
おきます。

- Wnn/uum/epilogue.c で #ifdef TERMINFO → HAVE_TERMINFOに変更。

- configureでTCP wrapperが検出できた場合、LIBSに「-lwrap」
が入るが、その場合uumのリンク時にallow/deny_severityがない
といわれる。とりあえずMakefileをいじって消しますが、サーバ
固有のライブラリだけ別にした方がいいと思います。というか、
今そういう変更を加えてるので近くcommitしたいです。

あと、configure.inで ターミナルライブラリのチェックルーチ
ンがありますが、そこの

>   lname=translit(${libname}, 'a-z', 'A-Z')

という行がうまく働かないみたいです。autoconfかけた後では
「lname=${LIBNAME}」になってしまいます。そのせいかは分から
ないのですが、その次の行のAC_DEFINEもうまく変換されないみ
たいです。config.logをみると、以下の行が記録されていました。

> In file included from configure:18921:
> confdefs.h:39: warning: missing white space after `#define HAVE_$'

----

どうすれば最適解に近づけるかは分かりませんが、参考になれば
幸いです。
----
青野智樹	(aono@XXXX)
Personal opinion only..