depcomp revision 0d16fef4
1de2362d3Smrg#! /bin/sh
2de2362d3Smrg# depcomp - compile a program generating dependencies as side-effects
3de2362d3Smrg
40d16fef4Smrgscriptversion=2013-05-30.07; # UTC
5de2362d3Smrg
60d16fef4Smrg# Copyright (C) 1999-2014 Free Software Foundation, Inc.
7de2362d3Smrg
8de2362d3Smrg# This program is free software; you can redistribute it and/or modify
9de2362d3Smrg# it under the terms of the GNU General Public License as published by
10de2362d3Smrg# the Free Software Foundation; either version 2, or (at your option)
11de2362d3Smrg# any later version.
12de2362d3Smrg
13de2362d3Smrg# This program is distributed in the hope that it will be useful,
14de2362d3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16de2362d3Smrg# GNU General Public License for more details.
17de2362d3Smrg
18de2362d3Smrg# You should have received a copy of the GNU General Public License
190d16fef4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20de2362d3Smrg
21de2362d3Smrg# As a special exception to the GNU General Public License, if you
22de2362d3Smrg# distribute this file as part of a program that contains a
23de2362d3Smrg# configuration script generated by Autoconf, you may include it under
24de2362d3Smrg# the same distribution terms that you use for the rest of that program.
25de2362d3Smrg
26de2362d3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27de2362d3Smrg
28de2362d3Smrgcase $1 in
29de2362d3Smrg  '')
300d16fef4Smrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
310d16fef4Smrg    exit 1;
320d16fef4Smrg    ;;
33de2362d3Smrg  -h | --h*)
34de2362d3Smrg    cat <<\EOF
35de2362d3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36de2362d3Smrg
37de2362d3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38de2362d3Smrgas side-effects.
39de2362d3Smrg
40de2362d3SmrgEnvironment variables:
41de2362d3Smrg  depmode     Dependency tracking mode.
420d16fef4Smrg  source      Source file read by 'PROGRAMS ARGS'.
430d16fef4Smrg  object      Object file output by 'PROGRAMS ARGS'.
44de2362d3Smrg  DEPDIR      directory where to store dependencies.
45de2362d3Smrg  depfile     Dependency file to output.
460d16fef4Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
47de2362d3Smrg  libtool     Whether libtool is used (yes/no).
48de2362d3Smrg
49de2362d3SmrgReport bugs to <bug-automake@gnu.org>.
50de2362d3SmrgEOF
51de2362d3Smrg    exit $?
52de2362d3Smrg    ;;
53de2362d3Smrg  -v | --v*)
54de2362d3Smrg    echo "depcomp $scriptversion"
55de2362d3Smrg    exit $?
56de2362d3Smrg    ;;
57de2362d3Smrgesac
58de2362d3Smrg
590d16fef4Smrg# Get the directory component of the given path, and save it in the
600d16fef4Smrg# global variables '$dir'.  Note that this directory component will
610d16fef4Smrg# be either empty or ending with a '/' character.  This is deliberate.
620d16fef4Smrgset_dir_from ()
630d16fef4Smrg{
640d16fef4Smrg  case $1 in
650d16fef4Smrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
660d16fef4Smrg      *) dir=;;
670d16fef4Smrg  esac
680d16fef4Smrg}
690d16fef4Smrg
700d16fef4Smrg# Get the suffix-stripped basename of the given path, and save it the
710d16fef4Smrg# global variable '$base'.
720d16fef4Smrgset_base_from ()
730d16fef4Smrg{
740d16fef4Smrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
750d16fef4Smrg}
760d16fef4Smrg
770d16fef4Smrg# If no dependency file was actually created by the compiler invocation,
780d16fef4Smrg# we still have to create a dummy depfile, to avoid errors with the
790d16fef4Smrg# Makefile "include basename.Plo" scheme.
800d16fef4Smrgmake_dummy_depfile ()
810d16fef4Smrg{
820d16fef4Smrg  echo "#dummy" > "$depfile"
830d16fef4Smrg}
840d16fef4Smrg
850d16fef4Smrg# Factor out some common post-processing of the generated depfile.
860d16fef4Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
870d16fef4Smrgaix_post_process_depfile ()
880d16fef4Smrg{
890d16fef4Smrg  # If the compiler actually managed to produce a dependency file,
900d16fef4Smrg  # post-process it.
910d16fef4Smrg  if test -f "$tmpdepfile"; then
920d16fef4Smrg    # Each line is of the form 'foo.o: dependency.h'.
930d16fef4Smrg    # Do two passes, one to just change these to
940d16fef4Smrg    #   $object: dependency.h
950d16fef4Smrg    # and one to simply output
960d16fef4Smrg    #   dependency.h:
970d16fef4Smrg    # which is needed to avoid the deleted-header problem.
980d16fef4Smrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
990d16fef4Smrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
1000d16fef4Smrg    } > "$depfile"
1010d16fef4Smrg    rm -f "$tmpdepfile"
1020d16fef4Smrg  else
1030d16fef4Smrg    make_dummy_depfile
1040d16fef4Smrg  fi
1050d16fef4Smrg}
1060d16fef4Smrg
1070d16fef4Smrg# A tabulation character.
1080d16fef4Smrgtab='	'
1090d16fef4Smrg# A newline character.
1100d16fef4Smrgnl='
1110d16fef4Smrg'
1120d16fef4Smrg# Character ranges might be problematic outside the C locale.
1130d16fef4Smrg# These definitions help.
1140d16fef4Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
1150d16fef4Smrglower=abcdefghijklmnopqrstuvwxyz
1160d16fef4Smrgdigits=0123456789
1170d16fef4Smrgalpha=${upper}${lower}
1180d16fef4Smrg
119de2362d3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120de2362d3Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121de2362d3Smrg  exit 1
122de2362d3Smrgfi
123de2362d3Smrg
124de2362d3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125de2362d3Smrgdepfile=${depfile-`echo "$object" |
126de2362d3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127de2362d3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128de2362d3Smrg
129de2362d3Smrgrm -f "$tmpdepfile"
130de2362d3Smrg
1310d16fef4Smrg# Avoid interferences from the environment.
1320d16fef4Smrggccflag= dashmflag=
1330d16fef4Smrg
134de2362d3Smrg# Some modes work just like other modes, but use different flags.  We
135de2362d3Smrg# parameterize here, but still list the modes in the big case below,
136de2362d3Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
137de2362d3Smrg# here, because this file can only contain one case statement.
138de2362d3Smrgif test "$depmode" = hp; then
139de2362d3Smrg  # HP compiler uses -M and no extra arg.
140de2362d3Smrg  gccflag=-M
141de2362d3Smrg  depmode=gcc
142de2362d3Smrgfi
143de2362d3Smrg
144de2362d3Smrgif test "$depmode" = dashXmstdout; then
1450d16fef4Smrg  # This is just like dashmstdout with a different argument.
1460d16fef4Smrg  dashmflag=-xM
1470d16fef4Smrg  depmode=dashmstdout
1480d16fef4Smrgfi
1490d16fef4Smrg
1500d16fef4Smrgcygpath_u="cygpath -u -f -"
1510d16fef4Smrgif test "$depmode" = msvcmsys; then
1520d16fef4Smrg  # This is just like msvisualcpp but w/o cygpath translation.
1530d16fef4Smrg  # Just convert the backslash-escaped backslashes to single forward
1540d16fef4Smrg  # slashes to satisfy depend.m4
1550d16fef4Smrg  cygpath_u='sed s,\\\\,/,g'
1560d16fef4Smrg  depmode=msvisualcpp
1570d16fef4Smrgfi
1580d16fef4Smrg
1590d16fef4Smrgif test "$depmode" = msvc7msys; then
1600d16fef4Smrg  # This is just like msvc7 but w/o cygpath translation.
1610d16fef4Smrg  # Just convert the backslash-escaped backslashes to single forward
1620d16fef4Smrg  # slashes to satisfy depend.m4
1630d16fef4Smrg  cygpath_u='sed s,\\\\,/,g'
1640d16fef4Smrg  depmode=msvc7
1650d16fef4Smrgfi
1660d16fef4Smrg
1670d16fef4Smrgif test "$depmode" = xlc; then
1680d16fef4Smrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
1690d16fef4Smrg  gccflag=-qmakedep=gcc,-MF
1700d16fef4Smrg  depmode=gcc
171de2362d3Smrgfi
172de2362d3Smrg
173de2362d3Smrgcase "$depmode" in
174de2362d3Smrggcc3)
175de2362d3Smrg## gcc 3 implements dependency tracking that does exactly what
176de2362d3Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177de2362d3Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
178de2362d3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179de2362d3Smrg## the command line argument order; so add the flags where they
180de2362d3Smrg## appear in depend2.am.  Note that the slowdown incurred here
181de2362d3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182de2362d3Smrg  for arg
183de2362d3Smrg  do
184de2362d3Smrg    case $arg in
185de2362d3Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186de2362d3Smrg    *)  set fnord "$@" "$arg" ;;
187de2362d3Smrg    esac
188de2362d3Smrg    shift # fnord
189de2362d3Smrg    shift # $arg
190de2362d3Smrg  done
191de2362d3Smrg  "$@"
192de2362d3Smrg  stat=$?
1930d16fef4Smrg  if test $stat -ne 0; then
194de2362d3Smrg    rm -f "$tmpdepfile"
195de2362d3Smrg    exit $stat
196de2362d3Smrg  fi
197de2362d3Smrg  mv "$tmpdepfile" "$depfile"
198de2362d3Smrg  ;;
199de2362d3Smrg
200de2362d3Smrggcc)
2010d16fef4Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
2020d16fef4Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
2030d16fef4Smrg## (see the conditional assignment to $gccflag above).
204de2362d3Smrg## There are various ways to get dependency output from gcc.  Here's
205de2362d3Smrg## why we pick this rather obscure method:
206de2362d3Smrg## - Don't want to use -MD because we'd like the dependencies to end
207de2362d3Smrg##   up in a subdir.  Having to rename by hand is ugly.
208de2362d3Smrg##   (We might end up doing this anyway to support other compilers.)
209de2362d3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
2100d16fef4Smrg##   -MM, not -M (despite what the docs say).  Also, it might not be
2110d16fef4Smrg##   supported by the other compilers which use the 'gcc' depmode.
212de2362d3Smrg## - Using -M directly means running the compiler twice (even worse
213de2362d3Smrg##   than renaming).
214de2362d3Smrg  if test -z "$gccflag"; then
215de2362d3Smrg    gccflag=-MD,
216de2362d3Smrg  fi
217de2362d3Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
218de2362d3Smrg  stat=$?
2190d16fef4Smrg  if test $stat -ne 0; then
220de2362d3Smrg    rm -f "$tmpdepfile"
221de2362d3Smrg    exit $stat
222de2362d3Smrg  fi
223de2362d3Smrg  rm -f "$depfile"
224de2362d3Smrg  echo "$object : \\" > "$depfile"
2250d16fef4Smrg  # The second -e expression handles DOS-style file names with drive
2260d16fef4Smrg  # letters.
227de2362d3Smrg  sed -e 's/^[^:]*: / /' \
228de2362d3Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
2290d16fef4Smrg## This next piece of magic avoids the "deleted header file" problem.
230de2362d3Smrg## The problem is that when a header file which appears in a .P file
231de2362d3Smrg## is deleted, the dependency causes make to die (because there is
232de2362d3Smrg## typically no way to rebuild the header).  We avoid this by adding
233de2362d3Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
234de2362d3Smrg## this for us directly.
2350d16fef4Smrg## Some versions of gcc put a space before the ':'.  On the theory
236de2362d3Smrg## that the space means something, we add a space to the output as
2370d16fef4Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
2380d16fef4Smrg## to the object.  Take care to not repeat it in the output.
239de2362d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
240de2362d3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
2410d16fef4Smrg  tr ' ' "$nl" < "$tmpdepfile" \
2420d16fef4Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
2430d16fef4Smrg    | sed -e 's/$/ :/' >> "$depfile"
244de2362d3Smrg  rm -f "$tmpdepfile"
245de2362d3Smrg  ;;
246de2362d3Smrg
247de2362d3Smrghp)
248de2362d3Smrg  # This case exists only to let depend.m4 do its work.  It works by
249de2362d3Smrg  # looking at the text of this script.  This case will never be run,
250de2362d3Smrg  # since it is checked for above.
251de2362d3Smrg  exit 1
252de2362d3Smrg  ;;
253de2362d3Smrg
254de2362d3Smrgsgi)
255de2362d3Smrg  if test "$libtool" = yes; then
256de2362d3Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
257de2362d3Smrg  else
258de2362d3Smrg    "$@" -MDupdate "$tmpdepfile"
259de2362d3Smrg  fi
260de2362d3Smrg  stat=$?
2610d16fef4Smrg  if test $stat -ne 0; then
262de2362d3Smrg    rm -f "$tmpdepfile"
263de2362d3Smrg    exit $stat
264de2362d3Smrg  fi
265de2362d3Smrg  rm -f "$depfile"
266de2362d3Smrg
267de2362d3Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268de2362d3Smrg    echo "$object : \\" > "$depfile"
269de2362d3Smrg    # Clip off the initial element (the dependent).  Don't try to be
270de2362d3Smrg    # clever and replace this with sed code, as IRIX sed won't handle
271de2362d3Smrg    # lines with more than a fixed number of characters (4096 in
272de2362d3Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2730d16fef4Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
274de2362d3Smrg    # dependency line.
2750d16fef4Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2760d16fef4Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
2770d16fef4Smrg      | tr "$nl" ' ' >> "$depfile"
2780d16fef4Smrg    echo >> "$depfile"
279de2362d3Smrg    # The second pass generates a dummy entry for each header file.
2800d16fef4Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2810d16fef4Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2820d16fef4Smrg      >> "$depfile"
283de2362d3Smrg  else
2840d16fef4Smrg    make_dummy_depfile
285de2362d3Smrg  fi
286de2362d3Smrg  rm -f "$tmpdepfile"
287de2362d3Smrg  ;;
288de2362d3Smrg
2890d16fef4Smrgxlc)
2900d16fef4Smrg  # This case exists only to let depend.m4 do its work.  It works by
2910d16fef4Smrg  # looking at the text of this script.  This case will never be run,
2920d16fef4Smrg  # since it is checked for above.
2930d16fef4Smrg  exit 1
2940d16fef4Smrg  ;;
2950d16fef4Smrg
296de2362d3Smrgaix)
297de2362d3Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
298de2362d3Smrg  # in a .u file.  In older versions, this file always lives in the
2990d16fef4Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
300de2362d3Smrg  # start of each line; $object doesn't have directory information.
301de2362d3Smrg  # Version 6 uses the directory in both cases.
3020d16fef4Smrg  set_dir_from "$object"
3030d16fef4Smrg  set_base_from "$object"
304de2362d3Smrg  if test "$libtool" = yes; then
305de2362d3Smrg    tmpdepfile1=$dir$base.u
306de2362d3Smrg    tmpdepfile2=$base.u
307de2362d3Smrg    tmpdepfile3=$dir.libs/$base.u
308de2362d3Smrg    "$@" -Wc,-M
309de2362d3Smrg  else
310de2362d3Smrg    tmpdepfile1=$dir$base.u
311de2362d3Smrg    tmpdepfile2=$dir$base.u
312de2362d3Smrg    tmpdepfile3=$dir$base.u
313de2362d3Smrg    "$@" -M
314de2362d3Smrg  fi
315de2362d3Smrg  stat=$?
3160d16fef4Smrg  if test $stat -ne 0; then
317de2362d3Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318de2362d3Smrg    exit $stat
319de2362d3Smrg  fi
320de2362d3Smrg
321de2362d3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322de2362d3Smrg  do
323de2362d3Smrg    test -f "$tmpdepfile" && break
324de2362d3Smrg  done
3250d16fef4Smrg  aix_post_process_depfile
3260d16fef4Smrg  ;;
3270d16fef4Smrg
3280d16fef4Smrgtcc)
3290d16fef4Smrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
3300d16fef4Smrg  # FIXME: That version still under development at the moment of writing.
3310d16fef4Smrg  #        Make that this statement remains true also for stable, released
3320d16fef4Smrg  #        versions.
3330d16fef4Smrg  # It will wrap lines (doesn't matter whether long or short) with a
3340d16fef4Smrg  # trailing '\', as in:
3350d16fef4Smrg  #
3360d16fef4Smrg  #   foo.o : \
3370d16fef4Smrg  #    foo.c \
3380d16fef4Smrg  #    foo.h \
3390d16fef4Smrg  #
3400d16fef4Smrg  # It will put a trailing '\' even on the last line, and will use leading
3410d16fef4Smrg  # spaces rather than leading tabs (at least since its commit 0394caf7
3420d16fef4Smrg  # "Emit spaces for -MD").
3430d16fef4Smrg  "$@" -MD -MF "$tmpdepfile"
3440d16fef4Smrg  stat=$?
3450d16fef4Smrg  if test $stat -ne 0; then
3460d16fef4Smrg    rm -f "$tmpdepfile"
3470d16fef4Smrg    exit $stat
348de2362d3Smrg  fi
3490d16fef4Smrg  rm -f "$depfile"
3500d16fef4Smrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
3510d16fef4Smrg  # We have to change lines of the first kind to '$object: \'.
3520d16fef4Smrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
3530d16fef4Smrg  # And for each line of the second kind, we have to emit a 'dep.h:'
3540d16fef4Smrg  # dummy dependency, to avoid the deleted-header problem.
3550d16fef4Smrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356de2362d3Smrg  rm -f "$tmpdepfile"
357de2362d3Smrg  ;;
358de2362d3Smrg
3590d16fef4Smrg## The order of this option in the case statement is important, since the
3600d16fef4Smrg## shell code in configure will try each of these formats in the order
3610d16fef4Smrg## listed in this file.  A plain '-MD' option would be understood by many
3620d16fef4Smrg## compilers, so we must ensure this comes after the gcc and icc options.
3630d16fef4Smrgpgcc)
3640d16fef4Smrg  # Portland's C compiler understands '-MD'.
3650d16fef4Smrg  # Will always output deps to 'file.d' where file is the root name of the
3660d16fef4Smrg  # source file under compilation, even if file resides in a subdirectory.
3670d16fef4Smrg  # The object file name does not affect the name of the '.d' file.
3680d16fef4Smrg  # pgcc 10.2 will output
369de2362d3Smrg  #    foo.o: sub/foo.c sub/foo.h
3700d16fef4Smrg  # and will wrap long lines using '\' :
371de2362d3Smrg  #    foo.o: sub/foo.c ... \
372de2362d3Smrg  #     sub/foo.h ... \
373de2362d3Smrg  #     ...
3740d16fef4Smrg  set_dir_from "$object"
3750d16fef4Smrg  # Use the source, not the object, to determine the base name, since
3760d16fef4Smrg  # that's sadly what pgcc will do too.
3770d16fef4Smrg  set_base_from "$source"
3780d16fef4Smrg  tmpdepfile=$base.d
3790d16fef4Smrg
3800d16fef4Smrg  # For projects that build the same source file twice into different object
3810d16fef4Smrg  # files, the pgcc approach of using the *source* file root name can cause
3820d16fef4Smrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
3830d16fef4Smrg  # the same $tmpdepfile.
3840d16fef4Smrg  lockdir=$base.d-lock
3850d16fef4Smrg  trap "
3860d16fef4Smrg    echo '$0: caught signal, cleaning up...' >&2
3870d16fef4Smrg    rmdir '$lockdir'
3880d16fef4Smrg    exit 1
3890d16fef4Smrg  " 1 2 13 15
3900d16fef4Smrg  numtries=100
3910d16fef4Smrg  i=$numtries
3920d16fef4Smrg  while test $i -gt 0; do
3930d16fef4Smrg    # mkdir is a portable test-and-set.
3940d16fef4Smrg    if mkdir "$lockdir" 2>/dev/null; then
3950d16fef4Smrg      # This process acquired the lock.
3960d16fef4Smrg      "$@" -MD
3970d16fef4Smrg      stat=$?
3980d16fef4Smrg      # Release the lock.
3990d16fef4Smrg      rmdir "$lockdir"
4000d16fef4Smrg      break
4010d16fef4Smrg    else
4020d16fef4Smrg      # If the lock is being held by a different process, wait
4030d16fef4Smrg      # until the winning process is done or we timeout.
4040d16fef4Smrg      while test -d "$lockdir" && test $i -gt 0; do
4050d16fef4Smrg        sleep 1
4060d16fef4Smrg        i=`expr $i - 1`
4070d16fef4Smrg      done
4080d16fef4Smrg    fi
4090d16fef4Smrg    i=`expr $i - 1`
4100d16fef4Smrg  done
4110d16fef4Smrg  trap - 1 2 13 15
4120d16fef4Smrg  if test $i -le 0; then
4130d16fef4Smrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
4140d16fef4Smrg    echo "$0: check lockdir '$lockdir'" >&2
4150d16fef4Smrg    exit 1
4160d16fef4Smrg  fi
417de2362d3Smrg
4180d16fef4Smrg  if test $stat -ne 0; then
419de2362d3Smrg    rm -f "$tmpdepfile"
420de2362d3Smrg    exit $stat
421de2362d3Smrg  fi
422de2362d3Smrg  rm -f "$depfile"
423de2362d3Smrg  # Each line is of the form `foo.o: dependent.h',
424de2362d3Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425de2362d3Smrg  # Do two passes, one to just change these to
426de2362d3Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
427de2362d3Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428de2362d3Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
429de2362d3Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
4300d16fef4Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
4310d16fef4Smrg    | sed -e 's/$/ :/' >> "$depfile"
432de2362d3Smrg  rm -f "$tmpdepfile"
433de2362d3Smrg  ;;
434de2362d3Smrg
435de2362d3Smrghp2)
436de2362d3Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437de2362d3Smrg  # compilers, which have integrated preprocessors.  The correct option
438de2362d3Smrg  # to use with these is +Maked; it writes dependencies to a file named
439de2362d3Smrg  # 'foo.d', which lands next to the object file, wherever that
440de2362d3Smrg  # happens to be.
441de2362d3Smrg  # Much of this is similar to the tru64 case; see comments there.
4420d16fef4Smrg  set_dir_from  "$object"
4430d16fef4Smrg  set_base_from "$object"
444de2362d3Smrg  if test "$libtool" = yes; then
445de2362d3Smrg    tmpdepfile1=$dir$base.d
446de2362d3Smrg    tmpdepfile2=$dir.libs/$base.d
447de2362d3Smrg    "$@" -Wc,+Maked
448de2362d3Smrg  else
449de2362d3Smrg    tmpdepfile1=$dir$base.d
450de2362d3Smrg    tmpdepfile2=$dir$base.d
451de2362d3Smrg    "$@" +Maked
452de2362d3Smrg  fi
453de2362d3Smrg  stat=$?
4540d16fef4Smrg  if test $stat -ne 0; then
455de2362d3Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
456de2362d3Smrg     exit $stat
457de2362d3Smrg  fi
458de2362d3Smrg
459de2362d3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460de2362d3Smrg  do
461de2362d3Smrg    test -f "$tmpdepfile" && break
462de2362d3Smrg  done
463de2362d3Smrg  if test -f "$tmpdepfile"; then
4640d16fef4Smrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
4650d16fef4Smrg    # Add 'dependent.h:' lines.
4660d16fef4Smrg    sed -ne '2,${
4670d16fef4Smrg               s/^ *//
4680d16fef4Smrg               s/ \\*$//
4690d16fef4Smrg               s/$/:/
4700d16fef4Smrg               p
4710d16fef4Smrg             }' "$tmpdepfile" >> "$depfile"
472de2362d3Smrg  else
4730d16fef4Smrg    make_dummy_depfile
474de2362d3Smrg  fi
475de2362d3Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
476de2362d3Smrg  ;;
477de2362d3Smrg
478de2362d3Smrgtru64)
4790d16fef4Smrg  # The Tru64 compiler uses -MD to generate dependencies as a side
4800d16fef4Smrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
4810d16fef4Smrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
4820d16fef4Smrg  # dependencies in 'foo.d' instead, so we check for that too.
4830d16fef4Smrg  # Subdirectories are respected.
4840d16fef4Smrg  set_dir_from  "$object"
4850d16fef4Smrg  set_base_from "$object"
4860d16fef4Smrg
4870d16fef4Smrg  if test "$libtool" = yes; then
4880d16fef4Smrg    # Libtool generates 2 separate objects for the 2 libraries.  These
4890d16fef4Smrg    # two compilations output dependencies in $dir.libs/$base.o.d and
4900d16fef4Smrg    # in $dir$base.o.d.  We have to check for both files, because
4910d16fef4Smrg    # one of the two compilations can be disabled.  We should prefer
4920d16fef4Smrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4930d16fef4Smrg    # automatically cleaned when .libs/ is deleted, while ignoring
4940d16fef4Smrg    # the former would cause a distcleancheck panic.
4950d16fef4Smrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
4960d16fef4Smrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
4970d16fef4Smrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
4980d16fef4Smrg    "$@" -Wc,-MD
4990d16fef4Smrg  else
5000d16fef4Smrg    tmpdepfile1=$dir$base.d
5010d16fef4Smrg    tmpdepfile2=$dir$base.d
5020d16fef4Smrg    tmpdepfile3=$dir$base.d
5030d16fef4Smrg    "$@" -MD
5040d16fef4Smrg  fi
5050d16fef4Smrg
5060d16fef4Smrg  stat=$?
5070d16fef4Smrg  if test $stat -ne 0; then
5080d16fef4Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5090d16fef4Smrg    exit $stat
5100d16fef4Smrg  fi
5110d16fef4Smrg
5120d16fef4Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
5130d16fef4Smrg  do
5140d16fef4Smrg    test -f "$tmpdepfile" && break
5150d16fef4Smrg  done
5160d16fef4Smrg  # Same post-processing that is required for AIX mode.
5170d16fef4Smrg  aix_post_process_depfile
5180d16fef4Smrg  ;;
5190d16fef4Smrg
5200d16fef4Smrgmsvc7)
5210d16fef4Smrg  if test "$libtool" = yes; then
5220d16fef4Smrg    showIncludes=-Wc,-showIncludes
5230d16fef4Smrg  else
5240d16fef4Smrg    showIncludes=-showIncludes
5250d16fef4Smrg  fi
5260d16fef4Smrg  "$@" $showIncludes > "$tmpdepfile"
5270d16fef4Smrg  stat=$?
5280d16fef4Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
5290d16fef4Smrg  if test $stat -ne 0; then
5300d16fef4Smrg    rm -f "$tmpdepfile"
5310d16fef4Smrg    exit $stat
5320d16fef4Smrg  fi
5330d16fef4Smrg  rm -f "$depfile"
5340d16fef4Smrg  echo "$object : \\" > "$depfile"
5350d16fef4Smrg  # The first sed program below extracts the file names and escapes
5360d16fef4Smrg  # backslashes for cygpath.  The second sed program outputs the file
5370d16fef4Smrg  # name when reading, but also accumulates all include files in the
5380d16fef4Smrg  # hold buffer in order to output them again at the end.  This only
5390d16fef4Smrg  # works with sed implementations that can handle large buffers.
5400d16fef4Smrg  sed < "$tmpdepfile" -n '
5410d16fef4Smrg/^Note: including file:  *\(.*\)/ {
5420d16fef4Smrg  s//\1/
5430d16fef4Smrg  s/\\/\\\\/g
5440d16fef4Smrg  p
5450d16fef4Smrg}' | $cygpath_u | sort -u | sed -n '
5460d16fef4Smrgs/ /\\ /g
5470d16fef4Smrgs/\(.*\)/'"$tab"'\1 \\/p
5480d16fef4Smrgs/.\(.*\) \\/\1:/
5490d16fef4SmrgH
5500d16fef4Smrg$ {
5510d16fef4Smrg  s/.*/'"$tab"'/
5520d16fef4Smrg  G
5530d16fef4Smrg  p
5540d16fef4Smrg}' >> "$depfile"
5550d16fef4Smrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
5560d16fef4Smrg  rm -f "$tmpdepfile"
5570d16fef4Smrg  ;;
5580d16fef4Smrg
5590d16fef4Smrgmsvc7msys)
5600d16fef4Smrg  # This case exists only to let depend.m4 do its work.  It works by
5610d16fef4Smrg  # looking at the text of this script.  This case will never be run,
5620d16fef4Smrg  # since it is checked for above.
5630d16fef4Smrg  exit 1
5640d16fef4Smrg  ;;
565de2362d3Smrg
566de2362d3Smrg#nosideeffect)
567de2362d3Smrg  # This comment above is used by automake to tell side-effect
568de2362d3Smrg  # dependency tracking mechanisms from slower ones.
569de2362d3Smrg
570de2362d3Smrgdashmstdout)
571de2362d3Smrg  # Important note: in order to support this mode, a compiler *must*
572de2362d3Smrg  # always write the preprocessed file to stdout, regardless of -o.
573de2362d3Smrg  "$@" || exit $?
574de2362d3Smrg
575de2362d3Smrg  # Remove the call to Libtool.
576de2362d3Smrg  if test "$libtool" = yes; then
5770d16fef4Smrg    while test "X$1" != 'X--mode=compile'; do
578de2362d3Smrg      shift
579de2362d3Smrg    done
580de2362d3Smrg    shift
581de2362d3Smrg  fi
582de2362d3Smrg
5830d16fef4Smrg  # Remove '-o $object'.
584de2362d3Smrg  IFS=" "
585de2362d3Smrg  for arg
586de2362d3Smrg  do
587de2362d3Smrg    case $arg in
588de2362d3Smrg    -o)
589de2362d3Smrg      shift
590de2362d3Smrg      ;;
591de2362d3Smrg    $object)
592de2362d3Smrg      shift
593de2362d3Smrg      ;;
594de2362d3Smrg    *)
595de2362d3Smrg      set fnord "$@" "$arg"
596de2362d3Smrg      shift # fnord
597de2362d3Smrg      shift # $arg
598de2362d3Smrg      ;;
599de2362d3Smrg    esac
600de2362d3Smrg  done
601de2362d3Smrg
602de2362d3Smrg  test -z "$dashmflag" && dashmflag=-M
6030d16fef4Smrg  # Require at least two characters before searching for ':'
604de2362d3Smrg  # in the target name.  This is to cope with DOS-style filenames:
6050d16fef4Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606de2362d3Smrg  "$@" $dashmflag |
6070d16fef4Smrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608de2362d3Smrg  rm -f "$depfile"
609de2362d3Smrg  cat < "$tmpdepfile" > "$depfile"
6100d16fef4Smrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
6110d16fef4Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6120d16fef4Smrg  tr ' ' "$nl" < "$tmpdepfile" \
6130d16fef4Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6140d16fef4Smrg    | sed -e 's/$/ :/' >> "$depfile"
615de2362d3Smrg  rm -f "$tmpdepfile"
616de2362d3Smrg  ;;
617de2362d3Smrg
618de2362d3SmrgdashXmstdout)
619de2362d3Smrg  # This case only exists to satisfy depend.m4.  It is never actually
620de2362d3Smrg  # run, as this mode is specially recognized in the preamble.
621de2362d3Smrg  exit 1
622de2362d3Smrg  ;;
623de2362d3Smrg
624de2362d3Smrgmakedepend)
625de2362d3Smrg  "$@" || exit $?
626de2362d3Smrg  # Remove any Libtool call
627de2362d3Smrg  if test "$libtool" = yes; then
6280d16fef4Smrg    while test "X$1" != 'X--mode=compile'; do
629de2362d3Smrg      shift
630de2362d3Smrg    done
631de2362d3Smrg    shift
632de2362d3Smrg  fi
633de2362d3Smrg  # X makedepend
634de2362d3Smrg  shift
6350d16fef4Smrg  cleared=no eat=no
6360d16fef4Smrg  for arg
6370d16fef4Smrg  do
638de2362d3Smrg    case $cleared in
639de2362d3Smrg    no)
640de2362d3Smrg      set ""; shift
641de2362d3Smrg      cleared=yes ;;
642de2362d3Smrg    esac
6430d16fef4Smrg    if test $eat = yes; then
6440d16fef4Smrg      eat=no
6450d16fef4Smrg      continue
6460d16fef4Smrg    fi
647de2362d3Smrg    case "$arg" in
648de2362d3Smrg    -D*|-I*)
649de2362d3Smrg      set fnord "$@" "$arg"; shift ;;
650de2362d3Smrg    # Strip any option that makedepend may not understand.  Remove
651de2362d3Smrg    # the object too, otherwise makedepend will parse it as a source file.
6520d16fef4Smrg    -arch)
6530d16fef4Smrg      eat=yes ;;
654de2362d3Smrg    -*|$object)
655de2362d3Smrg      ;;
656de2362d3Smrg    *)
657de2362d3Smrg      set fnord "$@" "$arg"; shift ;;
658de2362d3Smrg    esac
659de2362d3Smrg  done
6600d16fef4Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661de2362d3Smrg  touch "$tmpdepfile"
662de2362d3Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663de2362d3Smrg  rm -f "$depfile"
6640d16fef4Smrg  # makedepend may prepend the VPATH from the source file name to the object.
6650d16fef4Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
6660d16fef4Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
6670d16fef4Smrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
6680d16fef4Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
6690d16fef4Smrg  sed '1,2d' "$tmpdepfile" \
6700d16fef4Smrg    | tr ' ' "$nl" \
6710d16fef4Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
6720d16fef4Smrg    | sed -e 's/$/ :/' >> "$depfile"
673de2362d3Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
674de2362d3Smrg  ;;
675de2362d3Smrg
676de2362d3Smrgcpp)
677de2362d3Smrg  # Important note: in order to support this mode, a compiler *must*
678de2362d3Smrg  # always write the preprocessed file to stdout.
679de2362d3Smrg  "$@" || exit $?
680de2362d3Smrg
681de2362d3Smrg  # Remove the call to Libtool.
682de2362d3Smrg  if test "$libtool" = yes; then
6830d16fef4Smrg    while test "X$1" != 'X--mode=compile'; do
684de2362d3Smrg      shift
685de2362d3Smrg    done
686de2362d3Smrg    shift
687de2362d3Smrg  fi
688de2362d3Smrg
6890d16fef4Smrg  # Remove '-o $object'.
690de2362d3Smrg  IFS=" "
691de2362d3Smrg  for arg
692de2362d3Smrg  do
693de2362d3Smrg    case $arg in
694de2362d3Smrg    -o)
695de2362d3Smrg      shift
696de2362d3Smrg      ;;
697de2362d3Smrg    $object)
698de2362d3Smrg      shift
699de2362d3Smrg      ;;
700de2362d3Smrg    *)
701de2362d3Smrg      set fnord "$@" "$arg"
702de2362d3Smrg      shift # fnord
703de2362d3Smrg      shift # $arg
704de2362d3Smrg      ;;
705de2362d3Smrg    esac
706de2362d3Smrg  done
707de2362d3Smrg
7080d16fef4Smrg  "$@" -E \
7090d16fef4Smrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7100d16fef4Smrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
7110d16fef4Smrg    | sed '$ s: \\$::' > "$tmpdepfile"
712de2362d3Smrg  rm -f "$depfile"
713de2362d3Smrg  echo "$object : \\" > "$depfile"
714de2362d3Smrg  cat < "$tmpdepfile" >> "$depfile"
715de2362d3Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716de2362d3Smrg  rm -f "$tmpdepfile"
717de2362d3Smrg  ;;
718de2362d3Smrg
719de2362d3Smrgmsvisualcpp)
720de2362d3Smrg  # Important note: in order to support this mode, a compiler *must*
7210d16fef4Smrg  # always write the preprocessed file to stdout.
722de2362d3Smrg  "$@" || exit $?
7230d16fef4Smrg
7240d16fef4Smrg  # Remove the call to Libtool.
7250d16fef4Smrg  if test "$libtool" = yes; then
7260d16fef4Smrg    while test "X$1" != 'X--mode=compile'; do
7270d16fef4Smrg      shift
7280d16fef4Smrg    done
7290d16fef4Smrg    shift
7300d16fef4Smrg  fi
7310d16fef4Smrg
732de2362d3Smrg  IFS=" "
733de2362d3Smrg  for arg
734de2362d3Smrg  do
735de2362d3Smrg    case "$arg" in
7360d16fef4Smrg    -o)
7370d16fef4Smrg      shift
7380d16fef4Smrg      ;;
7390d16fef4Smrg    $object)
7400d16fef4Smrg      shift
7410d16fef4Smrg      ;;
742de2362d3Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
7430d16fef4Smrg        set fnord "$@"
7440d16fef4Smrg        shift
7450d16fef4Smrg        shift
7460d16fef4Smrg        ;;
747de2362d3Smrg    *)
7480d16fef4Smrg        set fnord "$@" "$arg"
7490d16fef4Smrg        shift
7500d16fef4Smrg        shift
7510d16fef4Smrg        ;;
752de2362d3Smrg    esac
753de2362d3Smrg  done
7540d16fef4Smrg  "$@" -E 2>/dev/null |
7550d16fef4Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756de2362d3Smrg  rm -f "$depfile"
757de2362d3Smrg  echo "$object : \\" > "$depfile"
7580d16fef4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
7590d16fef4Smrg  echo "$tab" >> "$depfile"
7600d16fef4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761de2362d3Smrg  rm -f "$tmpdepfile"
762de2362d3Smrg  ;;
763de2362d3Smrg
7640d16fef4Smrgmsvcmsys)
7650d16fef4Smrg  # This case exists only to let depend.m4 do its work.  It works by
7660d16fef4Smrg  # looking at the text of this script.  This case will never be run,
7670d16fef4Smrg  # since it is checked for above.
7680d16fef4Smrg  exit 1
7690d16fef4Smrg  ;;
7700d16fef4Smrg
771de2362d3Smrgnone)
772de2362d3Smrg  exec "$@"
773de2362d3Smrg  ;;
774de2362d3Smrg
775de2362d3Smrg*)
776de2362d3Smrg  echo "Unknown depmode $depmode" 1>&2
777de2362d3Smrg  exit 1
778de2362d3Smrg  ;;
779de2362d3Smrgesac
780de2362d3Smrg
781de2362d3Smrgexit 0
782de2362d3Smrg
783de2362d3Smrg# Local Variables:
784de2362d3Smrg# mode: shell-script
785de2362d3Smrg# sh-indentation: 2
786de2362d3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
787de2362d3Smrg# time-stamp-start: "scriptversion="
788de2362d3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
7890d16fef4Smrg# time-stamp-time-zone: "UTC"
7900d16fef4Smrg# time-stamp-end: "; # UTC"
791de2362d3Smrg# End:
792