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