/[debian]/bti/trunk/depcomp
ViewVC logotype

Annotation of /bti/trunk/depcomp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1680 - (hide annotations)
Tue Apr 14 16:06:53 2009 UTC (11 years, 10 months ago) by gregoa
Original Path: bti/branches/upstream/current/depcomp
File size: 17867 byte(s)
[svn-upgrade] Integrating new upstream version, bti (020)
1 gregoa 1680 #! /bin/sh
2     # depcomp - compile a program generating dependencies as side-effects
3    
4     scriptversion=2007-03-29.01
5    
6     # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7     # Foundation, Inc.
8    
9     # This program is free software; you can redistribute it and/or modify
10     # it under the terms of the GNU General Public License as published by
11     # the Free Software Foundation; either version 2, or (at your option)
12     # any later version.
13    
14     # This program is distributed in the hope that it will be useful,
15     # but WITHOUT ANY WARRANTY; without even the implied warranty of
16     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17     # GNU General Public License for more details.
18    
19     # You should have received a copy of the GNU General Public License
20     # along with this program; if not, write to the Free Software
21     # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22     # 02110-1301, USA.
23    
24     # As a special exception to the GNU General Public License, if you
25     # distribute this file as part of a program that contains a
26     # configuration script generated by Autoconf, you may include it under
27     # the same distribution terms that you use for the rest of that program.
28    
29     # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30    
31     case $1 in
32     '')
33     echo "$0: No command. Try \`$0 --help' for more information." 1>&2
34     exit 1;
35     ;;
36     -h | --h*)
37     cat <<\EOF
38     Usage: depcomp [--help] [--version] PROGRAM [ARGS]
39    
40     Run PROGRAMS ARGS to compile a file, generating dependencies
41     as side-effects.
42    
43     Environment variables:
44     depmode Dependency tracking mode.
45     source Source file read by `PROGRAMS ARGS'.
46     object Object file output by `PROGRAMS ARGS'.
47     DEPDIR directory where to store dependencies.
48     depfile Dependency file to output.
49     tmpdepfile Temporary file to use when outputing dependencies.
50     libtool Whether libtool is used (yes/no).
51    
52     Report bugs to <bug-automake@gnu.org>.
53     EOF
54     exit $?
55     ;;
56     -v | --v*)
57     echo "depcomp $scriptversion"
58     exit $?
59     ;;
60     esac
61    
62     if test -z "$depmode" || test -z "$source" || test -z "$object"; then
63     echo "depcomp: Variables source, object and depmode must be set" 1>&2
64     exit 1
65     fi
66    
67     # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68     depfile=${depfile-`echo "$object" |
69     sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70     tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71    
72     rm -f "$tmpdepfile"
73    
74     # Some modes work just like other modes, but use different flags. We
75     # parameterize here, but still list the modes in the big case below,
76     # to make depend.m4 easier to write. Note that we *cannot* use a case
77     # here, because this file can only contain one case statement.
78     if test "$depmode" = hp; then
79     # HP compiler uses -M and no extra arg.
80     gccflag=-M
81     depmode=gcc
82     fi
83    
84     if test "$depmode" = dashXmstdout; then
85     # This is just like dashmstdout with a different argument.
86     dashmflag=-xM
87     depmode=dashmstdout
88     fi
89    
90     case "$depmode" in
91     gcc3)
92     ## gcc 3 implements dependency tracking that does exactly what
93     ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
94     ## it if -MD -MP comes after the -MF stuff. Hmm.
95     ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96     ## the command line argument order; so add the flags where they
97     ## appear in depend2.am. Note that the slowdown incurred here
98     ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99     for arg
100     do
101     case $arg in
102     -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103     *) set fnord "$@" "$arg" ;;
104     esac
105     shift # fnord
106     shift # $arg
107     done
108     "$@"
109     stat=$?
110     if test $stat -eq 0; then :
111     else
112     rm -f "$tmpdepfile"
113     exit $stat
114     fi
115     mv "$tmpdepfile" "$depfile"
116     ;;
117    
118     gcc)
119     ## There are various ways to get dependency output from gcc. Here's
120     ## why we pick this rather obscure method:
121     ## - Don't want to use -MD because we'd like the dependencies to end
122     ## up in a subdir. Having to rename by hand is ugly.
123     ## (We might end up doing this anyway to support other compilers.)
124     ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125     ## -MM, not -M (despite what the docs say).
126     ## - Using -M directly means running the compiler twice (even worse
127     ## than renaming).
128     if test -z "$gccflag"; then
129     gccflag=-MD,
130     fi
131     "$@" -Wp,"$gccflag$tmpdepfile"
132     stat=$?
133     if test $stat -eq 0; then :
134     else
135     rm -f "$tmpdepfile"
136     exit $stat
137     fi
138     rm -f "$depfile"
139     echo "$object : \\" > "$depfile"
140     alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141     ## The second -e expression handles DOS-style file names with drive letters.
142     sed -e 's/^[^:]*: / /' \
143     -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144     ## This next piece of magic avoids the `deleted header file' problem.
145     ## The problem is that when a header file which appears in a .P file
146     ## is deleted, the dependency causes make to die (because there is
147     ## typically no way to rebuild the header). We avoid this by adding
148     ## dummy dependencies for each header file. Too bad gcc doesn't do
149     ## this for us directly.
150     tr ' ' '
151     ' < "$tmpdepfile" |
152     ## Some versions of gcc put a space before the `:'. On the theory
153     ## that the space means something, we add a space to the output as
154     ## well.
155     ## Some versions of the HPUX 10.20 sed can't process this invocation
156     ## correctly. Breaking it into two sed invocations is a workaround.
157     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158     rm -f "$tmpdepfile"
159     ;;
160    
161     hp)
162     # This case exists only to let depend.m4 do its work. It works by
163     # looking at the text of this script. This case will never be run,
164     # since it is checked for above.
165     exit 1
166     ;;
167    
168     sgi)
169     if test "$libtool" = yes; then
170     "$@" "-Wp,-MDupdate,$tmpdepfile"
171     else
172     "$@" -MDupdate "$tmpdepfile"
173     fi
174     stat=$?
175     if test $stat -eq 0; then :
176     else
177     rm -f "$tmpdepfile"
178     exit $stat
179     fi
180     rm -f "$depfile"
181    
182     if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
183     echo "$object : \\" > "$depfile"
184    
185     # Clip off the initial element (the dependent). Don't try to be
186     # clever and replace this with sed code, as IRIX sed won't handle
187     # lines with more than a fixed number of characters (4096 in
188     # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
189     # the IRIX cc adds comments like `#:fec' to the end of the
190     # dependency line.
191     tr ' ' '
192     ' < "$tmpdepfile" \
193     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194     tr '
195     ' ' ' >> $depfile
196     echo >> $depfile
197    
198     # The second pass generates a dummy entry for each header file.
199     tr ' ' '
200     ' < "$tmpdepfile" \
201     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202     >> $depfile
203     else
204     # The sourcefile does not contain any dependencies, so just
205     # store a dummy comment line, to avoid errors with the Makefile
206     # "include basename.Plo" scheme.
207     echo "#dummy" > "$depfile"
208     fi
209     rm -f "$tmpdepfile"
210     ;;
211    
212     aix)
213     # The C for AIX Compiler uses -M and outputs the dependencies
214     # in a .u file. In older versions, this file always lives in the
215     # current directory. Also, the AIX compiler puts `$object:' at the
216     # start of each line; $object doesn't have directory information.
217     # Version 6 uses the directory in both cases.
218     dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219     test "x$dir" = "x$object" && dir=
220     base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221     if test "$libtool" = yes; then
222     tmpdepfile1=$dir$base.u
223     tmpdepfile2=$base.u
224     tmpdepfile3=$dir.libs/$base.u
225     "$@" -Wc,-M
226     else
227     tmpdepfile1=$dir$base.u
228     tmpdepfile2=$dir$base.u
229     tmpdepfile3=$dir$base.u
230     "$@" -M
231     fi
232     stat=$?
233    
234     if test $stat -eq 0; then :
235     else
236     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237     exit $stat
238     fi
239    
240     for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241     do
242     test -f "$tmpdepfile" && break
243     done
244     if test -f "$tmpdepfile"; then
245     # Each line is of the form `foo.o: dependent.h'.
246     # Do two passes, one to just change these to
247     # `$object: dependent.h' and one to simply `dependent.h:'.
248     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249     # That's a tab and a space in the [].
250     sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251     else
252     # The sourcefile does not contain any dependencies, so just
253     # store a dummy comment line, to avoid errors with the Makefile
254     # "include basename.Plo" scheme.
255     echo "#dummy" > "$depfile"
256     fi
257     rm -f "$tmpdepfile"
258     ;;
259    
260     icc)
261     # Intel's C compiler understands `-MD -MF file'. However on
262     # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263     # ICC 7.0 will fill foo.d with something like
264     # foo.o: sub/foo.c
265     # foo.o: sub/foo.h
266     # which is wrong. We want:
267     # sub/foo.o: sub/foo.c
268     # sub/foo.o: sub/foo.h
269     # sub/foo.c:
270     # sub/foo.h:
271     # ICC 7.1 will output
272     # foo.o: sub/foo.c sub/foo.h
273     # and will wrap long lines using \ :
274     # foo.o: sub/foo.c ... \
275     # sub/foo.h ... \
276     # ...
277    
278     "$@" -MD -MF "$tmpdepfile"
279     stat=$?
280     if test $stat -eq 0; then :
281     else
282     rm -f "$tmpdepfile"
283     exit $stat
284     fi
285     rm -f "$depfile"
286     # Each line is of the form `foo.o: dependent.h',
287     # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288     # Do two passes, one to just change these to
289     # `$object: dependent.h' and one to simply `dependent.h:'.
290     sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291     # Some versions of the HPUX 10.20 sed can't process this invocation
292     # correctly. Breaking it into two sed invocations is a workaround.
293     sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294     sed -e 's/$/ :/' >> "$depfile"
295     rm -f "$tmpdepfile"
296     ;;
297    
298     hp2)
299     # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300     # compilers, which have integrated preprocessors. The correct option
301     # to use with these is +Maked; it writes dependencies to a file named
302     # 'foo.d', which lands next to the object file, wherever that
303     # happens to be.
304     # Much of this is similar to the tru64 case; see comments there.
305     dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306     test "x$dir" = "x$object" && dir=
307     base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308     if test "$libtool" = yes; then
309     tmpdepfile1=$dir$base.d
310     tmpdepfile2=$dir.libs/$base.d
311     "$@" -Wc,+Maked
312     else
313     tmpdepfile1=$dir$base.d
314     tmpdepfile2=$dir$base.d
315     "$@" +Maked
316     fi
317     stat=$?
318     if test $stat -eq 0; then :
319     else
320     rm -f "$tmpdepfile1" "$tmpdepfile2"
321     exit $stat
322     fi
323    
324     for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325     do
326     test -f "$tmpdepfile" && break
327     done
328     if test -f "$tmpdepfile"; then
329     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330     # Add `dependent.h:' lines.
331     sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332     else
333     echo "#dummy" > "$depfile"
334     fi
335     rm -f "$tmpdepfile" "$tmpdepfile2"
336     ;;
337    
338     tru64)
339     # The Tru64 compiler uses -MD to generate dependencies as a side
340     # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341     # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342     # dependencies in `foo.d' instead, so we check for that too.
343     # Subdirectories are respected.
344     dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345     test "x$dir" = "x$object" && dir=
346     base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347    
348     if test "$libtool" = yes; then
349     # With Tru64 cc, shared objects can also be used to make a
350     # static library. This mechanism is used in libtool 1.4 series to
351     # handle both shared and static libraries in a single compilation.
352     # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353     #
354     # With libtool 1.5 this exception was removed, and libtool now
355     # generates 2 separate objects for the 2 libraries. These two
356     # compilations output dependencies in $dir.libs/$base.o.d and
357     # in $dir$base.o.d. We have to check for both files, because
358     # one of the two compilations can be disabled. We should prefer
359     # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360     # automatically cleaned when .libs/ is deleted, while ignoring
361     # the former would cause a distcleancheck panic.
362     tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
363     tmpdepfile2=$dir$base.o.d # libtool 1.5
364     tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
365     tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
366     "$@" -Wc,-MD
367     else
368     tmpdepfile1=$dir$base.o.d
369     tmpdepfile2=$dir$base.d
370     tmpdepfile3=$dir$base.d
371     tmpdepfile4=$dir$base.d
372     "$@" -MD
373     fi
374    
375     stat=$?
376     if test $stat -eq 0; then :
377     else
378     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379     exit $stat
380     fi
381    
382     for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383     do
384     test -f "$tmpdepfile" && break
385     done
386     if test -f "$tmpdepfile"; then
387     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388     # That's a tab and a space in the [].
389     sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390     else
391     echo "#dummy" > "$depfile"
392     fi
393     rm -f "$tmpdepfile"
394     ;;
395    
396     #nosideeffect)
397     # This comment above is used by automake to tell side-effect
398     # dependency tracking mechanisms from slower ones.
399    
400     dashmstdout)
401     # Important note: in order to support this mode, a compiler *must*
402     # always write the preprocessed file to stdout, regardless of -o.
403     "$@" || exit $?
404    
405     # Remove the call to Libtool.
406     if test "$libtool" = yes; then
407     while test $1 != '--mode=compile'; do
408     shift
409     done
410     shift
411     fi
412    
413     # Remove `-o $object'.
414     IFS=" "
415     for arg
416     do
417     case $arg in
418     -o)
419     shift
420     ;;
421     $object)
422     shift
423     ;;
424     *)
425     set fnord "$@" "$arg"
426     shift # fnord
427     shift # $arg
428     ;;
429     esac
430     done
431    
432     test -z "$dashmflag" && dashmflag=-M
433     # Require at least two characters before searching for `:'
434     # in the target name. This is to cope with DOS-style filenames:
435     # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436     "$@" $dashmflag |
437     sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
438     rm -f "$depfile"
439     cat < "$tmpdepfile" > "$depfile"
440     tr ' ' '
441     ' < "$tmpdepfile" | \
442     ## Some versions of the HPUX 10.20 sed can't process this invocation
443     ## correctly. Breaking it into two sed invocations is a workaround.
444     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445     rm -f "$tmpdepfile"
446     ;;
447    
448     dashXmstdout)
449     # This case only exists to satisfy depend.m4. It is never actually
450     # run, as this mode is specially recognized in the preamble.
451     exit 1
452     ;;
453    
454     makedepend)
455     "$@" || exit $?
456     # Remove any Libtool call
457     if test "$libtool" = yes; then
458     while test $1 != '--mode=compile'; do
459     shift
460     done
461     shift
462     fi
463     # X makedepend
464     shift
465     cleared=no
466     for arg in "$@"; do
467     case $cleared in
468     no)
469     set ""; shift
470     cleared=yes ;;
471     esac
472     case "$arg" in
473     -D*|-I*)
474     set fnord "$@" "$arg"; shift ;;
475     # Strip any option that makedepend may not understand. Remove
476     # the object too, otherwise makedepend will parse it as a source file.
477     -*|$object)
478     ;;
479     *)
480     set fnord "$@" "$arg"; shift ;;
481     esac
482     done
483     obj_suffix="`echo $object | sed 's/^.*\././'`"
484     touch "$tmpdepfile"
485     ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486     rm -f "$depfile"
487     cat < "$tmpdepfile" > "$depfile"
488     sed '1,2d' "$tmpdepfile" | tr ' ' '
489     ' | \
490     ## Some versions of the HPUX 10.20 sed can't process this invocation
491     ## correctly. Breaking it into two sed invocations is a workaround.
492     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493     rm -f "$tmpdepfile" "$tmpdepfile".bak
494     ;;
495    
496     cpp)
497     # Important note: in order to support this mode, a compiler *must*
498     # always write the preprocessed file to stdout.
499     "$@" || exit $?
500    
501     # Remove the call to Libtool.
502     if test "$libtool" = yes; then
503     while test $1 != '--mode=compile'; do
504     shift
505     done
506     shift
507     fi
508    
509     # Remove `-o $object'.
510     IFS=" "
511     for arg
512     do
513     case $arg in
514     -o)
515     shift
516     ;;
517     $object)
518     shift
519     ;;
520     *)
521     set fnord "$@" "$arg"
522     shift # fnord
523     shift # $arg
524     ;;
525     esac
526     done
527    
528     "$@" -E |
529     sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530     -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531     sed '$ s: \\$::' > "$tmpdepfile"
532     rm -f "$depfile"
533     echo "$object : \\" > "$depfile"
534     cat < "$tmpdepfile" >> "$depfile"
535     sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536     rm -f "$tmpdepfile"
537     ;;
538    
539     msvisualcpp)
540     # Important note: in order to support this mode, a compiler *must*
541     # always write the preprocessed file to stdout, regardless of -o,
542     # because we must use -o when running libtool.
543     "$@" || exit $?
544     IFS=" "
545     for arg
546     do
547     case "$arg" in
548     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549     set fnord "$@"
550     shift
551     shift
552     ;;
553     *)
554     set fnord "$@" "$arg"
555     shift
556     shift
557     ;;
558     esac
559     done
560     "$@" -E |
561     sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562     rm -f "$depfile"
563     echo "$object : \\" > "$depfile"
564     . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
565     echo " " >> "$depfile"
566     . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567     rm -f "$tmpdepfile"
568     ;;
569    
570     none)
571     exec "$@"
572     ;;
573    
574     *)
575     echo "Unknown depmode $depmode" 1>&2
576     exit 1
577     ;;
578     esac
579    
580     exit 0
581    
582     # Local Variables:
583     # mode: shell-script
584     # sh-indentation: 2
585     # eval: (add-hook 'write-file-hooks 'time-stamp)
586     # time-stamp-start: "scriptversion="
587     # time-stamp-format: "%:y-%02m-%02d.%02H"
588     # time-stamp-end: "$"
589     # End:

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26