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