depcomp revision 3e999d35
13da7aff1Smrg#! /bin/sh
23da7aff1Smrg# depcomp - compile a program generating dependencies as side-effects
3e531b1a7Smrg
43e999d35Smrgscriptversion=2013-05-30.07; # UTC
5e531b1a7Smrg
63e999d35Smrg# Copyright (C) 1999-2014 Free Software Foundation, Inc.
73da7aff1Smrg
83da7aff1Smrg# This program is free software; you can redistribute it and/or modify
93da7aff1Smrg# it under the terms of the GNU General Public License as published by
103da7aff1Smrg# the Free Software Foundation; either version 2, or (at your option)
113da7aff1Smrg# any later version.
123da7aff1Smrg
133da7aff1Smrg# This program is distributed in the hope that it will be useful,
143da7aff1Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
153da7aff1Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
163da7aff1Smrg# GNU General Public License for more details.
173da7aff1Smrg
183da7aff1Smrg# You should have received a copy of the GNU General Public License
19e531b1a7Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
203da7aff1Smrg
213da7aff1Smrg# As a special exception to the GNU General Public License, if you
223da7aff1Smrg# distribute this file as part of a program that contains a
233da7aff1Smrg# configuration script generated by Autoconf, you may include it under
243da7aff1Smrg# the same distribution terms that you use for the rest of that program.
253da7aff1Smrg
263da7aff1Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
273da7aff1Smrg
28e531b1a7Smrgcase $1 in
29e531b1a7Smrg  '')
303e999d35Smrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
313e999d35Smrg    exit 1;
323e999d35Smrg    ;;
33e531b1a7Smrg  -h | --h*)
34e531b1a7Smrg    cat <<\EOF
35e531b1a7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36e531b1a7Smrg
37e531b1a7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38e531b1a7Smrgas side-effects.
39e531b1a7Smrg
40e531b1a7SmrgEnvironment variables:
41e531b1a7Smrg  depmode     Dependency tracking mode.
423e999d35Smrg  source      Source file read by 'PROGRAMS ARGS'.
433e999d35Smrg  object      Object file output by 'PROGRAMS ARGS'.
44e531b1a7Smrg  DEPDIR      directory where to store dependencies.
45e531b1a7Smrg  depfile     Dependency file to output.
463e999d35Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
47e531b1a7Smrg  libtool     Whether libtool is used (yes/no).
48e531b1a7Smrg
49e531b1a7SmrgReport bugs to <bug-automake@gnu.org>.
50e531b1a7SmrgEOF
51e531b1a7Smrg    exit $?
52e531b1a7Smrg    ;;
53e531b1a7Smrg  -v | --v*)
54e531b1a7Smrg    echo "depcomp $scriptversion"
55e531b1a7Smrg    exit $?
56e531b1a7Smrg    ;;
57e531b1a7Smrgesac
58e531b1a7Smrg
593e999d35Smrg# Get the directory component of the given path, and save it in the
603e999d35Smrg# global variables '$dir'.  Note that this directory component will
613e999d35Smrg# be either empty or ending with a '/' character.  This is deliberate.
623e999d35Smrgset_dir_from ()
633e999d35Smrg{
643e999d35Smrg  case $1 in
653e999d35Smrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
663e999d35Smrg      *) dir=;;
673e999d35Smrg  esac
683e999d35Smrg}
693e999d35Smrg
703e999d35Smrg# Get the suffix-stripped basename of the given path, and save it the
713e999d35Smrg# global variable '$base'.
723e999d35Smrgset_base_from ()
733e999d35Smrg{
743e999d35Smrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
753e999d35Smrg}
763e999d35Smrg
773e999d35Smrg# If no dependency file was actually created by the compiler invocation,
783e999d35Smrg# we still have to create a dummy depfile, to avoid errors with the
793e999d35Smrg# Makefile "include basename.Plo" scheme.
803e999d35Smrgmake_dummy_depfile ()
813e999d35Smrg{
823e999d35Smrg  echo "#dummy" > "$depfile"
833e999d35Smrg}
843e999d35Smrg
853e999d35Smrg# Factor out some common post-processing of the generated depfile.
863e999d35Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
873e999d35Smrgaix_post_process_depfile ()
883e999d35Smrg{
893e999d35Smrg  # If the compiler actually managed to produce a dependency file,
903e999d35Smrg  # post-process it.
913e999d35Smrg  if test -f "$tmpdepfile"; then
923e999d35Smrg    # Each line is of the form 'foo.o: dependency.h'.
933e999d35Smrg    # Do two passes, one to just change these to
943e999d35Smrg    #   $object: dependency.h
953e999d35Smrg    # and one to simply output
963e999d35Smrg    #   dependency.h:
973e999d35Smrg    # which is needed to avoid the deleted-header problem.
983e999d35Smrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
993e999d35Smrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
1003e999d35Smrg    } > "$depfile"
1013e999d35Smrg    rm -f "$tmpdepfile"
1023e999d35Smrg  else
1033e999d35Smrg    make_dummy_depfile
1043e999d35Smrg  fi
1053e999d35Smrg}
1063e999d35Smrg
1073e999d35Smrg# A tabulation character.
1083e999d35Smrgtab='	'
1093e999d35Smrg# A newline character.
1103e999d35Smrgnl='
1113e999d35Smrg'
1123e999d35Smrg# Character ranges might be problematic outside the C locale.
1133e999d35Smrg# These definitions help.
1143e999d35Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
1153e999d35Smrglower=abcdefghijklmnopqrstuvwxyz
1163e999d35Smrgdigits=0123456789
1173e999d35Smrgalpha=${upper}${lower}
1183e999d35Smrg
1193da7aff1Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
1203da7aff1Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
1213da7aff1Smrg  exit 1
1223da7aff1Smrgfi
1233da7aff1Smrg
124e531b1a7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125e531b1a7Smrgdepfile=${depfile-`echo "$object" |
126e531b1a7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
1273da7aff1Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
1283da7aff1Smrg
1293da7aff1Smrgrm -f "$tmpdepfile"
1303da7aff1Smrg
1313e999d35Smrg# Avoid interferences from the environment.
1323e999d35Smrggccflag= dashmflag=
1333e999d35Smrg
1343da7aff1Smrg# Some modes work just like other modes, but use different flags.  We
1353da7aff1Smrg# parameterize here, but still list the modes in the big case below,
1363da7aff1Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
1373da7aff1Smrg# here, because this file can only contain one case statement.
1383da7aff1Smrgif test "$depmode" = hp; then
1393da7aff1Smrg  # HP compiler uses -M and no extra arg.
1403da7aff1Smrg  gccflag=-M
1413da7aff1Smrg  depmode=gcc
1423da7aff1Smrgfi
1433da7aff1Smrg
1443da7aff1Smrgif test "$depmode" = dashXmstdout; then
1453e999d35Smrg  # This is just like dashmstdout with a different argument.
1463e999d35Smrg  dashmflag=-xM
1473e999d35Smrg  depmode=dashmstdout
1483da7aff1Smrgfi
1493da7aff1Smrg
150e531b1a7Smrgcygpath_u="cygpath -u -f -"
151e531b1a7Smrgif test "$depmode" = msvcmsys; then
1523e999d35Smrg  # This is just like msvisualcpp but w/o cygpath translation.
1533e999d35Smrg  # Just convert the backslash-escaped backslashes to single forward
1543e999d35Smrg  # slashes to satisfy depend.m4
1553e999d35Smrg  cygpath_u='sed s,\\\\,/,g'
1563e999d35Smrg  depmode=msvisualcpp
1573e999d35Smrgfi
1583e999d35Smrg
1593e999d35Smrgif test "$depmode" = msvc7msys; then
1603e999d35Smrg  # This is just like msvc7 but w/o cygpath translation.
1613e999d35Smrg  # Just convert the backslash-escaped backslashes to single forward
1623e999d35Smrg  # slashes to satisfy depend.m4
1633e999d35Smrg  cygpath_u='sed s,\\\\,/,g'
1643e999d35Smrg  depmode=msvc7
1653e999d35Smrgfi
1663e999d35Smrg
1673e999d35Smrgif test "$depmode" = xlc; then
1683e999d35Smrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
1693e999d35Smrg  gccflag=-qmakedep=gcc,-MF
1703e999d35Smrg  depmode=gcc
171e531b1a7Smrgfi
172e531b1a7Smrg
1733da7aff1Smrgcase "$depmode" in
1743da7aff1Smrggcc3)
1753da7aff1Smrg## gcc 3 implements dependency tracking that does exactly what
1763da7aff1Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1773da7aff1Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
178e531b1a7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179e531b1a7Smrg## the command line argument order; so add the flags where they
180e531b1a7Smrg## appear in depend2.am.  Note that the slowdown incurred here
181e531b1a7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182e531b1a7Smrg  for arg
183e531b1a7Smrg  do
184e531b1a7Smrg    case $arg in
185e531b1a7Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186e531b1a7Smrg    *)  set fnord "$@" "$arg" ;;
187e531b1a7Smrg    esac
188e531b1a7Smrg    shift # fnord
189e531b1a7Smrg    shift # $arg
190e531b1a7Smrg  done
191e531b1a7Smrg  "$@"
1923da7aff1Smrg  stat=$?
1933e999d35Smrg  if test $stat -ne 0; then
1943da7aff1Smrg    rm -f "$tmpdepfile"
1953da7aff1Smrg    exit $stat
1963da7aff1Smrg  fi
1973da7aff1Smrg  mv "$tmpdepfile" "$depfile"
1983da7aff1Smrg  ;;
1993da7aff1Smrg
2003da7aff1Smrggcc)
2013e999d35Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
2023e999d35Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
2033e999d35Smrg## (see the conditional assignment to $gccflag above).
2043da7aff1Smrg## There are various ways to get dependency output from gcc.  Here's
2053da7aff1Smrg## why we pick this rather obscure method:
2063da7aff1Smrg## - Don't want to use -MD because we'd like the dependencies to end
2073da7aff1Smrg##   up in a subdir.  Having to rename by hand is ugly.
2083da7aff1Smrg##   (We might end up doing this anyway to support other compilers.)
2093da7aff1Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
2103e999d35Smrg##   -MM, not -M (despite what the docs say).  Also, it might not be
2113e999d35Smrg##   supported by the other compilers which use the 'gcc' depmode.
2123da7aff1Smrg## - Using -M directly means running the compiler twice (even worse
2133da7aff1Smrg##   than renaming).
2143da7aff1Smrg  if test -z "$gccflag"; then
2153da7aff1Smrg    gccflag=-MD,
2163da7aff1Smrg  fi
2173da7aff1Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
2183da7aff1Smrg  stat=$?
2193e999d35Smrg  if test $stat -ne 0; then
2203da7aff1Smrg    rm -f "$tmpdepfile"
2213da7aff1Smrg    exit $stat
2223da7aff1Smrg  fi
2233da7aff1Smrg  rm -f "$depfile"
2243da7aff1Smrg  echo "$object : \\" > "$depfile"
2253e999d35Smrg  # The second -e expression handles DOS-style file names with drive
2263e999d35Smrg  # letters.
2273da7aff1Smrg  sed -e 's/^[^:]*: / /' \
2283da7aff1Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
2293e999d35Smrg## This next piece of magic avoids the "deleted header file" problem.
2303da7aff1Smrg## The problem is that when a header file which appears in a .P file
2313da7aff1Smrg## is deleted, the dependency causes make to die (because there is
2323da7aff1Smrg## typically no way to rebuild the header).  We avoid this by adding
2333da7aff1Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
2343da7aff1Smrg## this for us directly.
2353e999d35Smrg## Some versions of gcc put a space before the ':'.  On the theory
2363da7aff1Smrg## that the space means something, we add a space to the output as
2373e999d35Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
2383e999d35Smrg## to the object.  Take care to not repeat it in the output.
2393da7aff1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
2403da7aff1Smrg## correctly.  Breaking it into two sed invocations is a workaround.
2413e999d35Smrg  tr ' ' "$nl" < "$tmpdepfile" \
2423e999d35Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
2433e999d35Smrg    | sed -e 's/$/ :/' >> "$depfile"
2443da7aff1Smrg  rm -f "$tmpdepfile"
2453da7aff1Smrg  ;;
2463da7aff1Smrg
2473da7aff1Smrghp)
2483da7aff1Smrg  # This case exists only to let depend.m4 do its work.  It works by
2493da7aff1Smrg  # looking at the text of this script.  This case will never be run,
2503da7aff1Smrg  # since it is checked for above.
2513da7aff1Smrg  exit 1
2523da7aff1Smrg  ;;
2533da7aff1Smrg
2543da7aff1Smrgsgi)
2553da7aff1Smrg  if test "$libtool" = yes; then
2563da7aff1Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
2573da7aff1Smrg  else
2583da7aff1Smrg    "$@" -MDupdate "$tmpdepfile"
2593da7aff1Smrg  fi
2603da7aff1Smrg  stat=$?
2613e999d35Smrg  if test $stat -ne 0; then
2623da7aff1Smrg    rm -f "$tmpdepfile"
2633da7aff1Smrg    exit $stat
2643da7aff1Smrg  fi
2653da7aff1Smrg  rm -f "$depfile"
2663da7aff1Smrg
2673da7aff1Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2683da7aff1Smrg    echo "$object : \\" > "$depfile"
2693da7aff1Smrg    # Clip off the initial element (the dependent).  Don't try to be
2703da7aff1Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2713da7aff1Smrg    # lines with more than a fixed number of characters (4096 in
2723da7aff1Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2733e999d35Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
2743da7aff1Smrg    # dependency line.
2753e999d35Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2763e999d35Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
2773e999d35Smrg      | tr "$nl" ' ' >> "$depfile"
278e531b1a7Smrg    echo >> "$depfile"
2793da7aff1Smrg    # The second pass generates a dummy entry for each header file.
2803e999d35Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2813e999d35Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2823e999d35Smrg      >> "$depfile"
2833da7aff1Smrg  else
2843e999d35Smrg    make_dummy_depfile
2853da7aff1Smrg  fi
2863da7aff1Smrg  rm -f "$tmpdepfile"
2873da7aff1Smrg  ;;
2883da7aff1Smrg
2893e999d35Smrgxlc)
2903e999d35Smrg  # This case exists only to let depend.m4 do its work.  It works by
2913e999d35Smrg  # looking at the text of this script.  This case will never be run,
2923e999d35Smrg  # since it is checked for above.
2933e999d35Smrg  exit 1
2943e999d35Smrg  ;;
2953e999d35Smrg
2963da7aff1Smrgaix)
2973da7aff1Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2983da7aff1Smrg  # in a .u file.  In older versions, this file always lives in the
2993e999d35Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
3003da7aff1Smrg  # start of each line; $object doesn't have directory information.
3013da7aff1Smrg  # Version 6 uses the directory in both cases.
3023e999d35Smrg  set_dir_from "$object"
3033e999d35Smrg  set_base_from "$object"
3043da7aff1Smrg  if test "$libtool" = yes; then
305e531b1a7Smrg    tmpdepfile1=$dir$base.u
306e531b1a7Smrg    tmpdepfile2=$base.u
307e531b1a7Smrg    tmpdepfile3=$dir.libs/$base.u
3083da7aff1Smrg    "$@" -Wc,-M
3093da7aff1Smrg  else
310e531b1a7Smrg    tmpdepfile1=$dir$base.u
311e531b1a7Smrg    tmpdepfile2=$dir$base.u
312e531b1a7Smrg    tmpdepfile3=$dir$base.u
3133da7aff1Smrg    "$@" -M
3143da7aff1Smrg  fi
3153da7aff1Smrg  stat=$?
3163e999d35Smrg  if test $stat -ne 0; then
317e531b1a7Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3183da7aff1Smrg    exit $stat
3193da7aff1Smrg  fi
3203da7aff1Smrg
321e531b1a7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322e531b1a7Smrg  do
323e531b1a7Smrg    test -f "$tmpdepfile" && break
324e531b1a7Smrg  done
3253e999d35Smrg  aix_post_process_depfile
3263e999d35Smrg  ;;
3273e999d35Smrg
3283e999d35Smrgtcc)
3293e999d35Smrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
3303e999d35Smrg  # FIXME: That version still under development at the moment of writing.
3313e999d35Smrg  #        Make that this statement remains true also for stable, released
3323e999d35Smrg  #        versions.
3333e999d35Smrg  # It will wrap lines (doesn't matter whether long or short) with a
3343e999d35Smrg  # trailing '\', as in:
3353e999d35Smrg  #
3363e999d35Smrg  #   foo.o : \
3373e999d35Smrg  #    foo.c \
3383e999d35Smrg  #    foo.h \
3393e999d35Smrg  #
3403e999d35Smrg  # It will put a trailing '\' even on the last line, and will use leading
3413e999d35Smrg  # spaces rather than leading tabs (at least since its commit 0394caf7
3423e999d35Smrg  # "Emit spaces for -MD").
3433e999d35Smrg  "$@" -MD -MF "$tmpdepfile"
3443e999d35Smrg  stat=$?
3453e999d35Smrg  if test $stat -ne 0; then
3463e999d35Smrg    rm -f "$tmpdepfile"
3473e999d35Smrg    exit $stat
3483da7aff1Smrg  fi
3493e999d35Smrg  rm -f "$depfile"
3503e999d35Smrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
3513e999d35Smrg  # We have to change lines of the first kind to '$object: \'.
3523e999d35Smrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
3533e999d35Smrg  # And for each line of the second kind, we have to emit a 'dep.h:'
3543e999d35Smrg  # dummy dependency, to avoid the deleted-header problem.
3553e999d35Smrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
3563da7aff1Smrg  rm -f "$tmpdepfile"
3573da7aff1Smrg  ;;
3583da7aff1Smrg
3593e999d35Smrg## The order of this option in the case statement is important, since the
3603e999d35Smrg## shell code in configure will try each of these formats in the order
3613e999d35Smrg## listed in this file.  A plain '-MD' option would be understood by many
3623e999d35Smrg## compilers, so we must ensure this comes after the gcc and icc options.
3633e999d35Smrgpgcc)
3643e999d35Smrg  # Portland's C compiler understands '-MD'.
3653e999d35Smrg  # Will always output deps to 'file.d' where file is the root name of the
3663e999d35Smrg  # source file under compilation, even if file resides in a subdirectory.
3673e999d35Smrg  # The object file name does not affect the name of the '.d' file.
3683e999d35Smrg  # pgcc 10.2 will output
3693da7aff1Smrg  #    foo.o: sub/foo.c sub/foo.h
3703e999d35Smrg  # and will wrap long lines using '\' :
3713da7aff1Smrg  #    foo.o: sub/foo.c ... \
3723da7aff1Smrg  #     sub/foo.h ... \
3733da7aff1Smrg  #     ...
3743e999d35Smrg  set_dir_from "$object"
3753e999d35Smrg  # Use the source, not the object, to determine the base name, since
3763e999d35Smrg  # that's sadly what pgcc will do too.
3773e999d35Smrg  set_base_from "$source"
3783e999d35Smrg  tmpdepfile=$base.d
3793e999d35Smrg
3803e999d35Smrg  # For projects that build the same source file twice into different object
3813e999d35Smrg  # files, the pgcc approach of using the *source* file root name can cause
3823e999d35Smrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
3833e999d35Smrg  # the same $tmpdepfile.
3843e999d35Smrg  lockdir=$base.d-lock
3853e999d35Smrg  trap "
3863e999d35Smrg    echo '$0: caught signal, cleaning up...' >&2
3873e999d35Smrg    rmdir '$lockdir'
3883e999d35Smrg    exit 1
3893e999d35Smrg  " 1 2 13 15
3903e999d35Smrg  numtries=100
3913e999d35Smrg  i=$numtries
3923e999d35Smrg  while test $i -gt 0; do
3933e999d35Smrg    # mkdir is a portable test-and-set.
3943e999d35Smrg    if mkdir "$lockdir" 2>/dev/null; then
3953e999d35Smrg      # This process acquired the lock.
3963e999d35Smrg      "$@" -MD
3973e999d35Smrg      stat=$?
3983e999d35Smrg      # Release the lock.
3993e999d35Smrg      rmdir "$lockdir"
4003e999d35Smrg      break
4013e999d35Smrg    else
4023e999d35Smrg      # If the lock is being held by a different process, wait
4033e999d35Smrg      # until the winning process is done or we timeout.
4043e999d35Smrg      while test -d "$lockdir" && test $i -gt 0; do
4053e999d35Smrg        sleep 1
4063e999d35Smrg        i=`expr $i - 1`
4073e999d35Smrg      done
4083e999d35Smrg    fi
4093e999d35Smrg    i=`expr $i - 1`
4103e999d35Smrg  done
4113e999d35Smrg  trap - 1 2 13 15
4123e999d35Smrg  if test $i -le 0; then
4133e999d35Smrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
4143e999d35Smrg    echo "$0: check lockdir '$lockdir'" >&2
4153e999d35Smrg    exit 1
4163e999d35Smrg  fi
4173da7aff1Smrg
4183e999d35Smrg  if test $stat -ne 0; then
4193da7aff1Smrg    rm -f "$tmpdepfile"
4203da7aff1Smrg    exit $stat
4213da7aff1Smrg  fi
4223da7aff1Smrg  rm -f "$depfile"
4233da7aff1Smrg  # Each line is of the form `foo.o: dependent.h',
4243da7aff1Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
4253da7aff1Smrg  # Do two passes, one to just change these to
4263da7aff1Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
4273da7aff1Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
4283da7aff1Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
4293da7aff1Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
4303e999d35Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
4313e999d35Smrg    | sed -e 's/$/ :/' >> "$depfile"
4323da7aff1Smrg  rm -f "$tmpdepfile"
4333da7aff1Smrg  ;;
4343da7aff1Smrg
435e531b1a7Smrghp2)
436e531b1a7Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437e531b1a7Smrg  # compilers, which have integrated preprocessors.  The correct option
438e531b1a7Smrg  # to use with these is +Maked; it writes dependencies to a file named
439e531b1a7Smrg  # 'foo.d', which lands next to the object file, wherever that
440e531b1a7Smrg  # happens to be.
441e531b1a7Smrg  # Much of this is similar to the tru64 case; see comments there.
4423e999d35Smrg  set_dir_from  "$object"
4433e999d35Smrg  set_base_from "$object"
444e531b1a7Smrg  if test "$libtool" = yes; then
445e531b1a7Smrg    tmpdepfile1=$dir$base.d
446e531b1a7Smrg    tmpdepfile2=$dir.libs/$base.d
447e531b1a7Smrg    "$@" -Wc,+Maked
448e531b1a7Smrg  else
449e531b1a7Smrg    tmpdepfile1=$dir$base.d
450e531b1a7Smrg    tmpdepfile2=$dir$base.d
451e531b1a7Smrg    "$@" +Maked
452e531b1a7Smrg  fi
453e531b1a7Smrg  stat=$?
4543e999d35Smrg  if test $stat -ne 0; then
455e531b1a7Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
456e531b1a7Smrg     exit $stat
457e531b1a7Smrg  fi
458e531b1a7Smrg
459e531b1a7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460e531b1a7Smrg  do
461e531b1a7Smrg    test -f "$tmpdepfile" && break
462e531b1a7Smrg  done
463e531b1a7Smrg  if test -f "$tmpdepfile"; then
4643e999d35Smrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
4653e999d35Smrg    # Add 'dependent.h:' lines.
466e531b1a7Smrg    sed -ne '2,${
4673e999d35Smrg               s/^ *//
4683e999d35Smrg               s/ \\*$//
4693e999d35Smrg               s/$/:/
4703e999d35Smrg               p
4713e999d35Smrg             }' "$tmpdepfile" >> "$depfile"
472e531b1a7Smrg  else
4733e999d35Smrg    make_dummy_depfile
474e531b1a7Smrg  fi
475e531b1a7Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
476e531b1a7Smrg  ;;
477e531b1a7Smrg
4783da7aff1Smrgtru64)
4793e999d35Smrg  # The Tru64 compiler uses -MD to generate dependencies as a side
4803e999d35Smrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
4813e999d35Smrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
4823e999d35Smrg  # dependencies in 'foo.d' instead, so we check for that too.
4833e999d35Smrg  # Subdirectories are respected.
4843e999d35Smrg  set_dir_from  "$object"
4853e999d35Smrg  set_base_from "$object"
4863e999d35Smrg
4873e999d35Smrg  if test "$libtool" = yes; then
4883e999d35Smrg    # Libtool generates 2 separate objects for the 2 libraries.  These
4893e999d35Smrg    # two compilations output dependencies in $dir.libs/$base.o.d and
4903e999d35Smrg    # in $dir$base.o.d.  We have to check for both files, because
4913e999d35Smrg    # one of the two compilations can be disabled.  We should prefer
4923e999d35Smrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4933e999d35Smrg    # automatically cleaned when .libs/ is deleted, while ignoring
4943e999d35Smrg    # the former would cause a distcleancheck panic.
4953e999d35Smrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
4963e999d35Smrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
4973e999d35Smrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
4983e999d35Smrg    "$@" -Wc,-MD
4993e999d35Smrg  else
5003e999d35Smrg    tmpdepfile1=$dir$base.d
5013e999d35Smrg    tmpdepfile2=$dir$base.d
5023e999d35Smrg    tmpdepfile3=$dir$base.d
5033e999d35Smrg    "$@" -MD
5043e999d35Smrg  fi
5053e999d35Smrg
5063e999d35Smrg  stat=$?
5073e999d35Smrg  if test $stat -ne 0; then
5083e999d35Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5093e999d35Smrg    exit $stat
5103e999d35Smrg  fi
5113e999d35Smrg
5123e999d35Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5133e999d35Smrg  do
5143e999d35Smrg    test -f "$tmpdepfile" && break
5153e999d35Smrg  done
5163e999d35Smrg  # Same post-processing that is required for AIX mode.
5173e999d35Smrg  aix_post_process_depfile
5183e999d35Smrg  ;;
5193e999d35Smrg
5203e999d35Smrgmsvc7)
5213e999d35Smrg  if test "$libtool" = yes; then
5223e999d35Smrg    showIncludes=-Wc,-showIncludes
5233e999d35Smrg  else
5243e999d35Smrg    showIncludes=-showIncludes
5253e999d35Smrg  fi
5263e999d35Smrg  "$@" $showIncludes > "$tmpdepfile"
5273e999d35Smrg  stat=$?
5283e999d35Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
5293e999d35Smrg  if test $stat -ne 0; then
5303e999d35Smrg    rm -f "$tmpdepfile"
5313e999d35Smrg    exit $stat
5323e999d35Smrg  fi
5333e999d35Smrg  rm -f "$depfile"
5343e999d35Smrg  echo "$object : \\" > "$depfile"
5353e999d35Smrg  # The first sed program below extracts the file names and escapes
5363e999d35Smrg  # backslashes for cygpath.  The second sed program outputs the file
5373e999d35Smrg  # name when reading, but also accumulates all include files in the
5383e999d35Smrg  # hold buffer in order to output them again at the end.  This only
5393e999d35Smrg  # works with sed implementations that can handle large buffers.
5403e999d35Smrg  sed < "$tmpdepfile" -n '
5413e999d35Smrg/^Note: including file:  *\(.*\)/ {
5423e999d35Smrg  s//\1/
5433e999d35Smrg  s/\\/\\\\/g
5443e999d35Smrg  p
5453e999d35Smrg}' | $cygpath_u | sort -u | sed -n '
5463e999d35Smrgs/ /\\ /g
5473e999d35Smrgs/\(.*\)/'"$tab"'\1 \\/p
5483e999d35Smrgs/.\(.*\) \\/\1:/
5493e999d35SmrgH
5503e999d35Smrg$ {
5513e999d35Smrg  s/.*/'"$tab"'/
5523e999d35Smrg  G
5533e999d35Smrg  p
5543e999d35Smrg}' >> "$depfile"
5553e999d35Smrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
5563e999d35Smrg  rm -f "$tmpdepfile"
5573e999d35Smrg  ;;
5583e999d35Smrg
5593e999d35Smrgmsvc7msys)
5603e999d35Smrg  # This case exists only to let depend.m4 do its work.  It works by
5613e999d35Smrg  # looking at the text of this script.  This case will never be run,
5623e999d35Smrg  # since it is checked for above.
5633e999d35Smrg  exit 1
5643e999d35Smrg  ;;
5653da7aff1Smrg
5663da7aff1Smrg#nosideeffect)
5673da7aff1Smrg  # This comment above is used by automake to tell side-effect
5683da7aff1Smrg  # dependency tracking mechanisms from slower ones.
5693da7aff1Smrg
5703da7aff1Smrgdashmstdout)
5713da7aff1Smrg  # Important note: in order to support this mode, a compiler *must*
5723da7aff1Smrg  # always write the preprocessed file to stdout, regardless of -o.
5733da7aff1Smrg  "$@" || exit $?
5743da7aff1Smrg
5753da7aff1Smrg  # Remove the call to Libtool.
5763da7aff1Smrg  if test "$libtool" = yes; then
577e531b1a7Smrg    while test "X$1" != 'X--mode=compile'; do
5783da7aff1Smrg      shift
5793da7aff1Smrg    done
5803da7aff1Smrg    shift
5813da7aff1Smrg  fi
5823da7aff1Smrg
5833e999d35Smrg  # Remove '-o $object'.
5843da7aff1Smrg  IFS=" "
5853da7aff1Smrg  for arg
5863da7aff1Smrg  do
5873da7aff1Smrg    case $arg in
5883da7aff1Smrg    -o)
5893da7aff1Smrg      shift
5903da7aff1Smrg      ;;
5913da7aff1Smrg    $object)
5923da7aff1Smrg      shift
5933da7aff1Smrg      ;;
5943da7aff1Smrg    *)
5953da7aff1Smrg      set fnord "$@" "$arg"
5963da7aff1Smrg      shift # fnord
5973da7aff1Smrg      shift # $arg
5983da7aff1Smrg      ;;
5993da7aff1Smrg    esac
6003da7aff1Smrg  done
6013da7aff1Smrg
6023da7aff1Smrg  test -z "$dashmflag" && dashmflag=-M
6033e999d35Smrg  # Require at least two characters before searching for ':'
6043da7aff1Smrg  # in the target name.  This is to cope with DOS-style filenames:
6053e999d35Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
6063da7aff1Smrg  "$@" $dashmflag |
6073e999d35Smrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
6083da7aff1Smrg  rm -f "$depfile"
6093da7aff1Smrg  cat < "$tmpdepfile" > "$depfile"
6103e999d35Smrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
6113e999d35Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6123e999d35Smrg  tr ' ' "$nl" < "$tmpdepfile" \
6133e999d35Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6143e999d35Smrg    | sed -e 's/$/ :/' >> "$depfile"
6153da7aff1Smrg  rm -f "$tmpdepfile"
6163da7aff1Smrg  ;;
6173da7aff1Smrg
6183da7aff1SmrgdashXmstdout)
6193da7aff1Smrg  # This case only exists to satisfy depend.m4.  It is never actually
6203da7aff1Smrg  # run, as this mode is specially recognized in the preamble.
6213da7aff1Smrg  exit 1
6223da7aff1Smrg  ;;
6233da7aff1Smrg
6243da7aff1Smrgmakedepend)
6253da7aff1Smrg  "$@" || exit $?
6263da7aff1Smrg  # Remove any Libtool call
6273da7aff1Smrg  if test "$libtool" = yes; then
628e531b1a7Smrg    while test "X$1" != 'X--mode=compile'; do
6293da7aff1Smrg      shift
6303da7aff1Smrg    done
6313da7aff1Smrg    shift
6323da7aff1Smrg  fi
6333da7aff1Smrg  # X makedepend
6343da7aff1Smrg  shift
635e531b1a7Smrg  cleared=no eat=no
636e531b1a7Smrg  for arg
637e531b1a7Smrg  do
6383da7aff1Smrg    case $cleared in
6393da7aff1Smrg    no)
6403da7aff1Smrg      set ""; shift
6413da7aff1Smrg      cleared=yes ;;
6423da7aff1Smrg    esac
643e531b1a7Smrg    if test $eat = yes; then
644e531b1a7Smrg      eat=no
645e531b1a7Smrg      continue
646e531b1a7Smrg    fi
6473da7aff1Smrg    case "$arg" in
6483da7aff1Smrg    -D*|-I*)
6493da7aff1Smrg      set fnord "$@" "$arg"; shift ;;
6503da7aff1Smrg    # Strip any option that makedepend may not understand.  Remove
6513da7aff1Smrg    # the object too, otherwise makedepend will parse it as a source file.
652e531b1a7Smrg    -arch)
653e531b1a7Smrg      eat=yes ;;
6543da7aff1Smrg    -*|$object)
6553da7aff1Smrg      ;;
6563da7aff1Smrg    *)
6573da7aff1Smrg      set fnord "$@" "$arg"; shift ;;
6583da7aff1Smrg    esac
6593da7aff1Smrg  done
660e531b1a7Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
6613da7aff1Smrg  touch "$tmpdepfile"
6623da7aff1Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
6633da7aff1Smrg  rm -f "$depfile"
6643e999d35Smrg  # makedepend may prepend the VPATH from the source file name to the object.
6653e999d35Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
6663e999d35Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
6673e999d35Smrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
6683e999d35Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6693e999d35Smrg  sed '1,2d' "$tmpdepfile" \
6703e999d35Smrg    | tr ' ' "$nl" \
6713e999d35Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6723e999d35Smrg    | sed -e 's/$/ :/' >> "$depfile"
6733da7aff1Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
6743da7aff1Smrg  ;;
6753da7aff1Smrg
6763da7aff1Smrgcpp)
6773da7aff1Smrg  # Important note: in order to support this mode, a compiler *must*
6783da7aff1Smrg  # always write the preprocessed file to stdout.
6793da7aff1Smrg  "$@" || exit $?
6803da7aff1Smrg
6813da7aff1Smrg  # Remove the call to Libtool.
6823da7aff1Smrg  if test "$libtool" = yes; then
683e531b1a7Smrg    while test "X$1" != 'X--mode=compile'; do
6843da7aff1Smrg      shift
6853da7aff1Smrg    done
6863da7aff1Smrg    shift
6873da7aff1Smrg  fi
6883da7aff1Smrg
6893e999d35Smrg  # Remove '-o $object'.
6903da7aff1Smrg  IFS=" "
6913da7aff1Smrg  for arg
6923da7aff1Smrg  do
6933da7aff1Smrg    case $arg in
6943da7aff1Smrg    -o)
6953da7aff1Smrg      shift
6963da7aff1Smrg      ;;
6973da7aff1Smrg    $object)
6983da7aff1Smrg      shift
6993da7aff1Smrg      ;;
7003da7aff1Smrg    *)
7013da7aff1Smrg      set fnord "$@" "$arg"
7023da7aff1Smrg      shift # fnord
7033da7aff1Smrg      shift # $arg
7043da7aff1Smrg      ;;
7053da7aff1Smrg    esac
7063da7aff1Smrg  done
7073da7aff1Smrg
7083e999d35Smrg  "$@" -E \
7093e999d35Smrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7103e999d35Smrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7113e999d35Smrg    | sed '$ s: \\$::' > "$tmpdepfile"
7123da7aff1Smrg  rm -f "$depfile"
7133da7aff1Smrg  echo "$object : \\" > "$depfile"
7143da7aff1Smrg  cat < "$tmpdepfile" >> "$depfile"
7153da7aff1Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
7163da7aff1Smrg  rm -f "$tmpdepfile"
7173da7aff1Smrg  ;;
7183da7aff1Smrg
7193da7aff1Smrgmsvisualcpp)
7203da7aff1Smrg  # Important note: in order to support this mode, a compiler *must*
721e531b1a7Smrg  # always write the preprocessed file to stdout.
7223da7aff1Smrg  "$@" || exit $?
723e531b1a7Smrg
724e531b1a7Smrg  # Remove the call to Libtool.
725e531b1a7Smrg  if test "$libtool" = yes; then
726e531b1a7Smrg    while test "X$1" != 'X--mode=compile'; do
727e531b1a7Smrg      shift
728e531b1a7Smrg    done
729e531b1a7Smrg    shift
730e531b1a7Smrg  fi
731e531b1a7Smrg
7323da7aff1Smrg  IFS=" "
7333da7aff1Smrg  for arg
7343da7aff1Smrg  do
7353da7aff1Smrg    case "$arg" in
736e531b1a7Smrg    -o)
737e531b1a7Smrg      shift
738e531b1a7Smrg      ;;
739e531b1a7Smrg    $object)
740e531b1a7Smrg      shift
741e531b1a7Smrg      ;;
7423da7aff1Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
7433e999d35Smrg        set fnord "$@"
7443e999d35Smrg        shift
7453e999d35Smrg        shift
7463e999d35Smrg        ;;
7473da7aff1Smrg    *)
7483e999d35Smrg        set fnord "$@" "$arg"
7493e999d35Smrg        shift
7503e999d35Smrg        shift
7513e999d35Smrg        ;;
7523da7aff1Smrg    esac
7533da7aff1Smrg  done
754e531b1a7Smrg  "$@" -E 2>/dev/null |
755e531b1a7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
7563da7aff1Smrg  rm -f "$depfile"
7573da7aff1Smrg  echo "$object : \\" > "$depfile"
7583e999d35Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
7593e999d35Smrg  echo "$tab" >> "$depfile"
760e531b1a7Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
7613da7aff1Smrg  rm -f "$tmpdepfile"
7623da7aff1Smrg  ;;
7633da7aff1Smrg
764e531b1a7Smrgmsvcmsys)
765e531b1a7Smrg  # This case exists only to let depend.m4 do its work.  It works by
766e531b1a7Smrg  # looking at the text of this script.  This case will never be run,
767e531b1a7Smrg  # since it is checked for above.
768e531b1a7Smrg  exit 1
769e531b1a7Smrg  ;;
770e531b1a7Smrg
7713da7aff1Smrgnone)
7723da7aff1Smrg  exec "$@"
7733da7aff1Smrg  ;;
7743da7aff1Smrg
7753da7aff1Smrg*)
7763da7aff1Smrg  echo "Unknown depmode $depmode" 1>&2
7773da7aff1Smrg  exit 1
7783da7aff1Smrg  ;;
7793da7aff1Smrgesac
7803da7aff1Smrg
7813da7aff1Smrgexit 0
782e531b1a7Smrg
783e531b1a7Smrg# Local Variables:
784e531b1a7Smrg# mode: shell-script
785e531b1a7Smrg# sh-indentation: 2
786e531b1a7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
787e531b1a7Smrg# time-stamp-start: "scriptversion="
788e531b1a7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
789e531b1a7Smrg# time-stamp-time-zone: "UTC"
790e531b1a7Smrg# time-stamp-end: "; # UTC"
791e531b1a7Smrg# End:
792