104007ebaSmrg#! /bin/sh
204007ebaSmrg# depcomp - compile a program generating dependencies as side-effects
304007ebaSmrg
405cf1079Smrgscriptversion=2018-03-07.03; # UTC
504007ebaSmrg
679d5fcd7Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc.
704007ebaSmrg
804007ebaSmrg# This program is free software; you can redistribute it and/or modify
904007ebaSmrg# it under the terms of the GNU General Public License as published by
1004007ebaSmrg# the Free Software Foundation; either version 2, or (at your option)
1104007ebaSmrg# any later version.
1204007ebaSmrg
1304007ebaSmrg# This program is distributed in the hope that it will be useful,
1404007ebaSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1504007ebaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1604007ebaSmrg# GNU General Public License for more details.
1704007ebaSmrg
1804007ebaSmrg# You should have received a copy of the GNU General Public License
1905cf1079Smrg# along with this program.  If not, see <https://www.gnu.org/licenses/>.
2004007ebaSmrg
2104007ebaSmrg# As a special exception to the GNU General Public License, if you
2204007ebaSmrg# distribute this file as part of a program that contains a
2304007ebaSmrg# configuration script generated by Autoconf, you may include it under
2404007ebaSmrg# the same distribution terms that you use for the rest of that program.
2504007ebaSmrg
2604007ebaSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2704007ebaSmrg
2804007ebaSmrgcase $1 in
2904007ebaSmrg  '')
3004007ebaSmrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
3104007ebaSmrg    exit 1;
3204007ebaSmrg    ;;
3304007ebaSmrg  -h | --h*)
3404007ebaSmrg    cat <<\EOF
3504007ebaSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3604007ebaSmrg
3704007ebaSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3804007ebaSmrgas side-effects.
3904007ebaSmrg
4004007ebaSmrgEnvironment variables:
4104007ebaSmrg  depmode     Dependency tracking mode.
4204007ebaSmrg  source      Source file read by 'PROGRAMS ARGS'.
4304007ebaSmrg  object      Object file output by 'PROGRAMS ARGS'.
4404007ebaSmrg  DEPDIR      directory where to store dependencies.
4504007ebaSmrg  depfile     Dependency file to output.
4604007ebaSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
4704007ebaSmrg  libtool     Whether libtool is used (yes/no).
4804007ebaSmrg
4904007ebaSmrgReport bugs to <bug-automake@gnu.org>.
5004007ebaSmrgEOF
5104007ebaSmrg    exit $?
5204007ebaSmrg    ;;
5304007ebaSmrg  -v | --v*)
5404007ebaSmrg    echo "depcomp $scriptversion"
5504007ebaSmrg    exit $?
5604007ebaSmrg    ;;
5704007ebaSmrgesac
5804007ebaSmrg
5904007ebaSmrg# Get the directory component of the given path, and save it in the
6004007ebaSmrg# global variables '$dir'.  Note that this directory component will
6104007ebaSmrg# be either empty or ending with a '/' character.  This is deliberate.
6204007ebaSmrgset_dir_from ()
6304007ebaSmrg{
6404007ebaSmrg  case $1 in
6504007ebaSmrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
6604007ebaSmrg      *) dir=;;
6704007ebaSmrg  esac
6804007ebaSmrg}
6904007ebaSmrg
7004007ebaSmrg# Get the suffix-stripped basename of the given path, and save it the
7104007ebaSmrg# global variable '$base'.
7204007ebaSmrgset_base_from ()
7304007ebaSmrg{
7404007ebaSmrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
7504007ebaSmrg}
7604007ebaSmrg
7704007ebaSmrg# If no dependency file was actually created by the compiler invocation,
7804007ebaSmrg# we still have to create a dummy depfile, to avoid errors with the
7904007ebaSmrg# Makefile "include basename.Plo" scheme.
8004007ebaSmrgmake_dummy_depfile ()
8104007ebaSmrg{
8204007ebaSmrg  echo "#dummy" > "$depfile"
8304007ebaSmrg}
8404007ebaSmrg
8504007ebaSmrg# Factor out some common post-processing of the generated depfile.
8604007ebaSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
8704007ebaSmrgaix_post_process_depfile ()
8804007ebaSmrg{
8904007ebaSmrg  # If the compiler actually managed to produce a dependency file,
9004007ebaSmrg  # post-process it.
9104007ebaSmrg  if test -f "$tmpdepfile"; then
9204007ebaSmrg    # Each line is of the form 'foo.o: dependency.h'.
9304007ebaSmrg    # Do two passes, one to just change these to
9404007ebaSmrg    #   $object: dependency.h
9504007ebaSmrg    # and one to simply output
9604007ebaSmrg    #   dependency.h:
9704007ebaSmrg    # which is needed to avoid the deleted-header problem.
9804007ebaSmrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
9904007ebaSmrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
10004007ebaSmrg    } > "$depfile"
10104007ebaSmrg    rm -f "$tmpdepfile"
10204007ebaSmrg  else
10304007ebaSmrg    make_dummy_depfile
10404007ebaSmrg  fi
10504007ebaSmrg}
10604007ebaSmrg
10704007ebaSmrg# A tabulation character.
10804007ebaSmrgtab='	'
10904007ebaSmrg# A newline character.
11004007ebaSmrgnl='
11104007ebaSmrg'
11204007ebaSmrg# Character ranges might be problematic outside the C locale.
11304007ebaSmrg# These definitions help.
11404007ebaSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
11504007ebaSmrglower=abcdefghijklmnopqrstuvwxyz
11604007ebaSmrgdigits=0123456789
11704007ebaSmrgalpha=${upper}${lower}
11804007ebaSmrg
11904007ebaSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
12004007ebaSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
12104007ebaSmrg  exit 1
12204007ebaSmrgfi
12304007ebaSmrg
12404007ebaSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
12504007ebaSmrgdepfile=${depfile-`echo "$object" |
12604007ebaSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
12704007ebaSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
12804007ebaSmrg
12904007ebaSmrgrm -f "$tmpdepfile"
13004007ebaSmrg
13104007ebaSmrg# Avoid interferences from the environment.
13204007ebaSmrggccflag= dashmflag=
13304007ebaSmrg
13404007ebaSmrg# Some modes work just like other modes, but use different flags.  We
13504007ebaSmrg# parameterize here, but still list the modes in the big case below,
13604007ebaSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
13704007ebaSmrg# here, because this file can only contain one case statement.
13804007ebaSmrgif test "$depmode" = hp; then
13904007ebaSmrg  # HP compiler uses -M and no extra arg.
14004007ebaSmrg  gccflag=-M
14104007ebaSmrg  depmode=gcc
14204007ebaSmrgfi
14304007ebaSmrg
14404007ebaSmrgif test "$depmode" = dashXmstdout; then
14504007ebaSmrg  # This is just like dashmstdout with a different argument.
14604007ebaSmrg  dashmflag=-xM
14704007ebaSmrg  depmode=dashmstdout
14804007ebaSmrgfi
14904007ebaSmrg
15004007ebaSmrgcygpath_u="cygpath -u -f -"
15104007ebaSmrgif test "$depmode" = msvcmsys; then
15204007ebaSmrg  # This is just like msvisualcpp but w/o cygpath translation.
15304007ebaSmrg  # Just convert the backslash-escaped backslashes to single forward
15404007ebaSmrg  # slashes to satisfy depend.m4
15504007ebaSmrg  cygpath_u='sed s,\\\\,/,g'
15604007ebaSmrg  depmode=msvisualcpp
15704007ebaSmrgfi
15804007ebaSmrg
15904007ebaSmrgif test "$depmode" = msvc7msys; then
16004007ebaSmrg  # This is just like msvc7 but w/o cygpath translation.
16104007ebaSmrg  # Just convert the backslash-escaped backslashes to single forward
16204007ebaSmrg  # slashes to satisfy depend.m4
16304007ebaSmrg  cygpath_u='sed s,\\\\,/,g'
16404007ebaSmrg  depmode=msvc7
16504007ebaSmrgfi
16604007ebaSmrg
16704007ebaSmrgif test "$depmode" = xlc; then
16804007ebaSmrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
16904007ebaSmrg  gccflag=-qmakedep=gcc,-MF
17004007ebaSmrg  depmode=gcc
17104007ebaSmrgfi
17204007ebaSmrg
17304007ebaSmrgcase "$depmode" in
17404007ebaSmrggcc3)
17504007ebaSmrg## gcc 3 implements dependency tracking that does exactly what
17604007ebaSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
17704007ebaSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
17804007ebaSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
17904007ebaSmrg## the command line argument order; so add the flags where they
18004007ebaSmrg## appear in depend2.am.  Note that the slowdown incurred here
18104007ebaSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
18204007ebaSmrg  for arg
18304007ebaSmrg  do
18404007ebaSmrg    case $arg in
18504007ebaSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
18604007ebaSmrg    *)  set fnord "$@" "$arg" ;;
18704007ebaSmrg    esac
18804007ebaSmrg    shift # fnord
18904007ebaSmrg    shift # $arg
19004007ebaSmrg  done
19104007ebaSmrg  "$@"
19204007ebaSmrg  stat=$?
19304007ebaSmrg  if test $stat -ne 0; then
19404007ebaSmrg    rm -f "$tmpdepfile"
19504007ebaSmrg    exit $stat
19604007ebaSmrg  fi
19704007ebaSmrg  mv "$tmpdepfile" "$depfile"
19804007ebaSmrg  ;;
19904007ebaSmrg
20004007ebaSmrggcc)
20104007ebaSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
20204007ebaSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
20304007ebaSmrg## (see the conditional assignment to $gccflag above).
20404007ebaSmrg## There are various ways to get dependency output from gcc.  Here's
20504007ebaSmrg## why we pick this rather obscure method:
20604007ebaSmrg## - Don't want to use -MD because we'd like the dependencies to end
20704007ebaSmrg##   up in a subdir.  Having to rename by hand is ugly.
20804007ebaSmrg##   (We might end up doing this anyway to support other compilers.)
20904007ebaSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
21004007ebaSmrg##   -MM, not -M (despite what the docs say).  Also, it might not be
21104007ebaSmrg##   supported by the other compilers which use the 'gcc' depmode.
21204007ebaSmrg## - Using -M directly means running the compiler twice (even worse
21304007ebaSmrg##   than renaming).
21404007ebaSmrg  if test -z "$gccflag"; then
21504007ebaSmrg    gccflag=-MD,
21604007ebaSmrg  fi
21704007ebaSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
21804007ebaSmrg  stat=$?
21904007ebaSmrg  if test $stat -ne 0; then
22004007ebaSmrg    rm -f "$tmpdepfile"
22104007ebaSmrg    exit $stat
22204007ebaSmrg  fi
22304007ebaSmrg  rm -f "$depfile"
22404007ebaSmrg  echo "$object : \\" > "$depfile"
22504007ebaSmrg  # The second -e expression handles DOS-style file names with drive
22604007ebaSmrg  # letters.
22704007ebaSmrg  sed -e 's/^[^:]*: / /' \
22804007ebaSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
22904007ebaSmrg## This next piece of magic avoids the "deleted header file" problem.
23004007ebaSmrg## The problem is that when a header file which appears in a .P file
23104007ebaSmrg## is deleted, the dependency causes make to die (because there is
23204007ebaSmrg## typically no way to rebuild the header).  We avoid this by adding
23304007ebaSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
23404007ebaSmrg## this for us directly.
23504007ebaSmrg## Some versions of gcc put a space before the ':'.  On the theory
23604007ebaSmrg## that the space means something, we add a space to the output as
23704007ebaSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
23804007ebaSmrg## to the object.  Take care to not repeat it in the output.
23904007ebaSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
24004007ebaSmrg## correctly.  Breaking it into two sed invocations is a workaround.
24104007ebaSmrg  tr ' ' "$nl" < "$tmpdepfile" \
24204007ebaSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
24304007ebaSmrg    | sed -e 's/$/ :/' >> "$depfile"
24404007ebaSmrg  rm -f "$tmpdepfile"
24504007ebaSmrg  ;;
24604007ebaSmrg
24704007ebaSmrghp)
24804007ebaSmrg  # This case exists only to let depend.m4 do its work.  It works by
24904007ebaSmrg  # looking at the text of this script.  This case will never be run,
25004007ebaSmrg  # since it is checked for above.
25104007ebaSmrg  exit 1
25204007ebaSmrg  ;;
25304007ebaSmrg
25404007ebaSmrgsgi)
25504007ebaSmrg  if test "$libtool" = yes; then
25604007ebaSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
25704007ebaSmrg  else
25804007ebaSmrg    "$@" -MDupdate "$tmpdepfile"
25904007ebaSmrg  fi
26004007ebaSmrg  stat=$?
26104007ebaSmrg  if test $stat -ne 0; then
26204007ebaSmrg    rm -f "$tmpdepfile"
26304007ebaSmrg    exit $stat
26404007ebaSmrg  fi
26504007ebaSmrg  rm -f "$depfile"
26604007ebaSmrg
26704007ebaSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
26804007ebaSmrg    echo "$object : \\" > "$depfile"
26904007ebaSmrg    # Clip off the initial element (the dependent).  Don't try to be
27004007ebaSmrg    # clever and replace this with sed code, as IRIX sed won't handle
27104007ebaSmrg    # lines with more than a fixed number of characters (4096 in
27204007ebaSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
27304007ebaSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
27404007ebaSmrg    # dependency line.
27504007ebaSmrg    tr ' ' "$nl" < "$tmpdepfile" \
27604007ebaSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
27704007ebaSmrg      | tr "$nl" ' ' >> "$depfile"
27804007ebaSmrg    echo >> "$depfile"
27904007ebaSmrg    # The second pass generates a dummy entry for each header file.
28004007ebaSmrg    tr ' ' "$nl" < "$tmpdepfile" \
28104007ebaSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
28204007ebaSmrg      >> "$depfile"
28304007ebaSmrg  else
28404007ebaSmrg    make_dummy_depfile
28504007ebaSmrg  fi
28604007ebaSmrg  rm -f "$tmpdepfile"
28704007ebaSmrg  ;;
28804007ebaSmrg
28904007ebaSmrgxlc)
29004007ebaSmrg  # This case exists only to let depend.m4 do its work.  It works by
29104007ebaSmrg  # looking at the text of this script.  This case will never be run,
29204007ebaSmrg  # since it is checked for above.
29304007ebaSmrg  exit 1
29404007ebaSmrg  ;;
29504007ebaSmrg
29604007ebaSmrgaix)
29704007ebaSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
29804007ebaSmrg  # in a .u file.  In older versions, this file always lives in the
29904007ebaSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
30004007ebaSmrg  # start of each line; $object doesn't have directory information.
30104007ebaSmrg  # Version 6 uses the directory in both cases.
30204007ebaSmrg  set_dir_from "$object"
30304007ebaSmrg  set_base_from "$object"
30404007ebaSmrg  if test "$libtool" = yes; then
30504007ebaSmrg    tmpdepfile1=$dir$base.u
30604007ebaSmrg    tmpdepfile2=$base.u
30704007ebaSmrg    tmpdepfile3=$dir.libs/$base.u
30804007ebaSmrg    "$@" -Wc,-M
30904007ebaSmrg  else
31004007ebaSmrg    tmpdepfile1=$dir$base.u
31104007ebaSmrg    tmpdepfile2=$dir$base.u
31204007ebaSmrg    tmpdepfile3=$dir$base.u
31304007ebaSmrg    "$@" -M
31404007ebaSmrg  fi
31504007ebaSmrg  stat=$?
31604007ebaSmrg  if test $stat -ne 0; then
31704007ebaSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
31804007ebaSmrg    exit $stat
31904007ebaSmrg  fi
32004007ebaSmrg
32104007ebaSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
32204007ebaSmrg  do
32304007ebaSmrg    test -f "$tmpdepfile" && break
32404007ebaSmrg  done
32504007ebaSmrg  aix_post_process_depfile
32604007ebaSmrg  ;;
32704007ebaSmrg
32804007ebaSmrgtcc)
32904007ebaSmrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
33004007ebaSmrg  # FIXME: That version still under development at the moment of writing.
33104007ebaSmrg  #        Make that this statement remains true also for stable, released
33204007ebaSmrg  #        versions.
33304007ebaSmrg  # It will wrap lines (doesn't matter whether long or short) with a
33404007ebaSmrg  # trailing '\', as in:
33504007ebaSmrg  #
33604007ebaSmrg  #   foo.o : \
33704007ebaSmrg  #    foo.c \
33804007ebaSmrg  #    foo.h \
33904007ebaSmrg  #
34004007ebaSmrg  # It will put a trailing '\' even on the last line, and will use leading
34104007ebaSmrg  # spaces rather than leading tabs (at least since its commit 0394caf7
34204007ebaSmrg  # "Emit spaces for -MD").
34304007ebaSmrg  "$@" -MD -MF "$tmpdepfile"
34404007ebaSmrg  stat=$?
34504007ebaSmrg  if test $stat -ne 0; then
34604007ebaSmrg    rm -f "$tmpdepfile"
34704007ebaSmrg    exit $stat
34804007ebaSmrg  fi
34904007ebaSmrg  rm -f "$depfile"
35004007ebaSmrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
35104007ebaSmrg  # We have to change lines of the first kind to '$object: \'.
35204007ebaSmrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
35304007ebaSmrg  # And for each line of the second kind, we have to emit a 'dep.h:'
35404007ebaSmrg  # dummy dependency, to avoid the deleted-header problem.
35504007ebaSmrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
35604007ebaSmrg  rm -f "$tmpdepfile"
35704007ebaSmrg  ;;
35804007ebaSmrg
35904007ebaSmrg## The order of this option in the case statement is important, since the
36004007ebaSmrg## shell code in configure will try each of these formats in the order
36104007ebaSmrg## listed in this file.  A plain '-MD' option would be understood by many
36204007ebaSmrg## compilers, so we must ensure this comes after the gcc and icc options.
36304007ebaSmrgpgcc)
36404007ebaSmrg  # Portland's C compiler understands '-MD'.
36504007ebaSmrg  # Will always output deps to 'file.d' where file is the root name of the
36604007ebaSmrg  # source file under compilation, even if file resides in a subdirectory.
36704007ebaSmrg  # The object file name does not affect the name of the '.d' file.
36804007ebaSmrg  # pgcc 10.2 will output
36904007ebaSmrg  #    foo.o: sub/foo.c sub/foo.h
37004007ebaSmrg  # and will wrap long lines using '\' :
37104007ebaSmrg  #    foo.o: sub/foo.c ... \
37204007ebaSmrg  #     sub/foo.h ... \
37304007ebaSmrg  #     ...
37404007ebaSmrg  set_dir_from "$object"
37504007ebaSmrg  # Use the source, not the object, to determine the base name, since
37604007ebaSmrg  # that's sadly what pgcc will do too.
37704007ebaSmrg  set_base_from "$source"
37804007ebaSmrg  tmpdepfile=$base.d
37904007ebaSmrg
38004007ebaSmrg  # For projects that build the same source file twice into different object
38104007ebaSmrg  # files, the pgcc approach of using the *source* file root name can cause
38204007ebaSmrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
38304007ebaSmrg  # the same $tmpdepfile.
38404007ebaSmrg  lockdir=$base.d-lock
38504007ebaSmrg  trap "
38604007ebaSmrg    echo '$0: caught signal, cleaning up...' >&2
38704007ebaSmrg    rmdir '$lockdir'
38804007ebaSmrg    exit 1
38904007ebaSmrg  " 1 2 13 15
39004007ebaSmrg  numtries=100
39104007ebaSmrg  i=$numtries
39204007ebaSmrg  while test $i -gt 0; do
39304007ebaSmrg    # mkdir is a portable test-and-set.
39404007ebaSmrg    if mkdir "$lockdir" 2>/dev/null; then
39504007ebaSmrg      # This process acquired the lock.
39604007ebaSmrg      "$@" -MD
39704007ebaSmrg      stat=$?
39804007ebaSmrg      # Release the lock.
39904007ebaSmrg      rmdir "$lockdir"
40004007ebaSmrg      break
40104007ebaSmrg    else
40204007ebaSmrg      # If the lock is being held by a different process, wait
40304007ebaSmrg      # until the winning process is done or we timeout.
40404007ebaSmrg      while test -d "$lockdir" && test $i -gt 0; do
40504007ebaSmrg        sleep 1
40604007ebaSmrg        i=`expr $i - 1`
40704007ebaSmrg      done
40804007ebaSmrg    fi
40904007ebaSmrg    i=`expr $i - 1`
41004007ebaSmrg  done
41104007ebaSmrg  trap - 1 2 13 15
41204007ebaSmrg  if test $i -le 0; then
41304007ebaSmrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
41404007ebaSmrg    echo "$0: check lockdir '$lockdir'" >&2
41504007ebaSmrg    exit 1
41604007ebaSmrg  fi
41704007ebaSmrg
41804007ebaSmrg  if test $stat -ne 0; then
41904007ebaSmrg    rm -f "$tmpdepfile"
42004007ebaSmrg    exit $stat
42104007ebaSmrg  fi
42204007ebaSmrg  rm -f "$depfile"
42304007ebaSmrg  # Each line is of the form `foo.o: dependent.h',
42404007ebaSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
42504007ebaSmrg  # Do two passes, one to just change these to
42604007ebaSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
42704007ebaSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
42804007ebaSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
42904007ebaSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
43004007ebaSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
43104007ebaSmrg    | sed -e 's/$/ :/' >> "$depfile"
43204007ebaSmrg  rm -f "$tmpdepfile"
43304007ebaSmrg  ;;
43404007ebaSmrg
43504007ebaSmrghp2)
43604007ebaSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
43704007ebaSmrg  # compilers, which have integrated preprocessors.  The correct option
43804007ebaSmrg  # to use with these is +Maked; it writes dependencies to a file named
43904007ebaSmrg  # 'foo.d', which lands next to the object file, wherever that
44004007ebaSmrg  # happens to be.
44104007ebaSmrg  # Much of this is similar to the tru64 case; see comments there.
44204007ebaSmrg  set_dir_from  "$object"
44304007ebaSmrg  set_base_from "$object"
44404007ebaSmrg  if test "$libtool" = yes; then
44504007ebaSmrg    tmpdepfile1=$dir$base.d
44604007ebaSmrg    tmpdepfile2=$dir.libs/$base.d
44704007ebaSmrg    "$@" -Wc,+Maked
44804007ebaSmrg  else
44904007ebaSmrg    tmpdepfile1=$dir$base.d
45004007ebaSmrg    tmpdepfile2=$dir$base.d
45104007ebaSmrg    "$@" +Maked
45204007ebaSmrg  fi
45304007ebaSmrg  stat=$?
45404007ebaSmrg  if test $stat -ne 0; then
45504007ebaSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
45604007ebaSmrg     exit $stat
45704007ebaSmrg  fi
45804007ebaSmrg
45904007ebaSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
46004007ebaSmrg  do
46104007ebaSmrg    test -f "$tmpdepfile" && break
46204007ebaSmrg  done
46304007ebaSmrg  if test -f "$tmpdepfile"; then
46404007ebaSmrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
46504007ebaSmrg    # Add 'dependent.h:' lines.
46604007ebaSmrg    sed -ne '2,${
46704007ebaSmrg               s/^ *//
46804007ebaSmrg               s/ \\*$//
46904007ebaSmrg               s/$/:/
47004007ebaSmrg               p
47104007ebaSmrg             }' "$tmpdepfile" >> "$depfile"
47204007ebaSmrg  else
47304007ebaSmrg    make_dummy_depfile
47404007ebaSmrg  fi
47504007ebaSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
47604007ebaSmrg  ;;
47704007ebaSmrg
47804007ebaSmrgtru64)
47904007ebaSmrg  # The Tru64 compiler uses -MD to generate dependencies as a side
48004007ebaSmrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
48104007ebaSmrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
48204007ebaSmrg  # dependencies in 'foo.d' instead, so we check for that too.
48304007ebaSmrg  # Subdirectories are respected.
48404007ebaSmrg  set_dir_from  "$object"
48504007ebaSmrg  set_base_from "$object"
48604007ebaSmrg
48704007ebaSmrg  if test "$libtool" = yes; then
48804007ebaSmrg    # Libtool generates 2 separate objects for the 2 libraries.  These
48904007ebaSmrg    # two compilations output dependencies in $dir.libs/$base.o.d and
49004007ebaSmrg    # in $dir$base.o.d.  We have to check for both files, because
49104007ebaSmrg    # one of the two compilations can be disabled.  We should prefer
49204007ebaSmrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
49304007ebaSmrg    # automatically cleaned when .libs/ is deleted, while ignoring
49404007ebaSmrg    # the former would cause a distcleancheck panic.
49504007ebaSmrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
49604007ebaSmrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
49704007ebaSmrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
49804007ebaSmrg    "$@" -Wc,-MD
49904007ebaSmrg  else
50004007ebaSmrg    tmpdepfile1=$dir$base.d
50104007ebaSmrg    tmpdepfile2=$dir$base.d
50204007ebaSmrg    tmpdepfile3=$dir$base.d
50304007ebaSmrg    "$@" -MD
50404007ebaSmrg  fi
50504007ebaSmrg
50604007ebaSmrg  stat=$?
50704007ebaSmrg  if test $stat -ne 0; then
50804007ebaSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
50904007ebaSmrg    exit $stat
51004007ebaSmrg  fi
51104007ebaSmrg
51204007ebaSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
51304007ebaSmrg  do
51404007ebaSmrg    test -f "$tmpdepfile" && break
51504007ebaSmrg  done
51604007ebaSmrg  # Same post-processing that is required for AIX mode.
51704007ebaSmrg  aix_post_process_depfile
51804007ebaSmrg  ;;
51904007ebaSmrg
52004007ebaSmrgmsvc7)
52104007ebaSmrg  if test "$libtool" = yes; then
52204007ebaSmrg    showIncludes=-Wc,-showIncludes
52304007ebaSmrg  else
52404007ebaSmrg    showIncludes=-showIncludes
52504007ebaSmrg  fi
52604007ebaSmrg  "$@" $showIncludes > "$tmpdepfile"
52704007ebaSmrg  stat=$?
52804007ebaSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
52904007ebaSmrg  if test $stat -ne 0; then
53004007ebaSmrg    rm -f "$tmpdepfile"
53104007ebaSmrg    exit $stat
53204007ebaSmrg  fi
53304007ebaSmrg  rm -f "$depfile"
53404007ebaSmrg  echo "$object : \\" > "$depfile"
53504007ebaSmrg  # The first sed program below extracts the file names and escapes
53604007ebaSmrg  # backslashes for cygpath.  The second sed program outputs the file
53704007ebaSmrg  # name when reading, but also accumulates all include files in the
53804007ebaSmrg  # hold buffer in order to output them again at the end.  This only
53904007ebaSmrg  # works with sed implementations that can handle large buffers.
54004007ebaSmrg  sed < "$tmpdepfile" -n '
54104007ebaSmrg/^Note: including file:  *\(.*\)/ {
54204007ebaSmrg  s//\1/
54304007ebaSmrg  s/\\/\\\\/g
54404007ebaSmrg  p
54504007ebaSmrg}' | $cygpath_u | sort -u | sed -n '
54604007ebaSmrgs/ /\\ /g
54704007ebaSmrgs/\(.*\)/'"$tab"'\1 \\/p
54804007ebaSmrgs/.\(.*\) \\/\1:/
54904007ebaSmrgH
55004007ebaSmrg$ {
55104007ebaSmrg  s/.*/'"$tab"'/
55204007ebaSmrg  G
55304007ebaSmrg  p
55404007ebaSmrg}' >> "$depfile"
55504007ebaSmrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
55604007ebaSmrg  rm -f "$tmpdepfile"
55704007ebaSmrg  ;;
55804007ebaSmrg
55904007ebaSmrgmsvc7msys)
56004007ebaSmrg  # This case exists only to let depend.m4 do its work.  It works by
56104007ebaSmrg  # looking at the text of this script.  This case will never be run,
56204007ebaSmrg  # since it is checked for above.
56304007ebaSmrg  exit 1
56404007ebaSmrg  ;;
56504007ebaSmrg
56604007ebaSmrg#nosideeffect)
56704007ebaSmrg  # This comment above is used by automake to tell side-effect
56804007ebaSmrg  # dependency tracking mechanisms from slower ones.
56904007ebaSmrg
57004007ebaSmrgdashmstdout)
57104007ebaSmrg  # Important note: in order to support this mode, a compiler *must*
57204007ebaSmrg  # always write the preprocessed file to stdout, regardless of -o.
57304007ebaSmrg  "$@" || exit $?
57404007ebaSmrg
57504007ebaSmrg  # Remove the call to Libtool.
57604007ebaSmrg  if test "$libtool" = yes; then
57704007ebaSmrg    while test "X$1" != 'X--mode=compile'; do
57804007ebaSmrg      shift
57904007ebaSmrg    done
58004007ebaSmrg    shift
58104007ebaSmrg  fi
58204007ebaSmrg
58304007ebaSmrg  # Remove '-o $object'.
58404007ebaSmrg  IFS=" "
58504007ebaSmrg  for arg
58604007ebaSmrg  do
58704007ebaSmrg    case $arg in
58804007ebaSmrg    -o)
58904007ebaSmrg      shift
59004007ebaSmrg      ;;
59104007ebaSmrg    $object)
59204007ebaSmrg      shift
59304007ebaSmrg      ;;
59404007ebaSmrg    *)
59504007ebaSmrg      set fnord "$@" "$arg"
59604007ebaSmrg      shift # fnord
59704007ebaSmrg      shift # $arg
59804007ebaSmrg      ;;
59904007ebaSmrg    esac
60004007ebaSmrg  done
60104007ebaSmrg
60204007ebaSmrg  test -z "$dashmflag" && dashmflag=-M
60304007ebaSmrg  # Require at least two characters before searching for ':'
60404007ebaSmrg  # in the target name.  This is to cope with DOS-style filenames:
60504007ebaSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
60604007ebaSmrg  "$@" $dashmflag |
60704007ebaSmrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
60804007ebaSmrg  rm -f "$depfile"
60904007ebaSmrg  cat < "$tmpdepfile" > "$depfile"
61004007ebaSmrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
61104007ebaSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
61204007ebaSmrg  tr ' ' "$nl" < "$tmpdepfile" \
61304007ebaSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
61404007ebaSmrg    | sed -e 's/$/ :/' >> "$depfile"
61504007ebaSmrg  rm -f "$tmpdepfile"
61604007ebaSmrg  ;;
61704007ebaSmrg
61804007ebaSmrgdashXmstdout)
61904007ebaSmrg  # This case only exists to satisfy depend.m4.  It is never actually
62004007ebaSmrg  # run, as this mode is specially recognized in the preamble.
62104007ebaSmrg  exit 1
62204007ebaSmrg  ;;
62304007ebaSmrg
62404007ebaSmrgmakedepend)
62504007ebaSmrg  "$@" || exit $?
62604007ebaSmrg  # Remove any Libtool call
62704007ebaSmrg  if test "$libtool" = yes; then
62804007ebaSmrg    while test "X$1" != 'X--mode=compile'; do
62904007ebaSmrg      shift
63004007ebaSmrg    done
63104007ebaSmrg    shift
63204007ebaSmrg  fi
63304007ebaSmrg  # X makedepend
63404007ebaSmrg  shift
63504007ebaSmrg  cleared=no eat=no
63604007ebaSmrg  for arg
63704007ebaSmrg  do
63804007ebaSmrg    case $cleared in
63904007ebaSmrg    no)
64004007ebaSmrg      set ""; shift
64104007ebaSmrg      cleared=yes ;;
64204007ebaSmrg    esac
64304007ebaSmrg    if test $eat = yes; then
64404007ebaSmrg      eat=no
64504007ebaSmrg      continue
64604007ebaSmrg    fi
64704007ebaSmrg    case "$arg" in
64804007ebaSmrg    -D*|-I*)
64904007ebaSmrg      set fnord "$@" "$arg"; shift ;;
65004007ebaSmrg    # Strip any option that makedepend may not understand.  Remove
65104007ebaSmrg    # the object too, otherwise makedepend will parse it as a source file.
65204007ebaSmrg    -arch)
65304007ebaSmrg      eat=yes ;;
65404007ebaSmrg    -*|$object)
65504007ebaSmrg      ;;
65604007ebaSmrg    *)
65704007ebaSmrg      set fnord "$@" "$arg"; shift ;;
65804007ebaSmrg    esac
65904007ebaSmrg  done
66004007ebaSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
66104007ebaSmrg  touch "$tmpdepfile"
66204007ebaSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
66304007ebaSmrg  rm -f "$depfile"
66404007ebaSmrg  # makedepend may prepend the VPATH from the source file name to the object.
66504007ebaSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
66604007ebaSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
66704007ebaSmrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
66804007ebaSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
66904007ebaSmrg  sed '1,2d' "$tmpdepfile" \
67004007ebaSmrg    | tr ' ' "$nl" \
67104007ebaSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
67204007ebaSmrg    | sed -e 's/$/ :/' >> "$depfile"
67304007ebaSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
67404007ebaSmrg  ;;
67504007ebaSmrg
67604007ebaSmrgcpp)
67704007ebaSmrg  # Important note: in order to support this mode, a compiler *must*
67804007ebaSmrg  # always write the preprocessed file to stdout.
67904007ebaSmrg  "$@" || exit $?
68004007ebaSmrg
68104007ebaSmrg  # Remove the call to Libtool.
68204007ebaSmrg  if test "$libtool" = yes; then
68304007ebaSmrg    while test "X$1" != 'X--mode=compile'; do
68404007ebaSmrg      shift
68504007ebaSmrg    done
68604007ebaSmrg    shift
68704007ebaSmrg  fi
68804007ebaSmrg
68904007ebaSmrg  # Remove '-o $object'.
69004007ebaSmrg  IFS=" "
69104007ebaSmrg  for arg
69204007ebaSmrg  do
69304007ebaSmrg    case $arg in
69404007ebaSmrg    -o)
69504007ebaSmrg      shift
69604007ebaSmrg      ;;
69704007ebaSmrg    $object)
69804007ebaSmrg      shift
69904007ebaSmrg      ;;
70004007ebaSmrg    *)
70104007ebaSmrg      set fnord "$@" "$arg"
70204007ebaSmrg      shift # fnord
70304007ebaSmrg      shift # $arg
70404007ebaSmrg      ;;
70504007ebaSmrg    esac
70604007ebaSmrg  done
70704007ebaSmrg
70804007ebaSmrg  "$@" -E \
70904007ebaSmrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
71004007ebaSmrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
71104007ebaSmrg    | sed '$ s: \\$::' > "$tmpdepfile"
71204007ebaSmrg  rm -f "$depfile"
71304007ebaSmrg  echo "$object : \\" > "$depfile"
71404007ebaSmrg  cat < "$tmpdepfile" >> "$depfile"
71504007ebaSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
71604007ebaSmrg  rm -f "$tmpdepfile"
71704007ebaSmrg  ;;
71804007ebaSmrg
71904007ebaSmrgmsvisualcpp)
72004007ebaSmrg  # Important note: in order to support this mode, a compiler *must*
72104007ebaSmrg  # always write the preprocessed file to stdout.
72204007ebaSmrg  "$@" || exit $?
72304007ebaSmrg
72404007ebaSmrg  # Remove the call to Libtool.
72504007ebaSmrg  if test "$libtool" = yes; then
72604007ebaSmrg    while test "X$1" != 'X--mode=compile'; do
72704007ebaSmrg      shift
72804007ebaSmrg    done
72904007ebaSmrg    shift
73004007ebaSmrg  fi
73104007ebaSmrg
73204007ebaSmrg  IFS=" "
73304007ebaSmrg  for arg
73404007ebaSmrg  do
73504007ebaSmrg    case "$arg" in
73604007ebaSmrg    -o)
73704007ebaSmrg      shift
73804007ebaSmrg      ;;
73904007ebaSmrg    $object)
74004007ebaSmrg      shift
74104007ebaSmrg      ;;
74204007ebaSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
74304007ebaSmrg        set fnord "$@"
74404007ebaSmrg        shift
74504007ebaSmrg        shift
74604007ebaSmrg        ;;
74704007ebaSmrg    *)
74804007ebaSmrg        set fnord "$@" "$arg"
74904007ebaSmrg        shift
75004007ebaSmrg        shift
75104007ebaSmrg        ;;
75204007ebaSmrg    esac
75304007ebaSmrg  done
75404007ebaSmrg  "$@" -E 2>/dev/null |
75504007ebaSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
75604007ebaSmrg  rm -f "$depfile"
75704007ebaSmrg  echo "$object : \\" > "$depfile"
75804007ebaSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
75904007ebaSmrg  echo "$tab" >> "$depfile"
76004007ebaSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
76104007ebaSmrg  rm -f "$tmpdepfile"
76204007ebaSmrg  ;;
76304007ebaSmrg
76404007ebaSmrgmsvcmsys)
76504007ebaSmrg  # This case exists only to let depend.m4 do its work.  It works by
76604007ebaSmrg  # looking at the text of this script.  This case will never be run,
76704007ebaSmrg  # since it is checked for above.
76804007ebaSmrg  exit 1
76904007ebaSmrg  ;;
77004007ebaSmrg
77104007ebaSmrgnone)
77204007ebaSmrg  exec "$@"
77304007ebaSmrg  ;;
77404007ebaSmrg
77504007ebaSmrg*)
77604007ebaSmrg  echo "Unknown depmode $depmode" 1>&2
77704007ebaSmrg  exit 1
77804007ebaSmrg  ;;
77904007ebaSmrgesac
78004007ebaSmrg
78104007ebaSmrgexit 0
78204007ebaSmrg
78304007ebaSmrg# Local Variables:
78404007ebaSmrg# mode: shell-script
78504007ebaSmrg# sh-indentation: 2
78605cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
78704007ebaSmrg# time-stamp-start: "scriptversion="
78804007ebaSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
78905cf1079Smrg# time-stamp-time-zone: "UTC0"
79004007ebaSmrg# time-stamp-end: "; # UTC"
79104007ebaSmrg# End:
792