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