xref: /minix3/external/bsd/bind/dist/unit/atf-src/admin/depcomp (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#! /bin/sh
2*00b67f09SDavid van Moolenbroek# depcomp - compile a program generating dependencies as side-effects
3*00b67f09SDavid van Moolenbroek
4*00b67f09SDavid van Moolenbroekscriptversion=2012-03-27.16; # UTC
5*00b67f09SDavid van Moolenbroek
6*00b67f09SDavid van Moolenbroek# Copyright (C) 1999-2012 Free Software Foundation, Inc.
7*00b67f09SDavid van Moolenbroek
8*00b67f09SDavid van Moolenbroek# This program is free software; you can redistribute it and/or modify
9*00b67f09SDavid van Moolenbroek# it under the terms of the GNU General Public License as published by
10*00b67f09SDavid van Moolenbroek# the Free Software Foundation; either version 2, or (at your option)
11*00b67f09SDavid van Moolenbroek# any later version.
12*00b67f09SDavid van Moolenbroek
13*00b67f09SDavid van Moolenbroek# This program is distributed in the hope that it will be useful,
14*00b67f09SDavid van Moolenbroek# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*00b67f09SDavid van Moolenbroek# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*00b67f09SDavid van Moolenbroek# GNU General Public License for more details.
17*00b67f09SDavid van Moolenbroek
18*00b67f09SDavid van Moolenbroek# You should have received a copy of the GNU General Public License
19*00b67f09SDavid van Moolenbroek# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20*00b67f09SDavid van Moolenbroek
21*00b67f09SDavid van Moolenbroek# As a special exception to the GNU General Public License, if you
22*00b67f09SDavid van Moolenbroek# distribute this file as part of a program that contains a
23*00b67f09SDavid van Moolenbroek# configuration script generated by Autoconf, you may include it under
24*00b67f09SDavid van Moolenbroek# the same distribution terms that you use for the rest of that program.
25*00b67f09SDavid van Moolenbroek
26*00b67f09SDavid van Moolenbroek# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27*00b67f09SDavid van Moolenbroek
28*00b67f09SDavid van Moolenbroekcase $1 in
29*00b67f09SDavid van Moolenbroek  '')
30*00b67f09SDavid van Moolenbroek     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31*00b67f09SDavid van Moolenbroek     exit 1;
32*00b67f09SDavid van Moolenbroek     ;;
33*00b67f09SDavid van Moolenbroek  -h | --h*)
34*00b67f09SDavid van Moolenbroek    cat <<\EOF
35*00b67f09SDavid van MoolenbroekUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36*00b67f09SDavid van Moolenbroek
37*00b67f09SDavid van MoolenbroekRun PROGRAMS ARGS to compile a file, generating dependencies
38*00b67f09SDavid van Moolenbroekas side-effects.
39*00b67f09SDavid van Moolenbroek
40*00b67f09SDavid van MoolenbroekEnvironment variables:
41*00b67f09SDavid van Moolenbroek  depmode     Dependency tracking mode.
42*00b67f09SDavid van Moolenbroek  source      Source file read by 'PROGRAMS ARGS'.
43*00b67f09SDavid van Moolenbroek  object      Object file output by 'PROGRAMS ARGS'.
44*00b67f09SDavid van Moolenbroek  DEPDIR      directory where to store dependencies.
45*00b67f09SDavid van Moolenbroek  depfile     Dependency file to output.
46*00b67f09SDavid van Moolenbroek  tmpdepfile  Temporary file to use when outputting dependencies.
47*00b67f09SDavid van Moolenbroek  libtool     Whether libtool is used (yes/no).
48*00b67f09SDavid van Moolenbroek
49*00b67f09SDavid van MoolenbroekReport bugs to <bug-automake@gnu.org>.
50*00b67f09SDavid van MoolenbroekEOF
51*00b67f09SDavid van Moolenbroek    exit $?
52*00b67f09SDavid van Moolenbroek    ;;
53*00b67f09SDavid van Moolenbroek  -v | --v*)
54*00b67f09SDavid van Moolenbroek    echo "depcomp $scriptversion"
55*00b67f09SDavid van Moolenbroek    exit $?
56*00b67f09SDavid van Moolenbroek    ;;
57*00b67f09SDavid van Moolenbroekesac
58*00b67f09SDavid van Moolenbroek
59*00b67f09SDavid van Moolenbroek# A tabulation character.
60*00b67f09SDavid van Moolenbroektab='	'
61*00b67f09SDavid van Moolenbroek# A newline character.
62*00b67f09SDavid van Moolenbroeknl='
63*00b67f09SDavid van Moolenbroek'
64*00b67f09SDavid van Moolenbroek
65*00b67f09SDavid van Moolenbroekif test -z "$depmode" || test -z "$source" || test -z "$object"; then
66*00b67f09SDavid van Moolenbroek  echo "depcomp: Variables source, object and depmode must be set" 1>&2
67*00b67f09SDavid van Moolenbroek  exit 1
68*00b67f09SDavid van Moolenbroekfi
69*00b67f09SDavid van Moolenbroek
70*00b67f09SDavid van Moolenbroek# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
71*00b67f09SDavid van Moolenbroekdepfile=${depfile-`echo "$object" |
72*00b67f09SDavid van Moolenbroek  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
73*00b67f09SDavid van Moolenbroektmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
74*00b67f09SDavid van Moolenbroek
75*00b67f09SDavid van Moolenbroekrm -f "$tmpdepfile"
76*00b67f09SDavid van Moolenbroek
77*00b67f09SDavid van Moolenbroek# Some modes work just like other modes, but use different flags.  We
78*00b67f09SDavid van Moolenbroek# parameterize here, but still list the modes in the big case below,
79*00b67f09SDavid van Moolenbroek# to make depend.m4 easier to write.  Note that we *cannot* use a case
80*00b67f09SDavid van Moolenbroek# here, because this file can only contain one case statement.
81*00b67f09SDavid van Moolenbroekif test "$depmode" = hp; then
82*00b67f09SDavid van Moolenbroek  # HP compiler uses -M and no extra arg.
83*00b67f09SDavid van Moolenbroek  gccflag=-M
84*00b67f09SDavid van Moolenbroek  depmode=gcc
85*00b67f09SDavid van Moolenbroekfi
86*00b67f09SDavid van Moolenbroek
87*00b67f09SDavid van Moolenbroekif test "$depmode" = dashXmstdout; then
88*00b67f09SDavid van Moolenbroek   # This is just like dashmstdout with a different argument.
89*00b67f09SDavid van Moolenbroek   dashmflag=-xM
90*00b67f09SDavid van Moolenbroek   depmode=dashmstdout
91*00b67f09SDavid van Moolenbroekfi
92*00b67f09SDavid van Moolenbroek
93*00b67f09SDavid van Moolenbroekcygpath_u="cygpath -u -f -"
94*00b67f09SDavid van Moolenbroekif test "$depmode" = msvcmsys; then
95*00b67f09SDavid van Moolenbroek   # This is just like msvisualcpp but w/o cygpath translation.
96*00b67f09SDavid van Moolenbroek   # Just convert the backslash-escaped backslashes to single forward
97*00b67f09SDavid van Moolenbroek   # slashes to satisfy depend.m4
98*00b67f09SDavid van Moolenbroek   cygpath_u='sed s,\\\\,/,g'
99*00b67f09SDavid van Moolenbroek   depmode=msvisualcpp
100*00b67f09SDavid van Moolenbroekfi
101*00b67f09SDavid van Moolenbroek
102*00b67f09SDavid van Moolenbroekif test "$depmode" = msvc7msys; then
103*00b67f09SDavid van Moolenbroek   # This is just like msvc7 but w/o cygpath translation.
104*00b67f09SDavid van Moolenbroek   # Just convert the backslash-escaped backslashes to single forward
105*00b67f09SDavid van Moolenbroek   # slashes to satisfy depend.m4
106*00b67f09SDavid van Moolenbroek   cygpath_u='sed s,\\\\,/,g'
107*00b67f09SDavid van Moolenbroek   depmode=msvc7
108*00b67f09SDavid van Moolenbroekfi
109*00b67f09SDavid van Moolenbroek
110*00b67f09SDavid van Moolenbroekif test "$depmode" = xlc; then
111*00b67f09SDavid van Moolenbroek   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
112*00b67f09SDavid van Moolenbroek   gccflag=-qmakedep=gcc,-MF
113*00b67f09SDavid van Moolenbroek   depmode=gcc
114*00b67f09SDavid van Moolenbroekfi
115*00b67f09SDavid van Moolenbroek
116*00b67f09SDavid van Moolenbroekcase "$depmode" in
117*00b67f09SDavid van Moolenbroekgcc3)
118*00b67f09SDavid van Moolenbroek## gcc 3 implements dependency tracking that does exactly what
119*00b67f09SDavid van Moolenbroek## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
120*00b67f09SDavid van Moolenbroek## it if -MD -MP comes after the -MF stuff.  Hmm.
121*00b67f09SDavid van Moolenbroek## Unfortunately, FreeBSD c89 acceptance of flags depends upon
122*00b67f09SDavid van Moolenbroek## the command line argument order; so add the flags where they
123*00b67f09SDavid van Moolenbroek## appear in depend2.am.  Note that the slowdown incurred here
124*00b67f09SDavid van Moolenbroek## affects only configure: in makefiles, %FASTDEP% shortcuts this.
125*00b67f09SDavid van Moolenbroek  for arg
126*00b67f09SDavid van Moolenbroek  do
127*00b67f09SDavid van Moolenbroek    case $arg in
128*00b67f09SDavid van Moolenbroek    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
129*00b67f09SDavid van Moolenbroek    *)  set fnord "$@" "$arg" ;;
130*00b67f09SDavid van Moolenbroek    esac
131*00b67f09SDavid van Moolenbroek    shift # fnord
132*00b67f09SDavid van Moolenbroek    shift # $arg
133*00b67f09SDavid van Moolenbroek  done
134*00b67f09SDavid van Moolenbroek  "$@"
135*00b67f09SDavid van Moolenbroek  stat=$?
136*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
137*00b67f09SDavid van Moolenbroek  else
138*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile"
139*00b67f09SDavid van Moolenbroek    exit $stat
140*00b67f09SDavid van Moolenbroek  fi
141*00b67f09SDavid van Moolenbroek  mv "$tmpdepfile" "$depfile"
142*00b67f09SDavid van Moolenbroek  ;;
143*00b67f09SDavid van Moolenbroek
144*00b67f09SDavid van Moolenbroekgcc)
145*00b67f09SDavid van Moolenbroek## There are various ways to get dependency output from gcc.  Here's
146*00b67f09SDavid van Moolenbroek## why we pick this rather obscure method:
147*00b67f09SDavid van Moolenbroek## - Don't want to use -MD because we'd like the dependencies to end
148*00b67f09SDavid van Moolenbroek##   up in a subdir.  Having to rename by hand is ugly.
149*00b67f09SDavid van Moolenbroek##   (We might end up doing this anyway to support other compilers.)
150*00b67f09SDavid van Moolenbroek## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
151*00b67f09SDavid van Moolenbroek##   -MM, not -M (despite what the docs say).
152*00b67f09SDavid van Moolenbroek## - Using -M directly means running the compiler twice (even worse
153*00b67f09SDavid van Moolenbroek##   than renaming).
154*00b67f09SDavid van Moolenbroek  if test -z "$gccflag"; then
155*00b67f09SDavid van Moolenbroek    gccflag=-MD,
156*00b67f09SDavid van Moolenbroek  fi
157*00b67f09SDavid van Moolenbroek  "$@" -Wp,"$gccflag$tmpdepfile"
158*00b67f09SDavid van Moolenbroek  stat=$?
159*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
160*00b67f09SDavid van Moolenbroek  else
161*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile"
162*00b67f09SDavid van Moolenbroek    exit $stat
163*00b67f09SDavid van Moolenbroek  fi
164*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
165*00b67f09SDavid van Moolenbroek  echo "$object : \\" > "$depfile"
166*00b67f09SDavid van Moolenbroek  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
167*00b67f09SDavid van Moolenbroek## The second -e expression handles DOS-style file names with drive letters.
168*00b67f09SDavid van Moolenbroek  sed -e 's/^[^:]*: / /' \
169*00b67f09SDavid van Moolenbroek      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
170*00b67f09SDavid van Moolenbroek## This next piece of magic avoids the "deleted header file" problem.
171*00b67f09SDavid van Moolenbroek## The problem is that when a header file which appears in a .P file
172*00b67f09SDavid van Moolenbroek## is deleted, the dependency causes make to die (because there is
173*00b67f09SDavid van Moolenbroek## typically no way to rebuild the header).  We avoid this by adding
174*00b67f09SDavid van Moolenbroek## dummy dependencies for each header file.  Too bad gcc doesn't do
175*00b67f09SDavid van Moolenbroek## this for us directly.
176*00b67f09SDavid van Moolenbroek  tr ' ' "$nl" < "$tmpdepfile" |
177*00b67f09SDavid van Moolenbroek## Some versions of gcc put a space before the ':'.  On the theory
178*00b67f09SDavid van Moolenbroek## that the space means something, we add a space to the output as
179*00b67f09SDavid van Moolenbroek## well.  hp depmode also adds that space, but also prefixes the VPATH
180*00b67f09SDavid van Moolenbroek## to the object.  Take care to not repeat it in the output.
181*00b67f09SDavid van Moolenbroek## Some versions of the HPUX 10.20 sed can't process this invocation
182*00b67f09SDavid van Moolenbroek## correctly.  Breaking it into two sed invocations is a workaround.
183*00b67f09SDavid van Moolenbroek    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
184*00b67f09SDavid van Moolenbroek      | sed -e 's/$/ :/' >> "$depfile"
185*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
186*00b67f09SDavid van Moolenbroek  ;;
187*00b67f09SDavid van Moolenbroek
188*00b67f09SDavid van Moolenbroekhp)
189*00b67f09SDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
190*00b67f09SDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
191*00b67f09SDavid van Moolenbroek  # since it is checked for above.
192*00b67f09SDavid van Moolenbroek  exit 1
193*00b67f09SDavid van Moolenbroek  ;;
194*00b67f09SDavid van Moolenbroek
195*00b67f09SDavid van Moolenbroeksgi)
196*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
197*00b67f09SDavid van Moolenbroek    "$@" "-Wp,-MDupdate,$tmpdepfile"
198*00b67f09SDavid van Moolenbroek  else
199*00b67f09SDavid van Moolenbroek    "$@" -MDupdate "$tmpdepfile"
200*00b67f09SDavid van Moolenbroek  fi
201*00b67f09SDavid van Moolenbroek  stat=$?
202*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
203*00b67f09SDavid van Moolenbroek  else
204*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile"
205*00b67f09SDavid van Moolenbroek    exit $stat
206*00b67f09SDavid van Moolenbroek  fi
207*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
208*00b67f09SDavid van Moolenbroek
209*00b67f09SDavid van Moolenbroek  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
210*00b67f09SDavid van Moolenbroek    echo "$object : \\" > "$depfile"
211*00b67f09SDavid van Moolenbroek
212*00b67f09SDavid van Moolenbroek    # Clip off the initial element (the dependent).  Don't try to be
213*00b67f09SDavid van Moolenbroek    # clever and replace this with sed code, as IRIX sed won't handle
214*00b67f09SDavid van Moolenbroek    # lines with more than a fixed number of characters (4096 in
215*00b67f09SDavid van Moolenbroek    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
216*00b67f09SDavid van Moolenbroek    # the IRIX cc adds comments like '#:fec' to the end of the
217*00b67f09SDavid van Moolenbroek    # dependency line.
218*00b67f09SDavid van Moolenbroek    tr ' ' "$nl" < "$tmpdepfile" \
219*00b67f09SDavid van Moolenbroek    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
220*00b67f09SDavid van Moolenbroek    tr "$nl" ' ' >> "$depfile"
221*00b67f09SDavid van Moolenbroek    echo >> "$depfile"
222*00b67f09SDavid van Moolenbroek
223*00b67f09SDavid van Moolenbroek    # The second pass generates a dummy entry for each header file.
224*00b67f09SDavid van Moolenbroek    tr ' ' "$nl" < "$tmpdepfile" \
225*00b67f09SDavid van Moolenbroek   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
226*00b67f09SDavid van Moolenbroek   >> "$depfile"
227*00b67f09SDavid van Moolenbroek  else
228*00b67f09SDavid van Moolenbroek    # The sourcefile does not contain any dependencies, so just
229*00b67f09SDavid van Moolenbroek    # store a dummy comment line, to avoid errors with the Makefile
230*00b67f09SDavid van Moolenbroek    # "include basename.Plo" scheme.
231*00b67f09SDavid van Moolenbroek    echo "#dummy" > "$depfile"
232*00b67f09SDavid van Moolenbroek  fi
233*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
234*00b67f09SDavid van Moolenbroek  ;;
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroekxlc)
237*00b67f09SDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
238*00b67f09SDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
239*00b67f09SDavid van Moolenbroek  # since it is checked for above.
240*00b67f09SDavid van Moolenbroek  exit 1
241*00b67f09SDavid van Moolenbroek  ;;
242*00b67f09SDavid van Moolenbroek
243*00b67f09SDavid van Moolenbroekaix)
244*00b67f09SDavid van Moolenbroek  # The C for AIX Compiler uses -M and outputs the dependencies
245*00b67f09SDavid van Moolenbroek  # in a .u file.  In older versions, this file always lives in the
246*00b67f09SDavid van Moolenbroek  # current directory.  Also, the AIX compiler puts '$object:' at the
247*00b67f09SDavid van Moolenbroek  # start of each line; $object doesn't have directory information.
248*00b67f09SDavid van Moolenbroek  # Version 6 uses the directory in both cases.
249*00b67f09SDavid van Moolenbroek  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
250*00b67f09SDavid van Moolenbroek  test "x$dir" = "x$object" && dir=
251*00b67f09SDavid van Moolenbroek  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
252*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
253*00b67f09SDavid van Moolenbroek    tmpdepfile1=$dir$base.u
254*00b67f09SDavid van Moolenbroek    tmpdepfile2=$base.u
255*00b67f09SDavid van Moolenbroek    tmpdepfile3=$dir.libs/$base.u
256*00b67f09SDavid van Moolenbroek    "$@" -Wc,-M
257*00b67f09SDavid van Moolenbroek  else
258*00b67f09SDavid van Moolenbroek    tmpdepfile1=$dir$base.u
259*00b67f09SDavid van Moolenbroek    tmpdepfile2=$dir$base.u
260*00b67f09SDavid van Moolenbroek    tmpdepfile3=$dir$base.u
261*00b67f09SDavid van Moolenbroek    "$@" -M
262*00b67f09SDavid van Moolenbroek  fi
263*00b67f09SDavid van Moolenbroek  stat=$?
264*00b67f09SDavid van Moolenbroek
265*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
266*00b67f09SDavid van Moolenbroek  else
267*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
268*00b67f09SDavid van Moolenbroek    exit $stat
269*00b67f09SDavid van Moolenbroek  fi
270*00b67f09SDavid van Moolenbroek
271*00b67f09SDavid van Moolenbroek  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
272*00b67f09SDavid van Moolenbroek  do
273*00b67f09SDavid van Moolenbroek    test -f "$tmpdepfile" && break
274*00b67f09SDavid van Moolenbroek  done
275*00b67f09SDavid van Moolenbroek  if test -f "$tmpdepfile"; then
276*00b67f09SDavid van Moolenbroek    # Each line is of the form 'foo.o: dependent.h'.
277*00b67f09SDavid van Moolenbroek    # Do two passes, one to just change these to
278*00b67f09SDavid van Moolenbroek    # '$object: dependent.h' and one to simply 'dependent.h:'.
279*00b67f09SDavid van Moolenbroek    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
280*00b67f09SDavid van Moolenbroek    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
281*00b67f09SDavid van Moolenbroek  else
282*00b67f09SDavid van Moolenbroek    # The sourcefile does not contain any dependencies, so just
283*00b67f09SDavid van Moolenbroek    # store a dummy comment line, to avoid errors with the Makefile
284*00b67f09SDavid van Moolenbroek    # "include basename.Plo" scheme.
285*00b67f09SDavid van Moolenbroek    echo "#dummy" > "$depfile"
286*00b67f09SDavid van Moolenbroek  fi
287*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
288*00b67f09SDavid van Moolenbroek  ;;
289*00b67f09SDavid van Moolenbroek
290*00b67f09SDavid van Moolenbroekicc)
291*00b67f09SDavid van Moolenbroek  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
292*00b67f09SDavid van Moolenbroek  # However on
293*00b67f09SDavid van Moolenbroek  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
294*00b67f09SDavid van Moolenbroek  # ICC 7.0 will fill foo.d with something like
295*00b67f09SDavid van Moolenbroek  #    foo.o: sub/foo.c
296*00b67f09SDavid van Moolenbroek  #    foo.o: sub/foo.h
297*00b67f09SDavid van Moolenbroek  # which is wrong.  We want
298*00b67f09SDavid van Moolenbroek  #    sub/foo.o: sub/foo.c
299*00b67f09SDavid van Moolenbroek  #    sub/foo.o: sub/foo.h
300*00b67f09SDavid van Moolenbroek  #    sub/foo.c:
301*00b67f09SDavid van Moolenbroek  #    sub/foo.h:
302*00b67f09SDavid van Moolenbroek  # ICC 7.1 will output
303*00b67f09SDavid van Moolenbroek  #    foo.o: sub/foo.c sub/foo.h
304*00b67f09SDavid van Moolenbroek  # and will wrap long lines using '\':
305*00b67f09SDavid van Moolenbroek  #    foo.o: sub/foo.c ... \
306*00b67f09SDavid van Moolenbroek  #     sub/foo.h ... \
307*00b67f09SDavid van Moolenbroek  #     ...
308*00b67f09SDavid van Moolenbroek  # tcc 0.9.26 (FIXME still under development at the moment of writing)
309*00b67f09SDavid van Moolenbroek  # will emit a similar output, but also prepend the continuation lines
310*00b67f09SDavid van Moolenbroek  # with horizontal tabulation characters.
311*00b67f09SDavid van Moolenbroek  "$@" -MD -MF "$tmpdepfile"
312*00b67f09SDavid van Moolenbroek  stat=$?
313*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
314*00b67f09SDavid van Moolenbroek  else
315*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile"
316*00b67f09SDavid van Moolenbroek    exit $stat
317*00b67f09SDavid van Moolenbroek  fi
318*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
319*00b67f09SDavid van Moolenbroek  # Each line is of the form 'foo.o: dependent.h',
320*00b67f09SDavid van Moolenbroek  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
321*00b67f09SDavid van Moolenbroek  # Do two passes, one to just change these to
322*00b67f09SDavid van Moolenbroek  # '$object: dependent.h' and one to simply 'dependent.h:'.
323*00b67f09SDavid van Moolenbroek  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
324*00b67f09SDavid van Moolenbroek    < "$tmpdepfile" > "$depfile"
325*00b67f09SDavid van Moolenbroek  sed '
326*00b67f09SDavid van Moolenbroek    s/[ '"$tab"'][ '"$tab"']*/ /g
327*00b67f09SDavid van Moolenbroek    s/^ *//
328*00b67f09SDavid van Moolenbroek    s/ *\\*$//
329*00b67f09SDavid van Moolenbroek    s/^[^:]*: *//
330*00b67f09SDavid van Moolenbroek    /^$/d
331*00b67f09SDavid van Moolenbroek    /:$/d
332*00b67f09SDavid van Moolenbroek    s/$/ :/
333*00b67f09SDavid van Moolenbroek  ' < "$tmpdepfile" >> "$depfile"
334*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
335*00b67f09SDavid van Moolenbroek  ;;
336*00b67f09SDavid van Moolenbroek
337*00b67f09SDavid van Moolenbroekhp2)
338*00b67f09SDavid van Moolenbroek  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
339*00b67f09SDavid van Moolenbroek  # compilers, which have integrated preprocessors.  The correct option
340*00b67f09SDavid van Moolenbroek  # to use with these is +Maked; it writes dependencies to a file named
341*00b67f09SDavid van Moolenbroek  # 'foo.d', which lands next to the object file, wherever that
342*00b67f09SDavid van Moolenbroek  # happens to be.
343*00b67f09SDavid van Moolenbroek  # Much of this is similar to the tru64 case; see comments there.
344*00b67f09SDavid van Moolenbroek  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345*00b67f09SDavid van Moolenbroek  test "x$dir" = "x$object" && dir=
346*00b67f09SDavid van Moolenbroek  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
348*00b67f09SDavid van Moolenbroek    tmpdepfile1=$dir$base.d
349*00b67f09SDavid van Moolenbroek    tmpdepfile2=$dir.libs/$base.d
350*00b67f09SDavid van Moolenbroek    "$@" -Wc,+Maked
351*00b67f09SDavid van Moolenbroek  else
352*00b67f09SDavid van Moolenbroek    tmpdepfile1=$dir$base.d
353*00b67f09SDavid van Moolenbroek    tmpdepfile2=$dir$base.d
354*00b67f09SDavid van Moolenbroek    "$@" +Maked
355*00b67f09SDavid van Moolenbroek  fi
356*00b67f09SDavid van Moolenbroek  stat=$?
357*00b67f09SDavid van Moolenbroek  if test $stat -eq 0; then :
358*00b67f09SDavid van Moolenbroek  else
359*00b67f09SDavid van Moolenbroek     rm -f "$tmpdepfile1" "$tmpdepfile2"
360*00b67f09SDavid van Moolenbroek     exit $stat
361*00b67f09SDavid van Moolenbroek  fi
362*00b67f09SDavid van Moolenbroek
363*00b67f09SDavid van Moolenbroek  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
364*00b67f09SDavid van Moolenbroek  do
365*00b67f09SDavid van Moolenbroek    test -f "$tmpdepfile" && break
366*00b67f09SDavid van Moolenbroek  done
367*00b67f09SDavid van Moolenbroek  if test -f "$tmpdepfile"; then
368*00b67f09SDavid van Moolenbroek    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
369*00b67f09SDavid van Moolenbroek    # Add 'dependent.h:' lines.
370*00b67f09SDavid van Moolenbroek    sed -ne '2,${
371*00b67f09SDavid van Moolenbroek	       s/^ *//
372*00b67f09SDavid van Moolenbroek	       s/ \\*$//
373*00b67f09SDavid van Moolenbroek	       s/$/:/
374*00b67f09SDavid van Moolenbroek	       p
375*00b67f09SDavid van Moolenbroek	     }' "$tmpdepfile" >> "$depfile"
376*00b67f09SDavid van Moolenbroek  else
377*00b67f09SDavid van Moolenbroek    echo "#dummy" > "$depfile"
378*00b67f09SDavid van Moolenbroek  fi
379*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile" "$tmpdepfile2"
380*00b67f09SDavid van Moolenbroek  ;;
381*00b67f09SDavid van Moolenbroek
382*00b67f09SDavid van Moolenbroektru64)
383*00b67f09SDavid van Moolenbroek   # The Tru64 compiler uses -MD to generate dependencies as a side
384*00b67f09SDavid van Moolenbroek   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
385*00b67f09SDavid van Moolenbroek   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
386*00b67f09SDavid van Moolenbroek   # dependencies in 'foo.d' instead, so we check for that too.
387*00b67f09SDavid van Moolenbroek   # Subdirectories are respected.
388*00b67f09SDavid van Moolenbroek   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
389*00b67f09SDavid van Moolenbroek   test "x$dir" = "x$object" && dir=
390*00b67f09SDavid van Moolenbroek   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
391*00b67f09SDavid van Moolenbroek
392*00b67f09SDavid van Moolenbroek   if test "$libtool" = yes; then
393*00b67f09SDavid van Moolenbroek      # With Tru64 cc, shared objects can also be used to make a
394*00b67f09SDavid van Moolenbroek      # static library.  This mechanism is used in libtool 1.4 series to
395*00b67f09SDavid van Moolenbroek      # handle both shared and static libraries in a single compilation.
396*00b67f09SDavid van Moolenbroek      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
397*00b67f09SDavid van Moolenbroek      #
398*00b67f09SDavid van Moolenbroek      # With libtool 1.5 this exception was removed, and libtool now
399*00b67f09SDavid van Moolenbroek      # generates 2 separate objects for the 2 libraries.  These two
400*00b67f09SDavid van Moolenbroek      # compilations output dependencies in $dir.libs/$base.o.d and
401*00b67f09SDavid van Moolenbroek      # in $dir$base.o.d.  We have to check for both files, because
402*00b67f09SDavid van Moolenbroek      # one of the two compilations can be disabled.  We should prefer
403*00b67f09SDavid van Moolenbroek      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
404*00b67f09SDavid van Moolenbroek      # automatically cleaned when .libs/ is deleted, while ignoring
405*00b67f09SDavid van Moolenbroek      # the former would cause a distcleancheck panic.
406*00b67f09SDavid van Moolenbroek      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
407*00b67f09SDavid van Moolenbroek      tmpdepfile2=$dir$base.o.d          # libtool 1.5
408*00b67f09SDavid van Moolenbroek      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
409*00b67f09SDavid van Moolenbroek      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
410*00b67f09SDavid van Moolenbroek      "$@" -Wc,-MD
411*00b67f09SDavid van Moolenbroek   else
412*00b67f09SDavid van Moolenbroek      tmpdepfile1=$dir$base.o.d
413*00b67f09SDavid van Moolenbroek      tmpdepfile2=$dir$base.d
414*00b67f09SDavid van Moolenbroek      tmpdepfile3=$dir$base.d
415*00b67f09SDavid van Moolenbroek      tmpdepfile4=$dir$base.d
416*00b67f09SDavid van Moolenbroek      "$@" -MD
417*00b67f09SDavid van Moolenbroek   fi
418*00b67f09SDavid van Moolenbroek
419*00b67f09SDavid van Moolenbroek   stat=$?
420*00b67f09SDavid van Moolenbroek   if test $stat -eq 0; then :
421*00b67f09SDavid van Moolenbroek   else
422*00b67f09SDavid van Moolenbroek      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
423*00b67f09SDavid van Moolenbroek      exit $stat
424*00b67f09SDavid van Moolenbroek   fi
425*00b67f09SDavid van Moolenbroek
426*00b67f09SDavid van Moolenbroek   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
427*00b67f09SDavid van Moolenbroek   do
428*00b67f09SDavid van Moolenbroek     test -f "$tmpdepfile" && break
429*00b67f09SDavid van Moolenbroek   done
430*00b67f09SDavid van Moolenbroek   if test -f "$tmpdepfile"; then
431*00b67f09SDavid van Moolenbroek      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
432*00b67f09SDavid van Moolenbroek      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
433*00b67f09SDavid van Moolenbroek   else
434*00b67f09SDavid van Moolenbroek      echo "#dummy" > "$depfile"
435*00b67f09SDavid van Moolenbroek   fi
436*00b67f09SDavid van Moolenbroek   rm -f "$tmpdepfile"
437*00b67f09SDavid van Moolenbroek   ;;
438*00b67f09SDavid van Moolenbroek
439*00b67f09SDavid van Moolenbroekmsvc7)
440*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
441*00b67f09SDavid van Moolenbroek    showIncludes=-Wc,-showIncludes
442*00b67f09SDavid van Moolenbroek  else
443*00b67f09SDavid van Moolenbroek    showIncludes=-showIncludes
444*00b67f09SDavid van Moolenbroek  fi
445*00b67f09SDavid van Moolenbroek  "$@" $showIncludes > "$tmpdepfile"
446*00b67f09SDavid van Moolenbroek  stat=$?
447*00b67f09SDavid van Moolenbroek  grep -v '^Note: including file: ' "$tmpdepfile"
448*00b67f09SDavid van Moolenbroek  if test "$stat" = 0; then :
449*00b67f09SDavid van Moolenbroek  else
450*00b67f09SDavid van Moolenbroek    rm -f "$tmpdepfile"
451*00b67f09SDavid van Moolenbroek    exit $stat
452*00b67f09SDavid van Moolenbroek  fi
453*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
454*00b67f09SDavid van Moolenbroek  echo "$object : \\" > "$depfile"
455*00b67f09SDavid van Moolenbroek  # The first sed program below extracts the file names and escapes
456*00b67f09SDavid van Moolenbroek  # backslashes for cygpath.  The second sed program outputs the file
457*00b67f09SDavid van Moolenbroek  # name when reading, but also accumulates all include files in the
458*00b67f09SDavid van Moolenbroek  # hold buffer in order to output them again at the end.  This only
459*00b67f09SDavid van Moolenbroek  # works with sed implementations that can handle large buffers.
460*00b67f09SDavid van Moolenbroek  sed < "$tmpdepfile" -n '
461*00b67f09SDavid van Moolenbroek/^Note: including file:  *\(.*\)/ {
462*00b67f09SDavid van Moolenbroek  s//\1/
463*00b67f09SDavid van Moolenbroek  s/\\/\\\\/g
464*00b67f09SDavid van Moolenbroek  p
465*00b67f09SDavid van Moolenbroek}' | $cygpath_u | sort -u | sed -n '
466*00b67f09SDavid van Moolenbroeks/ /\\ /g
467*00b67f09SDavid van Moolenbroeks/\(.*\)/'"$tab"'\1 \\/p
468*00b67f09SDavid van Moolenbroeks/.\(.*\) \\/\1:/
469*00b67f09SDavid van MoolenbroekH
470*00b67f09SDavid van Moolenbroek$ {
471*00b67f09SDavid van Moolenbroek  s/.*/'"$tab"'/
472*00b67f09SDavid van Moolenbroek  G
473*00b67f09SDavid van Moolenbroek  p
474*00b67f09SDavid van Moolenbroek}' >> "$depfile"
475*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
476*00b67f09SDavid van Moolenbroek  ;;
477*00b67f09SDavid van Moolenbroek
478*00b67f09SDavid van Moolenbroekmsvc7msys)
479*00b67f09SDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
480*00b67f09SDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
481*00b67f09SDavid van Moolenbroek  # since it is checked for above.
482*00b67f09SDavid van Moolenbroek  exit 1
483*00b67f09SDavid van Moolenbroek  ;;
484*00b67f09SDavid van Moolenbroek
485*00b67f09SDavid van Moolenbroek#nosideeffect)
486*00b67f09SDavid van Moolenbroek  # This comment above is used by automake to tell side-effect
487*00b67f09SDavid van Moolenbroek  # dependency tracking mechanisms from slower ones.
488*00b67f09SDavid van Moolenbroek
489*00b67f09SDavid van Moolenbroekdashmstdout)
490*00b67f09SDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
491*00b67f09SDavid van Moolenbroek  # always write the preprocessed file to stdout, regardless of -o.
492*00b67f09SDavid van Moolenbroek  "$@" || exit $?
493*00b67f09SDavid van Moolenbroek
494*00b67f09SDavid van Moolenbroek  # Remove the call to Libtool.
495*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
496*00b67f09SDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
497*00b67f09SDavid van Moolenbroek      shift
498*00b67f09SDavid van Moolenbroek    done
499*00b67f09SDavid van Moolenbroek    shift
500*00b67f09SDavid van Moolenbroek  fi
501*00b67f09SDavid van Moolenbroek
502*00b67f09SDavid van Moolenbroek  # Remove '-o $object'.
503*00b67f09SDavid van Moolenbroek  IFS=" "
504*00b67f09SDavid van Moolenbroek  for arg
505*00b67f09SDavid van Moolenbroek  do
506*00b67f09SDavid van Moolenbroek    case $arg in
507*00b67f09SDavid van Moolenbroek    -o)
508*00b67f09SDavid van Moolenbroek      shift
509*00b67f09SDavid van Moolenbroek      ;;
510*00b67f09SDavid van Moolenbroek    $object)
511*00b67f09SDavid van Moolenbroek      shift
512*00b67f09SDavid van Moolenbroek      ;;
513*00b67f09SDavid van Moolenbroek    *)
514*00b67f09SDavid van Moolenbroek      set fnord "$@" "$arg"
515*00b67f09SDavid van Moolenbroek      shift # fnord
516*00b67f09SDavid van Moolenbroek      shift # $arg
517*00b67f09SDavid van Moolenbroek      ;;
518*00b67f09SDavid van Moolenbroek    esac
519*00b67f09SDavid van Moolenbroek  done
520*00b67f09SDavid van Moolenbroek
521*00b67f09SDavid van Moolenbroek  test -z "$dashmflag" && dashmflag=-M
522*00b67f09SDavid van Moolenbroek  # Require at least two characters before searching for ':'
523*00b67f09SDavid van Moolenbroek  # in the target name.  This is to cope with DOS-style filenames:
524*00b67f09SDavid van Moolenbroek  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
525*00b67f09SDavid van Moolenbroek  "$@" $dashmflag |
526*00b67f09SDavid van Moolenbroek    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
527*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
528*00b67f09SDavid van Moolenbroek  cat < "$tmpdepfile" > "$depfile"
529*00b67f09SDavid van Moolenbroek  tr ' ' "$nl" < "$tmpdepfile" | \
530*00b67f09SDavid van Moolenbroek## Some versions of the HPUX 10.20 sed can't process this invocation
531*00b67f09SDavid van Moolenbroek## correctly.  Breaking it into two sed invocations is a workaround.
532*00b67f09SDavid van Moolenbroek    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
533*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
534*00b67f09SDavid van Moolenbroek  ;;
535*00b67f09SDavid van Moolenbroek
536*00b67f09SDavid van MoolenbroekdashXmstdout)
537*00b67f09SDavid van Moolenbroek  # This case only exists to satisfy depend.m4.  It is never actually
538*00b67f09SDavid van Moolenbroek  # run, as this mode is specially recognized in the preamble.
539*00b67f09SDavid van Moolenbroek  exit 1
540*00b67f09SDavid van Moolenbroek  ;;
541*00b67f09SDavid van Moolenbroek
542*00b67f09SDavid van Moolenbroekmakedepend)
543*00b67f09SDavid van Moolenbroek  "$@" || exit $?
544*00b67f09SDavid van Moolenbroek  # Remove any Libtool call
545*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
546*00b67f09SDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
547*00b67f09SDavid van Moolenbroek      shift
548*00b67f09SDavid van Moolenbroek    done
549*00b67f09SDavid van Moolenbroek    shift
550*00b67f09SDavid van Moolenbroek  fi
551*00b67f09SDavid van Moolenbroek  # X makedepend
552*00b67f09SDavid van Moolenbroek  shift
553*00b67f09SDavid van Moolenbroek  cleared=no eat=no
554*00b67f09SDavid van Moolenbroek  for arg
555*00b67f09SDavid van Moolenbroek  do
556*00b67f09SDavid van Moolenbroek    case $cleared in
557*00b67f09SDavid van Moolenbroek    no)
558*00b67f09SDavid van Moolenbroek      set ""; shift
559*00b67f09SDavid van Moolenbroek      cleared=yes ;;
560*00b67f09SDavid van Moolenbroek    esac
561*00b67f09SDavid van Moolenbroek    if test $eat = yes; then
562*00b67f09SDavid van Moolenbroek      eat=no
563*00b67f09SDavid van Moolenbroek      continue
564*00b67f09SDavid van Moolenbroek    fi
565*00b67f09SDavid van Moolenbroek    case "$arg" in
566*00b67f09SDavid van Moolenbroek    -D*|-I*)
567*00b67f09SDavid van Moolenbroek      set fnord "$@" "$arg"; shift ;;
568*00b67f09SDavid van Moolenbroek    # Strip any option that makedepend may not understand.  Remove
569*00b67f09SDavid van Moolenbroek    # the object too, otherwise makedepend will parse it as a source file.
570*00b67f09SDavid van Moolenbroek    -arch)
571*00b67f09SDavid van Moolenbroek      eat=yes ;;
572*00b67f09SDavid van Moolenbroek    -*|$object)
573*00b67f09SDavid van Moolenbroek      ;;
574*00b67f09SDavid van Moolenbroek    *)
575*00b67f09SDavid van Moolenbroek      set fnord "$@" "$arg"; shift ;;
576*00b67f09SDavid van Moolenbroek    esac
577*00b67f09SDavid van Moolenbroek  done
578*00b67f09SDavid van Moolenbroek  obj_suffix=`echo "$object" | sed 's/^.*\././'`
579*00b67f09SDavid van Moolenbroek  touch "$tmpdepfile"
580*00b67f09SDavid van Moolenbroek  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
581*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
582*00b67f09SDavid van Moolenbroek  # makedepend may prepend the VPATH from the source file name to the object.
583*00b67f09SDavid van Moolenbroek  # No need to regex-escape $object, excess matching of '.' is harmless.
584*00b67f09SDavid van Moolenbroek  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
585*00b67f09SDavid van Moolenbroek  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
586*00b67f09SDavid van Moolenbroek## Some versions of the HPUX 10.20 sed can't process this invocation
587*00b67f09SDavid van Moolenbroek## correctly.  Breaking it into two sed invocations is a workaround.
588*00b67f09SDavid van Moolenbroek    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
589*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile" "$tmpdepfile".bak
590*00b67f09SDavid van Moolenbroek  ;;
591*00b67f09SDavid van Moolenbroek
592*00b67f09SDavid van Moolenbroekcpp)
593*00b67f09SDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
594*00b67f09SDavid van Moolenbroek  # always write the preprocessed file to stdout.
595*00b67f09SDavid van Moolenbroek  "$@" || exit $?
596*00b67f09SDavid van Moolenbroek
597*00b67f09SDavid van Moolenbroek  # Remove the call to Libtool.
598*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
599*00b67f09SDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
600*00b67f09SDavid van Moolenbroek      shift
601*00b67f09SDavid van Moolenbroek    done
602*00b67f09SDavid van Moolenbroek    shift
603*00b67f09SDavid van Moolenbroek  fi
604*00b67f09SDavid van Moolenbroek
605*00b67f09SDavid van Moolenbroek  # Remove '-o $object'.
606*00b67f09SDavid van Moolenbroek  IFS=" "
607*00b67f09SDavid van Moolenbroek  for arg
608*00b67f09SDavid van Moolenbroek  do
609*00b67f09SDavid van Moolenbroek    case $arg in
610*00b67f09SDavid van Moolenbroek    -o)
611*00b67f09SDavid van Moolenbroek      shift
612*00b67f09SDavid van Moolenbroek      ;;
613*00b67f09SDavid van Moolenbroek    $object)
614*00b67f09SDavid van Moolenbroek      shift
615*00b67f09SDavid van Moolenbroek      ;;
616*00b67f09SDavid van Moolenbroek    *)
617*00b67f09SDavid van Moolenbroek      set fnord "$@" "$arg"
618*00b67f09SDavid van Moolenbroek      shift # fnord
619*00b67f09SDavid van Moolenbroek      shift # $arg
620*00b67f09SDavid van Moolenbroek      ;;
621*00b67f09SDavid van Moolenbroek    esac
622*00b67f09SDavid van Moolenbroek  done
623*00b67f09SDavid van Moolenbroek
624*00b67f09SDavid van Moolenbroek  "$@" -E |
625*00b67f09SDavid van Moolenbroek    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
626*00b67f09SDavid van Moolenbroek       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
627*00b67f09SDavid van Moolenbroek    sed '$ s: \\$::' > "$tmpdepfile"
628*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
629*00b67f09SDavid van Moolenbroek  echo "$object : \\" > "$depfile"
630*00b67f09SDavid van Moolenbroek  cat < "$tmpdepfile" >> "$depfile"
631*00b67f09SDavid van Moolenbroek  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
632*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
633*00b67f09SDavid van Moolenbroek  ;;
634*00b67f09SDavid van Moolenbroek
635*00b67f09SDavid van Moolenbroekmsvisualcpp)
636*00b67f09SDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
637*00b67f09SDavid van Moolenbroek  # always write the preprocessed file to stdout.
638*00b67f09SDavid van Moolenbroek  "$@" || exit $?
639*00b67f09SDavid van Moolenbroek
640*00b67f09SDavid van Moolenbroek  # Remove the call to Libtool.
641*00b67f09SDavid van Moolenbroek  if test "$libtool" = yes; then
642*00b67f09SDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
643*00b67f09SDavid van Moolenbroek      shift
644*00b67f09SDavid van Moolenbroek    done
645*00b67f09SDavid van Moolenbroek    shift
646*00b67f09SDavid van Moolenbroek  fi
647*00b67f09SDavid van Moolenbroek
648*00b67f09SDavid van Moolenbroek  IFS=" "
649*00b67f09SDavid van Moolenbroek  for arg
650*00b67f09SDavid van Moolenbroek  do
651*00b67f09SDavid van Moolenbroek    case "$arg" in
652*00b67f09SDavid van Moolenbroek    -o)
653*00b67f09SDavid van Moolenbroek      shift
654*00b67f09SDavid van Moolenbroek      ;;
655*00b67f09SDavid van Moolenbroek    $object)
656*00b67f09SDavid van Moolenbroek      shift
657*00b67f09SDavid van Moolenbroek      ;;
658*00b67f09SDavid van Moolenbroek    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
659*00b67f09SDavid van Moolenbroek	set fnord "$@"
660*00b67f09SDavid van Moolenbroek	shift
661*00b67f09SDavid van Moolenbroek	shift
662*00b67f09SDavid van Moolenbroek	;;
663*00b67f09SDavid van Moolenbroek    *)
664*00b67f09SDavid van Moolenbroek	set fnord "$@" "$arg"
665*00b67f09SDavid van Moolenbroek	shift
666*00b67f09SDavid van Moolenbroek	shift
667*00b67f09SDavid van Moolenbroek	;;
668*00b67f09SDavid van Moolenbroek    esac
669*00b67f09SDavid van Moolenbroek  done
670*00b67f09SDavid van Moolenbroek  "$@" -E 2>/dev/null |
671*00b67f09SDavid van Moolenbroek  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
672*00b67f09SDavid van Moolenbroek  rm -f "$depfile"
673*00b67f09SDavid van Moolenbroek  echo "$object : \\" > "$depfile"
674*00b67f09SDavid van Moolenbroek  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
675*00b67f09SDavid van Moolenbroek  echo "$tab" >> "$depfile"
676*00b67f09SDavid van Moolenbroek  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
677*00b67f09SDavid van Moolenbroek  rm -f "$tmpdepfile"
678*00b67f09SDavid van Moolenbroek  ;;
679*00b67f09SDavid van Moolenbroek
680*00b67f09SDavid van Moolenbroekmsvcmsys)
681*00b67f09SDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
682*00b67f09SDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
683*00b67f09SDavid van Moolenbroek  # since it is checked for above.
684*00b67f09SDavid van Moolenbroek  exit 1
685*00b67f09SDavid van Moolenbroek  ;;
686*00b67f09SDavid van Moolenbroek
687*00b67f09SDavid van Moolenbroeknone)
688*00b67f09SDavid van Moolenbroek  exec "$@"
689*00b67f09SDavid van Moolenbroek  ;;
690*00b67f09SDavid van Moolenbroek
691*00b67f09SDavid van Moolenbroek*)
692*00b67f09SDavid van Moolenbroek  echo "Unknown depmode $depmode" 1>&2
693*00b67f09SDavid van Moolenbroek  exit 1
694*00b67f09SDavid van Moolenbroek  ;;
695*00b67f09SDavid van Moolenbroekesac
696*00b67f09SDavid van Moolenbroek
697*00b67f09SDavid van Moolenbroekexit 0
698*00b67f09SDavid van Moolenbroek
699*00b67f09SDavid van Moolenbroek# Local Variables:
700*00b67f09SDavid van Moolenbroek# mode: shell-script
701*00b67f09SDavid van Moolenbroek# sh-indentation: 2
702*00b67f09SDavid van Moolenbroek# eval: (add-hook 'write-file-hooks 'time-stamp)
703*00b67f09SDavid van Moolenbroek# time-stamp-start: "scriptversion="
704*00b67f09SDavid van Moolenbroek# time-stamp-format: "%:y-%02m-%02d.%02H"
705*00b67f09SDavid van Moolenbroek# time-stamp-time-zone: "UTC"
706*00b67f09SDavid van Moolenbroek# time-stamp-end: "; # UTC"
707*00b67f09SDavid van Moolenbroek# End:
708