xref: /freebsd/contrib/openbsm/config/depcomp (revision 5e386598a6d77973b93c073080f0cc574edda9e2)
13b97a967SRobert Watson#! /bin/sh
23b97a967SRobert Watson# depcomp - compile a program generating dependencies as side-effects
33b97a967SRobert Watson
4*5e386598SRobert Watsonscriptversion=2013-05-30.07; # UTC
53b97a967SRobert Watson
6*5e386598SRobert Watson# Copyright (C) 1999-2014 Free Software Foundation, Inc.
73b97a967SRobert Watson
83b97a967SRobert Watson# This program is free software; you can redistribute it and/or modify
93b97a967SRobert Watson# it under the terms of the GNU General Public License as published by
103b97a967SRobert Watson# the Free Software Foundation; either version 2, or (at your option)
113b97a967SRobert Watson# any later version.
123b97a967SRobert Watson
133b97a967SRobert Watson# This program is distributed in the hope that it will be useful,
143b97a967SRobert Watson# but WITHOUT ANY WARRANTY; without even the implied warranty of
153b97a967SRobert Watson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
163b97a967SRobert Watson# GNU General Public License for more details.
173b97a967SRobert Watson
183b97a967SRobert Watson# You should have received a copy of the GNU General Public License
19*5e386598SRobert Watson# along with this program.  If not, see <http://www.gnu.org/licenses/>.
203b97a967SRobert Watson
213b97a967SRobert Watson# As a special exception to the GNU General Public License, if you
223b97a967SRobert Watson# distribute this file as part of a program that contains a
233b97a967SRobert Watson# configuration script generated by Autoconf, you may include it under
243b97a967SRobert Watson# the same distribution terms that you use for the rest of that program.
253b97a967SRobert Watson
263b97a967SRobert Watson# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
273b97a967SRobert Watson
283b97a967SRobert Watsoncase $1 in
293b97a967SRobert Watson  '')
30*5e386598SRobert Watson    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
313b97a967SRobert Watson    exit 1;
323b97a967SRobert Watson    ;;
333b97a967SRobert Watson  -h | --h*)
343b97a967SRobert Watson    cat <<\EOF
353b97a967SRobert WatsonUsage: depcomp [--help] [--version] PROGRAM [ARGS]
363b97a967SRobert Watson
373b97a967SRobert WatsonRun PROGRAMS ARGS to compile a file, generating dependencies
383b97a967SRobert Watsonas side-effects.
393b97a967SRobert Watson
403b97a967SRobert WatsonEnvironment variables:
413b97a967SRobert Watson  depmode     Dependency tracking mode.
42*5e386598SRobert Watson  source      Source file read by 'PROGRAMS ARGS'.
43*5e386598SRobert Watson  object      Object file output by 'PROGRAMS ARGS'.
443b97a967SRobert Watson  DEPDIR      directory where to store dependencies.
453b97a967SRobert Watson  depfile     Dependency file to output.
46*5e386598SRobert Watson  tmpdepfile  Temporary file to use when outputting dependencies.
473b97a967SRobert Watson  libtool     Whether libtool is used (yes/no).
483b97a967SRobert Watson
493b97a967SRobert WatsonReport bugs to <bug-automake@gnu.org>.
503b97a967SRobert WatsonEOF
513b97a967SRobert Watson    exit $?
523b97a967SRobert Watson    ;;
533b97a967SRobert Watson  -v | --v*)
543b97a967SRobert Watson    echo "depcomp $scriptversion"
553b97a967SRobert Watson    exit $?
563b97a967SRobert Watson    ;;
573b97a967SRobert Watsonesac
583b97a967SRobert Watson
59*5e386598SRobert Watson# Get the directory component of the given path, and save it in the
60*5e386598SRobert Watson# global variables '$dir'.  Note that this directory component will
61*5e386598SRobert Watson# be either empty or ending with a '/' character.  This is deliberate.
62*5e386598SRobert Watsonset_dir_from ()
63*5e386598SRobert Watson{
64*5e386598SRobert Watson  case $1 in
65*5e386598SRobert Watson    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66*5e386598SRobert Watson      *) dir=;;
67*5e386598SRobert Watson  esac
68*5e386598SRobert Watson}
69*5e386598SRobert Watson
70*5e386598SRobert Watson# Get the suffix-stripped basename of the given path, and save it the
71*5e386598SRobert Watson# global variable '$base'.
72*5e386598SRobert Watsonset_base_from ()
73*5e386598SRobert Watson{
74*5e386598SRobert Watson  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75*5e386598SRobert Watson}
76*5e386598SRobert Watson
77*5e386598SRobert Watson# If no dependency file was actually created by the compiler invocation,
78*5e386598SRobert Watson# we still have to create a dummy depfile, to avoid errors with the
79*5e386598SRobert Watson# Makefile "include basename.Plo" scheme.
80*5e386598SRobert Watsonmake_dummy_depfile ()
81*5e386598SRobert Watson{
82*5e386598SRobert Watson  echo "#dummy" > "$depfile"
83*5e386598SRobert Watson}
84*5e386598SRobert Watson
85*5e386598SRobert Watson# Factor out some common post-processing of the generated depfile.
86*5e386598SRobert Watson# Requires the auxiliary global variable '$tmpdepfile' to be set.
87*5e386598SRobert Watsonaix_post_process_depfile ()
88*5e386598SRobert Watson{
89*5e386598SRobert Watson  # If the compiler actually managed to produce a dependency file,
90*5e386598SRobert Watson  # post-process it.
91*5e386598SRobert Watson  if test -f "$tmpdepfile"; then
92*5e386598SRobert Watson    # Each line is of the form 'foo.o: dependency.h'.
93*5e386598SRobert Watson    # Do two passes, one to just change these to
94*5e386598SRobert Watson    #   $object: dependency.h
95*5e386598SRobert Watson    # and one to simply output
96*5e386598SRobert Watson    #   dependency.h:
97*5e386598SRobert Watson    # which is needed to avoid the deleted-header problem.
98*5e386598SRobert Watson    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99*5e386598SRobert Watson      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100*5e386598SRobert Watson    } > "$depfile"
101*5e386598SRobert Watson    rm -f "$tmpdepfile"
102*5e386598SRobert Watson  else
103*5e386598SRobert Watson    make_dummy_depfile
104*5e386598SRobert Watson  fi
105*5e386598SRobert Watson}
106*5e386598SRobert Watson
107*5e386598SRobert Watson# A tabulation character.
108*5e386598SRobert Watsontab='	'
109*5e386598SRobert Watson# A newline character.
110*5e386598SRobert Watsonnl='
111*5e386598SRobert Watson'
112*5e386598SRobert Watson# Character ranges might be problematic outside the C locale.
113*5e386598SRobert Watson# These definitions help.
114*5e386598SRobert Watsonupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115*5e386598SRobert Watsonlower=abcdefghijklmnopqrstuvwxyz
116*5e386598SRobert Watsondigits=0123456789
117*5e386598SRobert Watsonalpha=${upper}${lower}
118*5e386598SRobert Watson
1193b97a967SRobert Watsonif test -z "$depmode" || test -z "$source" || test -z "$object"; then
1203b97a967SRobert Watson  echo "depcomp: Variables source, object and depmode must be set" 1>&2
1213b97a967SRobert Watson  exit 1
1223b97a967SRobert Watsonfi
1233b97a967SRobert Watson
1243b97a967SRobert Watson# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
1253b97a967SRobert Watsondepfile=${depfile-`echo "$object" |
1263b97a967SRobert Watson  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
1273b97a967SRobert Watsontmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
1283b97a967SRobert Watson
1293b97a967SRobert Watsonrm -f "$tmpdepfile"
1303b97a967SRobert Watson
131*5e386598SRobert Watson# Avoid interferences from the environment.
132*5e386598SRobert Watsongccflag= dashmflag=
133*5e386598SRobert Watson
1343b97a967SRobert Watson# Some modes work just like other modes, but use different flags.  We
1353b97a967SRobert Watson# parameterize here, but still list the modes in the big case below,
1363b97a967SRobert Watson# to make depend.m4 easier to write.  Note that we *cannot* use a case
1373b97a967SRobert Watson# here, because this file can only contain one case statement.
1383b97a967SRobert Watsonif test "$depmode" = hp; then
1393b97a967SRobert Watson  # HP compiler uses -M and no extra arg.
1403b97a967SRobert Watson  gccflag=-M
1413b97a967SRobert Watson  depmode=gcc
1423b97a967SRobert Watsonfi
1433b97a967SRobert Watson
1443b97a967SRobert Watsonif test "$depmode" = dashXmstdout; then
1453b97a967SRobert Watson  # This is just like dashmstdout with a different argument.
1463b97a967SRobert Watson  dashmflag=-xM
1473b97a967SRobert Watson  depmode=dashmstdout
1483b97a967SRobert Watsonfi
1493b97a967SRobert Watson
150*5e386598SRobert Watsoncygpath_u="cygpath -u -f -"
151*5e386598SRobert Watsonif test "$depmode" = msvcmsys; then
152*5e386598SRobert Watson  # This is just like msvisualcpp but w/o cygpath translation.
153*5e386598SRobert Watson  # Just convert the backslash-escaped backslashes to single forward
154*5e386598SRobert Watson  # slashes to satisfy depend.m4
155*5e386598SRobert Watson  cygpath_u='sed s,\\\\,/,g'
156*5e386598SRobert Watson  depmode=msvisualcpp
157*5e386598SRobert Watsonfi
158*5e386598SRobert Watson
159*5e386598SRobert Watsonif test "$depmode" = msvc7msys; then
160*5e386598SRobert Watson  # This is just like msvc7 but w/o cygpath translation.
161*5e386598SRobert Watson  # Just convert the backslash-escaped backslashes to single forward
162*5e386598SRobert Watson  # slashes to satisfy depend.m4
163*5e386598SRobert Watson  cygpath_u='sed s,\\\\,/,g'
164*5e386598SRobert Watson  depmode=msvc7
165*5e386598SRobert Watsonfi
166*5e386598SRobert Watson
167*5e386598SRobert Watsonif test "$depmode" = xlc; then
168*5e386598SRobert Watson  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169*5e386598SRobert Watson  gccflag=-qmakedep=gcc,-MF
170*5e386598SRobert Watson  depmode=gcc
171*5e386598SRobert Watsonfi
172*5e386598SRobert Watson
1733b97a967SRobert Watsoncase "$depmode" in
1743b97a967SRobert Watsongcc3)
1753b97a967SRobert Watson## gcc 3 implements dependency tracking that does exactly what
1763b97a967SRobert Watson## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1773b97a967SRobert Watson## it if -MD -MP comes after the -MF stuff.  Hmm.
178*5e386598SRobert Watson## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179*5e386598SRobert Watson## the command line argument order; so add the flags where they
180*5e386598SRobert Watson## appear in depend2.am.  Note that the slowdown incurred here
181*5e386598SRobert Watson## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182*5e386598SRobert Watson  for arg
183*5e386598SRobert Watson  do
184*5e386598SRobert Watson    case $arg in
185*5e386598SRobert Watson    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186*5e386598SRobert Watson    *)  set fnord "$@" "$arg" ;;
187*5e386598SRobert Watson    esac
188*5e386598SRobert Watson    shift # fnord
189*5e386598SRobert Watson    shift # $arg
190*5e386598SRobert Watson  done
191*5e386598SRobert Watson  "$@"
1923b97a967SRobert Watson  stat=$?
193*5e386598SRobert Watson  if test $stat -ne 0; then
1943b97a967SRobert Watson    rm -f "$tmpdepfile"
1953b97a967SRobert Watson    exit $stat
1963b97a967SRobert Watson  fi
1973b97a967SRobert Watson  mv "$tmpdepfile" "$depfile"
1983b97a967SRobert Watson  ;;
1993b97a967SRobert Watson
2003b97a967SRobert Watsongcc)
201*5e386598SRobert Watson## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202*5e386598SRobert Watson## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203*5e386598SRobert Watson## (see the conditional assignment to $gccflag above).
2043b97a967SRobert Watson## There are various ways to get dependency output from gcc.  Here's
2053b97a967SRobert Watson## why we pick this rather obscure method:
2063b97a967SRobert Watson## - Don't want to use -MD because we'd like the dependencies to end
2073b97a967SRobert Watson##   up in a subdir.  Having to rename by hand is ugly.
2083b97a967SRobert Watson##   (We might end up doing this anyway to support other compilers.)
2093b97a967SRobert Watson## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210*5e386598SRobert Watson##   -MM, not -M (despite what the docs say).  Also, it might not be
211*5e386598SRobert Watson##   supported by the other compilers which use the 'gcc' depmode.
2123b97a967SRobert Watson## - Using -M directly means running the compiler twice (even worse
2133b97a967SRobert Watson##   than renaming).
2143b97a967SRobert Watson  if test -z "$gccflag"; then
2153b97a967SRobert Watson    gccflag=-MD,
2163b97a967SRobert Watson  fi
2173b97a967SRobert Watson  "$@" -Wp,"$gccflag$tmpdepfile"
2183b97a967SRobert Watson  stat=$?
219*5e386598SRobert Watson  if test $stat -ne 0; then
2203b97a967SRobert Watson    rm -f "$tmpdepfile"
2213b97a967SRobert Watson    exit $stat
2223b97a967SRobert Watson  fi
2233b97a967SRobert Watson  rm -f "$depfile"
2243b97a967SRobert Watson  echo "$object : \\" > "$depfile"
225*5e386598SRobert Watson  # The second -e expression handles DOS-style file names with drive
226*5e386598SRobert Watson  # letters.
2273b97a967SRobert Watson  sed -e 's/^[^:]*: / /' \
2283b97a967SRobert Watson      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229*5e386598SRobert Watson## This next piece of magic avoids the "deleted header file" problem.
2303b97a967SRobert Watson## The problem is that when a header file which appears in a .P file
2313b97a967SRobert Watson## is deleted, the dependency causes make to die (because there is
2323b97a967SRobert Watson## typically no way to rebuild the header).  We avoid this by adding
2333b97a967SRobert Watson## dummy dependencies for each header file.  Too bad gcc doesn't do
2343b97a967SRobert Watson## this for us directly.
235*5e386598SRobert Watson## Some versions of gcc put a space before the ':'.  On the theory
2363b97a967SRobert Watson## that the space means something, we add a space to the output as
237*5e386598SRobert Watson## well.  hp depmode also adds that space, but also prefixes the VPATH
238*5e386598SRobert Watson## to the object.  Take care to not repeat it in the output.
2393b97a967SRobert Watson## Some versions of the HPUX 10.20 sed can't process this invocation
2403b97a967SRobert Watson## correctly.  Breaking it into two sed invocations is a workaround.
241*5e386598SRobert Watson  tr ' ' "$nl" < "$tmpdepfile" \
242*5e386598SRobert Watson    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243*5e386598SRobert Watson    | sed -e 's/$/ :/' >> "$depfile"
2443b97a967SRobert Watson  rm -f "$tmpdepfile"
2453b97a967SRobert Watson  ;;
2463b97a967SRobert Watson
2473b97a967SRobert Watsonhp)
2483b97a967SRobert Watson  # This case exists only to let depend.m4 do its work.  It works by
2493b97a967SRobert Watson  # looking at the text of this script.  This case will never be run,
2503b97a967SRobert Watson  # since it is checked for above.
2513b97a967SRobert Watson  exit 1
2523b97a967SRobert Watson  ;;
2533b97a967SRobert Watson
2543b97a967SRobert Watsonsgi)
2553b97a967SRobert Watson  if test "$libtool" = yes; then
2563b97a967SRobert Watson    "$@" "-Wp,-MDupdate,$tmpdepfile"
2573b97a967SRobert Watson  else
2583b97a967SRobert Watson    "$@" -MDupdate "$tmpdepfile"
2593b97a967SRobert Watson  fi
2603b97a967SRobert Watson  stat=$?
261*5e386598SRobert Watson  if test $stat -ne 0; then
2623b97a967SRobert Watson    rm -f "$tmpdepfile"
2633b97a967SRobert Watson    exit $stat
2643b97a967SRobert Watson  fi
2653b97a967SRobert Watson  rm -f "$depfile"
2663b97a967SRobert Watson
2673b97a967SRobert Watson  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2683b97a967SRobert Watson    echo "$object : \\" > "$depfile"
2693b97a967SRobert Watson    # Clip off the initial element (the dependent).  Don't try to be
2703b97a967SRobert Watson    # clever and replace this with sed code, as IRIX sed won't handle
2713b97a967SRobert Watson    # lines with more than a fixed number of characters (4096 in
2723b97a967SRobert Watson    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273*5e386598SRobert Watson    # the IRIX cc adds comments like '#:fec' to the end of the
2743b97a967SRobert Watson    # dependency line.
275*5e386598SRobert Watson    tr ' ' "$nl" < "$tmpdepfile" \
276*5e386598SRobert Watson      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277*5e386598SRobert Watson      | tr "$nl" ' ' >> "$depfile"
278*5e386598SRobert Watson    echo >> "$depfile"
2793b97a967SRobert Watson    # The second pass generates a dummy entry for each header file.
280*5e386598SRobert Watson    tr ' ' "$nl" < "$tmpdepfile" \
2813b97a967SRobert Watson      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282*5e386598SRobert Watson      >> "$depfile"
2833b97a967SRobert Watson  else
284*5e386598SRobert Watson    make_dummy_depfile
2853b97a967SRobert Watson  fi
2863b97a967SRobert Watson  rm -f "$tmpdepfile"
2873b97a967SRobert Watson  ;;
2883b97a967SRobert Watson
289*5e386598SRobert Watsonxlc)
290*5e386598SRobert Watson  # This case exists only to let depend.m4 do its work.  It works by
291*5e386598SRobert Watson  # looking at the text of this script.  This case will never be run,
292*5e386598SRobert Watson  # since it is checked for above.
293*5e386598SRobert Watson  exit 1
294*5e386598SRobert Watson  ;;
295*5e386598SRobert Watson
2963b97a967SRobert Watsonaix)
2973b97a967SRobert Watson  # The C for AIX Compiler uses -M and outputs the dependencies
2983b97a967SRobert Watson  # in a .u file.  In older versions, this file always lives in the
299*5e386598SRobert Watson  # current directory.  Also, the AIX compiler puts '$object:' at the
3003b97a967SRobert Watson  # start of each line; $object doesn't have directory information.
3013b97a967SRobert Watson  # Version 6 uses the directory in both cases.
302*5e386598SRobert Watson  set_dir_from "$object"
303*5e386598SRobert Watson  set_base_from "$object"
3043b97a967SRobert Watson  if test "$libtool" = yes; then
305*5e386598SRobert Watson    tmpdepfile1=$dir$base.u
306*5e386598SRobert Watson    tmpdepfile2=$base.u
307*5e386598SRobert Watson    tmpdepfile3=$dir.libs/$base.u
3083b97a967SRobert Watson    "$@" -Wc,-M
3093b97a967SRobert Watson  else
310*5e386598SRobert Watson    tmpdepfile1=$dir$base.u
311*5e386598SRobert Watson    tmpdepfile2=$dir$base.u
312*5e386598SRobert Watson    tmpdepfile3=$dir$base.u
3133b97a967SRobert Watson    "$@" -M
3143b97a967SRobert Watson  fi
3153b97a967SRobert Watson  stat=$?
316*5e386598SRobert Watson  if test $stat -ne 0; then
317*5e386598SRobert Watson    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3183b97a967SRobert Watson    exit $stat
3193b97a967SRobert Watson  fi
3203b97a967SRobert Watson
321*5e386598SRobert Watson  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322*5e386598SRobert Watson  do
323*5e386598SRobert Watson    test -f "$tmpdepfile" && break
324*5e386598SRobert Watson  done
325*5e386598SRobert Watson  aix_post_process_depfile
326*5e386598SRobert Watson  ;;
327*5e386598SRobert Watson
328*5e386598SRobert Watsontcc)
329*5e386598SRobert Watson  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330*5e386598SRobert Watson  # FIXME: That version still under development at the moment of writing.
331*5e386598SRobert Watson  #        Make that this statement remains true also for stable, released
332*5e386598SRobert Watson  #        versions.
333*5e386598SRobert Watson  # It will wrap lines (doesn't matter whether long or short) with a
334*5e386598SRobert Watson  # trailing '\', as in:
335*5e386598SRobert Watson  #
336*5e386598SRobert Watson  #   foo.o : \
337*5e386598SRobert Watson  #    foo.c \
338*5e386598SRobert Watson  #    foo.h \
339*5e386598SRobert Watson  #
340*5e386598SRobert Watson  # It will put a trailing '\' even on the last line, and will use leading
341*5e386598SRobert Watson  # spaces rather than leading tabs (at least since its commit 0394caf7
342*5e386598SRobert Watson  # "Emit spaces for -MD").
343*5e386598SRobert Watson  "$@" -MD -MF "$tmpdepfile"
344*5e386598SRobert Watson  stat=$?
345*5e386598SRobert Watson  if test $stat -ne 0; then
346*5e386598SRobert Watson    rm -f "$tmpdepfile"
347*5e386598SRobert Watson    exit $stat
3483b97a967SRobert Watson  fi
349*5e386598SRobert Watson  rm -f "$depfile"
350*5e386598SRobert Watson  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351*5e386598SRobert Watson  # We have to change lines of the first kind to '$object: \'.
352*5e386598SRobert Watson  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353*5e386598SRobert Watson  # And for each line of the second kind, we have to emit a 'dep.h:'
354*5e386598SRobert Watson  # dummy dependency, to avoid the deleted-header problem.
355*5e386598SRobert Watson  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
3563b97a967SRobert Watson  rm -f "$tmpdepfile"
3573b97a967SRobert Watson  ;;
3583b97a967SRobert Watson
359*5e386598SRobert Watson## The order of this option in the case statement is important, since the
360*5e386598SRobert Watson## shell code in configure will try each of these formats in the order
361*5e386598SRobert Watson## listed in this file.  A plain '-MD' option would be understood by many
362*5e386598SRobert Watson## compilers, so we must ensure this comes after the gcc and icc options.
363*5e386598SRobert Watsonpgcc)
364*5e386598SRobert Watson  # Portland's C compiler understands '-MD'.
365*5e386598SRobert Watson  # Will always output deps to 'file.d' where file is the root name of the
366*5e386598SRobert Watson  # source file under compilation, even if file resides in a subdirectory.
367*5e386598SRobert Watson  # The object file name does not affect the name of the '.d' file.
368*5e386598SRobert Watson  # pgcc 10.2 will output
3693b97a967SRobert Watson  #    foo.o: sub/foo.c sub/foo.h
370*5e386598SRobert Watson  # and will wrap long lines using '\' :
3713b97a967SRobert Watson  #    foo.o: sub/foo.c ... \
3723b97a967SRobert Watson  #     sub/foo.h ... \
3733b97a967SRobert Watson  #     ...
374*5e386598SRobert Watson  set_dir_from "$object"
375*5e386598SRobert Watson  # Use the source, not the object, to determine the base name, since
376*5e386598SRobert Watson  # that's sadly what pgcc will do too.
377*5e386598SRobert Watson  set_base_from "$source"
378*5e386598SRobert Watson  tmpdepfile=$base.d
3793b97a967SRobert Watson
380*5e386598SRobert Watson  # For projects that build the same source file twice into different object
381*5e386598SRobert Watson  # files, the pgcc approach of using the *source* file root name can cause
382*5e386598SRobert Watson  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383*5e386598SRobert Watson  # the same $tmpdepfile.
384*5e386598SRobert Watson  lockdir=$base.d-lock
385*5e386598SRobert Watson  trap "
386*5e386598SRobert Watson    echo '$0: caught signal, cleaning up...' >&2
387*5e386598SRobert Watson    rmdir '$lockdir'
388*5e386598SRobert Watson    exit 1
389*5e386598SRobert Watson  " 1 2 13 15
390*5e386598SRobert Watson  numtries=100
391*5e386598SRobert Watson  i=$numtries
392*5e386598SRobert Watson  while test $i -gt 0; do
393*5e386598SRobert Watson    # mkdir is a portable test-and-set.
394*5e386598SRobert Watson    if mkdir "$lockdir" 2>/dev/null; then
395*5e386598SRobert Watson      # This process acquired the lock.
396*5e386598SRobert Watson      "$@" -MD
3973b97a967SRobert Watson      stat=$?
398*5e386598SRobert Watson      # Release the lock.
399*5e386598SRobert Watson      rmdir "$lockdir"
400*5e386598SRobert Watson      break
4013b97a967SRobert Watson    else
402*5e386598SRobert Watson      # If the lock is being held by a different process, wait
403*5e386598SRobert Watson      # until the winning process is done or we timeout.
404*5e386598SRobert Watson      while test -d "$lockdir" && test $i -gt 0; do
405*5e386598SRobert Watson        sleep 1
406*5e386598SRobert Watson        i=`expr $i - 1`
407*5e386598SRobert Watson      done
408*5e386598SRobert Watson    fi
409*5e386598SRobert Watson    i=`expr $i - 1`
410*5e386598SRobert Watson  done
411*5e386598SRobert Watson  trap - 1 2 13 15
412*5e386598SRobert Watson  if test $i -le 0; then
413*5e386598SRobert Watson    echo "$0: failed to acquire lock after $numtries attempts" >&2
414*5e386598SRobert Watson    echo "$0: check lockdir '$lockdir'" >&2
415*5e386598SRobert Watson    exit 1
416*5e386598SRobert Watson  fi
417*5e386598SRobert Watson
418*5e386598SRobert Watson  if test $stat -ne 0; then
4193b97a967SRobert Watson    rm -f "$tmpdepfile"
4203b97a967SRobert Watson    exit $stat
4213b97a967SRobert Watson  fi
4223b97a967SRobert Watson  rm -f "$depfile"
4233b97a967SRobert Watson  # Each line is of the form `foo.o: dependent.h',
4243b97a967SRobert Watson  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
4253b97a967SRobert Watson  # Do two passes, one to just change these to
4263b97a967SRobert Watson  # `$object: dependent.h' and one to simply `dependent.h:'.
4273b97a967SRobert Watson  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
4283b97a967SRobert Watson  # Some versions of the HPUX 10.20 sed can't process this invocation
4293b97a967SRobert Watson  # correctly.  Breaking it into two sed invocations is a workaround.
430*5e386598SRobert Watson  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431*5e386598SRobert Watson    | sed -e 's/$/ :/' >> "$depfile"
4323b97a967SRobert Watson  rm -f "$tmpdepfile"
4333b97a967SRobert Watson  ;;
4343b97a967SRobert Watson
435*5e386598SRobert Watsonhp2)
436*5e386598SRobert Watson  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437*5e386598SRobert Watson  # compilers, which have integrated preprocessors.  The correct option
438*5e386598SRobert Watson  # to use with these is +Maked; it writes dependencies to a file named
439*5e386598SRobert Watson  # 'foo.d', which lands next to the object file, wherever that
440*5e386598SRobert Watson  # happens to be.
441*5e386598SRobert Watson  # Much of this is similar to the tru64 case; see comments there.
442*5e386598SRobert Watson  set_dir_from  "$object"
443*5e386598SRobert Watson  set_base_from "$object"
444*5e386598SRobert Watson  if test "$libtool" = yes; then
445*5e386598SRobert Watson    tmpdepfile1=$dir$base.d
446*5e386598SRobert Watson    tmpdepfile2=$dir.libs/$base.d
447*5e386598SRobert Watson    "$@" -Wc,+Maked
448*5e386598SRobert Watson  else
449*5e386598SRobert Watson    tmpdepfile1=$dir$base.d
450*5e386598SRobert Watson    tmpdepfile2=$dir$base.d
451*5e386598SRobert Watson    "$@" +Maked
452*5e386598SRobert Watson  fi
453*5e386598SRobert Watson  stat=$?
454*5e386598SRobert Watson  if test $stat -ne 0; then
455*5e386598SRobert Watson     rm -f "$tmpdepfile1" "$tmpdepfile2"
456*5e386598SRobert Watson     exit $stat
457*5e386598SRobert Watson  fi
458*5e386598SRobert Watson
459*5e386598SRobert Watson  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460*5e386598SRobert Watson  do
461*5e386598SRobert Watson    test -f "$tmpdepfile" && break
462*5e386598SRobert Watson  done
463*5e386598SRobert Watson  if test -f "$tmpdepfile"; then
464*5e386598SRobert Watson    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465*5e386598SRobert Watson    # Add 'dependent.h:' lines.
466*5e386598SRobert Watson    sed -ne '2,${
467*5e386598SRobert Watson               s/^ *//
468*5e386598SRobert Watson               s/ \\*$//
469*5e386598SRobert Watson               s/$/:/
470*5e386598SRobert Watson               p
471*5e386598SRobert Watson             }' "$tmpdepfile" >> "$depfile"
472*5e386598SRobert Watson  else
473*5e386598SRobert Watson    make_dummy_depfile
474*5e386598SRobert Watson  fi
475*5e386598SRobert Watson  rm -f "$tmpdepfile" "$tmpdepfile2"
476*5e386598SRobert Watson  ;;
477*5e386598SRobert Watson
4783b97a967SRobert Watsontru64)
4793b97a967SRobert Watson  # The Tru64 compiler uses -MD to generate dependencies as a side
480*5e386598SRobert Watson  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
4813b97a967SRobert Watson  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482*5e386598SRobert Watson  # dependencies in 'foo.d' instead, so we check for that too.
4833b97a967SRobert Watson  # Subdirectories are respected.
484*5e386598SRobert Watson  set_dir_from  "$object"
485*5e386598SRobert Watson  set_base_from "$object"
4863b97a967SRobert Watson
4873b97a967SRobert Watson  if test "$libtool" = yes; then
488*5e386598SRobert Watson    # Libtool generates 2 separate objects for the 2 libraries.  These
489*5e386598SRobert Watson    # two compilations output dependencies in $dir.libs/$base.o.d and
4903b97a967SRobert Watson    # in $dir$base.o.d.  We have to check for both files, because
4913b97a967SRobert Watson    # one of the two compilations can be disabled.  We should prefer
4923b97a967SRobert Watson    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4933b97a967SRobert Watson    # automatically cleaned when .libs/ is deleted, while ignoring
4943b97a967SRobert Watson    # the former would cause a distcleancheck panic.
495*5e386598SRobert Watson    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496*5e386598SRobert Watson    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497*5e386598SRobert Watson    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
4983b97a967SRobert Watson    "$@" -Wc,-MD
4993b97a967SRobert Watson  else
500*5e386598SRobert Watson    tmpdepfile1=$dir$base.d
5013b97a967SRobert Watson    tmpdepfile2=$dir$base.d
5023b97a967SRobert Watson    tmpdepfile3=$dir$base.d
5033b97a967SRobert Watson    "$@" -MD
5043b97a967SRobert Watson  fi
5053b97a967SRobert Watson
5063b97a967SRobert Watson  stat=$?
507*5e386598SRobert Watson  if test $stat -ne 0; then
508*5e386598SRobert Watson    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5093b97a967SRobert Watson    exit $stat
5103b97a967SRobert Watson  fi
5113b97a967SRobert Watson
512*5e386598SRobert Watson  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5133b97a967SRobert Watson  do
5143b97a967SRobert Watson    test -f "$tmpdepfile" && break
5153b97a967SRobert Watson  done
516*5e386598SRobert Watson  # Same post-processing that is required for AIX mode.
517*5e386598SRobert Watson  aix_post_process_depfile
518*5e386598SRobert Watson  ;;
519*5e386598SRobert Watson
520*5e386598SRobert Watsonmsvc7)
521*5e386598SRobert Watson  if test "$libtool" = yes; then
522*5e386598SRobert Watson    showIncludes=-Wc,-showIncludes
5233b97a967SRobert Watson  else
524*5e386598SRobert Watson    showIncludes=-showIncludes
5253b97a967SRobert Watson  fi
526*5e386598SRobert Watson  "$@" $showIncludes > "$tmpdepfile"
527*5e386598SRobert Watson  stat=$?
528*5e386598SRobert Watson  grep -v '^Note: including file: ' "$tmpdepfile"
529*5e386598SRobert Watson  if test $stat -ne 0; then
5303b97a967SRobert Watson    rm -f "$tmpdepfile"
531*5e386598SRobert Watson    exit $stat
532*5e386598SRobert Watson  fi
533*5e386598SRobert Watson  rm -f "$depfile"
534*5e386598SRobert Watson  echo "$object : \\" > "$depfile"
535*5e386598SRobert Watson  # The first sed program below extracts the file names and escapes
536*5e386598SRobert Watson  # backslashes for cygpath.  The second sed program outputs the file
537*5e386598SRobert Watson  # name when reading, but also accumulates all include files in the
538*5e386598SRobert Watson  # hold buffer in order to output them again at the end.  This only
539*5e386598SRobert Watson  # works with sed implementations that can handle large buffers.
540*5e386598SRobert Watson  sed < "$tmpdepfile" -n '
541*5e386598SRobert Watson/^Note: including file:  *\(.*\)/ {
542*5e386598SRobert Watson  s//\1/
543*5e386598SRobert Watson  s/\\/\\\\/g
544*5e386598SRobert Watson  p
545*5e386598SRobert Watson}' | $cygpath_u | sort -u | sed -n '
546*5e386598SRobert Watsons/ /\\ /g
547*5e386598SRobert Watsons/\(.*\)/'"$tab"'\1 \\/p
548*5e386598SRobert Watsons/.\(.*\) \\/\1:/
549*5e386598SRobert WatsonH
550*5e386598SRobert Watson$ {
551*5e386598SRobert Watson  s/.*/'"$tab"'/
552*5e386598SRobert Watson  G
553*5e386598SRobert Watson  p
554*5e386598SRobert Watson}' >> "$depfile"
555*5e386598SRobert Watson  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556*5e386598SRobert Watson  rm -f "$tmpdepfile"
557*5e386598SRobert Watson  ;;
558*5e386598SRobert Watson
559*5e386598SRobert Watsonmsvc7msys)
560*5e386598SRobert Watson  # This case exists only to let depend.m4 do its work.  It works by
561*5e386598SRobert Watson  # looking at the text of this script.  This case will never be run,
562*5e386598SRobert Watson  # since it is checked for above.
563*5e386598SRobert Watson  exit 1
5643b97a967SRobert Watson  ;;
5653b97a967SRobert Watson
5663b97a967SRobert Watson#nosideeffect)
5673b97a967SRobert Watson  # This comment above is used by automake to tell side-effect
5683b97a967SRobert Watson  # dependency tracking mechanisms from slower ones.
5693b97a967SRobert Watson
5703b97a967SRobert Watsondashmstdout)
5713b97a967SRobert Watson  # Important note: in order to support this mode, a compiler *must*
5723b97a967SRobert Watson  # always write the preprocessed file to stdout, regardless of -o.
5733b97a967SRobert Watson  "$@" || exit $?
5743b97a967SRobert Watson
5753b97a967SRobert Watson  # Remove the call to Libtool.
5763b97a967SRobert Watson  if test "$libtool" = yes; then
577*5e386598SRobert Watson    while test "X$1" != 'X--mode=compile'; do
5783b97a967SRobert Watson      shift
5793b97a967SRobert Watson    done
5803b97a967SRobert Watson    shift
5813b97a967SRobert Watson  fi
5823b97a967SRobert Watson
583*5e386598SRobert Watson  # Remove '-o $object'.
5843b97a967SRobert Watson  IFS=" "
5853b97a967SRobert Watson  for arg
5863b97a967SRobert Watson  do
5873b97a967SRobert Watson    case $arg in
5883b97a967SRobert Watson    -o)
5893b97a967SRobert Watson      shift
5903b97a967SRobert Watson      ;;
5913b97a967SRobert Watson    $object)
5923b97a967SRobert Watson      shift
5933b97a967SRobert Watson      ;;
5943b97a967SRobert Watson    *)
5953b97a967SRobert Watson      set fnord "$@" "$arg"
5963b97a967SRobert Watson      shift # fnord
5973b97a967SRobert Watson      shift # $arg
5983b97a967SRobert Watson      ;;
5993b97a967SRobert Watson    esac
6003b97a967SRobert Watson  done
6013b97a967SRobert Watson
6023b97a967SRobert Watson  test -z "$dashmflag" && dashmflag=-M
603*5e386598SRobert Watson  # Require at least two characters before searching for ':'
6043b97a967SRobert Watson  # in the target name.  This is to cope with DOS-style filenames:
605*5e386598SRobert Watson  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
6063b97a967SRobert Watson  "$@" $dashmflag |
607*5e386598SRobert Watson    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
6083b97a967SRobert Watson  rm -f "$depfile"
6093b97a967SRobert Watson  cat < "$tmpdepfile" > "$depfile"
610*5e386598SRobert Watson  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611*5e386598SRobert Watson  # correctly.  Breaking it into two sed invocations is a workaround.
612*5e386598SRobert Watson  tr ' ' "$nl" < "$tmpdepfile" \
613*5e386598SRobert Watson    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614*5e386598SRobert Watson    | sed -e 's/$/ :/' >> "$depfile"
6153b97a967SRobert Watson  rm -f "$tmpdepfile"
6163b97a967SRobert Watson  ;;
6173b97a967SRobert Watson
6183b97a967SRobert WatsondashXmstdout)
6193b97a967SRobert Watson  # This case only exists to satisfy depend.m4.  It is never actually
6203b97a967SRobert Watson  # run, as this mode is specially recognized in the preamble.
6213b97a967SRobert Watson  exit 1
6223b97a967SRobert Watson  ;;
6233b97a967SRobert Watson
6243b97a967SRobert Watsonmakedepend)
6253b97a967SRobert Watson  "$@" || exit $?
6263b97a967SRobert Watson  # Remove any Libtool call
6273b97a967SRobert Watson  if test "$libtool" = yes; then
628*5e386598SRobert Watson    while test "X$1" != 'X--mode=compile'; do
6293b97a967SRobert Watson      shift
6303b97a967SRobert Watson    done
6313b97a967SRobert Watson    shift
6323b97a967SRobert Watson  fi
6333b97a967SRobert Watson  # X makedepend
6343b97a967SRobert Watson  shift
635*5e386598SRobert Watson  cleared=no eat=no
636*5e386598SRobert Watson  for arg
637*5e386598SRobert Watson  do
6383b97a967SRobert Watson    case $cleared in
6393b97a967SRobert Watson    no)
6403b97a967SRobert Watson      set ""; shift
6413b97a967SRobert Watson      cleared=yes ;;
6423b97a967SRobert Watson    esac
643*5e386598SRobert Watson    if test $eat = yes; then
644*5e386598SRobert Watson      eat=no
645*5e386598SRobert Watson      continue
646*5e386598SRobert Watson    fi
6473b97a967SRobert Watson    case "$arg" in
6483b97a967SRobert Watson    -D*|-I*)
6493b97a967SRobert Watson      set fnord "$@" "$arg"; shift ;;
6503b97a967SRobert Watson    # Strip any option that makedepend may not understand.  Remove
6513b97a967SRobert Watson    # the object too, otherwise makedepend will parse it as a source file.
652*5e386598SRobert Watson    -arch)
653*5e386598SRobert Watson      eat=yes ;;
6543b97a967SRobert Watson    -*|$object)
6553b97a967SRobert Watson      ;;
6563b97a967SRobert Watson    *)
6573b97a967SRobert Watson      set fnord "$@" "$arg"; shift ;;
6583b97a967SRobert Watson    esac
6593b97a967SRobert Watson  done
660*5e386598SRobert Watson  obj_suffix=`echo "$object" | sed 's/^.*\././'`
6613b97a967SRobert Watson  touch "$tmpdepfile"
6623b97a967SRobert Watson  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
6633b97a967SRobert Watson  rm -f "$depfile"
664*5e386598SRobert Watson  # makedepend may prepend the VPATH from the source file name to the object.
665*5e386598SRobert Watson  # No need to regex-escape $object, excess matching of '.' is harmless.
666*5e386598SRobert Watson  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667*5e386598SRobert Watson  # Some versions of the HPUX 10.20 sed can't process the last invocation
668*5e386598SRobert Watson  # correctly.  Breaking it into two sed invocations is a workaround.
669*5e386598SRobert Watson  sed '1,2d' "$tmpdepfile" \
670*5e386598SRobert Watson    | tr ' ' "$nl" \
671*5e386598SRobert Watson    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672*5e386598SRobert Watson    | sed -e 's/$/ :/' >> "$depfile"
6733b97a967SRobert Watson  rm -f "$tmpdepfile" "$tmpdepfile".bak
6743b97a967SRobert Watson  ;;
6753b97a967SRobert Watson
6763b97a967SRobert Watsoncpp)
6773b97a967SRobert Watson  # Important note: in order to support this mode, a compiler *must*
6783b97a967SRobert Watson  # always write the preprocessed file to stdout.
6793b97a967SRobert Watson  "$@" || exit $?
6803b97a967SRobert Watson
6813b97a967SRobert Watson  # Remove the call to Libtool.
6823b97a967SRobert Watson  if test "$libtool" = yes; then
683*5e386598SRobert Watson    while test "X$1" != 'X--mode=compile'; do
6843b97a967SRobert Watson      shift
6853b97a967SRobert Watson    done
6863b97a967SRobert Watson    shift
6873b97a967SRobert Watson  fi
6883b97a967SRobert Watson
689*5e386598SRobert Watson  # Remove '-o $object'.
6903b97a967SRobert Watson  IFS=" "
6913b97a967SRobert Watson  for arg
6923b97a967SRobert Watson  do
6933b97a967SRobert Watson    case $arg in
6943b97a967SRobert Watson    -o)
6953b97a967SRobert Watson      shift
6963b97a967SRobert Watson      ;;
6973b97a967SRobert Watson    $object)
6983b97a967SRobert Watson      shift
6993b97a967SRobert Watson      ;;
7003b97a967SRobert Watson    *)
7013b97a967SRobert Watson      set fnord "$@" "$arg"
7023b97a967SRobert Watson      shift # fnord
7033b97a967SRobert Watson      shift # $arg
7043b97a967SRobert Watson      ;;
7053b97a967SRobert Watson    esac
7063b97a967SRobert Watson  done
7073b97a967SRobert Watson
708*5e386598SRobert Watson  "$@" -E \
709*5e386598SRobert Watson    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710*5e386598SRobert Watson             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711*5e386598SRobert Watson    | sed '$ s: \\$::' > "$tmpdepfile"
7123b97a967SRobert Watson  rm -f "$depfile"
7133b97a967SRobert Watson  echo "$object : \\" > "$depfile"
7143b97a967SRobert Watson  cat < "$tmpdepfile" >> "$depfile"
7153b97a967SRobert Watson  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
7163b97a967SRobert Watson  rm -f "$tmpdepfile"
7173b97a967SRobert Watson  ;;
7183b97a967SRobert Watson
7193b97a967SRobert Watsonmsvisualcpp)
7203b97a967SRobert Watson  # Important note: in order to support this mode, a compiler *must*
721*5e386598SRobert Watson  # always write the preprocessed file to stdout.
7223b97a967SRobert Watson  "$@" || exit $?
723*5e386598SRobert Watson
724*5e386598SRobert Watson  # Remove the call to Libtool.
725*5e386598SRobert Watson  if test "$libtool" = yes; then
726*5e386598SRobert Watson    while test "X$1" != 'X--mode=compile'; do
727*5e386598SRobert Watson      shift
728*5e386598SRobert Watson    done
729*5e386598SRobert Watson    shift
730*5e386598SRobert Watson  fi
731*5e386598SRobert Watson
7323b97a967SRobert Watson  IFS=" "
7333b97a967SRobert Watson  for arg
7343b97a967SRobert Watson  do
7353b97a967SRobert Watson    case "$arg" in
736*5e386598SRobert Watson    -o)
737*5e386598SRobert Watson      shift
738*5e386598SRobert Watson      ;;
739*5e386598SRobert Watson    $object)
740*5e386598SRobert Watson      shift
741*5e386598SRobert Watson      ;;
7423b97a967SRobert Watson    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
7433b97a967SRobert Watson        set fnord "$@"
7443b97a967SRobert Watson        shift
7453b97a967SRobert Watson        shift
7463b97a967SRobert Watson        ;;
7473b97a967SRobert Watson    *)
7483b97a967SRobert Watson        set fnord "$@" "$arg"
7493b97a967SRobert Watson        shift
7503b97a967SRobert Watson        shift
7513b97a967SRobert Watson        ;;
7523b97a967SRobert Watson    esac
7533b97a967SRobert Watson  done
754*5e386598SRobert Watson  "$@" -E 2>/dev/null |
755*5e386598SRobert Watson  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
7563b97a967SRobert Watson  rm -f "$depfile"
7573b97a967SRobert Watson  echo "$object : \\" > "$depfile"
758*5e386598SRobert Watson  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759*5e386598SRobert Watson  echo "$tab" >> "$depfile"
760*5e386598SRobert Watson  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
7613b97a967SRobert Watson  rm -f "$tmpdepfile"
7623b97a967SRobert Watson  ;;
7633b97a967SRobert Watson
764*5e386598SRobert Watsonmsvcmsys)
765*5e386598SRobert Watson  # This case exists only to let depend.m4 do its work.  It works by
766*5e386598SRobert Watson  # looking at the text of this script.  This case will never be run,
767*5e386598SRobert Watson  # since it is checked for above.
768*5e386598SRobert Watson  exit 1
769*5e386598SRobert Watson  ;;
770*5e386598SRobert Watson
7713b97a967SRobert Watsonnone)
7723b97a967SRobert Watson  exec "$@"
7733b97a967SRobert Watson  ;;
7743b97a967SRobert Watson
7753b97a967SRobert Watson*)
7763b97a967SRobert Watson  echo "Unknown depmode $depmode" 1>&2
7773b97a967SRobert Watson  exit 1
7783b97a967SRobert Watson  ;;
7793b97a967SRobert Watsonesac
7803b97a967SRobert Watson
7813b97a967SRobert Watsonexit 0
7823b97a967SRobert Watson
7833b97a967SRobert Watson# Local Variables:
7843b97a967SRobert Watson# mode: shell-script
7853b97a967SRobert Watson# sh-indentation: 2
7863b97a967SRobert Watson# eval: (add-hook 'write-file-hooks 'time-stamp)
7873b97a967SRobert Watson# time-stamp-start: "scriptversion="
7883b97a967SRobert Watson# time-stamp-format: "%:y-%02m-%02d.%02H"
789*5e386598SRobert Watson# time-stamp-time-zone: "UTC"
790*5e386598SRobert Watson# time-stamp-end: "; # UTC"
7913b97a967SRobert Watson# End:
792