OSDN Git Service

041b38b913e8abce9afb5523ce25dc4ad210ecfb
[trx-305dsp/dsp.git] / trx305 / kernel / utils / makedep
1 #! /usr/bin/perl
2 #
3 #  TOPPERS/JSP Kernel
4 #      Toyohashi Open Platform for Embedded Real-Time Systems/
5 #      Just Standard Profile Kernel
6
7 #  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
8 #                              Toyohashi Univ. of Technology, JAPAN
9 #  Copyright (C) 2004-2005 by Embedded and Real-Time Systems Laboratory
10 #              Graduate School of Information Science, Nagoya Univ., JAPAN
11
12 #  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
13 #  によって公表されている GNU General Public License の Version 2 に記
14 #  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
15 #  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
16 #  利用と呼ぶ)することを無償で許諾する.
17 #  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 #      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 #      スコード中に含まれていること.
20 #  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 #      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
22 #      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 #      の無保証規定を掲載すること.
24 #  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25 #      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26 #      と.
27 #    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
28 #        作権表示,この利用条件および下記の無保証規定を掲載すること.
29 #    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30 #        報告すること.
31 #  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
32 #      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33
34 #  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 #  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
36 #  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
37 #  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
38
39 #  @(#) $Id: makedep,v 1.3 2012/06/17 00:24:19 suikan Exp $
40
41
42 require "getopt.pl";
43
44 #  オプションの定義
45 #
46 #  -C <cc_path> Cコンパイラのコマンド名
47 #  -O <cc_opts> Cコンパイラ/CPPに渡すオプション
48 #
49 #  -X       ソースファイルを強制的にCヘッダファイルと見なす
50 #
51 #  -T <target>  ターゲットのファイル名
52 #  -D <t_dir>   ターゲットのディレクトリ名を指定する
53 #  -d       ターゲットのディレクトリ部を保持する
54 #  -s       ターゲットのサフィックスを ".s" にする(デフォルトは ".o")
55
56 #
57 #  オプションの処理
58 #
59 Getopt("COTD");
60
61 $cc_path = $opt_C;
62 $cc_opts = $opt_O;
63
64 $suffix = $opt_s ? "s" : "o";
65 if ($opt_T) {
66     $target_file = $opt_T;
67 }
68 elsif ($opt_D) {
69     $target_dir = $opt_D;
70 }
71 elsif (!$opt_d) {
72     $target_dir = "";
73 }
74
75 #
76 #  %dependlist に作られた依存関係を出力する
77 #
78 sub output_dependlist {
79     local($file) = @_;
80     local($target, $column, $len);
81
82     if ($target_file) {
83         $target = $target_file;
84     }
85     else {
86         $target = $file;
87         $target =~ s/(.*)\.(.)/$1.$suffix/;
88     }   
89     if (defined($target_dir)) {
90         $target =~ s/^.*\/([^\/]+)$/$1/;
91         if ($target_dir) {
92             $target = $target_dir."/".$target;
93         }
94     }
95     print $target, ": ";
96     $column = length($target) + 2;
97     
98     foreach $file (keys(%dependlist)) {
99         $len = length($file) + 1;
100         if ($column > 8 && $column + $len >= 70) {
101             print "\\\n\t";
102             $column = 8;
103         }
104         $column += $len;
105         print "$file ";
106     }
107     print "\n";
108 }
109
110 #
111 #  $file の依存関係を %dependlist に作る
112 #
113 sub makedepend_one {
114     local($file) = @_;
115     local($command, $input, $dir, $filename);
116
117     $command = "$cc_path -E $cc_opts";
118     if ($opt_X) {
119         $command .= " -x c-header";
120     }
121     unless (open(INPUT, "$command $file |")) {
122         print STDERR "makedep: can't open $file\n";
123         exit(1);
124     }
125     while ($line = <INPUT>) {
126         if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"]+)\"/) {
127             $filename = $2;
128 #           $filename =~ s/ /\\ /;
129             $filename =~ s/ /\\ /g;
130             if ($filename !~ /^\<.*\>$/ && $filename !~ /\/$/) {
131                 $dependlist{$filename} = 1;
132             }
133         }
134     }
135     unless (close(INPUT)) {
136         print STDERR "makedep: can't execute $command\n";
137         exit(1);
138     }
139 }
140
141 #
142 #  メインルーチン
143 #
144 foreach $file (@ARGV) {
145     %dependlist = ();
146     makedepend_one($file);
147     output_dependlist($file) if (%dependlist);
148 }