depcomp revision 9e7bcd65
1444c061aSmrg#! /bin/sh
2444c061aSmrg# depcomp - compile a program generating dependencies as side-effects
3444c061aSmrg
49e7bcd65Smrgscriptversion=2012-10-18.11; # UTC
5444c061aSmrg
69e7bcd65Smrg# Copyright (C) 1999-2013 Free Software Foundation, Inc.
7444c061aSmrg
8444c061aSmrg# This program is free software; you can redistribute it and/or modify
9444c061aSmrg# it under the terms of the GNU General Public License as published by
10444c061aSmrg# the Free Software Foundation; either version 2, or (at your option)
11444c061aSmrg# any later version.
12444c061aSmrg
13444c061aSmrg# This program is distributed in the hope that it will be useful,
14444c061aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15444c061aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16444c061aSmrg# GNU General Public License for more details.
17444c061aSmrg
18444c061aSmrg# You should have received a copy of the GNU General Public License
192ae83157Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20444c061aSmrg
21444c061aSmrg# As a special exception to the GNU General Public License, if you
22444c061aSmrg# distribute this file as part of a program that contains a
23444c061aSmrg# configuration script generated by Autoconf, you may include it under
24444c061aSmrg# the same distribution terms that you use for the rest of that program.
25444c061aSmrg
26444c061aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27444c061aSmrg
28444c061aSmrgcase $1 in
29444c061aSmrg  '')
309e7bcd65Smrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
319e7bcd65Smrg    exit 1;
329e7bcd65Smrg    ;;
33444c061aSmrg  -h | --h*)
34444c061aSmrg    cat <<\EOF
35444c061aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36444c061aSmrg
37444c061aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38444c061aSmrgas side-effects.
39444c061aSmrg
40444c061aSmrgEnvironment variables:
41444c061aSmrg  depmode     Dependency tracking mode.
429e7bcd65Smrg  source      Source file read by 'PROGRAMS ARGS'.
439e7bcd65Smrg  object      Object file output by 'PROGRAMS ARGS'.
44444c061aSmrg  DEPDIR      directory where to store dependencies.
45444c061aSmrg  depfile     Dependency file to output.
469e7bcd65Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
47444c061aSmrg  libtool     Whether libtool is used (yes/no).
48444c061aSmrg
49444c061aSmrgReport bugs to <bug-automake@gnu.org>.
50444c061aSmrgEOF
51444c061aSmrg    exit $?
52444c061aSmrg    ;;
53444c061aSmrg  -v | --v*)
54444c061aSmrg    echo "depcomp $scriptversion"
55444c061aSmrg    exit $?
56444c061aSmrg    ;;
57444c061aSmrgesac
58444c061aSmrg
599e7bcd65Smrg# Get the directory component of the given path, and save it in the
609e7bcd65Smrg# global variables '$dir'.  Note that this directory component will
619e7bcd65Smrg# be either empty or ending with a '/' character.  This is deliberate.
629e7bcd65Smrgset_dir_from ()
639e7bcd65Smrg{
649e7bcd65Smrg  case $1 in
659e7bcd65Smrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
669e7bcd65Smrg      *) dir=;;
679e7bcd65Smrg  esac
689e7bcd65Smrg}
699e7bcd65Smrg
709e7bcd65Smrg# Get the suffix-stripped basename of the given path, and save it the
719e7bcd65Smrg# global variable '$base'.
729e7bcd65Smrgset_base_from ()
739e7bcd65Smrg{
749e7bcd65Smrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
759e7bcd65Smrg}
769e7bcd65Smrg
779e7bcd65Smrg# If no dependency file was actually created by the compiler invocation,
789e7bcd65Smrg# we still have to create a dummy depfile, to avoid errors with the
799e7bcd65Smrg# Makefile "include basename.Plo" scheme.
809e7bcd65Smrgmake_dummy_depfile ()
819e7bcd65Smrg{
829e7bcd65Smrg  echo "#dummy" > "$depfile"
839e7bcd65Smrg}
849e7bcd65Smrg
859e7bcd65Smrg# Factor out some common post-processing of the generated depfile.
869e7bcd65Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
879e7bcd65Smrgaix_post_process_depfile ()
889e7bcd65Smrg{
899e7bcd65Smrg  # If the compiler actually managed to produce a dependency file,
909e7bcd65Smrg  # post-process it.
919e7bcd65Smrg  if test -f "$tmpdepfile"; then
929e7bcd65Smrg    # Each line is of the form 'foo.o: dependency.h'.
939e7bcd65Smrg    # Do two passes, one to just change these to
949e7bcd65Smrg    #   $object: dependency.h
959e7bcd65Smrg    # and one to simply output
969e7bcd65Smrg    #   dependency.h:
979e7bcd65Smrg    # which is needed to avoid the deleted-header problem.
989e7bcd65Smrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
999e7bcd65Smrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
1009e7bcd65Smrg    } > "$depfile"
1019e7bcd65Smrg    rm -f "$tmpdepfile"
1029e7bcd65Smrg  else
1039e7bcd65Smrg    make_dummy_depfile
1049e7bcd65Smrg  fi
1059e7bcd65Smrg}
1069e7bcd65Smrg
1079e7bcd65Smrg# A tabulation character.
1089e7bcd65Smrgtab='	'
1099e7bcd65Smrg# A newline character.
1109e7bcd65Smrgnl='
1119e7bcd65Smrg'
1129e7bcd65Smrg# Character ranges might be problematic outside the C locale.
1139e7bcd65Smrg# These definitions help.
1149e7bcd65Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
1159e7bcd65Smrglower=abcdefghijklmnopqrstuvwxyz
1169e7bcd65Smrgdigits=0123456789
1179e7bcd65Smrgalpha=${upper}${lower}
1189e7bcd65Smrg
119444c061aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120444c061aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121444c061aSmrg  exit 1
122444c061aSmrgfi
123444c061aSmrg
124444c061aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125444c061aSmrgdepfile=${depfile-`echo "$object" |
126444c061aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127444c061aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128444c061aSmrg
129444c061aSmrgrm -f "$tmpdepfile"
130444c061aSmrg
1319e7bcd65Smrg# Avoid interferences from the environment.
1329e7bcd65Smrggccflag= dashmflag=
1339e7bcd65Smrg
134444c061aSmrg# Some modes work just like other modes, but use different flags.  We
135444c061aSmrg# parameterize here, but still list the modes in the big case below,
136444c061aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
137444c061aSmrg# here, because this file can only contain one case statement.
138444c061aSmrgif test "$depmode" = hp; then
139444c061aSmrg  # HP compiler uses -M and no extra arg.
140444c061aSmrg  gccflag=-M
141444c061aSmrg  depmode=gcc
142444c061aSmrgfi
143444c061aSmrg
144444c061aSmrgif test "$depmode" = dashXmstdout; then
1459e7bcd65Smrg  # This is just like dashmstdout with a different argument.
1469e7bcd65Smrg  dashmflag=-xM
1479e7bcd65Smrg  depmode=dashmstdout
148444c061aSmrgfi
149444c061aSmrg
1502ae83157Smrgcygpath_u="cygpath -u -f -"
1512ae83157Smrgif test "$depmode" = msvcmsys; then
1529e7bcd65Smrg  # This is just like msvisualcpp but w/o cygpath translation.
1539e7bcd65Smrg  # Just convert the backslash-escaped backslashes to single forward
1549e7bcd65Smrg  # slashes to satisfy depend.m4
1559e7bcd65Smrg  cygpath_u='sed s,\\\\,/,g'
1569e7bcd65Smrg  depmode=msvisualcpp
1579e7bcd65Smrgfi
1589e7bcd65Smrg
1599e7bcd65Smrgif test "$depmode" = msvc7msys; then
1609e7bcd65Smrg  # This is just like msvc7 but w/o cygpath translation.
1619e7bcd65Smrg  # Just convert the backslash-escaped backslashes to single forward
1629e7bcd65Smrg  # slashes to satisfy depend.m4
1639e7bcd65Smrg  cygpath_u='sed s,\\\\,/,g'
1649e7bcd65Smrg  depmode=msvc7
1659e7bcd65Smrgfi
1669e7bcd65Smrg
1679e7bcd65Smrgif test "$depmode" = xlc; then
1689e7bcd65Smrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
1699e7bcd65Smrg  gccflag=-qmakedep=gcc,-MF
1709e7bcd65Smrg  depmode=gcc
1712ae83157Smrgfi
1722ae83157Smrg
173444c061aSmrgcase "$depmode" in
174444c061aSmrggcc3)
175444c061aSmrg## gcc 3 implements dependency tracking that does exactly what
176444c061aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177444c061aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1782265a131Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1792265a131Smrg## the command line argument order; so add the flags where they
1802265a131Smrg## appear in depend2.am.  Note that the slowdown incurred here
1812265a131Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1822265a131Smrg  for arg
1832265a131Smrg  do
1842265a131Smrg    case $arg in
1852265a131Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1862265a131Smrg    *)  set fnord "$@" "$arg" ;;
1872265a131Smrg    esac
1882265a131Smrg    shift # fnord
1892265a131Smrg    shift # $arg
1902265a131Smrg  done
1912265a131Smrg  "$@"
192444c061aSmrg  stat=$?
1939e7bcd65Smrg  if test $stat -ne 0; then
194444c061aSmrg    rm -f "$tmpdepfile"
195444c061aSmrg    exit $stat
196444c061aSmrg  fi
197444c061aSmrg  mv "$tmpdepfile" "$depfile"
198444c061aSmrg  ;;
199444c061aSmrg
200444c061aSmrggcc)
2019e7bcd65Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
2029e7bcd65Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
2039e7bcd65Smrg## (see the conditional assignment to $gccflag above).
204444c061aSmrg## There are various ways to get dependency output from gcc.  Here's
205444c061aSmrg## why we pick this rather obscure method:
206444c061aSmrg## - Don't want to use -MD because we'd like the dependencies to end
207444c061aSmrg##   up in a subdir.  Having to rename by hand is ugly.
208444c061aSmrg##   (We might end up doing this anyway to support other compilers.)
209444c061aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
2109e7bcd65Smrg##   -MM, not -M (despite what the docs say).  Also, it might not be
2119e7bcd65Smrg##   supported by the other compilers which use the 'gcc' depmode.
212444c061aSmrg## - Using -M directly means running the compiler twice (even worse
213444c061aSmrg##   than renaming).
214444c061aSmrg  if test -z "$gccflag"; then
215444c061aSmrg    gccflag=-MD,
216444c061aSmrg  fi
217444c061aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
218444c061aSmrg  stat=$?
2199e7bcd65Smrg  if test $stat -ne 0; then
220444c061aSmrg    rm -f "$tmpdepfile"
221444c061aSmrg    exit $stat
222444c061aSmrg  fi
223444c061aSmrg  rm -f "$depfile"
224444c061aSmrg  echo "$object : \\" > "$depfile"
2259e7bcd65Smrg  # The second -e expression handles DOS-style file names with drive
2269e7bcd65Smrg  # letters.
227444c061aSmrg  sed -e 's/^[^:]*: / /' \
228444c061aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
2299e7bcd65Smrg## This next piece of magic avoids the "deleted header file" problem.
230444c061aSmrg## The problem is that when a header file which appears in a .P file
231444c061aSmrg## is deleted, the dependency causes make to die (because there is
232444c061aSmrg## typically no way to rebuild the header).  We avoid this by adding
233444c061aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
234444c061aSmrg## this for us directly.
2359e7bcd65Smrg## Some versions of gcc put a space before the ':'.  On the theory
236444c061aSmrg## that the space means something, we add a space to the output as
2379e7bcd65Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
2389e7bcd65Smrg## to the object.  Take care to not repeat it in the output.
239444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
240444c061aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
2419e7bcd65Smrg  tr ' ' "$nl" < "$tmpdepfile" \
2429e7bcd65Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
2439e7bcd65Smrg    | sed -e 's/$/ :/' >> "$depfile"
244444c061aSmrg  rm -f "$tmpdepfile"
245444c061aSmrg  ;;
246444c061aSmrg
247444c061aSmrghp)
248444c061aSmrg  # This case exists only to let depend.m4 do its work.  It works by
249444c061aSmrg  # looking at the text of this script.  This case will never be run,
250444c061aSmrg  # since it is checked for above.
251444c061aSmrg  exit 1
252444c061aSmrg  ;;
253444c061aSmrg
254444c061aSmrgsgi)
255444c061aSmrg  if test "$libtool" = yes; then
256444c061aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
257444c061aSmrg  else
258444c061aSmrg    "$@" -MDupdate "$tmpdepfile"
259444c061aSmrg  fi
260444c061aSmrg  stat=$?
2619e7bcd65Smrg  if test $stat -ne 0; then
262444c061aSmrg    rm -f "$tmpdepfile"
263444c061aSmrg    exit $stat
264444c061aSmrg  fi
265444c061aSmrg  rm -f "$depfile"
266444c061aSmrg
267444c061aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268444c061aSmrg    echo "$object : \\" > "$depfile"
269444c061aSmrg    # Clip off the initial element (the dependent).  Don't try to be
270444c061aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
271444c061aSmrg    # lines with more than a fixed number of characters (4096 in
272444c061aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2739e7bcd65Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
274444c061aSmrg    # dependency line.
2759e7bcd65Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2769e7bcd65Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
2779e7bcd65Smrg      | tr "$nl" ' ' >> "$depfile"
2782ae83157Smrg    echo >> "$depfile"
279444c061aSmrg    # The second pass generates a dummy entry for each header file.
2809e7bcd65Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2819e7bcd65Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2829e7bcd65Smrg      >> "$depfile"
283444c061aSmrg  else
2849e7bcd65Smrg    make_dummy_depfile
285444c061aSmrg  fi
286444c061aSmrg  rm -f "$tmpdepfile"
287444c061aSmrg  ;;
288444c061aSmrg
2899e7bcd65Smrgxlc)
2909e7bcd65Smrg  # This case exists only to let depend.m4 do its work.  It works by
2919e7bcd65Smrg  # looking at the text of this script.  This case will never be run,
2929e7bcd65Smrg  # since it is checked for above.
2939e7bcd65Smrg  exit 1
2949e7bcd65Smrg  ;;
2959e7bcd65Smrg
296444c061aSmrgaix)
297444c061aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
298444c061aSmrg  # in a .u file.  In older versions, this file always lives in the
2999e7bcd65Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
300444c061aSmrg  # start of each line; $object doesn't have directory information.
301444c061aSmrg  # Version 6 uses the directory in both cases.
3029e7bcd65Smrg  set_dir_from "$object"
3039e7bcd65Smrg  set_base_from "$object"
304444c061aSmrg  if test "$libtool" = yes; then
3052265a131Smrg    tmpdepfile1=$dir$base.u
3062265a131Smrg    tmpdepfile2=$base.u
3072265a131Smrg    tmpdepfile3=$dir.libs/$base.u
308444c061aSmrg    "$@" -Wc,-M
309444c061aSmrg  else
3102265a131Smrg    tmpdepfile1=$dir$base.u
3112265a131Smrg    tmpdepfile2=$dir$base.u
3122265a131Smrg    tmpdepfile3=$dir$base.u
313444c061aSmrg    "$@" -M
314444c061aSmrg  fi
315444c061aSmrg  stat=$?
3169e7bcd65Smrg  if test $stat -ne 0; then
3172265a131Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318444c061aSmrg    exit $stat
319444c061aSmrg  fi
320444c061aSmrg
3212265a131Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3222265a131Smrg  do
3232265a131Smrg    test -f "$tmpdepfile" && break
3242265a131Smrg  done
3259e7bcd65Smrg  aix_post_process_depfile
3269e7bcd65Smrg  ;;
3279e7bcd65Smrg
3289e7bcd65Smrgtcc)
3299e7bcd65Smrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
3309e7bcd65Smrg  # FIXME: That version still under development at the moment of writing.
3319e7bcd65Smrg  #        Make that this statement remains true also for stable, released
3329e7bcd65Smrg  #        versions.
3339e7bcd65Smrg  # It will wrap lines (doesn't matter whether long or short) with a
3349e7bcd65Smrg  # trailing '\', as in:
3359e7bcd65Smrg  #
3369e7bcd65Smrg  #   foo.o : \
3379e7bcd65Smrg  #    foo.c \
3389e7bcd65Smrg  #    foo.h \
3399e7bcd65Smrg  #
3409e7bcd65Smrg  # It will put a trailing '\' even on the last line, and will use leading
3419e7bcd65Smrg  # spaces rather than leading tabs (at least since its commit 0394caf7
3429e7bcd65Smrg  # "Emit spaces for -MD").
3439e7bcd65Smrg  "$@" -MD -MF "$tmpdepfile"
3449e7bcd65Smrg  stat=$?
3459e7bcd65Smrg  if test $stat -ne 0; then
3469e7bcd65Smrg    rm -f "$tmpdepfile"
3479e7bcd65Smrg    exit $stat
348444c061aSmrg  fi
3499e7bcd65Smrg  rm -f "$depfile"
3509e7bcd65Smrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
3519e7bcd65Smrg  # We have to change lines of the first kind to '$object: \'.
3529e7bcd65Smrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
3539e7bcd65Smrg  # And for each line of the second kind, we have to emit a 'dep.h:'
3549e7bcd65Smrg  # dummy dependency, to avoid the deleted-header problem.
3559e7bcd65Smrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356444c061aSmrg  rm -f "$tmpdepfile"
357444c061aSmrg  ;;
358444c061aSmrg
3599e7bcd65Smrg## The order of this option in the case statement is important, since the
3609e7bcd65Smrg## shell code in configure will try each of these formats in the order
3619e7bcd65Smrg## listed in this file.  A plain '-MD' option would be understood by many
3629e7bcd65Smrg## compilers, so we must ensure this comes after the gcc and icc options.
3639e7bcd65Smrgpgcc)
3649e7bcd65Smrg  # Portland's C compiler understands '-MD'.
3659e7bcd65Smrg  # Will always output deps to 'file.d' where file is the root name of the
3669e7bcd65Smrg  # source file under compilation, even if file resides in a subdirectory.
3679e7bcd65Smrg  # The object file name does not affect the name of the '.d' file.
3689e7bcd65Smrg  # pgcc 10.2 will output
369444c061aSmrg  #    foo.o: sub/foo.c sub/foo.h
3709e7bcd65Smrg  # and will wrap long lines using '\' :
371444c061aSmrg  #    foo.o: sub/foo.c ... \
372444c061aSmrg  #     sub/foo.h ... \
373444c061aSmrg  #     ...
3749e7bcd65Smrg  set_dir_from "$object"
3759e7bcd65Smrg  # Use the source, not the object, to determine the base name, since
3769e7bcd65Smrg  # that's sadly what pgcc will do too.
3779e7bcd65Smrg  set_base_from "$source"
3789e7bcd65Smrg  tmpdepfile=$base.d
3799e7bcd65Smrg
3809e7bcd65Smrg  # For projects that build the same source file twice into different object
3819e7bcd65Smrg  # files, the pgcc approach of using the *source* file root name can cause
3829e7bcd65Smrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
3839e7bcd65Smrg  # the same $tmpdepfile.
3849e7bcd65Smrg  lockdir=$base.d-lock
3859e7bcd65Smrg  trap "
3869e7bcd65Smrg    echo '$0: caught signal, cleaning up...' >&2
3879e7bcd65Smrg    rmdir '$lockdir'
3889e7bcd65Smrg    exit 1
3899e7bcd65Smrg  " 1 2 13 15
3909e7bcd65Smrg  numtries=100
3919e7bcd65Smrg  i=$numtries
3929e7bcd65Smrg  while test $i -gt 0; do
3939e7bcd65Smrg    # mkdir is a portable test-and-set.
3949e7bcd65Smrg    if mkdir "$lockdir" 2>/dev/null; then
3959e7bcd65Smrg      # This process acquired the lock.
3969e7bcd65Smrg      "$@" -MD
3979e7bcd65Smrg      stat=$?
3989e7bcd65Smrg      # Release the lock.
3999e7bcd65Smrg      rmdir "$lockdir"
4009e7bcd65Smrg      break
4019e7bcd65Smrg    else
4029e7bcd65Smrg      # If the lock is being held by a different process, wait
4039e7bcd65Smrg      # until the winning process is done or we timeout.
4049e7bcd65Smrg      while test -d "$lockdir" && test $i -gt 0; do
4059e7bcd65Smrg        sleep 1
4069e7bcd65Smrg        i=`expr $i - 1`
4079e7bcd65Smrg      done
4089e7bcd65Smrg    fi
4099e7bcd65Smrg    i=`expr $i - 1`
4109e7bcd65Smrg  done
4119e7bcd65Smrg  trap - 1 2 13 15
4129e7bcd65Smrg  if test $i -le 0; then
4139e7bcd65Smrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
4149e7bcd65Smrg    echo "$0: check lockdir '$lockdir'" >&2
4159e7bcd65Smrg    exit 1
4169e7bcd65Smrg  fi
417444c061aSmrg
4189e7bcd65Smrg  if test $stat -ne 0; then
419444c061aSmrg    rm -f "$tmpdepfile"
420444c061aSmrg    exit $stat
421444c061aSmrg  fi
422444c061aSmrg  rm -f "$depfile"
423444c061aSmrg  # Each line is of the form `foo.o: dependent.h',
424444c061aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425444c061aSmrg  # Do two passes, one to just change these to
426444c061aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
427444c061aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428444c061aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
429444c061aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
4309e7bcd65Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
4319e7bcd65Smrg    | sed -e 's/$/ :/' >> "$depfile"
432444c061aSmrg  rm -f "$tmpdepfile"
433444c061aSmrg  ;;
434444c061aSmrg
4352265a131Smrghp2)
4362265a131Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
4372265a131Smrg  # compilers, which have integrated preprocessors.  The correct option
4382265a131Smrg  # to use with these is +Maked; it writes dependencies to a file named
4392265a131Smrg  # 'foo.d', which lands next to the object file, wherever that
4402265a131Smrg  # happens to be.
4412265a131Smrg  # Much of this is similar to the tru64 case; see comments there.
4429e7bcd65Smrg  set_dir_from  "$object"
4439e7bcd65Smrg  set_base_from "$object"
4442265a131Smrg  if test "$libtool" = yes; then
4452265a131Smrg    tmpdepfile1=$dir$base.d
4462265a131Smrg    tmpdepfile2=$dir.libs/$base.d
4472265a131Smrg    "$@" -Wc,+Maked
4482265a131Smrg  else
4492265a131Smrg    tmpdepfile1=$dir$base.d
4502265a131Smrg    tmpdepfile2=$dir$base.d
4512265a131Smrg    "$@" +Maked
4522265a131Smrg  fi
4532265a131Smrg  stat=$?
4549e7bcd65Smrg  if test $stat -ne 0; then
4552265a131Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
4562265a131Smrg     exit $stat
4572265a131Smrg  fi
4582265a131Smrg
4592265a131Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
4602265a131Smrg  do
4612265a131Smrg    test -f "$tmpdepfile" && break
4622265a131Smrg  done
4632265a131Smrg  if test -f "$tmpdepfile"; then
4649e7bcd65Smrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
4659e7bcd65Smrg    # Add 'dependent.h:' lines.
4662ae83157Smrg    sed -ne '2,${
4679e7bcd65Smrg               s/^ *//
4689e7bcd65Smrg               s/ \\*$//
4699e7bcd65Smrg               s/$/:/
4709e7bcd65Smrg               p
4719e7bcd65Smrg             }' "$tmpdepfile" >> "$depfile"
4722265a131Smrg  else
4739e7bcd65Smrg    make_dummy_depfile
4742265a131Smrg  fi
4752265a131Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
4762265a131Smrg  ;;
4772265a131Smrg
478444c061aSmrgtru64)
4799e7bcd65Smrg  # The Tru64 compiler uses -MD to generate dependencies as a side
4809e7bcd65Smrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
4819e7bcd65Smrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
4829e7bcd65Smrg  # dependencies in 'foo.d' instead, so we check for that too.
4839e7bcd65Smrg  # Subdirectories are respected.
4849e7bcd65Smrg  set_dir_from  "$object"
4859e7bcd65Smrg  set_base_from "$object"
4869e7bcd65Smrg
4879e7bcd65Smrg  if test "$libtool" = yes; then
4889e7bcd65Smrg    # Libtool generates 2 separate objects for the 2 libraries.  These
4899e7bcd65Smrg    # two compilations output dependencies in $dir.libs/$base.o.d and
4909e7bcd65Smrg    # in $dir$base.o.d.  We have to check for both files, because
4919e7bcd65Smrg    # one of the two compilations can be disabled.  We should prefer
4929e7bcd65Smrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4939e7bcd65Smrg    # automatically cleaned when .libs/ is deleted, while ignoring
4949e7bcd65Smrg    # the former would cause a distcleancheck panic.
4959e7bcd65Smrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
4969e7bcd65Smrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
4979e7bcd65Smrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
4989e7bcd65Smrg    "$@" -Wc,-MD
4999e7bcd65Smrg  else
5009e7bcd65Smrg    tmpdepfile1=$dir$base.d
5019e7bcd65Smrg    tmpdepfile2=$dir$base.d
5029e7bcd65Smrg    tmpdepfile3=$dir$base.d
5039e7bcd65Smrg    "$@" -MD
5049e7bcd65Smrg  fi
5059e7bcd65Smrg
5069e7bcd65Smrg  stat=$?
5079e7bcd65Smrg  if test $stat -ne 0; then
5089e7bcd65Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5099e7bcd65Smrg    exit $stat
5109e7bcd65Smrg  fi
5119e7bcd65Smrg
5129e7bcd65Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5139e7bcd65Smrg  do
5149e7bcd65Smrg    test -f "$tmpdepfile" && break
5159e7bcd65Smrg  done
5169e7bcd65Smrg  # Same post-processing that is required for AIX mode.
5179e7bcd65Smrg  aix_post_process_depfile
5189e7bcd65Smrg  ;;
5199e7bcd65Smrg
5209e7bcd65Smrgmsvc7)
5219e7bcd65Smrg  if test "$libtool" = yes; then
5229e7bcd65Smrg    showIncludes=-Wc,-showIncludes
5239e7bcd65Smrg  else
5249e7bcd65Smrg    showIncludes=-showIncludes
5259e7bcd65Smrg  fi
5269e7bcd65Smrg  "$@" $showIncludes > "$tmpdepfile"
5279e7bcd65Smrg  stat=$?
5289e7bcd65Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
5299e7bcd65Smrg  if test $stat -ne 0; then
5309e7bcd65Smrg    rm -f "$tmpdepfile"
5319e7bcd65Smrg    exit $stat
5329e7bcd65Smrg  fi
5339e7bcd65Smrg  rm -f "$depfile"
5349e7bcd65Smrg  echo "$object : \\" > "$depfile"
5359e7bcd65Smrg  # The first sed program below extracts the file names and escapes
5369e7bcd65Smrg  # backslashes for cygpath.  The second sed program outputs the file
5379e7bcd65Smrg  # name when reading, but also accumulates all include files in the
5389e7bcd65Smrg  # hold buffer in order to output them again at the end.  This only
5399e7bcd65Smrg  # works with sed implementations that can handle large buffers.
5409e7bcd65Smrg  sed < "$tmpdepfile" -n '
5419e7bcd65Smrg/^Note: including file:  *\(.*\)/ {
5429e7bcd65Smrg  s//\1/
5439e7bcd65Smrg  s/\\/\\\\/g
5449e7bcd65Smrg  p
5459e7bcd65Smrg}' | $cygpath_u | sort -u | sed -n '
5469e7bcd65Smrgs/ /\\ /g
5479e7bcd65Smrgs/\(.*\)/'"$tab"'\1 \\/p
5489e7bcd65Smrgs/.\(.*\) \\/\1:/
5499e7bcd65SmrgH
5509e7bcd65Smrg$ {
5519e7bcd65Smrg  s/.*/'"$tab"'/
5529e7bcd65Smrg  G
5539e7bcd65Smrg  p
5549e7bcd65Smrg}' >> "$depfile"
5559e7bcd65Smrg  rm -f "$tmpdepfile"
5569e7bcd65Smrg  ;;
5579e7bcd65Smrg
5589e7bcd65Smrgmsvc7msys)
5599e7bcd65Smrg  # This case exists only to let depend.m4 do its work.  It works by
5609e7bcd65Smrg  # looking at the text of this script.  This case will never be run,
5619e7bcd65Smrg  # since it is checked for above.
5629e7bcd65Smrg  exit 1
5639e7bcd65Smrg  ;;
564444c061aSmrg
565444c061aSmrg#nosideeffect)
566444c061aSmrg  # This comment above is used by automake to tell side-effect
567444c061aSmrg  # dependency tracking mechanisms from slower ones.
568444c061aSmrg
569444c061aSmrgdashmstdout)
570444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
571444c061aSmrg  # always write the preprocessed file to stdout, regardless of -o.
572444c061aSmrg  "$@" || exit $?
573444c061aSmrg
574444c061aSmrg  # Remove the call to Libtool.
575444c061aSmrg  if test "$libtool" = yes; then
5762ae83157Smrg    while test "X$1" != 'X--mode=compile'; do
577444c061aSmrg      shift
578444c061aSmrg    done
579444c061aSmrg    shift
580444c061aSmrg  fi
581444c061aSmrg
5829e7bcd65Smrg  # Remove '-o $object'.
583444c061aSmrg  IFS=" "
584444c061aSmrg  for arg
585444c061aSmrg  do
586444c061aSmrg    case $arg in
587444c061aSmrg    -o)
588444c061aSmrg      shift
589444c061aSmrg      ;;
590444c061aSmrg    $object)
591444c061aSmrg      shift
592444c061aSmrg      ;;
593444c061aSmrg    *)
594444c061aSmrg      set fnord "$@" "$arg"
595444c061aSmrg      shift # fnord
596444c061aSmrg      shift # $arg
597444c061aSmrg      ;;
598444c061aSmrg    esac
599444c061aSmrg  done
600444c061aSmrg
601444c061aSmrg  test -z "$dashmflag" && dashmflag=-M
6029e7bcd65Smrg  # Require at least two characters before searching for ':'
603444c061aSmrg  # in the target name.  This is to cope with DOS-style filenames:
6049e7bcd65Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
605444c061aSmrg  "$@" $dashmflag |
6069e7bcd65Smrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
607444c061aSmrg  rm -f "$depfile"
608444c061aSmrg  cat < "$tmpdepfile" > "$depfile"
6099e7bcd65Smrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
6109e7bcd65Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6119e7bcd65Smrg  tr ' ' "$nl" < "$tmpdepfile" \
6129e7bcd65Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6139e7bcd65Smrg    | sed -e 's/$/ :/' >> "$depfile"
614444c061aSmrg  rm -f "$tmpdepfile"
615444c061aSmrg  ;;
616444c061aSmrg
617444c061aSmrgdashXmstdout)
618444c061aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
619444c061aSmrg  # run, as this mode is specially recognized in the preamble.
620444c061aSmrg  exit 1
621444c061aSmrg  ;;
622444c061aSmrg
623444c061aSmrgmakedepend)
624444c061aSmrg  "$@" || exit $?
625444c061aSmrg  # Remove any Libtool call
626444c061aSmrg  if test "$libtool" = yes; then
6272ae83157Smrg    while test "X$1" != 'X--mode=compile'; do
628444c061aSmrg      shift
629444c061aSmrg    done
630444c061aSmrg    shift
631444c061aSmrg  fi
632444c061aSmrg  # X makedepend
633444c061aSmrg  shift
6342ae83157Smrg  cleared=no eat=no
6352ae83157Smrg  for arg
6362ae83157Smrg  do
637444c061aSmrg    case $cleared in
638444c061aSmrg    no)
639444c061aSmrg      set ""; shift
640444c061aSmrg      cleared=yes ;;
641444c061aSmrg    esac
6422ae83157Smrg    if test $eat = yes; then
6432ae83157Smrg      eat=no
6442ae83157Smrg      continue
6452ae83157Smrg    fi
646444c061aSmrg    case "$arg" in
647444c061aSmrg    -D*|-I*)
648444c061aSmrg      set fnord "$@" "$arg"; shift ;;
649444c061aSmrg    # Strip any option that makedepend may not understand.  Remove
650444c061aSmrg    # the object too, otherwise makedepend will parse it as a source file.
6512ae83157Smrg    -arch)
6522ae83157Smrg      eat=yes ;;
653444c061aSmrg    -*|$object)
654444c061aSmrg      ;;
655444c061aSmrg    *)
656444c061aSmrg      set fnord "$@" "$arg"; shift ;;
657444c061aSmrg    esac
658444c061aSmrg  done
6592ae83157Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
660444c061aSmrg  touch "$tmpdepfile"
661444c061aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
662444c061aSmrg  rm -f "$depfile"
6639e7bcd65Smrg  # makedepend may prepend the VPATH from the source file name to the object.
6649e7bcd65Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
6659e7bcd65Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
6669e7bcd65Smrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
6679e7bcd65Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6689e7bcd65Smrg  sed '1,2d' "$tmpdepfile" \
6699e7bcd65Smrg    | tr ' ' "$nl" \
6709e7bcd65Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6719e7bcd65Smrg    | sed -e 's/$/ :/' >> "$depfile"
672444c061aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
673444c061aSmrg  ;;
674444c061aSmrg
675444c061aSmrgcpp)
676444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
677444c061aSmrg  # always write the preprocessed file to stdout.
678444c061aSmrg  "$@" || exit $?
679444c061aSmrg
680444c061aSmrg  # Remove the call to Libtool.
681444c061aSmrg  if test "$libtool" = yes; then
6822ae83157Smrg    while test "X$1" != 'X--mode=compile'; do
683444c061aSmrg      shift
684444c061aSmrg    done
685444c061aSmrg    shift
686444c061aSmrg  fi
687444c061aSmrg
6889e7bcd65Smrg  # Remove '-o $object'.
689444c061aSmrg  IFS=" "
690444c061aSmrg  for arg
691444c061aSmrg  do
692444c061aSmrg    case $arg in
693444c061aSmrg    -o)
694444c061aSmrg      shift
695444c061aSmrg      ;;
696444c061aSmrg    $object)
697444c061aSmrg      shift
698444c061aSmrg      ;;
699444c061aSmrg    *)
700444c061aSmrg      set fnord "$@" "$arg"
701444c061aSmrg      shift # fnord
702444c061aSmrg      shift # $arg
703444c061aSmrg      ;;
704444c061aSmrg    esac
705444c061aSmrg  done
706444c061aSmrg
7079e7bcd65Smrg  "$@" -E \
7089e7bcd65Smrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7099e7bcd65Smrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7109e7bcd65Smrg    | sed '$ s: \\$::' > "$tmpdepfile"
711444c061aSmrg  rm -f "$depfile"
712444c061aSmrg  echo "$object : \\" > "$depfile"
713444c061aSmrg  cat < "$tmpdepfile" >> "$depfile"
714444c061aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
715444c061aSmrg  rm -f "$tmpdepfile"
716444c061aSmrg  ;;
717444c061aSmrg
718444c061aSmrgmsvisualcpp)
719444c061aSmrg  # Important note: in order to support this mode, a compiler *must*
7202ae83157Smrg  # always write the preprocessed file to stdout.
721444c061aSmrg  "$@" || exit $?
7222ae83157Smrg
7232ae83157Smrg  # Remove the call to Libtool.
7242ae83157Smrg  if test "$libtool" = yes; then
7252ae83157Smrg    while test "X$1" != 'X--mode=compile'; do
7262ae83157Smrg      shift
7272ae83157Smrg    done
7282ae83157Smrg    shift
7292ae83157Smrg  fi
7302ae83157Smrg
731444c061aSmrg  IFS=" "
732444c061aSmrg  for arg
733444c061aSmrg  do
734444c061aSmrg    case "$arg" in
7352ae83157Smrg    -o)
7362ae83157Smrg      shift
7372ae83157Smrg      ;;
7382ae83157Smrg    $object)
7392ae83157Smrg      shift
7402ae83157Smrg      ;;
741444c061aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
7429e7bcd65Smrg        set fnord "$@"
7439e7bcd65Smrg        shift
7449e7bcd65Smrg        shift
7459e7bcd65Smrg        ;;
746444c061aSmrg    *)
7479e7bcd65Smrg        set fnord "$@" "$arg"
7489e7bcd65Smrg        shift
7499e7bcd65Smrg        shift
7509e7bcd65Smrg        ;;
751444c061aSmrg    esac
752444c061aSmrg  done
7532ae83157Smrg  "$@" -E 2>/dev/null |
7542ae83157Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
755444c061aSmrg  rm -f "$depfile"
756444c061aSmrg  echo "$object : \\" > "$depfile"
7579e7bcd65Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
7589e7bcd65Smrg  echo "$tab" >> "$depfile"
7592ae83157Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
760444c061aSmrg  rm -f "$tmpdepfile"
761444c061aSmrg  ;;
762444c061aSmrg
7632ae83157Smrgmsvcmsys)
7642ae83157Smrg  # This case exists only to let depend.m4 do its work.  It works by
7652ae83157Smrg  # looking at the text of this script.  This case will never be run,
7662ae83157Smrg  # since it is checked for above.
7672ae83157Smrg  exit 1
7682ae83157Smrg  ;;
7692ae83157Smrg
770444c061aSmrgnone)
771444c061aSmrg  exec "$@"
772444c061aSmrg  ;;
773444c061aSmrg
774444c061aSmrg*)
775444c061aSmrg  echo "Unknown depmode $depmode" 1>&2
776444c061aSmrg  exit 1
777444c061aSmrg  ;;
778444c061aSmrgesac
779444c061aSmrg
780444c061aSmrgexit 0
781444c061aSmrg
782444c061aSmrg# Local Variables:
783444c061aSmrg# mode: shell-script
784444c061aSmrg# sh-indentation: 2
785444c061aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
786444c061aSmrg# time-stamp-start: "scriptversion="
787444c061aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
7882ae83157Smrg# time-stamp-time-zone: "UTC"
7892ae83157Smrg# time-stamp-end: "; # UTC"
790444c061aSmrg# End:
791