xref: /aosp_15_r20/external/google-breakpad/autotools/depcomp (revision 9712c20fc9bbfbac4935993a2ca0b3958c5adad2)
1*9712c20fSFrederick Mayle#! /bin/sh
2*9712c20fSFrederick Mayle# depcomp - compile a program generating dependencies as side-effects
3*9712c20fSFrederick Mayle
4*9712c20fSFrederick Maylescriptversion=2018-03-07.03; # UTC
5*9712c20fSFrederick Mayle
6*9712c20fSFrederick Mayle# Copyright (C) 1999-2021 Free Software Foundation, Inc.
7*9712c20fSFrederick Mayle
8*9712c20fSFrederick Mayle# This program is free software; you can redistribute it and/or modify
9*9712c20fSFrederick Mayle# it under the terms of the GNU General Public License as published by
10*9712c20fSFrederick Mayle# the Free Software Foundation; either version 2, or (at your option)
11*9712c20fSFrederick Mayle# any later version.
12*9712c20fSFrederick Mayle
13*9712c20fSFrederick Mayle# This program is distributed in the hope that it will be useful,
14*9712c20fSFrederick Mayle# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*9712c20fSFrederick Mayle# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*9712c20fSFrederick Mayle# GNU General Public License for more details.
17*9712c20fSFrederick Mayle
18*9712c20fSFrederick Mayle# You should have received a copy of the GNU General Public License
19*9712c20fSFrederick Mayle# along with this program.  If not, see <https://www.gnu.org/licenses/>.
20*9712c20fSFrederick Mayle
21*9712c20fSFrederick Mayle# As a special exception to the GNU General Public License, if you
22*9712c20fSFrederick Mayle# distribute this file as part of a program that contains a
23*9712c20fSFrederick Mayle# configuration script generated by Autoconf, you may include it under
24*9712c20fSFrederick Mayle# the same distribution terms that you use for the rest of that program.
25*9712c20fSFrederick Mayle
26*9712c20fSFrederick Mayle# Originally written by Alexandre Oliva <[email protected]>.
27*9712c20fSFrederick Mayle
28*9712c20fSFrederick Maylecase $1 in
29*9712c20fSFrederick Mayle  '')
30*9712c20fSFrederick Mayle    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31*9712c20fSFrederick Mayle    exit 1;
32*9712c20fSFrederick Mayle    ;;
33*9712c20fSFrederick Mayle  -h | --h*)
34*9712c20fSFrederick Mayle    cat <<\EOF
35*9712c20fSFrederick MayleUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36*9712c20fSFrederick Mayle
37*9712c20fSFrederick MayleRun PROGRAMS ARGS to compile a file, generating dependencies
38*9712c20fSFrederick Mayleas side-effects.
39*9712c20fSFrederick Mayle
40*9712c20fSFrederick MayleEnvironment variables:
41*9712c20fSFrederick Mayle  depmode     Dependency tracking mode.
42*9712c20fSFrederick Mayle  source      Source file read by 'PROGRAMS ARGS'.
43*9712c20fSFrederick Mayle  object      Object file output by 'PROGRAMS ARGS'.
44*9712c20fSFrederick Mayle  DEPDIR      directory where to store dependencies.
45*9712c20fSFrederick Mayle  depfile     Dependency file to output.
46*9712c20fSFrederick Mayle  tmpdepfile  Temporary file to use when outputting dependencies.
47*9712c20fSFrederick Mayle  libtool     Whether libtool is used (yes/no).
48*9712c20fSFrederick Mayle
49*9712c20fSFrederick MayleReport bugs to <bug-automake@gnu.org>.
50*9712c20fSFrederick MayleEOF
51*9712c20fSFrederick Mayle    exit $?
52*9712c20fSFrederick Mayle    ;;
53*9712c20fSFrederick Mayle  -v | --v*)
54*9712c20fSFrederick Mayle    echo "depcomp $scriptversion"
55*9712c20fSFrederick Mayle    exit $?
56*9712c20fSFrederick Mayle    ;;
57*9712c20fSFrederick Mayleesac
58*9712c20fSFrederick Mayle
59*9712c20fSFrederick Mayle# Get the directory component of the given path, and save it in the
60*9712c20fSFrederick Mayle# global variables '$dir'.  Note that this directory component will
61*9712c20fSFrederick Mayle# be either empty or ending with a '/' character.  This is deliberate.
62*9712c20fSFrederick Mayleset_dir_from ()
63*9712c20fSFrederick Mayle{
64*9712c20fSFrederick Mayle  case $1 in
65*9712c20fSFrederick Mayle    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66*9712c20fSFrederick Mayle      *) dir=;;
67*9712c20fSFrederick Mayle  esac
68*9712c20fSFrederick Mayle}
69*9712c20fSFrederick Mayle
70*9712c20fSFrederick Mayle# Get the suffix-stripped basename of the given path, and save it the
71*9712c20fSFrederick Mayle# global variable '$base'.
72*9712c20fSFrederick Mayleset_base_from ()
73*9712c20fSFrederick Mayle{
74*9712c20fSFrederick Mayle  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75*9712c20fSFrederick Mayle}
76*9712c20fSFrederick Mayle
77*9712c20fSFrederick Mayle# If no dependency file was actually created by the compiler invocation,
78*9712c20fSFrederick Mayle# we still have to create a dummy depfile, to avoid errors with the
79*9712c20fSFrederick Mayle# Makefile "include basename.Plo" scheme.
80*9712c20fSFrederick Maylemake_dummy_depfile ()
81*9712c20fSFrederick Mayle{
82*9712c20fSFrederick Mayle  echo "#dummy" > "$depfile"
83*9712c20fSFrederick Mayle}
84*9712c20fSFrederick Mayle
85*9712c20fSFrederick Mayle# Factor out some common post-processing of the generated depfile.
86*9712c20fSFrederick Mayle# Requires the auxiliary global variable '$tmpdepfile' to be set.
87*9712c20fSFrederick Mayleaix_post_process_depfile ()
88*9712c20fSFrederick Mayle{
89*9712c20fSFrederick Mayle  # If the compiler actually managed to produce a dependency file,
90*9712c20fSFrederick Mayle  # post-process it.
91*9712c20fSFrederick Mayle  if test -f "$tmpdepfile"; then
92*9712c20fSFrederick Mayle    # Each line is of the form 'foo.o: dependency.h'.
93*9712c20fSFrederick Mayle    # Do two passes, one to just change these to
94*9712c20fSFrederick Mayle    #   $object: dependency.h
95*9712c20fSFrederick Mayle    # and one to simply output
96*9712c20fSFrederick Mayle    #   dependency.h:
97*9712c20fSFrederick Mayle    # which is needed to avoid the deleted-header problem.
98*9712c20fSFrederick Mayle    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99*9712c20fSFrederick Mayle      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100*9712c20fSFrederick Mayle    } > "$depfile"
101*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
102*9712c20fSFrederick Mayle  else
103*9712c20fSFrederick Mayle    make_dummy_depfile
104*9712c20fSFrederick Mayle  fi
105*9712c20fSFrederick Mayle}
106*9712c20fSFrederick Mayle
107*9712c20fSFrederick Mayle# A tabulation character.
108*9712c20fSFrederick Mayletab='	'
109*9712c20fSFrederick Mayle# A newline character.
110*9712c20fSFrederick Maylenl='
111*9712c20fSFrederick Mayle'
112*9712c20fSFrederick Mayle# Character ranges might be problematic outside the C locale.
113*9712c20fSFrederick Mayle# These definitions help.
114*9712c20fSFrederick Mayleupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115*9712c20fSFrederick Maylelower=abcdefghijklmnopqrstuvwxyz
116*9712c20fSFrederick Mayledigits=0123456789
117*9712c20fSFrederick Maylealpha=${upper}${lower}
118*9712c20fSFrederick Mayle
119*9712c20fSFrederick Mayleif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120*9712c20fSFrederick Mayle  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121*9712c20fSFrederick Mayle  exit 1
122*9712c20fSFrederick Maylefi
123*9712c20fSFrederick Mayle
124*9712c20fSFrederick Mayle# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125*9712c20fSFrederick Mayledepfile=${depfile-`echo "$object" |
126*9712c20fSFrederick Mayle  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127*9712c20fSFrederick Mayletmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128*9712c20fSFrederick Mayle
129*9712c20fSFrederick Maylerm -f "$tmpdepfile"
130*9712c20fSFrederick Mayle
131*9712c20fSFrederick Mayle# Avoid interferences from the environment.
132*9712c20fSFrederick Maylegccflag= dashmflag=
133*9712c20fSFrederick Mayle
134*9712c20fSFrederick Mayle# Some modes work just like other modes, but use different flags.  We
135*9712c20fSFrederick Mayle# parameterize here, but still list the modes in the big case below,
136*9712c20fSFrederick Mayle# to make depend.m4 easier to write.  Note that we *cannot* use a case
137*9712c20fSFrederick Mayle# here, because this file can only contain one case statement.
138*9712c20fSFrederick Mayleif test "$depmode" = hp; then
139*9712c20fSFrederick Mayle  # HP compiler uses -M and no extra arg.
140*9712c20fSFrederick Mayle  gccflag=-M
141*9712c20fSFrederick Mayle  depmode=gcc
142*9712c20fSFrederick Maylefi
143*9712c20fSFrederick Mayle
144*9712c20fSFrederick Mayleif test "$depmode" = dashXmstdout; then
145*9712c20fSFrederick Mayle  # This is just like dashmstdout with a different argument.
146*9712c20fSFrederick Mayle  dashmflag=-xM
147*9712c20fSFrederick Mayle  depmode=dashmstdout
148*9712c20fSFrederick Maylefi
149*9712c20fSFrederick Mayle
150*9712c20fSFrederick Maylecygpath_u="cygpath -u -f -"
151*9712c20fSFrederick Mayleif test "$depmode" = msvcmsys; then
152*9712c20fSFrederick Mayle  # This is just like msvisualcpp but w/o cygpath translation.
153*9712c20fSFrederick Mayle  # Just convert the backslash-escaped backslashes to single forward
154*9712c20fSFrederick Mayle  # slashes to satisfy depend.m4
155*9712c20fSFrederick Mayle  cygpath_u='sed s,\\\\,/,g'
156*9712c20fSFrederick Mayle  depmode=msvisualcpp
157*9712c20fSFrederick Maylefi
158*9712c20fSFrederick Mayle
159*9712c20fSFrederick Mayleif test "$depmode" = msvc7msys; then
160*9712c20fSFrederick Mayle  # This is just like msvc7 but w/o cygpath translation.
161*9712c20fSFrederick Mayle  # Just convert the backslash-escaped backslashes to single forward
162*9712c20fSFrederick Mayle  # slashes to satisfy depend.m4
163*9712c20fSFrederick Mayle  cygpath_u='sed s,\\\\,/,g'
164*9712c20fSFrederick Mayle  depmode=msvc7
165*9712c20fSFrederick Maylefi
166*9712c20fSFrederick Mayle
167*9712c20fSFrederick Mayleif test "$depmode" = xlc; then
168*9712c20fSFrederick Mayle  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169*9712c20fSFrederick Mayle  gccflag=-qmakedep=gcc,-MF
170*9712c20fSFrederick Mayle  depmode=gcc
171*9712c20fSFrederick Maylefi
172*9712c20fSFrederick Mayle
173*9712c20fSFrederick Maylecase "$depmode" in
174*9712c20fSFrederick Maylegcc3)
175*9712c20fSFrederick Mayle## gcc 3 implements dependency tracking that does exactly what
176*9712c20fSFrederick Mayle## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177*9712c20fSFrederick Mayle## it if -MD -MP comes after the -MF stuff.  Hmm.
178*9712c20fSFrederick Mayle## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179*9712c20fSFrederick Mayle## the command line argument order; so add the flags where they
180*9712c20fSFrederick Mayle## appear in depend2.am.  Note that the slowdown incurred here
181*9712c20fSFrederick Mayle## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182*9712c20fSFrederick Mayle  for arg
183*9712c20fSFrederick Mayle  do
184*9712c20fSFrederick Mayle    case $arg in
185*9712c20fSFrederick Mayle    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186*9712c20fSFrederick Mayle    *)  set fnord "$@" "$arg" ;;
187*9712c20fSFrederick Mayle    esac
188*9712c20fSFrederick Mayle    shift # fnord
189*9712c20fSFrederick Mayle    shift # $arg
190*9712c20fSFrederick Mayle  done
191*9712c20fSFrederick Mayle  "$@"
192*9712c20fSFrederick Mayle  stat=$?
193*9712c20fSFrederick Mayle  if test $stat -ne 0; then
194*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
195*9712c20fSFrederick Mayle    exit $stat
196*9712c20fSFrederick Mayle  fi
197*9712c20fSFrederick Mayle  mv "$tmpdepfile" "$depfile"
198*9712c20fSFrederick Mayle  ;;
199*9712c20fSFrederick Mayle
200*9712c20fSFrederick Maylegcc)
201*9712c20fSFrederick Mayle## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202*9712c20fSFrederick Mayle## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203*9712c20fSFrederick Mayle## (see the conditional assignment to $gccflag above).
204*9712c20fSFrederick Mayle## There are various ways to get dependency output from gcc.  Here's
205*9712c20fSFrederick Mayle## why we pick this rather obscure method:
206*9712c20fSFrederick Mayle## - Don't want to use -MD because we'd like the dependencies to end
207*9712c20fSFrederick Mayle##   up in a subdir.  Having to rename by hand is ugly.
208*9712c20fSFrederick Mayle##   (We might end up doing this anyway to support other compilers.)
209*9712c20fSFrederick Mayle## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210*9712c20fSFrederick Mayle##   -MM, not -M (despite what the docs say).  Also, it might not be
211*9712c20fSFrederick Mayle##   supported by the other compilers which use the 'gcc' depmode.
212*9712c20fSFrederick Mayle## - Using -M directly means running the compiler twice (even worse
213*9712c20fSFrederick Mayle##   than renaming).
214*9712c20fSFrederick Mayle  if test -z "$gccflag"; then
215*9712c20fSFrederick Mayle    gccflag=-MD,
216*9712c20fSFrederick Mayle  fi
217*9712c20fSFrederick Mayle  "$@" -Wp,"$gccflag$tmpdepfile"
218*9712c20fSFrederick Mayle  stat=$?
219*9712c20fSFrederick Mayle  if test $stat -ne 0; then
220*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
221*9712c20fSFrederick Mayle    exit $stat
222*9712c20fSFrederick Mayle  fi
223*9712c20fSFrederick Mayle  rm -f "$depfile"
224*9712c20fSFrederick Mayle  echo "$object : \\" > "$depfile"
225*9712c20fSFrederick Mayle  # The second -e expression handles DOS-style file names with drive
226*9712c20fSFrederick Mayle  # letters.
227*9712c20fSFrederick Mayle  sed -e 's/^[^:]*: / /' \
228*9712c20fSFrederick Mayle      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229*9712c20fSFrederick Mayle## This next piece of magic avoids the "deleted header file" problem.
230*9712c20fSFrederick Mayle## The problem is that when a header file which appears in a .P file
231*9712c20fSFrederick Mayle## is deleted, the dependency causes make to die (because there is
232*9712c20fSFrederick Mayle## typically no way to rebuild the header).  We avoid this by adding
233*9712c20fSFrederick Mayle## dummy dependencies for each header file.  Too bad gcc doesn't do
234*9712c20fSFrederick Mayle## this for us directly.
235*9712c20fSFrederick Mayle## Some versions of gcc put a space before the ':'.  On the theory
236*9712c20fSFrederick Mayle## that the space means something, we add a space to the output as
237*9712c20fSFrederick Mayle## well.  hp depmode also adds that space, but also prefixes the VPATH
238*9712c20fSFrederick Mayle## to the object.  Take care to not repeat it in the output.
239*9712c20fSFrederick Mayle## Some versions of the HPUX 10.20 sed can't process this invocation
240*9712c20fSFrederick Mayle## correctly.  Breaking it into two sed invocations is a workaround.
241*9712c20fSFrederick Mayle  tr ' ' "$nl" < "$tmpdepfile" \
242*9712c20fSFrederick Mayle    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243*9712c20fSFrederick Mayle    | sed -e 's/$/ :/' >> "$depfile"
244*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
245*9712c20fSFrederick Mayle  ;;
246*9712c20fSFrederick Mayle
247*9712c20fSFrederick Maylehp)
248*9712c20fSFrederick Mayle  # This case exists only to let depend.m4 do its work.  It works by
249*9712c20fSFrederick Mayle  # looking at the text of this script.  This case will never be run,
250*9712c20fSFrederick Mayle  # since it is checked for above.
251*9712c20fSFrederick Mayle  exit 1
252*9712c20fSFrederick Mayle  ;;
253*9712c20fSFrederick Mayle
254*9712c20fSFrederick Maylesgi)
255*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
256*9712c20fSFrederick Mayle    "$@" "-Wp,-MDupdate,$tmpdepfile"
257*9712c20fSFrederick Mayle  else
258*9712c20fSFrederick Mayle    "$@" -MDupdate "$tmpdepfile"
259*9712c20fSFrederick Mayle  fi
260*9712c20fSFrederick Mayle  stat=$?
261*9712c20fSFrederick Mayle  if test $stat -ne 0; then
262*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
263*9712c20fSFrederick Mayle    exit $stat
264*9712c20fSFrederick Mayle  fi
265*9712c20fSFrederick Mayle  rm -f "$depfile"
266*9712c20fSFrederick Mayle
267*9712c20fSFrederick Mayle  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268*9712c20fSFrederick Mayle    echo "$object : \\" > "$depfile"
269*9712c20fSFrederick Mayle    # Clip off the initial element (the dependent).  Don't try to be
270*9712c20fSFrederick Mayle    # clever and replace this with sed code, as IRIX sed won't handle
271*9712c20fSFrederick Mayle    # lines with more than a fixed number of characters (4096 in
272*9712c20fSFrederick Mayle    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273*9712c20fSFrederick Mayle    # the IRIX cc adds comments like '#:fec' to the end of the
274*9712c20fSFrederick Mayle    # dependency line.
275*9712c20fSFrederick Mayle    tr ' ' "$nl" < "$tmpdepfile" \
276*9712c20fSFrederick Mayle      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277*9712c20fSFrederick Mayle      | tr "$nl" ' ' >> "$depfile"
278*9712c20fSFrederick Mayle    echo >> "$depfile"
279*9712c20fSFrederick Mayle    # The second pass generates a dummy entry for each header file.
280*9712c20fSFrederick Mayle    tr ' ' "$nl" < "$tmpdepfile" \
281*9712c20fSFrederick Mayle      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282*9712c20fSFrederick Mayle      >> "$depfile"
283*9712c20fSFrederick Mayle  else
284*9712c20fSFrederick Mayle    make_dummy_depfile
285*9712c20fSFrederick Mayle  fi
286*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
287*9712c20fSFrederick Mayle  ;;
288*9712c20fSFrederick Mayle
289*9712c20fSFrederick Maylexlc)
290*9712c20fSFrederick Mayle  # This case exists only to let depend.m4 do its work.  It works by
291*9712c20fSFrederick Mayle  # looking at the text of this script.  This case will never be run,
292*9712c20fSFrederick Mayle  # since it is checked for above.
293*9712c20fSFrederick Mayle  exit 1
294*9712c20fSFrederick Mayle  ;;
295*9712c20fSFrederick Mayle
296*9712c20fSFrederick Mayleaix)
297*9712c20fSFrederick Mayle  # The C for AIX Compiler uses -M and outputs the dependencies
298*9712c20fSFrederick Mayle  # in a .u file.  In older versions, this file always lives in the
299*9712c20fSFrederick Mayle  # current directory.  Also, the AIX compiler puts '$object:' at the
300*9712c20fSFrederick Mayle  # start of each line; $object doesn't have directory information.
301*9712c20fSFrederick Mayle  # Version 6 uses the directory in both cases.
302*9712c20fSFrederick Mayle  set_dir_from "$object"
303*9712c20fSFrederick Mayle  set_base_from "$object"
304*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
305*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.u
306*9712c20fSFrederick Mayle    tmpdepfile2=$base.u
307*9712c20fSFrederick Mayle    tmpdepfile3=$dir.libs/$base.u
308*9712c20fSFrederick Mayle    "$@" -Wc,-M
309*9712c20fSFrederick Mayle  else
310*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.u
311*9712c20fSFrederick Mayle    tmpdepfile2=$dir$base.u
312*9712c20fSFrederick Mayle    tmpdepfile3=$dir$base.u
313*9712c20fSFrederick Mayle    "$@" -M
314*9712c20fSFrederick Mayle  fi
315*9712c20fSFrederick Mayle  stat=$?
316*9712c20fSFrederick Mayle  if test $stat -ne 0; then
317*9712c20fSFrederick Mayle    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318*9712c20fSFrederick Mayle    exit $stat
319*9712c20fSFrederick Mayle  fi
320*9712c20fSFrederick Mayle
321*9712c20fSFrederick Mayle  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322*9712c20fSFrederick Mayle  do
323*9712c20fSFrederick Mayle    test -f "$tmpdepfile" && break
324*9712c20fSFrederick Mayle  done
325*9712c20fSFrederick Mayle  aix_post_process_depfile
326*9712c20fSFrederick Mayle  ;;
327*9712c20fSFrederick Mayle
328*9712c20fSFrederick Mayletcc)
329*9712c20fSFrederick Mayle  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330*9712c20fSFrederick Mayle  # FIXME: That version still under development at the moment of writing.
331*9712c20fSFrederick Mayle  #        Make that this statement remains true also for stable, released
332*9712c20fSFrederick Mayle  #        versions.
333*9712c20fSFrederick Mayle  # It will wrap lines (doesn't matter whether long or short) with a
334*9712c20fSFrederick Mayle  # trailing '\', as in:
335*9712c20fSFrederick Mayle  #
336*9712c20fSFrederick Mayle  #   foo.o : \
337*9712c20fSFrederick Mayle  #    foo.c \
338*9712c20fSFrederick Mayle  #    foo.h \
339*9712c20fSFrederick Mayle  #
340*9712c20fSFrederick Mayle  # It will put a trailing '\' even on the last line, and will use leading
341*9712c20fSFrederick Mayle  # spaces rather than leading tabs (at least since its commit 0394caf7
342*9712c20fSFrederick Mayle  # "Emit spaces for -MD").
343*9712c20fSFrederick Mayle  "$@" -MD -MF "$tmpdepfile"
344*9712c20fSFrederick Mayle  stat=$?
345*9712c20fSFrederick Mayle  if test $stat -ne 0; then
346*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
347*9712c20fSFrederick Mayle    exit $stat
348*9712c20fSFrederick Mayle  fi
349*9712c20fSFrederick Mayle  rm -f "$depfile"
350*9712c20fSFrederick Mayle  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351*9712c20fSFrederick Mayle  # We have to change lines of the first kind to '$object: \'.
352*9712c20fSFrederick Mayle  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353*9712c20fSFrederick Mayle  # And for each line of the second kind, we have to emit a 'dep.h:'
354*9712c20fSFrederick Mayle  # dummy dependency, to avoid the deleted-header problem.
355*9712c20fSFrederick Mayle  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
357*9712c20fSFrederick Mayle  ;;
358*9712c20fSFrederick Mayle
359*9712c20fSFrederick Mayle## The order of this option in the case statement is important, since the
360*9712c20fSFrederick Mayle## shell code in configure will try each of these formats in the order
361*9712c20fSFrederick Mayle## listed in this file.  A plain '-MD' option would be understood by many
362*9712c20fSFrederick Mayle## compilers, so we must ensure this comes after the gcc and icc options.
363*9712c20fSFrederick Maylepgcc)
364*9712c20fSFrederick Mayle  # Portland's C compiler understands '-MD'.
365*9712c20fSFrederick Mayle  # Will always output deps to 'file.d' where file is the root name of the
366*9712c20fSFrederick Mayle  # source file under compilation, even if file resides in a subdirectory.
367*9712c20fSFrederick Mayle  # The object file name does not affect the name of the '.d' file.
368*9712c20fSFrederick Mayle  # pgcc 10.2 will output
369*9712c20fSFrederick Mayle  #    foo.o: sub/foo.c sub/foo.h
370*9712c20fSFrederick Mayle  # and will wrap long lines using '\' :
371*9712c20fSFrederick Mayle  #    foo.o: sub/foo.c ... \
372*9712c20fSFrederick Mayle  #     sub/foo.h ... \
373*9712c20fSFrederick Mayle  #     ...
374*9712c20fSFrederick Mayle  set_dir_from "$object"
375*9712c20fSFrederick Mayle  # Use the source, not the object, to determine the base name, since
376*9712c20fSFrederick Mayle  # that's sadly what pgcc will do too.
377*9712c20fSFrederick Mayle  set_base_from "$source"
378*9712c20fSFrederick Mayle  tmpdepfile=$base.d
379*9712c20fSFrederick Mayle
380*9712c20fSFrederick Mayle  # For projects that build the same source file twice into different object
381*9712c20fSFrederick Mayle  # files, the pgcc approach of using the *source* file root name can cause
382*9712c20fSFrederick Mayle  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383*9712c20fSFrederick Mayle  # the same $tmpdepfile.
384*9712c20fSFrederick Mayle  lockdir=$base.d-lock
385*9712c20fSFrederick Mayle  trap "
386*9712c20fSFrederick Mayle    echo '$0: caught signal, cleaning up...' >&2
387*9712c20fSFrederick Mayle    rmdir '$lockdir'
388*9712c20fSFrederick Mayle    exit 1
389*9712c20fSFrederick Mayle  " 1 2 13 15
390*9712c20fSFrederick Mayle  numtries=100
391*9712c20fSFrederick Mayle  i=$numtries
392*9712c20fSFrederick Mayle  while test $i -gt 0; do
393*9712c20fSFrederick Mayle    # mkdir is a portable test-and-set.
394*9712c20fSFrederick Mayle    if mkdir "$lockdir" 2>/dev/null; then
395*9712c20fSFrederick Mayle      # This process acquired the lock.
396*9712c20fSFrederick Mayle      "$@" -MD
397*9712c20fSFrederick Mayle      stat=$?
398*9712c20fSFrederick Mayle      # Release the lock.
399*9712c20fSFrederick Mayle      rmdir "$lockdir"
400*9712c20fSFrederick Mayle      break
401*9712c20fSFrederick Mayle    else
402*9712c20fSFrederick Mayle      # If the lock is being held by a different process, wait
403*9712c20fSFrederick Mayle      # until the winning process is done or we timeout.
404*9712c20fSFrederick Mayle      while test -d "$lockdir" && test $i -gt 0; do
405*9712c20fSFrederick Mayle        sleep 1
406*9712c20fSFrederick Mayle        i=`expr $i - 1`
407*9712c20fSFrederick Mayle      done
408*9712c20fSFrederick Mayle    fi
409*9712c20fSFrederick Mayle    i=`expr $i - 1`
410*9712c20fSFrederick Mayle  done
411*9712c20fSFrederick Mayle  trap - 1 2 13 15
412*9712c20fSFrederick Mayle  if test $i -le 0; then
413*9712c20fSFrederick Mayle    echo "$0: failed to acquire lock after $numtries attempts" >&2
414*9712c20fSFrederick Mayle    echo "$0: check lockdir '$lockdir'" >&2
415*9712c20fSFrederick Mayle    exit 1
416*9712c20fSFrederick Mayle  fi
417*9712c20fSFrederick Mayle
418*9712c20fSFrederick Mayle  if test $stat -ne 0; then
419*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
420*9712c20fSFrederick Mayle    exit $stat
421*9712c20fSFrederick Mayle  fi
422*9712c20fSFrederick Mayle  rm -f "$depfile"
423*9712c20fSFrederick Mayle  # Each line is of the form `foo.o: dependent.h',
424*9712c20fSFrederick Mayle  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425*9712c20fSFrederick Mayle  # Do two passes, one to just change these to
426*9712c20fSFrederick Mayle  # `$object: dependent.h' and one to simply `dependent.h:'.
427*9712c20fSFrederick Mayle  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428*9712c20fSFrederick Mayle  # Some versions of the HPUX 10.20 sed can't process this invocation
429*9712c20fSFrederick Mayle  # correctly.  Breaking it into two sed invocations is a workaround.
430*9712c20fSFrederick Mayle  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431*9712c20fSFrederick Mayle    | sed -e 's/$/ :/' >> "$depfile"
432*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
433*9712c20fSFrederick Mayle  ;;
434*9712c20fSFrederick Mayle
435*9712c20fSFrederick Maylehp2)
436*9712c20fSFrederick Mayle  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437*9712c20fSFrederick Mayle  # compilers, which have integrated preprocessors.  The correct option
438*9712c20fSFrederick Mayle  # to use with these is +Maked; it writes dependencies to a file named
439*9712c20fSFrederick Mayle  # 'foo.d', which lands next to the object file, wherever that
440*9712c20fSFrederick Mayle  # happens to be.
441*9712c20fSFrederick Mayle  # Much of this is similar to the tru64 case; see comments there.
442*9712c20fSFrederick Mayle  set_dir_from  "$object"
443*9712c20fSFrederick Mayle  set_base_from "$object"
444*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
445*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.d
446*9712c20fSFrederick Mayle    tmpdepfile2=$dir.libs/$base.d
447*9712c20fSFrederick Mayle    "$@" -Wc,+Maked
448*9712c20fSFrederick Mayle  else
449*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.d
450*9712c20fSFrederick Mayle    tmpdepfile2=$dir$base.d
451*9712c20fSFrederick Mayle    "$@" +Maked
452*9712c20fSFrederick Mayle  fi
453*9712c20fSFrederick Mayle  stat=$?
454*9712c20fSFrederick Mayle  if test $stat -ne 0; then
455*9712c20fSFrederick Mayle     rm -f "$tmpdepfile1" "$tmpdepfile2"
456*9712c20fSFrederick Mayle     exit $stat
457*9712c20fSFrederick Mayle  fi
458*9712c20fSFrederick Mayle
459*9712c20fSFrederick Mayle  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460*9712c20fSFrederick Mayle  do
461*9712c20fSFrederick Mayle    test -f "$tmpdepfile" && break
462*9712c20fSFrederick Mayle  done
463*9712c20fSFrederick Mayle  if test -f "$tmpdepfile"; then
464*9712c20fSFrederick Mayle    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465*9712c20fSFrederick Mayle    # Add 'dependent.h:' lines.
466*9712c20fSFrederick Mayle    sed -ne '2,${
467*9712c20fSFrederick Mayle               s/^ *//
468*9712c20fSFrederick Mayle               s/ \\*$//
469*9712c20fSFrederick Mayle               s/$/:/
470*9712c20fSFrederick Mayle               p
471*9712c20fSFrederick Mayle             }' "$tmpdepfile" >> "$depfile"
472*9712c20fSFrederick Mayle  else
473*9712c20fSFrederick Mayle    make_dummy_depfile
474*9712c20fSFrederick Mayle  fi
475*9712c20fSFrederick Mayle  rm -f "$tmpdepfile" "$tmpdepfile2"
476*9712c20fSFrederick Mayle  ;;
477*9712c20fSFrederick Mayle
478*9712c20fSFrederick Mayletru64)
479*9712c20fSFrederick Mayle  # The Tru64 compiler uses -MD to generate dependencies as a side
480*9712c20fSFrederick Mayle  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481*9712c20fSFrederick Mayle  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482*9712c20fSFrederick Mayle  # dependencies in 'foo.d' instead, so we check for that too.
483*9712c20fSFrederick Mayle  # Subdirectories are respected.
484*9712c20fSFrederick Mayle  set_dir_from  "$object"
485*9712c20fSFrederick Mayle  set_base_from "$object"
486*9712c20fSFrederick Mayle
487*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
488*9712c20fSFrederick Mayle    # Libtool generates 2 separate objects for the 2 libraries.  These
489*9712c20fSFrederick Mayle    # two compilations output dependencies in $dir.libs/$base.o.d and
490*9712c20fSFrederick Mayle    # in $dir$base.o.d.  We have to check for both files, because
491*9712c20fSFrederick Mayle    # one of the two compilations can be disabled.  We should prefer
492*9712c20fSFrederick Mayle    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493*9712c20fSFrederick Mayle    # automatically cleaned when .libs/ is deleted, while ignoring
494*9712c20fSFrederick Mayle    # the former would cause a distcleancheck panic.
495*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496*9712c20fSFrederick Mayle    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497*9712c20fSFrederick Mayle    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498*9712c20fSFrederick Mayle    "$@" -Wc,-MD
499*9712c20fSFrederick Mayle  else
500*9712c20fSFrederick Mayle    tmpdepfile1=$dir$base.d
501*9712c20fSFrederick Mayle    tmpdepfile2=$dir$base.d
502*9712c20fSFrederick Mayle    tmpdepfile3=$dir$base.d
503*9712c20fSFrederick Mayle    "$@" -MD
504*9712c20fSFrederick Mayle  fi
505*9712c20fSFrederick Mayle
506*9712c20fSFrederick Mayle  stat=$?
507*9712c20fSFrederick Mayle  if test $stat -ne 0; then
508*9712c20fSFrederick Mayle    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509*9712c20fSFrederick Mayle    exit $stat
510*9712c20fSFrederick Mayle  fi
511*9712c20fSFrederick Mayle
512*9712c20fSFrederick Mayle  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513*9712c20fSFrederick Mayle  do
514*9712c20fSFrederick Mayle    test -f "$tmpdepfile" && break
515*9712c20fSFrederick Mayle  done
516*9712c20fSFrederick Mayle  # Same post-processing that is required for AIX mode.
517*9712c20fSFrederick Mayle  aix_post_process_depfile
518*9712c20fSFrederick Mayle  ;;
519*9712c20fSFrederick Mayle
520*9712c20fSFrederick Maylemsvc7)
521*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
522*9712c20fSFrederick Mayle    showIncludes=-Wc,-showIncludes
523*9712c20fSFrederick Mayle  else
524*9712c20fSFrederick Mayle    showIncludes=-showIncludes
525*9712c20fSFrederick Mayle  fi
526*9712c20fSFrederick Mayle  "$@" $showIncludes > "$tmpdepfile"
527*9712c20fSFrederick Mayle  stat=$?
528*9712c20fSFrederick Mayle  grep -v '^Note: including file: ' "$tmpdepfile"
529*9712c20fSFrederick Mayle  if test $stat -ne 0; then
530*9712c20fSFrederick Mayle    rm -f "$tmpdepfile"
531*9712c20fSFrederick Mayle    exit $stat
532*9712c20fSFrederick Mayle  fi
533*9712c20fSFrederick Mayle  rm -f "$depfile"
534*9712c20fSFrederick Mayle  echo "$object : \\" > "$depfile"
535*9712c20fSFrederick Mayle  # The first sed program below extracts the file names and escapes
536*9712c20fSFrederick Mayle  # backslashes for cygpath.  The second sed program outputs the file
537*9712c20fSFrederick Mayle  # name when reading, but also accumulates all include files in the
538*9712c20fSFrederick Mayle  # hold buffer in order to output them again at the end.  This only
539*9712c20fSFrederick Mayle  # works with sed implementations that can handle large buffers.
540*9712c20fSFrederick Mayle  sed < "$tmpdepfile" -n '
541*9712c20fSFrederick Mayle/^Note: including file:  *\(.*\)/ {
542*9712c20fSFrederick Mayle  s//\1/
543*9712c20fSFrederick Mayle  s/\\/\\\\/g
544*9712c20fSFrederick Mayle  p
545*9712c20fSFrederick Mayle}' | $cygpath_u | sort -u | sed -n '
546*9712c20fSFrederick Mayles/ /\\ /g
547*9712c20fSFrederick Mayles/\(.*\)/'"$tab"'\1 \\/p
548*9712c20fSFrederick Mayles/.\(.*\) \\/\1:/
549*9712c20fSFrederick MayleH
550*9712c20fSFrederick Mayle$ {
551*9712c20fSFrederick Mayle  s/.*/'"$tab"'/
552*9712c20fSFrederick Mayle  G
553*9712c20fSFrederick Mayle  p
554*9712c20fSFrederick Mayle}' >> "$depfile"
555*9712c20fSFrederick Mayle  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
557*9712c20fSFrederick Mayle  ;;
558*9712c20fSFrederick Mayle
559*9712c20fSFrederick Maylemsvc7msys)
560*9712c20fSFrederick Mayle  # This case exists only to let depend.m4 do its work.  It works by
561*9712c20fSFrederick Mayle  # looking at the text of this script.  This case will never be run,
562*9712c20fSFrederick Mayle  # since it is checked for above.
563*9712c20fSFrederick Mayle  exit 1
564*9712c20fSFrederick Mayle  ;;
565*9712c20fSFrederick Mayle
566*9712c20fSFrederick Mayle#nosideeffect)
567*9712c20fSFrederick Mayle  # This comment above is used by automake to tell side-effect
568*9712c20fSFrederick Mayle  # dependency tracking mechanisms from slower ones.
569*9712c20fSFrederick Mayle
570*9712c20fSFrederick Mayledashmstdout)
571*9712c20fSFrederick Mayle  # Important note: in order to support this mode, a compiler *must*
572*9712c20fSFrederick Mayle  # always write the preprocessed file to stdout, regardless of -o.
573*9712c20fSFrederick Mayle  "$@" || exit $?
574*9712c20fSFrederick Mayle
575*9712c20fSFrederick Mayle  # Remove the call to Libtool.
576*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
577*9712c20fSFrederick Mayle    while test "X$1" != 'X--mode=compile'; do
578*9712c20fSFrederick Mayle      shift
579*9712c20fSFrederick Mayle    done
580*9712c20fSFrederick Mayle    shift
581*9712c20fSFrederick Mayle  fi
582*9712c20fSFrederick Mayle
583*9712c20fSFrederick Mayle  # Remove '-o $object'.
584*9712c20fSFrederick Mayle  IFS=" "
585*9712c20fSFrederick Mayle  for arg
586*9712c20fSFrederick Mayle  do
587*9712c20fSFrederick Mayle    case $arg in
588*9712c20fSFrederick Mayle    -o)
589*9712c20fSFrederick Mayle      shift
590*9712c20fSFrederick Mayle      ;;
591*9712c20fSFrederick Mayle    $object)
592*9712c20fSFrederick Mayle      shift
593*9712c20fSFrederick Mayle      ;;
594*9712c20fSFrederick Mayle    *)
595*9712c20fSFrederick Mayle      set fnord "$@" "$arg"
596*9712c20fSFrederick Mayle      shift # fnord
597*9712c20fSFrederick Mayle      shift # $arg
598*9712c20fSFrederick Mayle      ;;
599*9712c20fSFrederick Mayle    esac
600*9712c20fSFrederick Mayle  done
601*9712c20fSFrederick Mayle
602*9712c20fSFrederick Mayle  test -z "$dashmflag" && dashmflag=-M
603*9712c20fSFrederick Mayle  # Require at least two characters before searching for ':'
604*9712c20fSFrederick Mayle  # in the target name.  This is to cope with DOS-style filenames:
605*9712c20fSFrederick Mayle  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606*9712c20fSFrederick Mayle  "$@" $dashmflag |
607*9712c20fSFrederick Mayle    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608*9712c20fSFrederick Mayle  rm -f "$depfile"
609*9712c20fSFrederick Mayle  cat < "$tmpdepfile" > "$depfile"
610*9712c20fSFrederick Mayle  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611*9712c20fSFrederick Mayle  # correctly.  Breaking it into two sed invocations is a workaround.
612*9712c20fSFrederick Mayle  tr ' ' "$nl" < "$tmpdepfile" \
613*9712c20fSFrederick Mayle    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614*9712c20fSFrederick Mayle    | sed -e 's/$/ :/' >> "$depfile"
615*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
616*9712c20fSFrederick Mayle  ;;
617*9712c20fSFrederick Mayle
618*9712c20fSFrederick MayledashXmstdout)
619*9712c20fSFrederick Mayle  # This case only exists to satisfy depend.m4.  It is never actually
620*9712c20fSFrederick Mayle  # run, as this mode is specially recognized in the preamble.
621*9712c20fSFrederick Mayle  exit 1
622*9712c20fSFrederick Mayle  ;;
623*9712c20fSFrederick Mayle
624*9712c20fSFrederick Maylemakedepend)
625*9712c20fSFrederick Mayle  "$@" || exit $?
626*9712c20fSFrederick Mayle  # Remove any Libtool call
627*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
628*9712c20fSFrederick Mayle    while test "X$1" != 'X--mode=compile'; do
629*9712c20fSFrederick Mayle      shift
630*9712c20fSFrederick Mayle    done
631*9712c20fSFrederick Mayle    shift
632*9712c20fSFrederick Mayle  fi
633*9712c20fSFrederick Mayle  # X makedepend
634*9712c20fSFrederick Mayle  shift
635*9712c20fSFrederick Mayle  cleared=no eat=no
636*9712c20fSFrederick Mayle  for arg
637*9712c20fSFrederick Mayle  do
638*9712c20fSFrederick Mayle    case $cleared in
639*9712c20fSFrederick Mayle    no)
640*9712c20fSFrederick Mayle      set ""; shift
641*9712c20fSFrederick Mayle      cleared=yes ;;
642*9712c20fSFrederick Mayle    esac
643*9712c20fSFrederick Mayle    if test $eat = yes; then
644*9712c20fSFrederick Mayle      eat=no
645*9712c20fSFrederick Mayle      continue
646*9712c20fSFrederick Mayle    fi
647*9712c20fSFrederick Mayle    case "$arg" in
648*9712c20fSFrederick Mayle    -D*|-I*)
649*9712c20fSFrederick Mayle      set fnord "$@" "$arg"; shift ;;
650*9712c20fSFrederick Mayle    # Strip any option that makedepend may not understand.  Remove
651*9712c20fSFrederick Mayle    # the object too, otherwise makedepend will parse it as a source file.
652*9712c20fSFrederick Mayle    -arch)
653*9712c20fSFrederick Mayle      eat=yes ;;
654*9712c20fSFrederick Mayle    -*|$object)
655*9712c20fSFrederick Mayle      ;;
656*9712c20fSFrederick Mayle    *)
657*9712c20fSFrederick Mayle      set fnord "$@" "$arg"; shift ;;
658*9712c20fSFrederick Mayle    esac
659*9712c20fSFrederick Mayle  done
660*9712c20fSFrederick Mayle  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661*9712c20fSFrederick Mayle  touch "$tmpdepfile"
662*9712c20fSFrederick Mayle  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663*9712c20fSFrederick Mayle  rm -f "$depfile"
664*9712c20fSFrederick Mayle  # makedepend may prepend the VPATH from the source file name to the object.
665*9712c20fSFrederick Mayle  # No need to regex-escape $object, excess matching of '.' is harmless.
666*9712c20fSFrederick Mayle  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667*9712c20fSFrederick Mayle  # Some versions of the HPUX 10.20 sed can't process the last invocation
668*9712c20fSFrederick Mayle  # correctly.  Breaking it into two sed invocations is a workaround.
669*9712c20fSFrederick Mayle  sed '1,2d' "$tmpdepfile" \
670*9712c20fSFrederick Mayle    | tr ' ' "$nl" \
671*9712c20fSFrederick Mayle    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672*9712c20fSFrederick Mayle    | sed -e 's/$/ :/' >> "$depfile"
673*9712c20fSFrederick Mayle  rm -f "$tmpdepfile" "$tmpdepfile".bak
674*9712c20fSFrederick Mayle  ;;
675*9712c20fSFrederick Mayle
676*9712c20fSFrederick Maylecpp)
677*9712c20fSFrederick Mayle  # Important note: in order to support this mode, a compiler *must*
678*9712c20fSFrederick Mayle  # always write the preprocessed file to stdout.
679*9712c20fSFrederick Mayle  "$@" || exit $?
680*9712c20fSFrederick Mayle
681*9712c20fSFrederick Mayle  # Remove the call to Libtool.
682*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
683*9712c20fSFrederick Mayle    while test "X$1" != 'X--mode=compile'; do
684*9712c20fSFrederick Mayle      shift
685*9712c20fSFrederick Mayle    done
686*9712c20fSFrederick Mayle    shift
687*9712c20fSFrederick Mayle  fi
688*9712c20fSFrederick Mayle
689*9712c20fSFrederick Mayle  # Remove '-o $object'.
690*9712c20fSFrederick Mayle  IFS=" "
691*9712c20fSFrederick Mayle  for arg
692*9712c20fSFrederick Mayle  do
693*9712c20fSFrederick Mayle    case $arg in
694*9712c20fSFrederick Mayle    -o)
695*9712c20fSFrederick Mayle      shift
696*9712c20fSFrederick Mayle      ;;
697*9712c20fSFrederick Mayle    $object)
698*9712c20fSFrederick Mayle      shift
699*9712c20fSFrederick Mayle      ;;
700*9712c20fSFrederick Mayle    *)
701*9712c20fSFrederick Mayle      set fnord "$@" "$arg"
702*9712c20fSFrederick Mayle      shift # fnord
703*9712c20fSFrederick Mayle      shift # $arg
704*9712c20fSFrederick Mayle      ;;
705*9712c20fSFrederick Mayle    esac
706*9712c20fSFrederick Mayle  done
707*9712c20fSFrederick Mayle
708*9712c20fSFrederick Mayle  "$@" -E \
709*9712c20fSFrederick Mayle    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710*9712c20fSFrederick Mayle             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711*9712c20fSFrederick Mayle    | sed '$ s: \\$::' > "$tmpdepfile"
712*9712c20fSFrederick Mayle  rm -f "$depfile"
713*9712c20fSFrederick Mayle  echo "$object : \\" > "$depfile"
714*9712c20fSFrederick Mayle  cat < "$tmpdepfile" >> "$depfile"
715*9712c20fSFrederick Mayle  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
717*9712c20fSFrederick Mayle  ;;
718*9712c20fSFrederick Mayle
719*9712c20fSFrederick Maylemsvisualcpp)
720*9712c20fSFrederick Mayle  # Important note: in order to support this mode, a compiler *must*
721*9712c20fSFrederick Mayle  # always write the preprocessed file to stdout.
722*9712c20fSFrederick Mayle  "$@" || exit $?
723*9712c20fSFrederick Mayle
724*9712c20fSFrederick Mayle  # Remove the call to Libtool.
725*9712c20fSFrederick Mayle  if test "$libtool" = yes; then
726*9712c20fSFrederick Mayle    while test "X$1" != 'X--mode=compile'; do
727*9712c20fSFrederick Mayle      shift
728*9712c20fSFrederick Mayle    done
729*9712c20fSFrederick Mayle    shift
730*9712c20fSFrederick Mayle  fi
731*9712c20fSFrederick Mayle
732*9712c20fSFrederick Mayle  IFS=" "
733*9712c20fSFrederick Mayle  for arg
734*9712c20fSFrederick Mayle  do
735*9712c20fSFrederick Mayle    case "$arg" in
736*9712c20fSFrederick Mayle    -o)
737*9712c20fSFrederick Mayle      shift
738*9712c20fSFrederick Mayle      ;;
739*9712c20fSFrederick Mayle    $object)
740*9712c20fSFrederick Mayle      shift
741*9712c20fSFrederick Mayle      ;;
742*9712c20fSFrederick Mayle    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743*9712c20fSFrederick Mayle        set fnord "$@"
744*9712c20fSFrederick Mayle        shift
745*9712c20fSFrederick Mayle        shift
746*9712c20fSFrederick Mayle        ;;
747*9712c20fSFrederick Mayle    *)
748*9712c20fSFrederick Mayle        set fnord "$@" "$arg"
749*9712c20fSFrederick Mayle        shift
750*9712c20fSFrederick Mayle        shift
751*9712c20fSFrederick Mayle        ;;
752*9712c20fSFrederick Mayle    esac
753*9712c20fSFrederick Mayle  done
754*9712c20fSFrederick Mayle  "$@" -E 2>/dev/null |
755*9712c20fSFrederick Mayle  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756*9712c20fSFrederick Mayle  rm -f "$depfile"
757*9712c20fSFrederick Mayle  echo "$object : \\" > "$depfile"
758*9712c20fSFrederick Mayle  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759*9712c20fSFrederick Mayle  echo "$tab" >> "$depfile"
760*9712c20fSFrederick Mayle  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761*9712c20fSFrederick Mayle  rm -f "$tmpdepfile"
762*9712c20fSFrederick Mayle  ;;
763*9712c20fSFrederick Mayle
764*9712c20fSFrederick Maylemsvcmsys)
765*9712c20fSFrederick Mayle  # This case exists only to let depend.m4 do its work.  It works by
766*9712c20fSFrederick Mayle  # looking at the text of this script.  This case will never be run,
767*9712c20fSFrederick Mayle  # since it is checked for above.
768*9712c20fSFrederick Mayle  exit 1
769*9712c20fSFrederick Mayle  ;;
770*9712c20fSFrederick Mayle
771*9712c20fSFrederick Maylenone)
772*9712c20fSFrederick Mayle  exec "$@"
773*9712c20fSFrederick Mayle  ;;
774*9712c20fSFrederick Mayle
775*9712c20fSFrederick Mayle*)
776*9712c20fSFrederick Mayle  echo "Unknown depmode $depmode" 1>&2
777*9712c20fSFrederick Mayle  exit 1
778*9712c20fSFrederick Mayle  ;;
779*9712c20fSFrederick Mayleesac
780*9712c20fSFrederick Mayle
781*9712c20fSFrederick Mayleexit 0
782*9712c20fSFrederick Mayle
783*9712c20fSFrederick Mayle# Local Variables:
784*9712c20fSFrederick Mayle# mode: shell-script
785*9712c20fSFrederick Mayle# sh-indentation: 2
786*9712c20fSFrederick Mayle# eval: (add-hook 'before-save-hook 'time-stamp)
787*9712c20fSFrederick Mayle# time-stamp-start: "scriptversion="
788*9712c20fSFrederick Mayle# time-stamp-format: "%:y-%02m-%02d.%02H"
789*9712c20fSFrederick Mayle# time-stamp-time-zone: "UTC0"
790*9712c20fSFrederick Mayle# time-stamp-end: "; # UTC"
791*9712c20fSFrederick Mayle# End:
792