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