/[MITgcm]/MITgcm/tools/xmakedepend
ViewVC logotype

Annotation of /MITgcm/tools/xmakedepend

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (hide annotations) (download)
Thu Mar 3 18:05:39 2005 UTC (15 years, 5 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57g_pre, checkpoint57s_post, checkpoint58b_post, checkpoint57g_post, checkpoint57y_post, checkpoint62c, checkpoint57r_post, checkpoint57i_post, checkpoint59, checkpoint58, checkpoint58f_post, checkpoint57n_post, checkpoint58d_post, checkpoint58a_post, checkpoint57z_post, checkpoint62a, checkpoint58y_post, checkpoint58t_post, checkpoint58m_post, checkpoint57l_post, checkpoint57t_post, checkpoint57v_post, checkpoint57f_post, checkpoint60, checkpoint61, checkpoint62, checkpoint57h_pre, checkpoint58w_post, checkpoint57h_post, checkpoint57y_pre, checkpoint58o_post, checkpoint58p_post, checkpoint58q_post, checkpoint58e_post, mitgcm_mapl_00, checkpoint58r_post, checkpoint58n_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, checkpoint58k_post, checkpoint62b, checkpoint58v_post, checkpoint58l_post, checkpoint57h_done, checkpoint57j_post, checkpoint57f_pre, checkpoint61f, checkpoint58g_post, checkpoint58x_post, checkpoint61n, checkpoint59j, checkpoint58h_post, checkpoint58j_post, checkpoint57o_post, checkpoint61q, checkpoint57k_post, checkpoint57w_post, checkpoint61e, checkpoint58i_post, checkpoint57x_post, checkpoint58c_post, checkpoint58u_post, checkpoint58s_post, checkpoint61g, checkpoint61d, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +3 -7 lines
 o saner default

1 edhill 1.4 #! /usr/bin/env sh
2 heimbach 1.1 #
3     # $TOG: mdepend.cpp /main/13 1997/06/20 21:12:18 kaleb $
4     #
5     # Do the equivalent of the 'makedepend' program, but do it right.
6     #
7     # Usage:
8     #
9     # makedepend [cpp-flags] [-w width] [-s magic-string] [-f makefile]
10     # [-o object-suffix]
11     #
12     # Notes:
13     #
14     # The C compiler used can be overridden with the environment
15     # variable "CC".
16     #
17     # The "-v" switch of the "makedepend" program is not supported.
18     #
19     #
20     # This script should
21     # work on both USG and BSD systems. However, when System V.4 comes out,
22     # USG users will probably have to change "silent" to "-s" instead of
23     # "-" (at least, that is what the documentation implies).
24     #
25     # $XFree86: xc/config/util/mdepend.cpp,v 3.2 1997/06/29 07:54:20 dawes Exp $
26     #
27    
28 mlosch 1.5 CPPARGS="-Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE "
29 edhill 1.3
30 edhill 1.6 CC="cpp $CPPARGS"
31     if test -x /lib/cpp ; then
32     CC="/lib/cpp $CPPARGS"
33 edhill 1.3 fi
34 heimbach 1.1
35     silent='-'
36    
37     TMP=./mdep$$
38     CPPCMD=${TMP}a
39     DEPENDLINES=${TMP}b
40     TMPMAKEFILE=${TMP}c
41     MAGICLINE=${TMP}d
42     ARGS=${TMP}e
43    
44     trap "rm -f ${TMP}*; exit 1" 1 2 15
45     trap "rm -f ${TMP}*; exit 0" 1 2 13
46    
47     echo " \c" > $CPPCMD
48     if [ `wc -c < $CPPCMD` -eq 1 ]
49     then
50     c="\c"
51     n=
52     else
53     c=
54     n="-n"
55     fi
56    
57     echo $n "$c" >$ARGS
58    
59     files=
60     makefile=
61     magic_string='# DO NOT DELETE'
62     objsuffix='.o'
63     width=78
64     endmarker=""
65     verbose=n
66     append=n
67    
68     while [ $# != 0 ]
69     do
70     if [ "$endmarker"x != x ] && [ "$endmarker" = "$1" ]; then
71     endmarker=""
72     else
73     case "$1" in
74     -D*|-I*)
75     echo $n " '$1'$c" >> $ARGS
76     ;;
77    
78     -g|-O) # ignore so we can just pass $(CFLAGS) in
79     ;;
80    
81     *)
82     if [ "$endmarker"x = x ]; then
83     case "$1" in
84     -w)
85     width="$2"
86     shift
87     ;;
88     -s)
89     magic_string="$2"
90     shift
91     ;;
92     -f*)
93     if [ "$1" = "-f-" ]; then
94     makefile="-"
95     else
96     makefile="$2"
97     shift
98     fi
99     ;;
100     -o)
101     objsuffix="$2"
102     shift
103     ;;
104    
105     --*)
106     echo "$1" | sed 's/^\-\-//' >${TMP}end
107     endmarker="`cat ${TMP}end`"
108     rm -f ${TMP}end
109     if [ "$endmarker"x = x ]; then
110     endmarker="--"
111     fi
112     ;;
113     -v)
114     verbose="y"
115     ;;
116    
117     -a)
118     append="y"
119     ;;
120    
121     -cc)
122     CC="$2"
123 adcroft 1.2 shift
124     ;;
125    
126     -cpp)
127     CC="$2 $CPPARGS"
128 heimbach 1.1 shift
129     ;;
130    
131     -*)
132     echo "Unknown option '$1' ignored" 1>&2
133     ;;
134     *)
135     files="$files $1"
136     ;;
137     esac
138     fi
139     ;;
140     esac
141     fi
142     shift
143     done
144     echo ' $*' >> $ARGS
145    
146     echo "#!/bin/sh" > $CPPCMD
147     echo "exec $CC `cat $ARGS`" >> $CPPCMD
148     chmod +x $CPPCMD
149     rm $ARGS
150    
151     case "$makefile" in
152     '')
153     if [ -r makefile ]
154     then
155     makefile=makefile
156     elif [ -r Makefile ]
157     then
158     makefile=Makefile
159     else
160     echo 'no makefile or Makefile found' 1>&2
161     exit 1
162     fi
163     ;;
164     -)
165     makefile=$TMPMAKEFILE
166     ;;
167     esac
168    
169     if [ "$verbose"x = "y"x ]; then
170     cat $CPPCMD
171     fi
172    
173     echo '' > $DEPENDLINES
174     for i in $files
175     do
176     $CPPCMD $i | sed -n "/^#/s;^;$i ;p"
177    
178     done | sed -e 's|/[^/.][^/]*/\.\.||g' -e 's|/\.[^.][^/]*/\.\.||g' -e 's|"||g' -e 's| \./| |' | awk '{
179     if ($1 != $4 && $2 != "#ident" && $2 != "#pragma")
180    
181    
182    
183     {
184     ofile = substr ($1, 1, length ($1) - 2) "'"$objsuffix"'"
185     print ofile, $4
186     }
187     }' | sort -u | awk '
188    
189    
190     {
191     newrec = rec " " $2
192     if ($1 != old1)
193     {
194     old1 = $1
195     if (rec != "")
196     print rec
197     rec = $1 ": " $2
198     }
199     else if (length (newrec) > '"$width"')
200     {
201     print rec
202     rec = $1 ": " $2
203     }
204     else
205     rec = newrec
206     }
207     END {
208    
209     if (rec != "")
210     print rec
211     }' | egrep -v '^[^:]*:[ ]*$' >> $DEPENDLINES
212    
213    
214     trap "" 1 2 13 15 # Now we are committed
215     case "$makefile" in
216     $TMPMAKEFILE)
217     ;;
218     *)
219     rm -f $makefile.bak
220     cp $makefile $makefile.bak
221     echo "Appending dependencies to $makefile"
222     ;;
223     esac
224    
225     #
226     # If not -a, append the magic string and a blank line so that
227     # /^$magic_string/+1,\$d can be used to delete everything from after
228     # the magic string to the end of the file. Then, append a blank
229     # line again and then the dependencies.
230     #
231     if [ "$append" = "n" ]
232     then
233     cat >> $makefile << END_OF_APPEND
234    
235     $magic_string
236    
237     END_OF_APPEND
238     ed $silent $makefile << END_OF_ED_SCRIPT
239     /^$magic_string/+1,\$d
240     w
241     q
242     END_OF_ED_SCRIPT
243     echo '' >>$makefile
244     fi
245    
246     cat $DEPENDLINES >>$makefile
247    
248     case "$makefile" in
249     $TMPMAKEFILE)
250     cat $TMPMAKEFILE
251     ;;
252    
253     esac
254    
255     rm -f ${TMP}*
256     exit 0

  ViewVC Help
Powered by ViewVC 1.1.22