source: asp_ewarm/asp-1.7.0/utils/makedep

Last change on this file was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 4.6 KB
Line 
1#! /usr/bin/perl
2#
3# TOPPERS Software
4# Toyohashi Open Platform for Embedded Real-Time Systems
5#
6# Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7# Toyohashi Univ. of Technology, JAPAN
8# Copyright (C) 2004-2007 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10#
11# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16# スコード中に含まれていること.
17# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20# の無保証規定を掲載すること.
21# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23# と.
24# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25# 作権表示,この利用条件および下記の無保証規定を掲載すること.
26# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27# 報告すること.
28# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32# 免責すること.
33#
34# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38# の責任を負わない.
39#
40# @(#) $Id: makedep 2004 2010-12-31 00:43:36Z ertl-hiro $
41#
42
43require "getopt.pl";
44
45# オプションの定義
46#
47# -C <cc_path> Cコンパイラのコマンド名
48# -O <cc_opts> Cコンパイラ/CPPに渡すオプション
49# -X ソースファイルを強制的にCヘッダファイルと見なす
50#
51# -T <target> ターゲット名(のリスト)
52# -D <t_dir> ターゲットのディレクトリ名を指定する(-Tを用いた場
53# 合は無効)
54# -d ターゲットのディレクトリ部を保持する(-Tを用いた場
55# 合は無効)
56# -S 複数のターゲットがある依存ルールを,ターゲット毎に
57# 分割する(こうしないと対応できないmakeがあるらしい)
58#
59# -R <dirname> Cygwin環境におけるルートディレクトリ名を指定する
60# (デフォルトはcygdrive)
61
62#
63# オプションの処理
64#
65do Getopt("COTDR");
66
67$cc_path = $opt_C;
68$cc_opts = $opt_O;
69
70if ($opt_T) {
71 $target_name = $opt_T;
72}
73elsif ($opt_D) {
74 $target_dir = $opt_D;
75}
76elsif (!$opt_d) {
77 $target_dir = "";
78}
79
80if ($opt_R) {
81 $cygwin_root = $opt_R;
82}
83else {
84 $cygwin_root = "cygdrive";
85}
86
87#
88# Cygwin環境の判別
89#
90use POSIX;
91@uname = do uname();
92if ($uname[0] =~ /^cygwin/i) {
93 $cygwin = 1;
94}
95
96#
97# %dependlist に作られた依存関係を出力する
98#
99sub output_dependlist {
100 local($target) = @_;
101 local($column, $len, $file);
102
103 print $target, ": ";
104 $column = length($target) + 2;
105
106 foreach $file (keys(%dependlist)) {
107 $len = length($file) + 1;
108 if ($column > 8 && $column + $len >= 70) {
109 print "\\\n\t";
110 $column = 8;
111 }
112 $column += $len;
113 print "$file ";
114 }
115 print "\n";
116}
117
118#
119# $file の依存関係を %dependlist に作る
120#
121sub makedepend_one {
122 local($file) = @_;
123 local($command, $input, $dir, $filename);
124
125 $command = "$cc_path -E $cc_opts";
126 if ($opt_X) {
127 $command .= " -x c-header";
128 }
129 unless (open(INPUT, "$command $file |")) {
130 print STDERR "makedep: can't open $file\n";
131 exit(1);
132 }
133 while ($line = <INPUT>) {
134 if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"]+)\"/) {
135 $filename = $2;
136 $filename =~ s/ /\\ /g;
137 if ($filename !~ /^\<.*\>$/ && $filename !~ /\/$/) {
138 if ($cygwin) {
139 $filename =~ s/^([a-zA-Z]):/\/$cygwin_root\/$1/;
140 }
141 $dependlist{$filename} = 1;
142 }
143 }
144 }
145 unless (close(INPUT)) {
146 print STDERR "makedep: can't execute $command\n";
147 exit(1);
148 }
149}
150
151#
152# メインルーチン
153#
154foreach $file (@ARGV) {
155 %dependlist = ();
156 do makedepend_one($file);
157 if (%dependlist) {
158 if ($target_name) {
159 if ($opt_S) {
160 foreach $target (split(/[ \t]+/, $target_name)) {
161 do output_dependlist($target);
162 }
163 }
164 else {
165 do output_dependlist($target_name);
166 }
167 }
168 else {
169 $target = $file;
170 $target =~ s/(.*)\.(.*)/$1.o/;
171 if (defined($target_dir)) {
172 $target =~ s/^.*\/([^\/]+)$/$1/;
173 if ($target_dir) {
174 $target = $target_dir."/".$target;
175 }
176 }
177 do output_dependlist($target);
178 }
179 }
180}
Note: See TracBrowser for help on using the repository browser.