(toppers-users 836) Re: jsp_rename.h 不足 / sample Makefile 小バグ
Honda Hiroki
hhonda @ ipflex.com
2003年 5月 27日 (火) 13:00:51 JST
アイピーフレックス株式会社の本田です。
From: Hiroaki TAKADA <hiro @ ertl.jp>
> 次のリリース予定が近づいてきました
それは楽しみでもあり、「1.3 の移植作業が無駄になるかも」と心配でもあります。
リリース日程や 1.3 からの変更点について、予告アナウンスのようなものは
ないでしょうか?
> この手のバグ報告・修正提案がありましたら、
sample/Makefile については、重箱の隅をつつくような提案があるにはあります。
(1) パイプの利用禁止
$(CPP) ... | $(JSPDIR)/cfg/cfg という箇所がありますが、cpp がエラー終
了しても cfg にはそれが伝わらないので、パイプ内容によっては cfg が正常
終了し、文全体として正常終了したとみなされてしまう可能性があります。
make の実行文ではパイプを使ってはいけないと思います。
# ML 過去ログに、これとは別な理由で $(CPP) パイプ利用がうまくいかないよ
# うな記事がありましたが。
(2) ターゲットのリダイレクト生成禁止
「script inputfile > targetfile」という感じでターゲットを作っている箇
所がありますが、スクリプトがエラー終了したときには不完全なターゲットが
新タイムスタンプで生成されてしまうため、次回の make 時にこの文が再実行
されず、エラーを再現できません。
script inputfile > tmpfile
mv tmpfile targetfile
という形で作るのがいいと思います。
(3) perl インストール場所のカスタマイズ
perl スクリプトに #!/usr/bin/perl と書いてあるため、/usr/local/bin/perl
な環境では直接実行できません。Makefile で
script ...
と書かずに
$(PERL) script ...
と書くことにして、$(PERL) 定義を configure 時にカスタマイズするのがいいと
思います。
(4) cpp の代わりに cc -E -x c
$(CPP) ... とプリプロセッサを直接利用すると、gcc が predefine する
__GNUC__ や __mc68040__ 等が定義されないため、普通にコンパイルした時の
プリプロセス結果と微妙に異なってしまう可能性があります。
$(CC) -E -x c ... がいいと思います。
(5) コンフィグレータ使用時の timestamp ファイル活用
(2) と関連しますが、ML 過去ログに「コンフィグレータはエラー終了時に
kernel_cfg.c 等を作らないようにしてほしい」という記事がありました。
たしかにそれが理想だと思いますが、そうすると gcc みたいに「シグナル
ハンドラをこと細かく登録して云々」という大げさなことになって、本質的
でない作業に手間暇かかってしまうので、(2) のように Makefile の運用で
逃げる手もあると思います。コンフィグレータの場合は出力ファイルが複数
なので、
kernel_cfg.c kernel_id.h kernel_chk.c: kernel_cfg.stamp
@
kernel_cfg.stamp: $(UTASK_CFG)
@$(CC) -E -x c ...
@$(JSPDIR)/cfg/cfg ...
@rm -f tmpfile
@cp /dev/null $@
という感じでいいかと (make depend のターゲット名も要変更)。
sample/Makefile については以上ですが、全部指摘通りにすると今度は
Makefile の見晴らしが悪くなるので、それも考えモノかもしれません。サン
プル Makefile の目的はユーザーに手本を示すことだと思いますが、そのため
には「隙が無い」こともさることながら「見晴らしが良い」ことも重要でしょ
うし。
別件として、コンフィグレーションに関して、ML の過去ログにあった通り、
「kernel_cfg.c がユーザーヘッダファイルとカーネルヘッダファイルをいっ
しょくたに #include するため、ファイル名/シンボル名の衝突が心配」とい
う点が、ML の指摘どおりに気になっています。しかしこれにまともに対処し
ようとすると、ITRON 外部仕様以外のファイル名/シンボル名 (構造体メンバ
名含む) に全て _kernel_ prefix をつけなければいけなくなり、手間がかか
るうえに見晴らしがかなり悪化するので、現状のアバウトなやりかたでもしか
たないかな、とも思います。
あと、コンフィグレーションチェッカーに関する簡単な要望として、
・UNIX 風の寡黙実行
正常実行時は何も表示しない、というモードが欲しいです。
-q (quiet) オプションを追加する、等。
# UNIX 指向の sample/Makefile と足並みを揃えるなら、
# いっそチェッカーも寡黙実行をデフォルトにするほうが自然?
というのがあります。
====
アイピーフレックス株式会社
R&D センター
本田広樹 (hhonda @ ipflex.com)