depcomp revision eb411b4b
11ab64890Smrg#! /bin/sh
21ab64890Smrg# depcomp - compile a program generating dependencies as side-effects
31ab64890Smrg
4eb411b4bSmrgscriptversion=2012-10-18.11; # UTC
51ab64890Smrg
6eb411b4bSmrg# Copyright (C) 1999-2013 Free Software Foundation, Inc.
71ab64890Smrg
81ab64890Smrg# This program is free software; you can redistribute it and/or modify
91ab64890Smrg# it under the terms of the GNU General Public License as published by
101ab64890Smrg# the Free Software Foundation; either version 2, or (at your option)
111ab64890Smrg# any later version.
121ab64890Smrg
131ab64890Smrg# This program is distributed in the hope that it will be useful,
141ab64890Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
151ab64890Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
161ab64890Smrg# GNU General Public License for more details.
171ab64890Smrg
181ab64890Smrg# You should have received a copy of the GNU General Public License
19b4ee4795Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
201ab64890Smrg
211ab64890Smrg# As a special exception to the GNU General Public License, if you
221ab64890Smrg# distribute this file as part of a program that contains a
231ab64890Smrg# configuration script generated by Autoconf, you may include it under
241ab64890Smrg# the same distribution terms that you use for the rest of that program.
251ab64890Smrg
261ab64890Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
271ab64890Smrg
281ab64890Smrgcase $1 in
291ab64890Smrg  '')
30eb411b4bSmrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31eb411b4bSmrg    exit 1;
32eb411b4bSmrg    ;;
331ab64890Smrg  -h | --h*)
341ab64890Smrg    cat <<\EOF
351ab64890SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
361ab64890Smrg
371ab64890SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
381ab64890Smrgas side-effects.
391ab64890Smrg
401ab64890SmrgEnvironment variables:
411ab64890Smrg  depmode     Dependency tracking mode.
42eb411b4bSmrg  source      Source file read by 'PROGRAMS ARGS'.
43eb411b4bSmrg  object      Object file output by 'PROGRAMS ARGS'.
441ab64890Smrg  DEPDIR      directory where to store dependencies.
451ab64890Smrg  depfile     Dependency file to output.
46eb411b4bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
471ab64890Smrg  libtool     Whether libtool is used (yes/no).
481ab64890Smrg
491ab64890SmrgReport bugs to <bug-automake@gnu.org>.
501ab64890SmrgEOF
511ab64890Smrg    exit $?
521ab64890Smrg    ;;
531ab64890Smrg  -v | --v*)
541ab64890Smrg    echo "depcomp $scriptversion"
551ab64890Smrg    exit $?
561ab64890Smrg    ;;
571ab64890Smrgesac
581ab64890Smrg
59eb411b4bSmrg# Get the directory component of the given path, and save it in the
60eb411b4bSmrg# global variables '$dir'.  Note that this directory component will
61eb411b4bSmrg# be either empty or ending with a '/' character.  This is deliberate.
62eb411b4bSmrgset_dir_from ()
63eb411b4bSmrg{
64eb411b4bSmrg  case $1 in
65eb411b4bSmrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66eb411b4bSmrg      *) dir=;;
67eb411b4bSmrg  esac
68eb411b4bSmrg}
69eb411b4bSmrg
70eb411b4bSmrg# Get the suffix-stripped basename of the given path, and save it the
71eb411b4bSmrg# global variable '$base'.
72eb411b4bSmrgset_base_from ()
73eb411b4bSmrg{
74eb411b4bSmrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75eb411b4bSmrg}
76eb411b4bSmrg
77eb411b4bSmrg# If no dependency file was actually created by the compiler invocation,
78eb411b4bSmrg# we still have to create a dummy depfile, to avoid errors with the
79eb411b4bSmrg# Makefile "include basename.Plo" scheme.
80eb411b4bSmrgmake_dummy_depfile ()
81eb411b4bSmrg{
82eb411b4bSmrg  echo "#dummy" > "$depfile"
83eb411b4bSmrg}
84eb411b4bSmrg
85eb411b4bSmrg# Factor out some common post-processing of the generated depfile.
86eb411b4bSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
87eb411b4bSmrgaix_post_process_depfile ()
88eb411b4bSmrg{
89eb411b4bSmrg  # If the compiler actually managed to produce a dependency file,
90eb411b4bSmrg  # post-process it.
91eb411b4bSmrg  if test -f "$tmpdepfile"; then
92eb411b4bSmrg    # Each line is of the form 'foo.o: dependency.h'.
93eb411b4bSmrg    # Do two passes, one to just change these to
94eb411b4bSmrg    #   $object: dependency.h
95eb411b4bSmrg    # and one to simply output
96eb411b4bSmrg    #   dependency.h:
97eb411b4bSmrg    # which is needed to avoid the deleted-header problem.
98eb411b4bSmrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99eb411b4bSmrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100eb411b4bSmrg    } > "$depfile"
101eb411b4bSmrg    rm -f "$tmpdepfile"
102eb411b4bSmrg  else
103eb411b4bSmrg    make_dummy_depfile
104eb411b4bSmrg  fi
105eb411b4bSmrg}
106eb411b4bSmrg
107eb411b4bSmrg# A tabulation character.
108eb411b4bSmrgtab='	'
109eb411b4bSmrg# A newline character.
110eb411b4bSmrgnl='
111eb411b4bSmrg'
112eb411b4bSmrg# Character ranges might be problematic outside the C locale.
113eb411b4bSmrg# These definitions help.
114eb411b4bSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115eb411b4bSmrglower=abcdefghijklmnopqrstuvwxyz
116eb411b4bSmrgdigits=0123456789
117eb411b4bSmrgalpha=${upper}${lower}
118eb411b4bSmrg
1191ab64890Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
1201ab64890Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
1211ab64890Smrg  exit 1
1221ab64890Smrgfi
1231ab64890Smrg
1241ab64890Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
1251ab64890Smrgdepfile=${depfile-`echo "$object" |
1261ab64890Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
1271ab64890Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
1281ab64890Smrg
1291ab64890Smrgrm -f "$tmpdepfile"
1301ab64890Smrg
131eb411b4bSmrg# Avoid interferences from the environment.
132eb411b4bSmrggccflag= dashmflag=
133eb411b4bSmrg
1341ab64890Smrg# Some modes work just like other modes, but use different flags.  We
1351ab64890Smrg# parameterize here, but still list the modes in the big case below,
1361ab64890Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
1371ab64890Smrg# here, because this file can only contain one case statement.
1381ab64890Smrgif test "$depmode" = hp; then
1391ab64890Smrg  # HP compiler uses -M and no extra arg.
1401ab64890Smrg  gccflag=-M
1411ab64890Smrg  depmode=gcc
1421ab64890Smrgfi
1431ab64890Smrg
1441ab64890Smrgif test "$depmode" = dashXmstdout; then
145eb411b4bSmrg  # This is just like dashmstdout with a different argument.
146eb411b4bSmrg  dashmflag=-xM
147eb411b4bSmrg  depmode=dashmstdout
1481ab64890Smrgfi
1491ab64890Smrg
150b4ee4795Smrgcygpath_u="cygpath -u -f -"
151b4ee4795Smrgif test "$depmode" = msvcmsys; then
152eb411b4bSmrg  # This is just like msvisualcpp but w/o cygpath translation.
153eb411b4bSmrg  # Just convert the backslash-escaped backslashes to single forward
154eb411b4bSmrg  # slashes to satisfy depend.m4
155eb411b4bSmrg  cygpath_u='sed s,\\\\,/,g'
156eb411b4bSmrg  depmode=msvisualcpp
157eb411b4bSmrgfi
158eb411b4bSmrg
159eb411b4bSmrgif test "$depmode" = msvc7msys; then
160eb411b4bSmrg  # This is just like msvc7 but w/o cygpath translation.
161eb411b4bSmrg  # Just convert the backslash-escaped backslashes to single forward
162eb411b4bSmrg  # slashes to satisfy depend.m4
163eb411b4bSmrg  cygpath_u='sed s,\\\\,/,g'
164eb411b4bSmrg  depmode=msvc7
165eb411b4bSmrgfi
166eb411b4bSmrg
167eb411b4bSmrgif test "$depmode" = xlc; then
168eb411b4bSmrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169eb411b4bSmrg  gccflag=-qmakedep=gcc,-MF
170eb411b4bSmrg  depmode=gcc
171b4ee4795Smrgfi
172b4ee4795Smrg
1731ab64890Smrgcase "$depmode" in
1741ab64890Smrggcc3)
1751ab64890Smrg## gcc 3 implements dependency tracking that does exactly what
1761ab64890Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1771ab64890Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1781ab64890Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1791ab64890Smrg## the command line argument order; so add the flags where they
1801ab64890Smrg## appear in depend2.am.  Note that the slowdown incurred here
1811ab64890Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1821ab64890Smrg  for arg
1831ab64890Smrg  do
1841ab64890Smrg    case $arg in
1851ab64890Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1861ab64890Smrg    *)  set fnord "$@" "$arg" ;;
1871ab64890Smrg    esac
1881ab64890Smrg    shift # fnord
1891ab64890Smrg    shift # $arg
1901ab64890Smrg  done
1911ab64890Smrg  "$@"
1921ab64890Smrg  stat=$?
193eb411b4bSmrg  if test $stat -ne 0; then
1941ab64890Smrg    rm -f "$tmpdepfile"
1951ab64890Smrg    exit $stat
1961ab64890Smrg  fi
1971ab64890Smrg  mv "$tmpdepfile" "$depfile"
1981ab64890Smrg  ;;
1991ab64890Smrg
2001ab64890Smrggcc)
201eb411b4bSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202eb411b4bSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203eb411b4bSmrg## (see the conditional assignment to $gccflag above).
2041ab64890Smrg## There are various ways to get dependency output from gcc.  Here's
2051ab64890Smrg## why we pick this rather obscure method:
2061ab64890Smrg## - Don't want to use -MD because we'd like the dependencies to end
2071ab64890Smrg##   up in a subdir.  Having to rename by hand is ugly.
2081ab64890Smrg##   (We might end up doing this anyway to support other compilers.)
2091ab64890Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210eb411b4bSmrg##   -MM, not -M (despite what the docs say).  Also, it might not be
211eb411b4bSmrg##   supported by the other compilers which use the 'gcc' depmode.
2121ab64890Smrg## - Using -M directly means running the compiler twice (even worse
2131ab64890Smrg##   than renaming).
2141ab64890Smrg  if test -z "$gccflag"; then
2151ab64890Smrg    gccflag=-MD,
2161ab64890Smrg  fi
2171ab64890Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
2181ab64890Smrg  stat=$?
219eb411b4bSmrg  if test $stat -ne 0; then
2201ab64890Smrg    rm -f "$tmpdepfile"
2211ab64890Smrg    exit $stat
2221ab64890Smrg  fi
2231ab64890Smrg  rm -f "$depfile"
2241ab64890Smrg  echo "$object : \\" > "$depfile"
225eb411b4bSmrg  # The second -e expression handles DOS-style file names with drive
226eb411b4bSmrg  # letters.
2271ab64890Smrg  sed -e 's/^[^:]*: / /' \
2281ab64890Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229eb411b4bSmrg## This next piece of magic avoids the "deleted header file" problem.
2301ab64890Smrg## The problem is that when a header file which appears in a .P file
2311ab64890Smrg## is deleted, the dependency causes make to die (because there is
2321ab64890Smrg## typically no way to rebuild the header).  We avoid this by adding
2331ab64890Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
2341ab64890Smrg## this for us directly.
235eb411b4bSmrg## Some versions of gcc put a space before the ':'.  On the theory
2361ab64890Smrg## that the space means something, we add a space to the output as
237eb411b4bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
238eb411b4bSmrg## to the object.  Take care to not repeat it in the output.
2391ab64890Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
2401ab64890Smrg## correctly.  Breaking it into two sed invocations is a workaround.
241eb411b4bSmrg  tr ' ' "$nl" < "$tmpdepfile" \
242eb411b4bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243eb411b4bSmrg    | sed -e 's/$/ :/' >> "$depfile"
2441ab64890Smrg  rm -f "$tmpdepfile"
2451ab64890Smrg  ;;
2461ab64890Smrg
2471ab64890Smrghp)
2481ab64890Smrg  # This case exists only to let depend.m4 do its work.  It works by
2491ab64890Smrg  # looking at the text of this script.  This case will never be run,
2501ab64890Smrg  # since it is checked for above.
2511ab64890Smrg  exit 1
2521ab64890Smrg  ;;
2531ab64890Smrg
2541ab64890Smrgsgi)
2551ab64890Smrg  if test "$libtool" = yes; then
2561ab64890Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
2571ab64890Smrg  else
2581ab64890Smrg    "$@" -MDupdate "$tmpdepfile"
2591ab64890Smrg  fi
2601ab64890Smrg  stat=$?
261eb411b4bSmrg  if test $stat -ne 0; then
2621ab64890Smrg    rm -f "$tmpdepfile"
2631ab64890Smrg    exit $stat
2641ab64890Smrg  fi
2651ab64890Smrg  rm -f "$depfile"
2661ab64890Smrg
2671ab64890Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2681ab64890Smrg    echo "$object : \\" > "$depfile"
2691ab64890Smrg    # Clip off the initial element (the dependent).  Don't try to be
2701ab64890Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2711ab64890Smrg    # lines with more than a fixed number of characters (4096 in
2721ab64890Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273eb411b4bSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
2741ab64890Smrg    # dependency line.
275eb411b4bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
276eb411b4bSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277eb411b4bSmrg      | tr "$nl" ' ' >> "$depfile"
278b4ee4795Smrg    echo >> "$depfile"
2791ab64890Smrg    # The second pass generates a dummy entry for each header file.
280eb411b4bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
281eb411b4bSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282eb411b4bSmrg      >> "$depfile"
2831ab64890Smrg  else
284eb411b4bSmrg    make_dummy_depfile
2851ab64890Smrg  fi
2861ab64890Smrg  rm -f "$tmpdepfile"
2871ab64890Smrg  ;;
2881ab64890Smrg
289eb411b4bSmrgxlc)
290eb411b4bSmrg  # This case exists only to let depend.m4 do its work.  It works by
291eb411b4bSmrg  # looking at the text of this script.  This case will never be run,
292eb411b4bSmrg  # since it is checked for above.
293eb411b4bSmrg  exit 1
294eb411b4bSmrg  ;;
295eb411b4bSmrg
2961ab64890Smrgaix)
2971ab64890Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2981ab64890Smrg  # in a .u file.  In older versions, this file always lives in the
299eb411b4bSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
3001ab64890Smrg  # start of each line; $object doesn't have directory information.
3011ab64890Smrg  # Version 6 uses the directory in both cases.
302eb411b4bSmrg  set_dir_from "$object"
303eb411b4bSmrg  set_base_from "$object"
3041ab64890Smrg  if test "$libtool" = yes; then
3051ab64890Smrg    tmpdepfile1=$dir$base.u
3061ab64890Smrg    tmpdepfile2=$base.u
3071ab64890Smrg    tmpdepfile3=$dir.libs/$base.u
3081ab64890Smrg    "$@" -Wc,-M
3091ab64890Smrg  else
3101ab64890Smrg    tmpdepfile1=$dir$base.u
3111ab64890Smrg    tmpdepfile2=$dir$base.u
3121ab64890Smrg    tmpdepfile3=$dir$base.u
3131ab64890Smrg    "$@" -M
3141ab64890Smrg  fi
3151ab64890Smrg  stat=$?
316eb411b4bSmrg  if test $stat -ne 0; then
3171ab64890Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3181ab64890Smrg    exit $stat
3191ab64890Smrg  fi
3201ab64890Smrg
3211ab64890Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3221ab64890Smrg  do
3231ab64890Smrg    test -f "$tmpdepfile" && break
3241ab64890Smrg  done
325eb411b4bSmrg  aix_post_process_depfile
326eb411b4bSmrg  ;;
327eb411b4bSmrg
328eb411b4bSmrgtcc)
329eb411b4bSmrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330eb411b4bSmrg  # FIXME: That version still under development at the moment of writing.
331eb411b4bSmrg  #        Make that this statement remains true also for stable, released
332eb411b4bSmrg  #        versions.
333eb411b4bSmrg  # It will wrap lines (doesn't matter whether long or short) with a
334eb411b4bSmrg  # trailing '\', as in:
335eb411b4bSmrg  #
336eb411b4bSmrg  #   foo.o : \
337eb411b4bSmrg  #    foo.c \
338eb411b4bSmrg  #    foo.h \
339eb411b4bSmrg  #
340eb411b4bSmrg  # It will put a trailing '\' even on the last line, and will use leading
341eb411b4bSmrg  # spaces rather than leading tabs (at least since its commit 0394caf7
342eb411b4bSmrg  # "Emit spaces for -MD").
343eb411b4bSmrg  "$@" -MD -MF "$tmpdepfile"
344eb411b4bSmrg  stat=$?
345eb411b4bSmrg  if test $stat -ne 0; then
346eb411b4bSmrg    rm -f "$tmpdepfile"
347eb411b4bSmrg    exit $stat
3481ab64890Smrg  fi
349eb411b4bSmrg  rm -f "$depfile"
350eb411b4bSmrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351eb411b4bSmrg  # We have to change lines of the first kind to '$object: \'.
352eb411b4bSmrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353eb411b4bSmrg  # And for each line of the second kind, we have to emit a 'dep.h:'
354eb411b4bSmrg  # dummy dependency, to avoid the deleted-header problem.
355eb411b4bSmrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
3561ab64890Smrg  rm -f "$tmpdepfile"
3571ab64890Smrg  ;;
3581ab64890Smrg
359eb411b4bSmrg## The order of this option in the case statement is important, since the
360eb411b4bSmrg## shell code in configure will try each of these formats in the order
361eb411b4bSmrg## listed in this file.  A plain '-MD' option would be understood by many
362eb411b4bSmrg## compilers, so we must ensure this comes after the gcc and icc options.
363eb411b4bSmrgpgcc)
364eb411b4bSmrg  # Portland's C compiler understands '-MD'.
365eb411b4bSmrg  # Will always output deps to 'file.d' where file is the root name of the
366eb411b4bSmrg  # source file under compilation, even if file resides in a subdirectory.
367eb411b4bSmrg  # The object file name does not affect the name of the '.d' file.
368eb411b4bSmrg  # pgcc 10.2 will output
3691ab64890Smrg  #    foo.o: sub/foo.c sub/foo.h
370eb411b4bSmrg  # and will wrap long lines using '\' :
3711ab64890Smrg  #    foo.o: sub/foo.c ... \
3721ab64890Smrg  #     sub/foo.h ... \
3731ab64890Smrg  #     ...
374eb411b4bSmrg  set_dir_from "$object"
375eb411b4bSmrg  # Use the source, not the object, to determine the base name, since
376eb411b4bSmrg  # that's sadly what pgcc will do too.
377eb411b4bSmrg  set_base_from "$source"
378eb411b4bSmrg  tmpdepfile=$base.d
379eb411b4bSmrg
380eb411b4bSmrg  # For projects that build the same source file twice into different object
381eb411b4bSmrg  # files, the pgcc approach of using the *source* file root name can cause
382eb411b4bSmrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383eb411b4bSmrg  # the same $tmpdepfile.
384eb411b4bSmrg  lockdir=$base.d-lock
385eb411b4bSmrg  trap "
386eb411b4bSmrg    echo '$0: caught signal, cleaning up...' >&2
387eb411b4bSmrg    rmdir '$lockdir'
388eb411b4bSmrg    exit 1
389eb411b4bSmrg  " 1 2 13 15
390eb411b4bSmrg  numtries=100
391eb411b4bSmrg  i=$numtries
392eb411b4bSmrg  while test $i -gt 0; do
393eb411b4bSmrg    # mkdir is a portable test-and-set.
394eb411b4bSmrg    if mkdir "$lockdir" 2>/dev/null; then
395eb411b4bSmrg      # This process acquired the lock.
396eb411b4bSmrg      "$@" -MD
397eb411b4bSmrg      stat=$?
398eb411b4bSmrg      # Release the lock.
399eb411b4bSmrg      rmdir "$lockdir"
400eb411b4bSmrg      break
401eb411b4bSmrg    else
402eb411b4bSmrg      # If the lock is being held by a different process, wait
403eb411b4bSmrg      # until the winning process is done or we timeout.
404eb411b4bSmrg      while test -d "$lockdir" && test $i -gt 0; do
405eb411b4bSmrg        sleep 1
406eb411b4bSmrg        i=`expr $i - 1`
407eb411b4bSmrg      done
408eb411b4bSmrg    fi
409eb411b4bSmrg    i=`expr $i - 1`
410eb411b4bSmrg  done
411eb411b4bSmrg  trap - 1 2 13 15
412eb411b4bSmrg  if test $i -le 0; then
413eb411b4bSmrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
414eb411b4bSmrg    echo "$0: check lockdir '$lockdir'" >&2
415eb411b4bSmrg    exit 1
416eb411b4bSmrg  fi
4171ab64890Smrg
418eb411b4bSmrg  if test $stat -ne 0; then
4191ab64890Smrg    rm -f "$tmpdepfile"
4201ab64890Smrg    exit $stat
4211ab64890Smrg  fi
4221ab64890Smrg  rm -f "$depfile"
4231ab64890Smrg  # Each line is of the form `foo.o: dependent.h',
4241ab64890Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
4251ab64890Smrg  # Do two passes, one to just change these to
4261ab64890Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
4271ab64890Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
4281ab64890Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
4291ab64890Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
430eb411b4bSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431eb411b4bSmrg    | sed -e 's/$/ :/' >> "$depfile"
4321ab64890Smrg  rm -f "$tmpdepfile"
4331ab64890Smrg  ;;
4341ab64890Smrg
4351ab64890Smrghp2)
4361ab64890Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
4371ab64890Smrg  # compilers, which have integrated preprocessors.  The correct option
4381ab64890Smrg  # to use with these is +Maked; it writes dependencies to a file named
4391ab64890Smrg  # 'foo.d', which lands next to the object file, wherever that
4401ab64890Smrg  # happens to be.
4411ab64890Smrg  # Much of this is similar to the tru64 case; see comments there.
442eb411b4bSmrg  set_dir_from  "$object"
443eb411b4bSmrg  set_base_from "$object"
4441ab64890Smrg  if test "$libtool" = yes; then
4451ab64890Smrg    tmpdepfile1=$dir$base.d
4461ab64890Smrg    tmpdepfile2=$dir.libs/$base.d
4471ab64890Smrg    "$@" -Wc,+Maked
4481ab64890Smrg  else
4491ab64890Smrg    tmpdepfile1=$dir$base.d
4501ab64890Smrg    tmpdepfile2=$dir$base.d
4511ab64890Smrg    "$@" +Maked
4521ab64890Smrg  fi
4531ab64890Smrg  stat=$?
454eb411b4bSmrg  if test $stat -ne 0; then
4551ab64890Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
4561ab64890Smrg     exit $stat
4571ab64890Smrg  fi
4581ab64890Smrg
4591ab64890Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
4601ab64890Smrg  do
4611ab64890Smrg    test -f "$tmpdepfile" && break
4621ab64890Smrg  done
4631ab64890Smrg  if test -f "$tmpdepfile"; then
464eb411b4bSmrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465eb411b4bSmrg    # Add 'dependent.h:' lines.
466b4ee4795Smrg    sed -ne '2,${
467eb411b4bSmrg               s/^ *//
468eb411b4bSmrg               s/ \\*$//
469eb411b4bSmrg               s/$/:/
470eb411b4bSmrg               p
471eb411b4bSmrg             }' "$tmpdepfile" >> "$depfile"
4721ab64890Smrg  else
473eb411b4bSmrg    make_dummy_depfile
4741ab64890Smrg  fi
4751ab64890Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
4761ab64890Smrg  ;;
4771ab64890Smrg
4781ab64890Smrgtru64)
479eb411b4bSmrg  # The Tru64 compiler uses -MD to generate dependencies as a side
480eb411b4bSmrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481eb411b4bSmrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482eb411b4bSmrg  # dependencies in 'foo.d' instead, so we check for that too.
483eb411b4bSmrg  # Subdirectories are respected.
484eb411b4bSmrg  set_dir_from  "$object"
485eb411b4bSmrg  set_base_from "$object"
486eb411b4bSmrg
487eb411b4bSmrg  if test "$libtool" = yes; then
488eb411b4bSmrg    # Libtool generates 2 separate objects for the 2 libraries.  These
489eb411b4bSmrg    # two compilations output dependencies in $dir.libs/$base.o.d and
490eb411b4bSmrg    # in $dir$base.o.d.  We have to check for both files, because
491eb411b4bSmrg    # one of the two compilations can be disabled.  We should prefer
492eb411b4bSmrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493eb411b4bSmrg    # automatically cleaned when .libs/ is deleted, while ignoring
494eb411b4bSmrg    # the former would cause a distcleancheck panic.
495eb411b4bSmrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496eb411b4bSmrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497eb411b4bSmrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498eb411b4bSmrg    "$@" -Wc,-MD
499eb411b4bSmrg  else
500eb411b4bSmrg    tmpdepfile1=$dir$base.d
501eb411b4bSmrg    tmpdepfile2=$dir$base.d
502eb411b4bSmrg    tmpdepfile3=$dir$base.d
503eb411b4bSmrg    "$@" -MD
504eb411b4bSmrg  fi
505eb411b4bSmrg
506eb411b4bSmrg  stat=$?
507eb411b4bSmrg  if test $stat -ne 0; then
508eb411b4bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509eb411b4bSmrg    exit $stat
510eb411b4bSmrg  fi
511eb411b4bSmrg
512eb411b4bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513eb411b4bSmrg  do
514eb411b4bSmrg    test -f "$tmpdepfile" && break
515eb411b4bSmrg  done
516eb411b4bSmrg  # Same post-processing that is required for AIX mode.
517eb411b4bSmrg  aix_post_process_depfile
518eb411b4bSmrg  ;;
519eb411b4bSmrg
520eb411b4bSmrgmsvc7)
521eb411b4bSmrg  if test "$libtool" = yes; then
522eb411b4bSmrg    showIncludes=-Wc,-showIncludes
523eb411b4bSmrg  else
524eb411b4bSmrg    showIncludes=-showIncludes
525eb411b4bSmrg  fi
526eb411b4bSmrg  "$@" $showIncludes > "$tmpdepfile"
527eb411b4bSmrg  stat=$?
528eb411b4bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
529eb411b4bSmrg  if test $stat -ne 0; then
530eb411b4bSmrg    rm -f "$tmpdepfile"
531eb411b4bSmrg    exit $stat
532eb411b4bSmrg  fi
533eb411b4bSmrg  rm -f "$depfile"
534eb411b4bSmrg  echo "$object : \\" > "$depfile"
535eb411b4bSmrg  # The first sed program below extracts the file names and escapes
536eb411b4bSmrg  # backslashes for cygpath.  The second sed program outputs the file
537eb411b4bSmrg  # name when reading, but also accumulates all include files in the
538eb411b4bSmrg  # hold buffer in order to output them again at the end.  This only
539eb411b4bSmrg  # works with sed implementations that can handle large buffers.
540eb411b4bSmrg  sed < "$tmpdepfile" -n '
541eb411b4bSmrg/^Note: including file:  *\(.*\)/ {
542eb411b4bSmrg  s//\1/
543eb411b4bSmrg  s/\\/\\\\/g
544eb411b4bSmrg  p
545eb411b4bSmrg}' | $cygpath_u | sort -u | sed -n '
546eb411b4bSmrgs/ /\\ /g
547eb411b4bSmrgs/\(.*\)/'"$tab"'\1 \\/p
548eb411b4bSmrgs/.\(.*\) \\/\1:/
549eb411b4bSmrgH
550eb411b4bSmrg$ {
551eb411b4bSmrg  s/.*/'"$tab"'/
552eb411b4bSmrg  G
553eb411b4bSmrg  p
554eb411b4bSmrg}' >> "$depfile"
555eb411b4bSmrg  rm -f "$tmpdepfile"
556eb411b4bSmrg  ;;
557eb411b4bSmrg
558eb411b4bSmrgmsvc7msys)
559eb411b4bSmrg  # This case exists only to let depend.m4 do its work.  It works by
560eb411b4bSmrg  # looking at the text of this script.  This case will never be run,
561eb411b4bSmrg  # since it is checked for above.
562eb411b4bSmrg  exit 1
563eb411b4bSmrg  ;;
5641ab64890Smrg
5651ab64890Smrg#nosideeffect)
5661ab64890Smrg  # This comment above is used by automake to tell side-effect
5671ab64890Smrg  # dependency tracking mechanisms from slower ones.
5681ab64890Smrg
5691ab64890Smrgdashmstdout)
5701ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
5711ab64890Smrg  # always write the preprocessed file to stdout, regardless of -o.
5721ab64890Smrg  "$@" || exit $?
5731ab64890Smrg
5741ab64890Smrg  # Remove the call to Libtool.
5751ab64890Smrg  if test "$libtool" = yes; then
576b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
5771ab64890Smrg      shift
5781ab64890Smrg    done
5791ab64890Smrg    shift
5801ab64890Smrg  fi
5811ab64890Smrg
582eb411b4bSmrg  # Remove '-o $object'.
5831ab64890Smrg  IFS=" "
5841ab64890Smrg  for arg
5851ab64890Smrg  do
5861ab64890Smrg    case $arg in
5871ab64890Smrg    -o)
5881ab64890Smrg      shift
5891ab64890Smrg      ;;
5901ab64890Smrg    $object)
5911ab64890Smrg      shift
5921ab64890Smrg      ;;
5931ab64890Smrg    *)
5941ab64890Smrg      set fnord "$@" "$arg"
5951ab64890Smrg      shift # fnord
5961ab64890Smrg      shift # $arg
5971ab64890Smrg      ;;
5981ab64890Smrg    esac
5991ab64890Smrg  done
6001ab64890Smrg
6011ab64890Smrg  test -z "$dashmflag" && dashmflag=-M
602eb411b4bSmrg  # Require at least two characters before searching for ':'
6031ab64890Smrg  # in the target name.  This is to cope with DOS-style filenames:
604eb411b4bSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
6051ab64890Smrg  "$@" $dashmflag |
606eb411b4bSmrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
6071ab64890Smrg  rm -f "$depfile"
6081ab64890Smrg  cat < "$tmpdepfile" > "$depfile"
609eb411b4bSmrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
610eb411b4bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
611eb411b4bSmrg  tr ' ' "$nl" < "$tmpdepfile" \
612eb411b4bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
613eb411b4bSmrg    | sed -e 's/$/ :/' >> "$depfile"
6141ab64890Smrg  rm -f "$tmpdepfile"
6151ab64890Smrg  ;;
6161ab64890Smrg
6171ab64890SmrgdashXmstdout)
6181ab64890Smrg  # This case only exists to satisfy depend.m4.  It is never actually
6191ab64890Smrg  # run, as this mode is specially recognized in the preamble.
6201ab64890Smrg  exit 1
6211ab64890Smrg  ;;
6221ab64890Smrg
6231ab64890Smrgmakedepend)
6241ab64890Smrg  "$@" || exit $?
6251ab64890Smrg  # Remove any Libtool call
6261ab64890Smrg  if test "$libtool" = yes; then
627b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
6281ab64890Smrg      shift
6291ab64890Smrg    done
6301ab64890Smrg    shift
6311ab64890Smrg  fi
6321ab64890Smrg  # X makedepend
6331ab64890Smrg  shift
634b4ee4795Smrg  cleared=no eat=no
635b4ee4795Smrg  for arg
636b4ee4795Smrg  do
6371ab64890Smrg    case $cleared in
6381ab64890Smrg    no)
6391ab64890Smrg      set ""; shift
6401ab64890Smrg      cleared=yes ;;
6411ab64890Smrg    esac
642b4ee4795Smrg    if test $eat = yes; then
643b4ee4795Smrg      eat=no
644b4ee4795Smrg      continue
645b4ee4795Smrg    fi
6461ab64890Smrg    case "$arg" in
6471ab64890Smrg    -D*|-I*)
6481ab64890Smrg      set fnord "$@" "$arg"; shift ;;
6491ab64890Smrg    # Strip any option that makedepend may not understand.  Remove
6501ab64890Smrg    # the object too, otherwise makedepend will parse it as a source file.
651b4ee4795Smrg    -arch)
652b4ee4795Smrg      eat=yes ;;
6531ab64890Smrg    -*|$object)
6541ab64890Smrg      ;;
6551ab64890Smrg    *)
6561ab64890Smrg      set fnord "$@" "$arg"; shift ;;
6571ab64890Smrg    esac
6581ab64890Smrg  done
659b4ee4795Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
6601ab64890Smrg  touch "$tmpdepfile"
6611ab64890Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
6621ab64890Smrg  rm -f "$depfile"
663eb411b4bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
664eb411b4bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
665eb411b4bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
666eb411b4bSmrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
667eb411b4bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
668eb411b4bSmrg  sed '1,2d' "$tmpdepfile" \
669eb411b4bSmrg    | tr ' ' "$nl" \
670eb411b4bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
671eb411b4bSmrg    | sed -e 's/$/ :/' >> "$depfile"
6721ab64890Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
6731ab64890Smrg  ;;
6741ab64890Smrg
6751ab64890Smrgcpp)
6761ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
6771ab64890Smrg  # always write the preprocessed file to stdout.
6781ab64890Smrg  "$@" || exit $?
6791ab64890Smrg
6801ab64890Smrg  # Remove the call to Libtool.
6811ab64890Smrg  if test "$libtool" = yes; then
682b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
6831ab64890Smrg      shift
6841ab64890Smrg    done
6851ab64890Smrg    shift
6861ab64890Smrg  fi
6871ab64890Smrg
688eb411b4bSmrg  # Remove '-o $object'.
6891ab64890Smrg  IFS=" "
6901ab64890Smrg  for arg
6911ab64890Smrg  do
6921ab64890Smrg    case $arg in
6931ab64890Smrg    -o)
6941ab64890Smrg      shift
6951ab64890Smrg      ;;
6961ab64890Smrg    $object)
6971ab64890Smrg      shift
6981ab64890Smrg      ;;
6991ab64890Smrg    *)
7001ab64890Smrg      set fnord "$@" "$arg"
7011ab64890Smrg      shift # fnord
7021ab64890Smrg      shift # $arg
7031ab64890Smrg      ;;
7041ab64890Smrg    esac
7051ab64890Smrg  done
7061ab64890Smrg
707eb411b4bSmrg  "$@" -E \
708eb411b4bSmrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
709eb411b4bSmrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710eb411b4bSmrg    | sed '$ s: \\$::' > "$tmpdepfile"
7111ab64890Smrg  rm -f "$depfile"
7121ab64890Smrg  echo "$object : \\" > "$depfile"
7131ab64890Smrg  cat < "$tmpdepfile" >> "$depfile"
7141ab64890Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
7151ab64890Smrg  rm -f "$tmpdepfile"
7161ab64890Smrg  ;;
7171ab64890Smrg
7181ab64890Smrgmsvisualcpp)
7191ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
720b4ee4795Smrg  # always write the preprocessed file to stdout.
7211ab64890Smrg  "$@" || exit $?
722b4ee4795Smrg
723b4ee4795Smrg  # Remove the call to Libtool.
724b4ee4795Smrg  if test "$libtool" = yes; then
725b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
726b4ee4795Smrg      shift
727b4ee4795Smrg    done
728b4ee4795Smrg    shift
729b4ee4795Smrg  fi
730b4ee4795Smrg
7311ab64890Smrg  IFS=" "
7321ab64890Smrg  for arg
7331ab64890Smrg  do
7341ab64890Smrg    case "$arg" in
735b4ee4795Smrg    -o)
736b4ee4795Smrg      shift
737b4ee4795Smrg      ;;
738b4ee4795Smrg    $object)
739b4ee4795Smrg      shift
740b4ee4795Smrg      ;;
7411ab64890Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
742eb411b4bSmrg        set fnord "$@"
743eb411b4bSmrg        shift
744eb411b4bSmrg        shift
745eb411b4bSmrg        ;;
7461ab64890Smrg    *)
747eb411b4bSmrg        set fnord "$@" "$arg"
748eb411b4bSmrg        shift
749eb411b4bSmrg        shift
750eb411b4bSmrg        ;;
7511ab64890Smrg    esac
7521ab64890Smrg  done
753b4ee4795Smrg  "$@" -E 2>/dev/null |
754b4ee4795Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
7551ab64890Smrg  rm -f "$depfile"
7561ab64890Smrg  echo "$object : \\" > "$depfile"
757eb411b4bSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
758eb411b4bSmrg  echo "$tab" >> "$depfile"
759b4ee4795Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
7601ab64890Smrg  rm -f "$tmpdepfile"
7611ab64890Smrg  ;;
7621ab64890Smrg
763b4ee4795Smrgmsvcmsys)
764b4ee4795Smrg  # This case exists only to let depend.m4 do its work.  It works by
765b4ee4795Smrg  # looking at the text of this script.  This case will never be run,
766b4ee4795Smrg  # since it is checked for above.
767b4ee4795Smrg  exit 1
768b4ee4795Smrg  ;;
769b4ee4795Smrg
7701ab64890Smrgnone)
7711ab64890Smrg  exec "$@"
7721ab64890Smrg  ;;
7731ab64890Smrg
7741ab64890Smrg*)
7751ab64890Smrg  echo "Unknown depmode $depmode" 1>&2
7761ab64890Smrg  exit 1
7771ab64890Smrg  ;;
7781ab64890Smrgesac
7791ab64890Smrg
7801ab64890Smrgexit 0
7811ab64890Smrg
7821ab64890Smrg# Local Variables:
7831ab64890Smrg# mode: shell-script
7841ab64890Smrg# sh-indentation: 2
7851ab64890Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
7861ab64890Smrg# time-stamp-start: "scriptversion="
7871ab64890Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
788b4ee4795Smrg# time-stamp-time-zone: "UTC"
789b4ee4795Smrg# time-stamp-end: "; # UTC"
7901ab64890Smrg# End:
791