source: utils/makedep

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 4.6 KB
Rev 
[7]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#  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(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$
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 =~ /^\#[a-zA-Z]*\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}
詳しい使い方は TracBrowser を参照してください。