source: asp_wo_cfg/trunk/utils/makedep@ 49

Last change on this file since 49 was 49, checked in by ertl-hiro, 12 years ago

asp_wo_kernelをコミット。

  • Property svn:executable set to *
  • Property svn:keywords set to Id
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-2011 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 49 2012-09-06 04:41:53Z ertl-hiro $
41#
42
43use Getopt::Std;
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#
65getopt("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#
90if ($^O eq 'cygwin') {
91 $cygwin = 1;
92}
93
94#
95# %dependlist に作られた依存関係を出力する
96#
97sub output_dependlist {
98 local($target) = @_;
99 local($column, $len, $file);
100
101 print $target, ": ";
102 $column = length($target) + 2;
103
104 foreach $file (keys(%dependlist)) {
105 $len = length($file) + 1;
106 if ($column > 8 && $column + $len >= 70) {
107 print "\\\n\t";
108 $column = 8;
109 }
110 $column += $len;
111 print "$file ";
112 }
113 print "\n";
114}
115
116#
117# $file の依存関係を %dependlist に作る
118#
119sub makedepend_one {
120 local($file) = @_;
121 local($command, $input, $dir, $filename);
122
123 $command = "$cc_path -E $cc_opts";
124 if ($opt_X) {
125 $command .= " -x c-header";
126 }
127 unless (open(INPUT, "$command $file |")) {
128 print STDERR "makedep: can't open $file\n";
129 exit(1);
130 }
131 while ($line = <INPUT>) {
132 if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"]+)\"/) {
133 $filename = $2;
134 $filename =~ s/ /\\ /g;
135 if ($filename !~ /^\<.*\>$/ && $filename !~ /\/$/) {
136 if ($cygwin) {
137 $filename =~ s/\\\\/\//g;
138 $filename =~ s/^([a-zA-Z]):/\/$cygwin_root\/$1/;
139 }
140 $dependlist{$filename} = 1;
141 }
142 }
143 }
144 unless (close(INPUT)) {
145 print STDERR "makedep: can't execute $command\n";
146 exit(1);
147 }
148}
149
150#
151# メインルーチン
152#
153foreach $file (@ARGV) {
154 %dependlist = ();
155 makedepend_one($file);
156 if (%dependlist) {
157 if ($target_name) {
158 if ($opt_S) {
159 foreach $target (split(/[ \t]+/, $target_name)) {
160 output_dependlist($target);
161 }
162 }
163 else {
164 output_dependlist($target_name);
165 }
166 }
167 else {
168 $target = $file;
169 $target =~ s/(.*)\.(.*)/$1.o/;
170 if (defined($target_dir)) {
171 $target =~ s/^.*\/([^\/]+)$/$1/;
172 if ($target_dir) {
173 $target = $target_dir."/".$target;
174 }
175 }
176 output_dependlist($target);
177 }
178 }
179}
Note: See TracBrowser for help on using the repository browser.