source: trunk/third/jwgc/depcomp @ 22406

Revision 22406, 11.8 KB checked in by ghudson, 19 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r22405, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1#! /bin/sh
2
3# depcomp - compile a program generating dependencies as side-effects
4# Copyright 1999, 2000 Free Software Foundation, Inc.
5
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation; either version 2, or (at your option)
9# any later version.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14# GNU General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with this program; if not, write to the Free Software
18# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19# 02111-1307, USA.
20
21# As a special exception to the GNU General Public License, if you
22# distribute this file as part of a program that contains a
23# configuration script generated by Autoconf, you may include it under
24# the same distribution terms that you use for the rest of that program.
25
26# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27
28if test -z "$depmode" || test -z "$source" || test -z "$object"; then
29  echo "depcomp: Variables source, object and depmode must be set" 1>&2
30  exit 1
31fi
32# `libtool' can also be set to `yes' or `no'.
33
34if test -z "$depfile"; then
35   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
36   dir=`echo "$object" | sed 's,/.*$,/,'`
37   if test "$dir" = "$object"; then
38      dir=
39   fi
40   # FIXME: should be _deps on DOS.
41   depfile="$dir.deps/$base"
42fi
43
44tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
45
46rm -f "$tmpdepfile"
47
48# Some modes work just like other modes, but use different flags.  We
49# parameterize here, but still list the modes in the big case below,
50# to make depend.m4 easier to write.  Note that we *cannot* use a case
51# here, because this file can only contain one case statement.
52if test "$depmode" = hp; then
53  # HP compiler uses -M and no extra arg.
54  gccflag=-M
55  depmode=gcc
56fi
57
58if test "$depmode" = dashXmstdout; then
59   # This is just like dashmstdout with a different argument.
60   dashmflag=-xM
61   depmode=dashmstdout
62fi
63
64case "$depmode" in
65gcc3)
66## gcc 3 implements dependency tracking that does exactly what
67## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
68## it if -MD -MP comes after the -MF stuff.  Hmm.
69  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
70  stat=$?
71  if test $stat -eq 0; then :
72  else
73    rm -f "$tmpdepfile"
74    exit $stat
75  fi
76  mv "$tmpdepfile" "$depfile"
77  ;;
78
79gcc)
80## There are various ways to get dependency output from gcc.  Here's
81## why we pick this rather obscure method:
82## - Don't want to use -MD because we'd like the dependencies to end
83##   up in a subdir.  Having to rename by hand is ugly.
84##   (We might end up doing this anyway to support other compilers.)
85## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
86##   -MM, not -M (despite what the docs say).
87## - Using -M directly means running the compiler twice (even worse
88##   than renaming).
89  if test -z "$gccflag"; then
90    gccflag=-MD,
91  fi
92  "$@" -Wp,"$gccflag$tmpdepfile"
93  stat=$?
94  if test $stat -eq 0; then :
95  else
96    rm -f "$tmpdepfile"
97    exit $stat
98  fi
99  rm -f "$depfile"
100  echo "$object : \\" > "$depfile"
101  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
102## The second -e expression handles DOS-style file names with drive letters.
103  sed -e 's/^[^:]*: / /' \
104      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
105## This next piece of magic avoids the `deleted header file' problem.
106## The problem is that when a header file which appears in a .P file
107## is deleted, the dependency causes make to die (because there is
108## typically no way to rebuild the header).  We avoid this by adding
109## dummy dependencies for each header file.  Too bad gcc doesn't do
110## this for us directly.
111  tr ' ' '
112' < "$tmpdepfile" |
113## Some versions of gcc put a space before the `:'.  On the theory
114## that the space means something, we add a space to the output as
115## well.
116## Some versions of the HPUX 10.20 sed can't process this invocation
117## correctly.  Breaking it into two sed invocations is a workaround.
118    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
119  rm -f "$tmpdepfile"
120  ;;
121
122hp)
123  # This case exists only to let depend.m4 do its work.  It works by
124  # looking at the text of this script.  This case will never be run,
125  # since it is checked for above.
126  exit 1
127  ;;
128
129sgi)
130  if test "$libtool" = yes; then
131    "$@" "-Wp,-MDupdate,$tmpdepfile"
132  else
133    "$@" -MDupdate "$tmpdepfile"
134  fi
135  stat=$?
136  if test $stat -eq 0; then :
137  else
138    rm -f "$tmpdepfile"
139    exit $stat
140  fi
141  rm -f "$depfile"
142
143  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
144    echo "$object : \\" > "$depfile"
145
146    # Clip off the initial element (the dependent).  Don't try to be
147    # clever and replace this with sed code, as IRIX sed won't handle
148    # lines with more than a fixed number of characters (4096 in
149    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
150    # the IRIX cc adds comments like `#:fec' to the end of the
151    # dependency line.
152    tr ' ' '
153' < "$tmpdepfile" \
154    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
155    tr '
156' ' ' >> $depfile
157    echo >> $depfile
158
159    # The second pass generates a dummy entry for each header file.
160    tr ' ' '
161' < "$tmpdepfile" \
162   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
163   >> $depfile
164  else
165    # The sourcefile does not contain any dependencies, so just
166    # store a dummy comment line, to avoid errors with the Makefile
167    # "include basename.Plo" scheme.
168    echo "#dummy" > "$depfile"
169  fi
170  rm -f "$tmpdepfile"
171  ;;
172
173aix)
174  # The C for AIX Compiler uses -M and outputs the dependencies
175  # in a .u file.  This file always lives in the current directory.
176  # Also, the AIX compiler puts `$object:' at the start of each line;
177  # $object doesn't have directory information.
178  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
179  tmpdepfile="$stripped.u"
180  outname="$stripped.o"
181  if test "$libtool" = yes; then
182    "$@" -Wc,-M
183  else
184    "$@" -M
185  fi
186
187  stat=$?
188  if test $stat -eq 0; then :
189  else
190    rm -f "$tmpdepfile"
191    exit $stat
192  fi
193
194  if test -f "$tmpdepfile"; then
195    # Each line is of the form `foo.o: dependent.h'.
196    # Do two passes, one to just change these to
197    # `$object: dependent.h' and one to simply `dependent.h:'.
198    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
199    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
200  else
201    # The sourcefile does not contain any dependencies, so just
202    # store a dummy comment line, to avoid errors with the Makefile
203    # "include basename.Plo" scheme.
204    echo "#dummy" > "$depfile"
205  fi
206  rm -f "$tmpdepfile"
207  ;;
208
209tru64)
210   # The Tru64 compiler uses -MD to generate dependencies as a side
211   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
212   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
213   # dependencies in `foo.d' instead, so we check for that too.
214   # Subdirectories are respected.
215   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
216   test "x$dir" = "x$object" && dir=
217   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
218
219   if test "$libtool" = yes; then
220      tmpdepfile1="$dir.libs/$base.lo.d"
221      tmpdepfile2="$dir.libs/$base.d"
222      "$@" -Wc,-MD
223   else
224      tmpdepfile1="$dir$base.o.d"
225      tmpdepfile2="$dir$base.d"
226      "$@" -MD
227   fi
228
229   stat=$?
230   if test $stat -eq 0; then :
231   else
232      rm -f "$tmpdepfile1" "$tmpdepfile2"
233      exit $stat
234   fi
235
236   if test -f "$tmpdepfile1"; then
237      tmpdepfile="$tmpdepfile1"
238   else
239      tmpdepfile="$tmpdepfile2"
240   fi
241   if test -f "$tmpdepfile"; then
242      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
243      # That's a space and a tab in the [].
244      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
245   else
246      echo "#dummy" > "$depfile"
247   fi
248   rm -f "$tmpdepfile"
249   ;;
250
251#nosideeffect)
252  # This comment above is used by automake to tell side-effect
253  # dependency tracking mechanisms from slower ones.
254
255dashmstdout)
256  # Important note: in order to support this mode, a compiler *must*
257  # always write the proprocessed file to stdout, regardless of -o.
258  "$@" || exit $?
259
260  # Remove the call to Libtool.
261  if test "$libtool" = yes; then
262    while test $1 != '--mode=compile'; do
263      shift
264    done
265    shift
266  fi
267
268  # Remove `-o $object'.  We will use -o /dev/null later,
269  # however we can't do the remplacement now because
270  # `-o $object' might simply not be used
271  IFS=" "
272  for arg
273  do
274    case $arg in
275    -o)
276      shift
277      ;;
278    $object)
279      shift
280      ;;
281    *)
282      set fnord "$@" "$arg"
283      shift # fnord
284      shift # $arg
285      ;;
286    esac
287  done
288
289  test -z "$dashmflag" && dashmflag=-M
290  "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[       ]*:'"$object"'\: :' > "$tmpdepfile"
291  rm -f "$depfile"
292  cat < "$tmpdepfile" > "$depfile"
293  tr ' ' '
294' < "$tmpdepfile" | \
295## Some versions of the HPUX 10.20 sed can't process this invocation
296## correctly.  Breaking it into two sed invocations is a workaround.
297    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
298  rm -f "$tmpdepfile"
299  ;;
300
301dashXmstdout)
302  # This case only exists to satisfy depend.m4.  It is never actually
303  # run, as this mode is specially recognized in the preamble.
304  exit 1
305  ;;
306
307makedepend)
308  "$@" || exit $?
309  # X makedepend
310  shift
311  cleared=no
312  for arg in "$@"; do
313    case $cleared in
314    no)
315      set ""; shift
316      cleared=yes ;;
317    esac
318    case "$arg" in
319    -D*|-I*)
320      set fnord "$@" "$arg"; shift ;;
321    -*)
322      ;;
323    *)
324      set fnord "$@" "$arg"; shift ;;
325    esac
326  done
327  obj_suffix="`echo $object | sed 's/^.*\././'`"
328  touch "$tmpdepfile"
329  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
330  rm -f "$depfile"
331  cat < "$tmpdepfile" > "$depfile"
332  sed '1,2d' "$tmpdepfile" | tr ' ' '
333' | \
334## Some versions of the HPUX 10.20 sed can't process this invocation
335## correctly.  Breaking it into two sed invocations is a workaround.
336    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
337  rm -f "$tmpdepfile" "$tmpdepfile".bak
338  ;;
339
340cpp)
341  # Important note: in order to support this mode, a compiler *must*
342  # always write the proprocessed file to stdout.
343  "$@" || exit $?
344
345  # Remove the call to Libtool.
346  if test "$libtool" = yes; then
347    while test $1 != '--mode=compile'; do
348      shift
349    done
350    shift
351  fi
352
353  # Remove `-o $object'.
354  IFS=" "
355  for arg
356  do
357    case $arg in
358    -o)
359      shift
360      ;;
361    $object)
362      shift
363      ;;
364    *)
365      set fnord "$@" "$arg"
366      shift # fnord
367      shift # $arg
368      ;;
369    esac
370  done
371
372  "$@" -E |
373    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
374    sed '$ s: \\$::' > "$tmpdepfile"
375  rm -f "$depfile"
376  echo "$object : \\" > "$depfile"
377  cat < "$tmpdepfile" >> "$depfile"
378  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
379  rm -f "$tmpdepfile"
380  ;;
381
382msvisualcpp)
383  # Important note: in order to support this mode, a compiler *must*
384  # always write the proprocessed file to stdout, regardless of -o,
385  # because we must use -o when running libtool.
386  "$@" || exit $?
387  IFS=" "
388  for arg
389  do
390    case "$arg" in
391    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
392        set fnord "$@"
393        shift
394        shift
395        ;;
396    *)
397        set fnord "$@" "$arg"
398        shift
399        shift
400        ;;
401    esac
402  done
403  "$@" -E |
404  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
405  rm -f "$depfile"
406  echo "$object : \\" > "$depfile"
407  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::    \1 \\:p' >> "$depfile"
408  echo "        " >> "$depfile"
409  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
410  rm -f "$tmpdepfile"
411  ;;
412
413none)
414  exec "$@"
415  ;;
416
417*)
418  echo "Unknown depmode $depmode" 1>&2
419  exit 1
420  ;;
421esac
422
423exit 0
Note: See TracBrowser for help on using the repository browser.