(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)