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

[freewnn:00561] Re: cvs server for freewnn.org



議論をちゃんと追っていないし,Wnn のアーキテクチャも
良く理解していないので,外してたらごめんなさい.

> 濱嶋です。
> 
> Wed, 16 May 2001 13:31:16 +0900 に
> YABUKI Youichi <yabuki@sranhm.sra.co.jp> さんが書かれた
> <200105160431.NAA30898@sranhm.sra.co.jp> を引用しています
> 
> >> Tue, 15 May 2001 21:37:04 +0900 に
> >> Hiroaki Abe <h-abe@pc.highway.ne.jp> さんが書かれた
> >> <15105.8944.674067.26482Z@dorothea.nishihara.homeip.net> を引用しています
> >> 
> >>> 前にmakeしたときのlogを思い出してみると、FreeWnnでのCPPの使い方には、
> >>> 辞書を作るためのものもあったように思います。この場合、$CC -E(gcc -E)で
> >>> は(少なくともBeOS版では)まともに動かなかったので、(BeOSでは)CPPを指定
> >>> するように直しました。
> >> 
> >> 確かcc -Eでは拡張子が限定されるので、単純に置き換えると辞書の作成に支
> >> 障がでます。辞書のソースの拡張子をccが要求するものに変更する必要があっ
> >> たと思います。
> > 
> > FYI ということで.
> > 
> > gcc であれば,-x c とか -x c-header を合わせて指定すれば,
> > ファイル名末尾が .c や .h でなくても,C のソースファイルと
> > 思ってくれます.
> 
> 私はautoconfのことわからないんですが、これはAC_PROG_CPPマクロで
> "gcc -E"でなく"gcc -x c -E"がつかえて、いまみたいに直接cppを指定しなく
> てもできるようになるということでしょうか?
そのままではならないです.

> これができるならせっかくautoconfを使っているのだから、AC_PROG_CPPマク
> ロを使った方が良いと私は思います。
現状(FreeWnn-1.1.1-a017)でも実は AC_PROG_CPP を使っています.
ただし,Xsi/configure.in の AC_PROG_CPP の現れる直前で,
プラットフォーム毎に CPP やその他のマクロを定義している部分があります.
AC_PROG_CPP は,CPP が*定義されていなければ*,いくつかテストを
行ない,CPP の適切なコマンドを見つけようとします.
ここで行なわれるテストは,C の小さなコードを使って行なわれるので,
やはり,C のソースコード以外に適用することは考慮されていません.
FreeWnn-1.1.1-a017 の各 Makefile.in での CPP の使われ方を見ると
以下のようになっています.

% find . -name Makefile.in -print | xargs grep CPP
./Wnn/pubdicplus/Makefile.in:   $(CPP) $(FZK_FLAG) fzk.master | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
./cWnn/cdic/Makefile.in:        $(CPP) $(FZK_FLAG) con.master | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
./cWnn/cdic/Makefile.in:        $(CPP) $(FZK_FLAG) con.masterR | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
./cWnn/tdic/Makefile.in:        $(CPP) $(FZK_FLAG) con.master | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
./cWnn/tdic/Makefile.in:        $(CPP) $(FZK_FLAG) con.masterR | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
./kWnn/kdic/Makefile.in:        $(CPP) $(FZK_FLAG) fzk.master | egrep -v '^(# |#line |$$)' | $(ATOF) -h $(HINSI) $@
% 

で,この,辞書ファイルの生成(という理解で良いのかどうか実は
知らないのですが)に使われる cpp をどうするかに限っていうと,
対処方法としては,以下のようなものが思いつきますが,いかがでしょうか?

(1) 現状のように,configure.in で必要なプラットフォーム毎に CPP を設定する
    cc -E で駄目な場合は,cpp コマンドのパスを書く.
    (gcc が使える場合は,gcc -x c -E を書いてもよい)

(2) AC_PROG_CPP に代わるマクロ AC_PROG_CPP_NOT_FOR_C みたいなものを
    書いて,gcc が使える場合には CPP に gcc -x c -E を設定するようにする.

(3) 生成される辞書ファイルは多分プラットフォームには依存しないだろうか
    ら(本当?),make 時に生成するのではなく,ディストリビューションにあらかじ
    め生成したものを入れておく.こうすれば,これの生成担当者の人が,
    自分の環境の CPP の心配だけすれば良い.

(4) そもそも cpp は C 言語向けなので,他のファイルに使うといらぬ
    副作用があるやもしれないので,もっと別の方法で辞書ファイルの
    生成を行なうようにする.
--
矢吹洋一@SRA Linux ソリューション部


http://www.freewnn.org/ FreeWnn Project