/[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.13 - (hide annotations) (download)
Fri Dec 30 23:56:52 2016 UTC (3 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.12: +12 -2 lines
in case of missing line editor "ed", switch to "sed" command to clean-up
 previous dependencies.

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

  ViewVC Help
Powered by ViewVC 1.1.22