1251883Speter#! /bin/sh
2251883Speter# depcomp - compile a program generating dependencies as side-effects
3251883Speter
4289166Speterscriptversion=2012-03-27.16; # UTC
5251883Speter
6289166Speter# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7289166Speter# 2011, 2012 Free Software Foundation, Inc.
8251883Speter
9251883Speter# This program is free software; you can redistribute it and/or modify
10251883Speter# it under the terms of the GNU General Public License as published by
11251883Speter# the Free Software Foundation; either version 2, or (at your option)
12251883Speter# any later version.
13251883Speter
14251883Speter# This program is distributed in the hope that it will be useful,
15251883Speter# but WITHOUT ANY WARRANTY; without even the implied warranty of
16251883Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17251883Speter# GNU General Public License for more details.
18251883Speter
19251883Speter# You should have received a copy of the GNU General Public License
20289166Speter# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21251883Speter
22251883Speter# As a special exception to the GNU General Public License, if you
23251883Speter# distribute this file as part of a program that contains a
24251883Speter# configuration script generated by Autoconf, you may include it under
25251883Speter# the same distribution terms that you use for the rest of that program.
26251883Speter
27251883Speter# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28251883Speter
29251883Spetercase $1 in
30251883Speter  '')
31289166Speter     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
32251883Speter     exit 1;
33251883Speter     ;;
34251883Speter  -h | --h*)
35251883Speter    cat <<\EOF
36251883SpeterUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37251883Speter
38251883SpeterRun PROGRAMS ARGS to compile a file, generating dependencies
39251883Speteras side-effects.
40251883Speter
41251883SpeterEnvironment variables:
42251883Speter  depmode     Dependency tracking mode.
43289166Speter  source      Source file read by 'PROGRAMS ARGS'.
44289166Speter  object      Object file output by 'PROGRAMS ARGS'.
45251883Speter  DEPDIR      directory where to store dependencies.
46251883Speter  depfile     Dependency file to output.
47289166Speter  tmpdepfile  Temporary file to use when outputting dependencies.
48251883Speter  libtool     Whether libtool is used (yes/no).
49251883Speter
50251883SpeterReport bugs to <bug-automake@gnu.org>.
51251883SpeterEOF
52251883Speter    exit $?
53251883Speter    ;;
54251883Speter  -v | --v*)
55251883Speter    echo "depcomp $scriptversion"
56251883Speter    exit $?
57251883Speter    ;;
58251883Speteresac
59251883Speter
60289166Speter# A tabulation character.
61289166Spetertab='	'
62289166Speter# A newline character.
63289166Speternl='
64289166Speter'
65289166Speter
66251883Speterif test -z "$depmode" || test -z "$source" || test -z "$object"; then
67251883Speter  echo "depcomp: Variables source, object and depmode must be set" 1>&2
68251883Speter  exit 1
69251883Speterfi
70251883Speter
71251883Speter# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
72251883Speterdepfile=${depfile-`echo "$object" |
73251883Speter  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
74251883Spetertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
75251883Speter
76251883Speterrm -f "$tmpdepfile"
77251883Speter
78251883Speter# Some modes work just like other modes, but use different flags.  We
79251883Speter# parameterize here, but still list the modes in the big case below,
80251883Speter# to make depend.m4 easier to write.  Note that we *cannot* use a case
81251883Speter# here, because this file can only contain one case statement.
82251883Speterif test "$depmode" = hp; then
83251883Speter  # HP compiler uses -M and no extra arg.
84251883Speter  gccflag=-M
85251883Speter  depmode=gcc
86251883Speterfi
87251883Speter
88251883Speterif test "$depmode" = dashXmstdout; then
89251883Speter   # This is just like dashmstdout with a different argument.
90251883Speter   dashmflag=-xM
91251883Speter   depmode=dashmstdout
92251883Speterfi
93251883Speter
94289166Spetercygpath_u="cygpath -u -f -"
95289166Speterif test "$depmode" = msvcmsys; then
96289166Speter   # This is just like msvisualcpp but w/o cygpath translation.
97289166Speter   # Just convert the backslash-escaped backslashes to single forward
98289166Speter   # slashes to satisfy depend.m4
99289166Speter   cygpath_u='sed s,\\\\,/,g'
100289166Speter   depmode=msvisualcpp
101289166Speterfi
102289166Speter
103289166Speterif test "$depmode" = msvc7msys; then
104289166Speter   # This is just like msvc7 but w/o cygpath translation.
105289166Speter   # Just convert the backslash-escaped backslashes to single forward
106289166Speter   # slashes to satisfy depend.m4
107289166Speter   cygpath_u='sed s,\\\\,/,g'
108289166Speter   depmode=msvc7
109289166Speterfi
110289166Speter
111289166Speterif test "$depmode" = xlc; then
112289166Speter   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
113289166Speter   gccflag=-qmakedep=gcc,-MF
114289166Speter   depmode=gcc
115289166Speterfi
116289166Speter
117251883Spetercase "$depmode" in
118251883Spetergcc3)
119251883Speter## gcc 3 implements dependency tracking that does exactly what
120251883Speter## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
121251883Speter## it if -MD -MP comes after the -MF stuff.  Hmm.
122289166Speter## Unfortunately, FreeBSD c89 acceptance of flags depends upon
123289166Speter## the command line argument order; so add the flags where they
124289166Speter## appear in depend2.am.  Note that the slowdown incurred here
125289166Speter## affects only configure: in makefiles, %FASTDEP% shortcuts this.
126289166Speter  for arg
127289166Speter  do
128289166Speter    case $arg in
129289166Speter    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
130289166Speter    *)  set fnord "$@" "$arg" ;;
131289166Speter    esac
132289166Speter    shift # fnord
133289166Speter    shift # $arg
134289166Speter  done
135289166Speter  "$@"
136251883Speter  stat=$?
137251883Speter  if test $stat -eq 0; then :
138251883Speter  else
139251883Speter    rm -f "$tmpdepfile"
140251883Speter    exit $stat
141251883Speter  fi
142251883Speter  mv "$tmpdepfile" "$depfile"
143251883Speter  ;;
144251883Speter
145251883Spetergcc)
146251883Speter## There are various ways to get dependency output from gcc.  Here's
147251883Speter## why we pick this rather obscure method:
148251883Speter## - Don't want to use -MD because we'd like the dependencies to end
149251883Speter##   up in a subdir.  Having to rename by hand is ugly.
150251883Speter##   (We might end up doing this anyway to support other compilers.)
151251883Speter## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
152251883Speter##   -MM, not -M (despite what the docs say).
153251883Speter## - Using -M directly means running the compiler twice (even worse
154251883Speter##   than renaming).
155251883Speter  if test -z "$gccflag"; then
156251883Speter    gccflag=-MD,
157251883Speter  fi
158251883Speter  "$@" -Wp,"$gccflag$tmpdepfile"
159251883Speter  stat=$?
160251883Speter  if test $stat -eq 0; then :
161251883Speter  else
162251883Speter    rm -f "$tmpdepfile"
163251883Speter    exit $stat
164251883Speter  fi
165251883Speter  rm -f "$depfile"
166251883Speter  echo "$object : \\" > "$depfile"
167251883Speter  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
168251883Speter## The second -e expression handles DOS-style file names with drive letters.
169251883Speter  sed -e 's/^[^:]*: / /' \
170251883Speter      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
171289166Speter## This next piece of magic avoids the "deleted header file" problem.
172251883Speter## The problem is that when a header file which appears in a .P file
173251883Speter## is deleted, the dependency causes make to die (because there is
174251883Speter## typically no way to rebuild the header).  We avoid this by adding
175251883Speter## dummy dependencies for each header file.  Too bad gcc doesn't do
176251883Speter## this for us directly.
177289166Speter  tr ' ' "$nl" < "$tmpdepfile" |
178289166Speter## Some versions of gcc put a space before the ':'.  On the theory
179251883Speter## that the space means something, we add a space to the output as
180289166Speter## well.  hp depmode also adds that space, but also prefixes the VPATH
181289166Speter## to the object.  Take care to not repeat it in the output.
182251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation
183251883Speter## correctly.  Breaking it into two sed invocations is a workaround.
184289166Speter    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
185289166Speter      | sed -e 's/$/ :/' >> "$depfile"
186251883Speter  rm -f "$tmpdepfile"
187251883Speter  ;;
188251883Speter
189251883Speterhp)
190251883Speter  # This case exists only to let depend.m4 do its work.  It works by
191251883Speter  # looking at the text of this script.  This case will never be run,
192251883Speter  # since it is checked for above.
193251883Speter  exit 1
194251883Speter  ;;
195251883Speter
196251883Spetersgi)
197251883Speter  if test "$libtool" = yes; then
198251883Speter    "$@" "-Wp,-MDupdate,$tmpdepfile"
199251883Speter  else
200251883Speter    "$@" -MDupdate "$tmpdepfile"
201251883Speter  fi
202251883Speter  stat=$?
203251883Speter  if test $stat -eq 0; then :
204251883Speter  else
205251883Speter    rm -f "$tmpdepfile"
206251883Speter    exit $stat
207251883Speter  fi
208251883Speter  rm -f "$depfile"
209251883Speter
210251883Speter  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
211251883Speter    echo "$object : \\" > "$depfile"
212251883Speter
213251883Speter    # Clip off the initial element (the dependent).  Don't try to be
214251883Speter    # clever and replace this with sed code, as IRIX sed won't handle
215251883Speter    # lines with more than a fixed number of characters (4096 in
216251883Speter    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
217289166Speter    # the IRIX cc adds comments like '#:fec' to the end of the
218251883Speter    # dependency line.
219289166Speter    tr ' ' "$nl" < "$tmpdepfile" \
220251883Speter    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
221289166Speter    tr "$nl" ' ' >> "$depfile"
222289166Speter    echo >> "$depfile"
223251883Speter
224251883Speter    # The second pass generates a dummy entry for each header file.
225289166Speter    tr ' ' "$nl" < "$tmpdepfile" \
226251883Speter   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
227289166Speter   >> "$depfile"
228251883Speter  else
229251883Speter    # The sourcefile does not contain any dependencies, so just
230251883Speter    # store a dummy comment line, to avoid errors with the Makefile
231251883Speter    # "include basename.Plo" scheme.
232251883Speter    echo "#dummy" > "$depfile"
233251883Speter  fi
234251883Speter  rm -f "$tmpdepfile"
235251883Speter  ;;
236251883Speter
237289166Speterxlc)
238289166Speter  # This case exists only to let depend.m4 do its work.  It works by
239289166Speter  # looking at the text of this script.  This case will never be run,
240289166Speter  # since it is checked for above.
241289166Speter  exit 1
242289166Speter  ;;
243289166Speter
244251883Speteraix)
245251883Speter  # The C for AIX Compiler uses -M and outputs the dependencies
246251883Speter  # in a .u file.  In older versions, this file always lives in the
247289166Speter  # current directory.  Also, the AIX compiler puts '$object:' at the
248251883Speter  # start of each line; $object doesn't have directory information.
249251883Speter  # Version 6 uses the directory in both cases.
250289166Speter  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
251289166Speter  test "x$dir" = "x$object" && dir=
252289166Speter  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
253251883Speter  if test "$libtool" = yes; then
254289166Speter    tmpdepfile1=$dir$base.u
255289166Speter    tmpdepfile2=$base.u
256289166Speter    tmpdepfile3=$dir.libs/$base.u
257251883Speter    "$@" -Wc,-M
258251883Speter  else
259289166Speter    tmpdepfile1=$dir$base.u
260289166Speter    tmpdepfile2=$dir$base.u
261289166Speter    tmpdepfile3=$dir$base.u
262251883Speter    "$@" -M
263251883Speter  fi
264251883Speter  stat=$?
265251883Speter
266251883Speter  if test $stat -eq 0; then :
267251883Speter  else
268289166Speter    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
269251883Speter    exit $stat
270251883Speter  fi
271251883Speter
272289166Speter  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
273289166Speter  do
274289166Speter    test -f "$tmpdepfile" && break
275289166Speter  done
276251883Speter  if test -f "$tmpdepfile"; then
277289166Speter    # Each line is of the form 'foo.o: dependent.h'.
278251883Speter    # Do two passes, one to just change these to
279289166Speter    # '$object: dependent.h' and one to simply 'dependent.h:'.
280289166Speter    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
281289166Speter    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
282251883Speter  else
283251883Speter    # The sourcefile does not contain any dependencies, so just
284251883Speter    # store a dummy comment line, to avoid errors with the Makefile
285251883Speter    # "include basename.Plo" scheme.
286251883Speter    echo "#dummy" > "$depfile"
287251883Speter  fi
288251883Speter  rm -f "$tmpdepfile"
289251883Speter  ;;
290251883Speter
291251883Spetericc)
292289166Speter  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
293289166Speter  # However on
294289166Speter  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
295251883Speter  # ICC 7.0 will fill foo.d with something like
296251883Speter  #    foo.o: sub/foo.c
297251883Speter  #    foo.o: sub/foo.h
298289166Speter  # which is wrong.  We want
299251883Speter  #    sub/foo.o: sub/foo.c
300251883Speter  #    sub/foo.o: sub/foo.h
301251883Speter  #    sub/foo.c:
302251883Speter  #    sub/foo.h:
303251883Speter  # ICC 7.1 will output
304251883Speter  #    foo.o: sub/foo.c sub/foo.h
305289166Speter  # and will wrap long lines using '\':
306251883Speter  #    foo.o: sub/foo.c ... \
307251883Speter  #     sub/foo.h ... \
308251883Speter  #     ...
309289166Speter  # tcc 0.9.26 (FIXME still under development at the moment of writing)
310289166Speter  # will emit a similar output, but also prepend the continuation lines
311289166Speter  # with horizontal tabulation characters.
312251883Speter  "$@" -MD -MF "$tmpdepfile"
313251883Speter  stat=$?
314251883Speter  if test $stat -eq 0; then :
315251883Speter  else
316251883Speter    rm -f "$tmpdepfile"
317251883Speter    exit $stat
318251883Speter  fi
319251883Speter  rm -f "$depfile"
320289166Speter  # Each line is of the form 'foo.o: dependent.h',
321289166Speter  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
322251883Speter  # Do two passes, one to just change these to
323289166Speter  # '$object: dependent.h' and one to simply 'dependent.h:'.
324289166Speter  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
325289166Speter    < "$tmpdepfile" > "$depfile"
326289166Speter  sed '
327289166Speter    s/[ '"$tab"'][ '"$tab"']*/ /g
328289166Speter    s/^ *//
329289166Speter    s/ *\\*$//
330289166Speter    s/^[^:]*: *//
331289166Speter    /^$/d
332289166Speter    /:$/d
333289166Speter    s/$/ :/
334289166Speter  ' < "$tmpdepfile" >> "$depfile"
335251883Speter  rm -f "$tmpdepfile"
336251883Speter  ;;
337251883Speter
338289166Speterhp2)
339289166Speter  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
340289166Speter  # compilers, which have integrated preprocessors.  The correct option
341289166Speter  # to use with these is +Maked; it writes dependencies to a file named
342289166Speter  # 'foo.d', which lands next to the object file, wherever that
343289166Speter  # happens to be.
344289166Speter  # Much of this is similar to the tru64 case; see comments there.
345289166Speter  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
346289166Speter  test "x$dir" = "x$object" && dir=
347289166Speter  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
348289166Speter  if test "$libtool" = yes; then
349289166Speter    tmpdepfile1=$dir$base.d
350289166Speter    tmpdepfile2=$dir.libs/$base.d
351289166Speter    "$@" -Wc,+Maked
352289166Speter  else
353289166Speter    tmpdepfile1=$dir$base.d
354289166Speter    tmpdepfile2=$dir$base.d
355289166Speter    "$@" +Maked
356289166Speter  fi
357289166Speter  stat=$?
358289166Speter  if test $stat -eq 0; then :
359289166Speter  else
360289166Speter     rm -f "$tmpdepfile1" "$tmpdepfile2"
361289166Speter     exit $stat
362289166Speter  fi
363289166Speter
364289166Speter  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
365289166Speter  do
366289166Speter    test -f "$tmpdepfile" && break
367289166Speter  done
368289166Speter  if test -f "$tmpdepfile"; then
369289166Speter    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
370289166Speter    # Add 'dependent.h:' lines.
371289166Speter    sed -ne '2,${
372289166Speter	       s/^ *//
373289166Speter	       s/ \\*$//
374289166Speter	       s/$/:/
375289166Speter	       p
376289166Speter	     }' "$tmpdepfile" >> "$depfile"
377289166Speter  else
378289166Speter    echo "#dummy" > "$depfile"
379289166Speter  fi
380289166Speter  rm -f "$tmpdepfile" "$tmpdepfile2"
381289166Speter  ;;
382289166Speter
383251883Spetertru64)
384251883Speter   # The Tru64 compiler uses -MD to generate dependencies as a side
385289166Speter   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
386251883Speter   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
387289166Speter   # dependencies in 'foo.d' instead, so we check for that too.
388251883Speter   # Subdirectories are respected.
389251883Speter   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
390251883Speter   test "x$dir" = "x$object" && dir=
391251883Speter   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
392251883Speter
393251883Speter   if test "$libtool" = yes; then
394251883Speter      # With Tru64 cc, shared objects can also be used to make a
395289166Speter      # static library.  This mechanism is used in libtool 1.4 series to
396251883Speter      # handle both shared and static libraries in a single compilation.
397251883Speter      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
398251883Speter      #
399251883Speter      # With libtool 1.5 this exception was removed, and libtool now
400251883Speter      # generates 2 separate objects for the 2 libraries.  These two
401289166Speter      # compilations output dependencies in $dir.libs/$base.o.d and
402251883Speter      # in $dir$base.o.d.  We have to check for both files, because
403251883Speter      # one of the two compilations can be disabled.  We should prefer
404251883Speter      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
405251883Speter      # automatically cleaned when .libs/ is deleted, while ignoring
406251883Speter      # the former would cause a distcleancheck panic.
407251883Speter      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
408251883Speter      tmpdepfile2=$dir$base.o.d          # libtool 1.5
409251883Speter      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
410251883Speter      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
411251883Speter      "$@" -Wc,-MD
412251883Speter   else
413251883Speter      tmpdepfile1=$dir$base.o.d
414251883Speter      tmpdepfile2=$dir$base.d
415251883Speter      tmpdepfile3=$dir$base.d
416251883Speter      tmpdepfile4=$dir$base.d
417251883Speter      "$@" -MD
418251883Speter   fi
419251883Speter
420251883Speter   stat=$?
421251883Speter   if test $stat -eq 0; then :
422251883Speter   else
423251883Speter      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
424251883Speter      exit $stat
425251883Speter   fi
426251883Speter
427251883Speter   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
428251883Speter   do
429251883Speter     test -f "$tmpdepfile" && break
430251883Speter   done
431251883Speter   if test -f "$tmpdepfile"; then
432251883Speter      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
433289166Speter      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
434251883Speter   else
435251883Speter      echo "#dummy" > "$depfile"
436251883Speter   fi
437251883Speter   rm -f "$tmpdepfile"
438251883Speter   ;;
439251883Speter
440289166Spetermsvc7)
441289166Speter  if test "$libtool" = yes; then
442289166Speter    showIncludes=-Wc,-showIncludes
443289166Speter  else
444289166Speter    showIncludes=-showIncludes
445289166Speter  fi
446289166Speter  "$@" $showIncludes > "$tmpdepfile"
447289166Speter  stat=$?
448289166Speter  grep -v '^Note: including file: ' "$tmpdepfile"
449289166Speter  if test "$stat" = 0; then :
450289166Speter  else
451289166Speter    rm -f "$tmpdepfile"
452289166Speter    exit $stat
453289166Speter  fi
454289166Speter  rm -f "$depfile"
455289166Speter  echo "$object : \\" > "$depfile"
456289166Speter  # The first sed program below extracts the file names and escapes
457289166Speter  # backslashes for cygpath.  The second sed program outputs the file
458289166Speter  # name when reading, but also accumulates all include files in the
459289166Speter  # hold buffer in order to output them again at the end.  This only
460289166Speter  # works with sed implementations that can handle large buffers.
461289166Speter  sed < "$tmpdepfile" -n '
462289166Speter/^Note: including file:  *\(.*\)/ {
463289166Speter  s//\1/
464289166Speter  s/\\/\\\\/g
465289166Speter  p
466289166Speter}' | $cygpath_u | sort -u | sed -n '
467289166Speters/ /\\ /g
468289166Speters/\(.*\)/'"$tab"'\1 \\/p
469289166Speters/.\(.*\) \\/\1:/
470289166SpeterH
471289166Speter$ {
472289166Speter  s/.*/'"$tab"'/
473289166Speter  G
474289166Speter  p
475289166Speter}' >> "$depfile"
476289166Speter  rm -f "$tmpdepfile"
477289166Speter  ;;
478289166Speter
479289166Spetermsvc7msys)
480289166Speter  # This case exists only to let depend.m4 do its work.  It works by
481289166Speter  # looking at the text of this script.  This case will never be run,
482289166Speter  # since it is checked for above.
483289166Speter  exit 1
484289166Speter  ;;
485289166Speter
486251883Speter#nosideeffect)
487251883Speter  # This comment above is used by automake to tell side-effect
488251883Speter  # dependency tracking mechanisms from slower ones.
489251883Speter
490251883Speterdashmstdout)
491251883Speter  # Important note: in order to support this mode, a compiler *must*
492251883Speter  # always write the preprocessed file to stdout, regardless of -o.
493251883Speter  "$@" || exit $?
494251883Speter
495251883Speter  # Remove the call to Libtool.
496251883Speter  if test "$libtool" = yes; then
497289166Speter    while test "X$1" != 'X--mode=compile'; do
498251883Speter      shift
499251883Speter    done
500251883Speter    shift
501251883Speter  fi
502251883Speter
503289166Speter  # Remove '-o $object'.
504251883Speter  IFS=" "
505251883Speter  for arg
506251883Speter  do
507251883Speter    case $arg in
508251883Speter    -o)
509251883Speter      shift
510251883Speter      ;;
511251883Speter    $object)
512251883Speter      shift
513251883Speter      ;;
514251883Speter    *)
515251883Speter      set fnord "$@" "$arg"
516251883Speter      shift # fnord
517251883Speter      shift # $arg
518251883Speter      ;;
519251883Speter    esac
520251883Speter  done
521251883Speter
522251883Speter  test -z "$dashmflag" && dashmflag=-M
523289166Speter  # Require at least two characters before searching for ':'
524251883Speter  # in the target name.  This is to cope with DOS-style filenames:
525289166Speter  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
526251883Speter  "$@" $dashmflag |
527289166Speter    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
528251883Speter  rm -f "$depfile"
529251883Speter  cat < "$tmpdepfile" > "$depfile"
530289166Speter  tr ' ' "$nl" < "$tmpdepfile" | \
531251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation
532251883Speter## correctly.  Breaking it into two sed invocations is a workaround.
533251883Speter    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
534251883Speter  rm -f "$tmpdepfile"
535251883Speter  ;;
536251883Speter
537251883SpeterdashXmstdout)
538251883Speter  # This case only exists to satisfy depend.m4.  It is never actually
539251883Speter  # run, as this mode is specially recognized in the preamble.
540251883Speter  exit 1
541251883Speter  ;;
542251883Speter
543251883Spetermakedepend)
544251883Speter  "$@" || exit $?
545251883Speter  # Remove any Libtool call
546251883Speter  if test "$libtool" = yes; then
547289166Speter    while test "X$1" != 'X--mode=compile'; do
548251883Speter      shift
549251883Speter    done
550251883Speter    shift
551251883Speter  fi
552251883Speter  # X makedepend
553251883Speter  shift
554289166Speter  cleared=no eat=no
555289166Speter  for arg
556289166Speter  do
557251883Speter    case $cleared in
558251883Speter    no)
559251883Speter      set ""; shift
560251883Speter      cleared=yes ;;
561251883Speter    esac
562289166Speter    if test $eat = yes; then
563289166Speter      eat=no
564289166Speter      continue
565289166Speter    fi
566251883Speter    case "$arg" in
567251883Speter    -D*|-I*)
568251883Speter      set fnord "$@" "$arg"; shift ;;
569251883Speter    # Strip any option that makedepend may not understand.  Remove
570251883Speter    # the object too, otherwise makedepend will parse it as a source file.
571289166Speter    -arch)
572289166Speter      eat=yes ;;
573251883Speter    -*|$object)
574251883Speter      ;;
575251883Speter    *)
576251883Speter      set fnord "$@" "$arg"; shift ;;
577251883Speter    esac
578251883Speter  done
579289166Speter  obj_suffix=`echo "$object" | sed 's/^.*\././'`
580251883Speter  touch "$tmpdepfile"
581251883Speter  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
582251883Speter  rm -f "$depfile"
583289166Speter  # makedepend may prepend the VPATH from the source file name to the object.
584289166Speter  # No need to regex-escape $object, excess matching of '.' is harmless.
585289166Speter  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
586289166Speter  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
587251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation
588251883Speter## correctly.  Breaking it into two sed invocations is a workaround.
589251883Speter    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
590251883Speter  rm -f "$tmpdepfile" "$tmpdepfile".bak
591251883Speter  ;;
592251883Speter
593251883Spetercpp)
594251883Speter  # Important note: in order to support this mode, a compiler *must*
595251883Speter  # always write the preprocessed file to stdout.
596251883Speter  "$@" || exit $?
597251883Speter
598251883Speter  # Remove the call to Libtool.
599251883Speter  if test "$libtool" = yes; then
600289166Speter    while test "X$1" != 'X--mode=compile'; do
601251883Speter      shift
602251883Speter    done
603251883Speter    shift
604251883Speter  fi
605251883Speter
606289166Speter  # Remove '-o $object'.
607251883Speter  IFS=" "
608251883Speter  for arg
609251883Speter  do
610251883Speter    case $arg in
611251883Speter    -o)
612251883Speter      shift
613251883Speter      ;;
614251883Speter    $object)
615251883Speter      shift
616251883Speter      ;;
617251883Speter    *)
618251883Speter      set fnord "$@" "$arg"
619251883Speter      shift # fnord
620251883Speter      shift # $arg
621251883Speter      ;;
622251883Speter    esac
623251883Speter  done
624251883Speter
625251883Speter  "$@" -E |
626251883Speter    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
627251883Speter       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
628251883Speter    sed '$ s: \\$::' > "$tmpdepfile"
629251883Speter  rm -f "$depfile"
630251883Speter  echo "$object : \\" > "$depfile"
631251883Speter  cat < "$tmpdepfile" >> "$depfile"
632251883Speter  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
633251883Speter  rm -f "$tmpdepfile"
634251883Speter  ;;
635251883Speter
636251883Spetermsvisualcpp)
637251883Speter  # Important note: in order to support this mode, a compiler *must*
638289166Speter  # always write the preprocessed file to stdout.
639251883Speter  "$@" || exit $?
640289166Speter
641289166Speter  # Remove the call to Libtool.
642289166Speter  if test "$libtool" = yes; then
643289166Speter    while test "X$1" != 'X--mode=compile'; do
644289166Speter      shift
645289166Speter    done
646289166Speter    shift
647289166Speter  fi
648289166Speter
649251883Speter  IFS=" "
650251883Speter  for arg
651251883Speter  do
652251883Speter    case "$arg" in
653289166Speter    -o)
654289166Speter      shift
655289166Speter      ;;
656289166Speter    $object)
657289166Speter      shift
658289166Speter      ;;
659251883Speter    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
660251883Speter	set fnord "$@"
661251883Speter	shift
662251883Speter	shift
663251883Speter	;;
664251883Speter    *)
665251883Speter	set fnord "$@" "$arg"
666251883Speter	shift
667251883Speter	shift
668251883Speter	;;
669251883Speter    esac
670251883Speter  done
671289166Speter  "$@" -E 2>/dev/null |
672289166Speter  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
673251883Speter  rm -f "$depfile"
674251883Speter  echo "$object : \\" > "$depfile"
675289166Speter  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
676289166Speter  echo "$tab" >> "$depfile"
677289166Speter  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
678251883Speter  rm -f "$tmpdepfile"
679251883Speter  ;;
680251883Speter
681289166Spetermsvcmsys)
682289166Speter  # This case exists only to let depend.m4 do its work.  It works by
683289166Speter  # looking at the text of this script.  This case will never be run,
684289166Speter  # since it is checked for above.
685289166Speter  exit 1
686289166Speter  ;;
687289166Speter
688251883Speternone)
689251883Speter  exec "$@"
690251883Speter  ;;
691251883Speter
692251883Speter*)
693251883Speter  echo "Unknown depmode $depmode" 1>&2
694251883Speter  exit 1
695251883Speter  ;;
696251883Speteresac
697251883Speter
698251883Speterexit 0
699251883Speter
700251883Speter# Local Variables:
701251883Speter# mode: shell-script
702251883Speter# sh-indentation: 2
703251883Speter# eval: (add-hook 'write-file-hooks 'time-stamp)
704251883Speter# time-stamp-start: "scriptversion="
705251883Speter# time-stamp-format: "%:y-%02m-%02d.%02H"
706289166Speter# time-stamp-time-zone: "UTC"
707289166Speter# time-stamp-end: "; # UTC"
708251883Speter# End:
709