source: azure_iot_hub_f767zi/trunk/asp_baseplatform/utils/makedep@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

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