(おそらく)最後は、依存関係を Makefile から抽出して .depend に書き込んでくれる perl スクリプトだ。
eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' & eval 'exec perl -S $0 $argv:q' if 0; require "getopts.pl"; &Getopts("f:o:"); $opt_f = "Makefile" if( ! $opt_f ); $opt_o = ".depend" if( ! $opt_o ); # 'make depend' で散らかった Makefile を開いて perl 配列に読み込む open(IF,"<$opt_f") || die; @makefile = <IF>; close(IF); # ここで .depend とテンポラリな Makefile を開く。 # ここからオリジナルの Makefile をこれら二つに振り分ける。 open(DF,">$opt_o") || die; open(MF,">$opt_f.tmp") || die; # オリジナルのファイルから一行ずつ読み込んで… foreach (@makefile) { # もし依存関係の区画にいるなら、その行を .depend に書く # if( $depend ) { print DF $_; } else { # まだ依存関係の区画でなければ、make dependが # 書き込むセパレータかどうかをチェックする。 # if( m/^\Q# DO NOT DELETE THIS LINE -- g++dep uses it.\E/ ) { # もしそうなら、modeを変更して、この行を飛ばす。 ++$depend; next; } # "include .depend"を挿入する位置ならばスキップする。 # こうしないと、処理した Makefile 中に大量の include .depend が埋め込まれる next if( m/^include $opt_o/ ); # テンポラリの Makefile に依存関係以外の内容を出力する print MF $_; } } # 新しい Makefile に依存関係を include するように書く print MF "include $opt_o\n"; # 二つの出力ファイルを閉じる close(DF); close(MF); # オリジナルの Makefile を消して、テンポラリをリネームする。 # ここでエラーチェックすべきなのは明らかだが、Makefile は # 何らかのリビジョンコントロールシステムにチェックインされて # いるはずなので不要である。もちろんチェックインしているよね? unlink("$opt_f"); rename("$opt_f.tmp","$opt_f"); exit(0);