depcomp revision f2408745
145bc899bSmrg#! /bin/sh
245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects
345bc899bSmrg
4f2408745Smrgscriptversion=2016-01-11.22; # UTC
545bc899bSmrg
6f2408745Smrg# Copyright (C) 1999-2017 Free Software Foundation, Inc.
745bc899bSmrg
845bc899bSmrg# This program is free software; you can redistribute it and/or modify
945bc899bSmrg# it under the terms of the GNU General Public License as published by
1045bc899bSmrg# the Free Software Foundation; either version 2, or (at your option)
1145bc899bSmrg# any later version.
1245bc899bSmrg
1345bc899bSmrg# This program is distributed in the hope that it will be useful,
1445bc899bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1545bc899bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1645bc899bSmrg# GNU General Public License for more details.
1745bc899bSmrg
1845bc899bSmrg# You should have received a copy of the GNU General Public License
19b40a6198Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2045bc899bSmrg
2145bc899bSmrg# As a special exception to the GNU General Public License, if you
2245bc899bSmrg# distribute this file as part of a program that contains a
2345bc899bSmrg# configuration script generated by Autoconf, you may include it under
2445bc899bSmrg# the same distribution terms that you use for the rest of that program.
2545bc899bSmrg
2645bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2745bc899bSmrg
2845bc899bSmrgcase $1 in
2945bc899bSmrg  '')
30c97b1c41Smrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31c97b1c41Smrg    exit 1;
32c97b1c41Smrg    ;;
3345bc899bSmrg  -h | --h*)
3445bc899bSmrg    cat <<\EOF
3545bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3645bc899bSmrg
3745bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3845bc899bSmrgas side-effects.
3945bc899bSmrg
4045bc899bSmrgEnvironment variables:
4145bc899bSmrg  depmode     Dependency tracking mode.
42c97b1c41Smrg  source      Source file read by 'PROGRAMS ARGS'.
43c97b1c41Smrg  object      Object file output by 'PROGRAMS ARGS'.
4445bc899bSmrg  DEPDIR      directory where to store dependencies.
4545bc899bSmrg  depfile     Dependency file to output.
46b40a6198Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
4745bc899bSmrg  libtool     Whether libtool is used (yes/no).
4845bc899bSmrg
4945bc899bSmrgReport bugs to <bug-automake@gnu.org>.
5045bc899bSmrgEOF
5145bc899bSmrg    exit $?
5245bc899bSmrg    ;;
5345bc899bSmrg  -v | --v*)
5445bc899bSmrg    echo "depcomp $scriptversion"
5545bc899bSmrg    exit $?
5645bc899bSmrg    ;;
5745bc899bSmrgesac
5845bc899bSmrg
59c97b1c41Smrg# Get the directory component of the given path, and save it in the
60c97b1c41Smrg# global variables '$dir'.  Note that this directory component will
61c97b1c41Smrg# be either empty or ending with a '/' character.  This is deliberate.
62c97b1c41Smrgset_dir_from ()
63c97b1c41Smrg{
64c97b1c41Smrg  case $1 in
65c97b1c41Smrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66c97b1c41Smrg      *) dir=;;
67c97b1c41Smrg  esac
68c97b1c41Smrg}
69c97b1c41Smrg
70c97b1c41Smrg# Get the suffix-stripped basename of the given path, and save it the
71c97b1c41Smrg# global variable '$base'.
72c97b1c41Smrgset_base_from ()
73c97b1c41Smrg{
74c97b1c41Smrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75c97b1c41Smrg}
76c97b1c41Smrg
77c97b1c41Smrg# If no dependency file was actually created by the compiler invocation,
78c97b1c41Smrg# we still have to create a dummy depfile, to avoid errors with the
79c97b1c41Smrg# Makefile "include basename.Plo" scheme.
80c97b1c41Smrgmake_dummy_depfile ()
81c97b1c41Smrg{
82c97b1c41Smrg  echo "#dummy" > "$depfile"
83c97b1c41Smrg}
84c97b1c41Smrg
85c97b1c41Smrg# Factor out some common post-processing of the generated depfile.
86c97b1c41Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
87c97b1c41Smrgaix_post_process_depfile ()
88c97b1c41Smrg{
89c97b1c41Smrg  # If the compiler actually managed to produce a dependency file,
90c97b1c41Smrg  # post-process it.
91c97b1c41Smrg  if test -f "$tmpdepfile"; then
92c97b1c41Smrg    # Each line is of the form 'foo.o: dependency.h'.
93c97b1c41Smrg    # Do two passes, one to just change these to
94c97b1c41Smrg    #   $object: dependency.h
95c97b1c41Smrg    # and one to simply output
96c97b1c41Smrg    #   dependency.h:
97c97b1c41Smrg    # which is needed to avoid the deleted-header problem.
98c97b1c41Smrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99c97b1c41Smrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100c97b1c41Smrg    } > "$depfile"
101c97b1c41Smrg    rm -f "$tmpdepfile"
102c97b1c41Smrg  else
103c97b1c41Smrg    make_dummy_depfile
104c97b1c41Smrg  fi
105c97b1c41Smrg}
106c97b1c41Smrg
107c97b1c41Smrg# A tabulation character.
108c97b1c41Smrgtab='	'
109c97b1c41Smrg# A newline character.
110c97b1c41Smrgnl='
111c97b1c41Smrg'
112c97b1c41Smrg# Character ranges might be problematic outside the C locale.
113c97b1c41Smrg# These definitions help.
114c97b1c41Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115c97b1c41Smrglower=abcdefghijklmnopqrstuvwxyz
116c97b1c41Smrgdigits=0123456789
117c97b1c41Smrgalpha=${upper}${lower}
118c97b1c41Smrg
11945bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
12045bc899bSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
12145bc899bSmrg  exit 1
12245bc899bSmrgfi
12345bc899bSmrg
12445bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
12545bc899bSmrgdepfile=${depfile-`echo "$object" |
12645bc899bSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
12745bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
12845bc899bSmrg
12945bc899bSmrgrm -f "$tmpdepfile"
13045bc899bSmrg
131c97b1c41Smrg# Avoid interferences from the environment.
132c97b1c41Smrggccflag= dashmflag=
133c97b1c41Smrg
13445bc899bSmrg# Some modes work just like other modes, but use different flags.  We
13545bc899bSmrg# parameterize here, but still list the modes in the big case below,
13645bc899bSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
13745bc899bSmrg# here, because this file can only contain one case statement.
13845bc899bSmrgif test "$depmode" = hp; then
13945bc899bSmrg  # HP compiler uses -M and no extra arg.
14045bc899bSmrg  gccflag=-M
14145bc899bSmrg  depmode=gcc
14245bc899bSmrgfi
14345bc899bSmrg
14445bc899bSmrgif test "$depmode" = dashXmstdout; then
145c97b1c41Smrg  # This is just like dashmstdout with a different argument.
146c97b1c41Smrg  dashmflag=-xM
147c97b1c41Smrg  depmode=dashmstdout
14845bc899bSmrgfi
14945bc899bSmrg
150b40a6198Smrgcygpath_u="cygpath -u -f -"
151b40a6198Smrgif test "$depmode" = msvcmsys; then
152c97b1c41Smrg  # This is just like msvisualcpp but w/o cygpath translation.
153c97b1c41Smrg  # Just convert the backslash-escaped backslashes to single forward
154c97b1c41Smrg  # slashes to satisfy depend.m4
155c97b1c41Smrg  cygpath_u='sed s,\\\\,/,g'
156c97b1c41Smrg  depmode=msvisualcpp
157b40a6198Smrgfi
158b40a6198Smrg
159b40a6198Smrgif test "$depmode" = msvc7msys; then
160c97b1c41Smrg  # This is just like msvc7 but w/o cygpath translation.
161c97b1c41Smrg  # Just convert the backslash-escaped backslashes to single forward
162c97b1c41Smrg  # slashes to satisfy depend.m4
163c97b1c41Smrg  cygpath_u='sed s,\\\\,/,g'
164c97b1c41Smrg  depmode=msvc7
165c97b1c41Smrgfi
166c97b1c41Smrg
167c97b1c41Smrgif test "$depmode" = xlc; then
168c97b1c41Smrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169c97b1c41Smrg  gccflag=-qmakedep=gcc,-MF
170c97b1c41Smrg  depmode=gcc
171b40a6198Smrgfi
172b40a6198Smrg
17345bc899bSmrgcase "$depmode" in
17445bc899bSmrggcc3)
17545bc899bSmrg## gcc 3 implements dependency tracking that does exactly what
17645bc899bSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
17745bc899bSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
17850f2e948Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
17950f2e948Smrg## the command line argument order; so add the flags where they
18050f2e948Smrg## appear in depend2.am.  Note that the slowdown incurred here
18150f2e948Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
18250f2e948Smrg  for arg
18350f2e948Smrg  do
18450f2e948Smrg    case $arg in
18550f2e948Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
18650f2e948Smrg    *)  set fnord "$@" "$arg" ;;
18750f2e948Smrg    esac
18850f2e948Smrg    shift # fnord
18950f2e948Smrg    shift # $arg
19050f2e948Smrg  done
19150f2e948Smrg  "$@"
19245bc899bSmrg  stat=$?
193c97b1c41Smrg  if test $stat -ne 0; then
19445bc899bSmrg    rm -f "$tmpdepfile"
19545bc899bSmrg    exit $stat
19645bc899bSmrg  fi
19745bc899bSmrg  mv "$tmpdepfile" "$depfile"
19845bc899bSmrg  ;;
19945bc899bSmrg
20045bc899bSmrggcc)
201c97b1c41Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202c97b1c41Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203c97b1c41Smrg## (see the conditional assignment to $gccflag above).
20445bc899bSmrg## There are various ways to get dependency output from gcc.  Here's
20545bc899bSmrg## why we pick this rather obscure method:
20645bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end
20745bc899bSmrg##   up in a subdir.  Having to rename by hand is ugly.
20845bc899bSmrg##   (We might end up doing this anyway to support other compilers.)
20945bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210c97b1c41Smrg##   -MM, not -M (despite what the docs say).  Also, it might not be
211c97b1c41Smrg##   supported by the other compilers which use the 'gcc' depmode.
21245bc899bSmrg## - Using -M directly means running the compiler twice (even worse
21345bc899bSmrg##   than renaming).
21445bc899bSmrg  if test -z "$gccflag"; then
21545bc899bSmrg    gccflag=-MD,
21645bc899bSmrg  fi
21745bc899bSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
21845bc899bSmrg  stat=$?
219c97b1c41Smrg  if test $stat -ne 0; then
22045bc899bSmrg    rm -f "$tmpdepfile"
22145bc899bSmrg    exit $stat
22245bc899bSmrg  fi
22345bc899bSmrg  rm -f "$depfile"
22445bc899bSmrg  echo "$object : \\" > "$depfile"
225c97b1c41Smrg  # The second -e expression handles DOS-style file names with drive
226c97b1c41Smrg  # letters.
22745bc899bSmrg  sed -e 's/^[^:]*: / /' \
22845bc899bSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229c97b1c41Smrg## This next piece of magic avoids the "deleted header file" problem.
23045bc899bSmrg## The problem is that when a header file which appears in a .P file
23145bc899bSmrg## is deleted, the dependency causes make to die (because there is
23245bc899bSmrg## typically no way to rebuild the header).  We avoid this by adding
23345bc899bSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
23445bc899bSmrg## this for us directly.
235c97b1c41Smrg## Some versions of gcc put a space before the ':'.  On the theory
23645bc899bSmrg## that the space means something, we add a space to the output as
237b40a6198Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
238b40a6198Smrg## to the object.  Take care to not repeat it in the output.
23945bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
24045bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
241c97b1c41Smrg  tr ' ' "$nl" < "$tmpdepfile" \
242c97b1c41Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243c97b1c41Smrg    | sed -e 's/$/ :/' >> "$depfile"
24445bc899bSmrg  rm -f "$tmpdepfile"
24545bc899bSmrg  ;;
24645bc899bSmrg
24745bc899bSmrghp)
24845bc899bSmrg  # This case exists only to let depend.m4 do its work.  It works by
24945bc899bSmrg  # looking at the text of this script.  This case will never be run,
25045bc899bSmrg  # since it is checked for above.
25145bc899bSmrg  exit 1
25245bc899bSmrg  ;;
25345bc899bSmrg
25445bc899bSmrgsgi)
25545bc899bSmrg  if test "$libtool" = yes; then
25645bc899bSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
25745bc899bSmrg  else
25845bc899bSmrg    "$@" -MDupdate "$tmpdepfile"
25945bc899bSmrg  fi
26045bc899bSmrg  stat=$?
261c97b1c41Smrg  if test $stat -ne 0; then
26245bc899bSmrg    rm -f "$tmpdepfile"
26345bc899bSmrg    exit $stat
26445bc899bSmrg  fi
26545bc899bSmrg  rm -f "$depfile"
26645bc899bSmrg
26745bc899bSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
26845bc899bSmrg    echo "$object : \\" > "$depfile"
26945bc899bSmrg    # Clip off the initial element (the dependent).  Don't try to be
27045bc899bSmrg    # clever and replace this with sed code, as IRIX sed won't handle
27145bc899bSmrg    # lines with more than a fixed number of characters (4096 in
27245bc899bSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273c97b1c41Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
27445bc899bSmrg    # dependency line.
275c97b1c41Smrg    tr ' ' "$nl" < "$tmpdepfile" \
276c97b1c41Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277c97b1c41Smrg      | tr "$nl" ' ' >> "$depfile"
278b40a6198Smrg    echo >> "$depfile"
27945bc899bSmrg    # The second pass generates a dummy entry for each header file.
280c97b1c41Smrg    tr ' ' "$nl" < "$tmpdepfile" \
281c97b1c41Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282c97b1c41Smrg      >> "$depfile"
28345bc899bSmrg  else
284c97b1c41Smrg    make_dummy_depfile
28545bc899bSmrg  fi
28645bc899bSmrg  rm -f "$tmpdepfile"
28745bc899bSmrg  ;;
28845bc899bSmrg
289c97b1c41Smrgxlc)
290c97b1c41Smrg  # This case exists only to let depend.m4 do its work.  It works by
291c97b1c41Smrg  # looking at the text of this script.  This case will never be run,
292c97b1c41Smrg  # since it is checked for above.
293c97b1c41Smrg  exit 1
294c97b1c41Smrg  ;;
295c97b1c41Smrg
29645bc899bSmrgaix)
29745bc899bSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
29845bc899bSmrg  # in a .u file.  In older versions, this file always lives in the
299c97b1c41Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
30045bc899bSmrg  # start of each line; $object doesn't have directory information.
30145bc899bSmrg  # Version 6 uses the directory in both cases.
302c97b1c41Smrg  set_dir_from "$object"
303c97b1c41Smrg  set_base_from "$object"
30445bc899bSmrg  if test "$libtool" = yes; then
30550f2e948Smrg    tmpdepfile1=$dir$base.u
30650f2e948Smrg    tmpdepfile2=$base.u
30750f2e948Smrg    tmpdepfile3=$dir.libs/$base.u
30845bc899bSmrg    "$@" -Wc,-M
30945bc899bSmrg  else
31050f2e948Smrg    tmpdepfile1=$dir$base.u
31150f2e948Smrg    tmpdepfile2=$dir$base.u
31250f2e948Smrg    tmpdepfile3=$dir$base.u
31345bc899bSmrg    "$@" -M
31445bc899bSmrg  fi
31545bc899bSmrg  stat=$?
316c97b1c41Smrg  if test $stat -ne 0; then
31750f2e948Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
31845bc899bSmrg    exit $stat
31945bc899bSmrg  fi
32045bc899bSmrg
32150f2e948Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
32250f2e948Smrg  do
32350f2e948Smrg    test -f "$tmpdepfile" && break
32450f2e948Smrg  done
325c97b1c41Smrg  aix_post_process_depfile
326c97b1c41Smrg  ;;
327c97b1c41Smrg
328c97b1c41Smrgtcc)
329c97b1c41Smrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330c97b1c41Smrg  # FIXME: That version still under development at the moment of writing.
331c97b1c41Smrg  #        Make that this statement remains true also for stable, released
332c97b1c41Smrg  #        versions.
333c97b1c41Smrg  # It will wrap lines (doesn't matter whether long or short) with a
334c97b1c41Smrg  # trailing '\', as in:
335c97b1c41Smrg  #
336c97b1c41Smrg  #   foo.o : \
337c97b1c41Smrg  #    foo.c \
338c97b1c41Smrg  #    foo.h \
339c97b1c41Smrg  #
340c97b1c41Smrg  # It will put a trailing '\' even on the last line, and will use leading
341c97b1c41Smrg  # spaces rather than leading tabs (at least since its commit 0394caf7
342c97b1c41Smrg  # "Emit spaces for -MD").
343c97b1c41Smrg  "$@" -MD -MF "$tmpdepfile"
344c97b1c41Smrg  stat=$?
345c97b1c41Smrg  if test $stat -ne 0; then
346c97b1c41Smrg    rm -f "$tmpdepfile"
347c97b1c41Smrg    exit $stat
34845bc899bSmrg  fi
349c97b1c41Smrg  rm -f "$depfile"
350c97b1c41Smrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351c97b1c41Smrg  # We have to change lines of the first kind to '$object: \'.
352c97b1c41Smrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353c97b1c41Smrg  # And for each line of the second kind, we have to emit a 'dep.h:'
354c97b1c41Smrg  # dummy dependency, to avoid the deleted-header problem.
355c97b1c41Smrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
35645bc899bSmrg  rm -f "$tmpdepfile"
35745bc899bSmrg  ;;
35845bc899bSmrg
359c97b1c41Smrg## The order of this option in the case statement is important, since the
360c97b1c41Smrg## shell code in configure will try each of these formats in the order
361c97b1c41Smrg## listed in this file.  A plain '-MD' option would be understood by many
362c97b1c41Smrg## compilers, so we must ensure this comes after the gcc and icc options.
363c97b1c41Smrgpgcc)
364c97b1c41Smrg  # Portland's C compiler understands '-MD'.
365c97b1c41Smrg  # Will always output deps to 'file.d' where file is the root name of the
366c97b1c41Smrg  # source file under compilation, even if file resides in a subdirectory.
367c97b1c41Smrg  # The object file name does not affect the name of the '.d' file.
368c97b1c41Smrg  # pgcc 10.2 will output
36945bc899bSmrg  #    foo.o: sub/foo.c sub/foo.h
370c97b1c41Smrg  # and will wrap long lines using '\' :
37145bc899bSmrg  #    foo.o: sub/foo.c ... \
37245bc899bSmrg  #     sub/foo.h ... \
37345bc899bSmrg  #     ...
374c97b1c41Smrg  set_dir_from "$object"
375c97b1c41Smrg  # Use the source, not the object, to determine the base name, since
376c97b1c41Smrg  # that's sadly what pgcc will do too.
377c97b1c41Smrg  set_base_from "$source"
378c97b1c41Smrg  tmpdepfile=$base.d
379c97b1c41Smrg
380c97b1c41Smrg  # For projects that build the same source file twice into different object
381c97b1c41Smrg  # files, the pgcc approach of using the *source* file root name can cause
382c97b1c41Smrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383c97b1c41Smrg  # the same $tmpdepfile.
384c97b1c41Smrg  lockdir=$base.d-lock
385c97b1c41Smrg  trap "
386c97b1c41Smrg    echo '$0: caught signal, cleaning up...' >&2
387c97b1c41Smrg    rmdir '$lockdir'
388c97b1c41Smrg    exit 1
389c97b1c41Smrg  " 1 2 13 15
390c97b1c41Smrg  numtries=100
391c97b1c41Smrg  i=$numtries
392c97b1c41Smrg  while test $i -gt 0; do
393c97b1c41Smrg    # mkdir is a portable test-and-set.
394c97b1c41Smrg    if mkdir "$lockdir" 2>/dev/null; then
395c97b1c41Smrg      # This process acquired the lock.
396c97b1c41Smrg      "$@" -MD
397c97b1c41Smrg      stat=$?
398c97b1c41Smrg      # Release the lock.
399c97b1c41Smrg      rmdir "$lockdir"
400c97b1c41Smrg      break
401c97b1c41Smrg    else
402c97b1c41Smrg      # If the lock is being held by a different process, wait
403c97b1c41Smrg      # until the winning process is done or we timeout.
404c97b1c41Smrg      while test -d "$lockdir" && test $i -gt 0; do
405c97b1c41Smrg        sleep 1
406c97b1c41Smrg        i=`expr $i - 1`
407c97b1c41Smrg      done
408c97b1c41Smrg    fi
409c97b1c41Smrg    i=`expr $i - 1`
410c97b1c41Smrg  done
411c97b1c41Smrg  trap - 1 2 13 15
412c97b1c41Smrg  if test $i -le 0; then
413c97b1c41Smrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
414c97b1c41Smrg    echo "$0: check lockdir '$lockdir'" >&2
415c97b1c41Smrg    exit 1
416c97b1c41Smrg  fi
41745bc899bSmrg
418c97b1c41Smrg  if test $stat -ne 0; then
41945bc899bSmrg    rm -f "$tmpdepfile"
42045bc899bSmrg    exit $stat
42145bc899bSmrg  fi
42245bc899bSmrg  rm -f "$depfile"
42345bc899bSmrg  # Each line is of the form `foo.o: dependent.h',
42445bc899bSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
42545bc899bSmrg  # Do two passes, one to just change these to
42645bc899bSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
42745bc899bSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
42845bc899bSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
42945bc899bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
430c97b1c41Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431c97b1c41Smrg    | sed -e 's/$/ :/' >> "$depfile"
43245bc899bSmrg  rm -f "$tmpdepfile"
43345bc899bSmrg  ;;
43445bc899bSmrg
43550f2e948Smrghp2)
43650f2e948Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
43750f2e948Smrg  # compilers, which have integrated preprocessors.  The correct option
43850f2e948Smrg  # to use with these is +Maked; it writes dependencies to a file named
43950f2e948Smrg  # 'foo.d', which lands next to the object file, wherever that
44050f2e948Smrg  # happens to be.
44150f2e948Smrg  # Much of this is similar to the tru64 case; see comments there.
442c97b1c41Smrg  set_dir_from  "$object"
443c97b1c41Smrg  set_base_from "$object"
44450f2e948Smrg  if test "$libtool" = yes; then
44550f2e948Smrg    tmpdepfile1=$dir$base.d
44650f2e948Smrg    tmpdepfile2=$dir.libs/$base.d
44750f2e948Smrg    "$@" -Wc,+Maked
44850f2e948Smrg  else
44950f2e948Smrg    tmpdepfile1=$dir$base.d
45050f2e948Smrg    tmpdepfile2=$dir$base.d
45150f2e948Smrg    "$@" +Maked
45250f2e948Smrg  fi
45350f2e948Smrg  stat=$?
454c97b1c41Smrg  if test $stat -ne 0; then
45550f2e948Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
45650f2e948Smrg     exit $stat
45750f2e948Smrg  fi
45850f2e948Smrg
45950f2e948Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
46050f2e948Smrg  do
46150f2e948Smrg    test -f "$tmpdepfile" && break
46250f2e948Smrg  done
46350f2e948Smrg  if test -f "$tmpdepfile"; then
464c97b1c41Smrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465c97b1c41Smrg    # Add 'dependent.h:' lines.
466b40a6198Smrg    sed -ne '2,${
467c97b1c41Smrg               s/^ *//
468c97b1c41Smrg               s/ \\*$//
469c97b1c41Smrg               s/$/:/
470c97b1c41Smrg               p
471c97b1c41Smrg             }' "$tmpdepfile" >> "$depfile"
47250f2e948Smrg  else
473c97b1c41Smrg    make_dummy_depfile
47450f2e948Smrg  fi
47550f2e948Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
47650f2e948Smrg  ;;
47750f2e948Smrg
47845bc899bSmrgtru64)
479c97b1c41Smrg  # The Tru64 compiler uses -MD to generate dependencies as a side
480c97b1c41Smrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481c97b1c41Smrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482c97b1c41Smrg  # dependencies in 'foo.d' instead, so we check for that too.
483c97b1c41Smrg  # Subdirectories are respected.
484c97b1c41Smrg  set_dir_from  "$object"
485c97b1c41Smrg  set_base_from "$object"
486c97b1c41Smrg
487c97b1c41Smrg  if test "$libtool" = yes; then
488c97b1c41Smrg    # Libtool generates 2 separate objects for the 2 libraries.  These
489c97b1c41Smrg    # two compilations output dependencies in $dir.libs/$base.o.d and
490c97b1c41Smrg    # in $dir$base.o.d.  We have to check for both files, because
491c97b1c41Smrg    # one of the two compilations can be disabled.  We should prefer
492c97b1c41Smrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493c97b1c41Smrg    # automatically cleaned when .libs/ is deleted, while ignoring
494c97b1c41Smrg    # the former would cause a distcleancheck panic.
495c97b1c41Smrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496c97b1c41Smrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497c97b1c41Smrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498c97b1c41Smrg    "$@" -Wc,-MD
499c97b1c41Smrg  else
500c97b1c41Smrg    tmpdepfile1=$dir$base.d
501c97b1c41Smrg    tmpdepfile2=$dir$base.d
502c97b1c41Smrg    tmpdepfile3=$dir$base.d
503c97b1c41Smrg    "$@" -MD
504c97b1c41Smrg  fi
505c97b1c41Smrg
506c97b1c41Smrg  stat=$?
507c97b1c41Smrg  if test $stat -ne 0; then
508c97b1c41Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509c97b1c41Smrg    exit $stat
510c97b1c41Smrg  fi
511c97b1c41Smrg
512c97b1c41Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513c97b1c41Smrg  do
514c97b1c41Smrg    test -f "$tmpdepfile" && break
515c97b1c41Smrg  done
516c97b1c41Smrg  # Same post-processing that is required for AIX mode.
517c97b1c41Smrg  aix_post_process_depfile
518c97b1c41Smrg  ;;
51945bc899bSmrg
520b40a6198Smrgmsvc7)
521b40a6198Smrg  if test "$libtool" = yes; then
522b40a6198Smrg    showIncludes=-Wc,-showIncludes
523b40a6198Smrg  else
524b40a6198Smrg    showIncludes=-showIncludes
525b40a6198Smrg  fi
526b40a6198Smrg  "$@" $showIncludes > "$tmpdepfile"
527b40a6198Smrg  stat=$?
528b40a6198Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
529c97b1c41Smrg  if test $stat -ne 0; then
530b40a6198Smrg    rm -f "$tmpdepfile"
531b40a6198Smrg    exit $stat
532b40a6198Smrg  fi
533b40a6198Smrg  rm -f "$depfile"
534b40a6198Smrg  echo "$object : \\" > "$depfile"
535b40a6198Smrg  # The first sed program below extracts the file names and escapes
536b40a6198Smrg  # backslashes for cygpath.  The second sed program outputs the file
537b40a6198Smrg  # name when reading, but also accumulates all include files in the
538b40a6198Smrg  # hold buffer in order to output them again at the end.  This only
539b40a6198Smrg  # works with sed implementations that can handle large buffers.
540b40a6198Smrg  sed < "$tmpdepfile" -n '
541b40a6198Smrg/^Note: including file:  *\(.*\)/ {
542b40a6198Smrg  s//\1/
543b40a6198Smrg  s/\\/\\\\/g
544b40a6198Smrg  p
545b40a6198Smrg}' | $cygpath_u | sort -u | sed -n '
546b40a6198Smrgs/ /\\ /g
547c97b1c41Smrgs/\(.*\)/'"$tab"'\1 \\/p
548b40a6198Smrgs/.\(.*\) \\/\1:/
549b40a6198SmrgH
550b40a6198Smrg$ {
551c97b1c41Smrg  s/.*/'"$tab"'/
552b40a6198Smrg  G
553b40a6198Smrg  p
554b40a6198Smrg}' >> "$depfile"
555c97b1c41Smrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556b40a6198Smrg  rm -f "$tmpdepfile"
557b40a6198Smrg  ;;
558b40a6198Smrg
559b40a6198Smrgmsvc7msys)
560b40a6198Smrg  # This case exists only to let depend.m4 do its work.  It works by
561b40a6198Smrg  # looking at the text of this script.  This case will never be run,
562b40a6198Smrg  # since it is checked for above.
563b40a6198Smrg  exit 1
564b40a6198Smrg  ;;
565b40a6198Smrg
56645bc899bSmrg#nosideeffect)
56745bc899bSmrg  # This comment above is used by automake to tell side-effect
56845bc899bSmrg  # dependency tracking mechanisms from slower ones.
56945bc899bSmrg
57045bc899bSmrgdashmstdout)
57145bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
57245bc899bSmrg  # always write the preprocessed file to stdout, regardless of -o.
57345bc899bSmrg  "$@" || exit $?
57445bc899bSmrg
57545bc899bSmrg  # Remove the call to Libtool.
57645bc899bSmrg  if test "$libtool" = yes; then
577b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
57845bc899bSmrg      shift
57945bc899bSmrg    done
58045bc899bSmrg    shift
58145bc899bSmrg  fi
58245bc899bSmrg
583c97b1c41Smrg  # Remove '-o $object'.
58445bc899bSmrg  IFS=" "
58545bc899bSmrg  for arg
58645bc899bSmrg  do
58745bc899bSmrg    case $arg in
58845bc899bSmrg    -o)
58945bc899bSmrg      shift
59045bc899bSmrg      ;;
59145bc899bSmrg    $object)
59245bc899bSmrg      shift
59345bc899bSmrg      ;;
59445bc899bSmrg    *)
59545bc899bSmrg      set fnord "$@" "$arg"
59645bc899bSmrg      shift # fnord
59745bc899bSmrg      shift # $arg
59845bc899bSmrg      ;;
59945bc899bSmrg    esac
60045bc899bSmrg  done
60145bc899bSmrg
60245bc899bSmrg  test -z "$dashmflag" && dashmflag=-M
603c97b1c41Smrg  # Require at least two characters before searching for ':'
60445bc899bSmrg  # in the target name.  This is to cope with DOS-style filenames:
605c97b1c41Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
60645bc899bSmrg  "$@" $dashmflag |
607c97b1c41Smrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
60845bc899bSmrg  rm -f "$depfile"
60945bc899bSmrg  cat < "$tmpdepfile" > "$depfile"
610c97b1c41Smrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611c97b1c41Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
612c97b1c41Smrg  tr ' ' "$nl" < "$tmpdepfile" \
613c97b1c41Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614c97b1c41Smrg    | sed -e 's/$/ :/' >> "$depfile"
61545bc899bSmrg  rm -f "$tmpdepfile"
61645bc899bSmrg  ;;
61745bc899bSmrg
61845bc899bSmrgdashXmstdout)
61945bc899bSmrg  # This case only exists to satisfy depend.m4.  It is never actually
62045bc899bSmrg  # run, as this mode is specially recognized in the preamble.
62145bc899bSmrg  exit 1
62245bc899bSmrg  ;;
62345bc899bSmrg
62445bc899bSmrgmakedepend)
62545bc899bSmrg  "$@" || exit $?
62645bc899bSmrg  # Remove any Libtool call
62745bc899bSmrg  if test "$libtool" = yes; then
628b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
62945bc899bSmrg      shift
63045bc899bSmrg    done
63145bc899bSmrg    shift
63245bc899bSmrg  fi
63345bc899bSmrg  # X makedepend
63445bc899bSmrg  shift
635b40a6198Smrg  cleared=no eat=no
636b40a6198Smrg  for arg
637b40a6198Smrg  do
63845bc899bSmrg    case $cleared in
63945bc899bSmrg    no)
64045bc899bSmrg      set ""; shift
64145bc899bSmrg      cleared=yes ;;
64245bc899bSmrg    esac
643b40a6198Smrg    if test $eat = yes; then
644b40a6198Smrg      eat=no
645b40a6198Smrg      continue
646b40a6198Smrg    fi
64745bc899bSmrg    case "$arg" in
64845bc899bSmrg    -D*|-I*)
64945bc899bSmrg      set fnord "$@" "$arg"; shift ;;
65045bc899bSmrg    # Strip any option that makedepend may not understand.  Remove
65145bc899bSmrg    # the object too, otherwise makedepend will parse it as a source file.
652b40a6198Smrg    -arch)
653b40a6198Smrg      eat=yes ;;
65445bc899bSmrg    -*|$object)
65545bc899bSmrg      ;;
65645bc899bSmrg    *)
65745bc899bSmrg      set fnord "$@" "$arg"; shift ;;
65845bc899bSmrg    esac
65945bc899bSmrg  done
660b40a6198Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
66145bc899bSmrg  touch "$tmpdepfile"
66245bc899bSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
66345bc899bSmrg  rm -f "$depfile"
664b40a6198Smrg  # makedepend may prepend the VPATH from the source file name to the object.
665b40a6198Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
666b40a6198Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667c97b1c41Smrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
668c97b1c41Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
669c97b1c41Smrg  sed '1,2d' "$tmpdepfile" \
670c97b1c41Smrg    | tr ' ' "$nl" \
671c97b1c41Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672c97b1c41Smrg    | sed -e 's/$/ :/' >> "$depfile"
67345bc899bSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
67445bc899bSmrg  ;;
67545bc899bSmrg
67645bc899bSmrgcpp)
67745bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
67845bc899bSmrg  # always write the preprocessed file to stdout.
67945bc899bSmrg  "$@" || exit $?
68045bc899bSmrg
68145bc899bSmrg  # Remove the call to Libtool.
68245bc899bSmrg  if test "$libtool" = yes; then
683b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
68445bc899bSmrg      shift
68545bc899bSmrg    done
68645bc899bSmrg    shift
68745bc899bSmrg  fi
68845bc899bSmrg
689c97b1c41Smrg  # Remove '-o $object'.
69045bc899bSmrg  IFS=" "
69145bc899bSmrg  for arg
69245bc899bSmrg  do
69345bc899bSmrg    case $arg in
69445bc899bSmrg    -o)
69545bc899bSmrg      shift
69645bc899bSmrg      ;;
69745bc899bSmrg    $object)
69845bc899bSmrg      shift
69945bc899bSmrg      ;;
70045bc899bSmrg    *)
70145bc899bSmrg      set fnord "$@" "$arg"
70245bc899bSmrg      shift # fnord
70345bc899bSmrg      shift # $arg
70445bc899bSmrg      ;;
70545bc899bSmrg    esac
70645bc899bSmrg  done
70745bc899bSmrg
708c97b1c41Smrg  "$@" -E \
709c97b1c41Smrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710c97b1c41Smrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711c97b1c41Smrg    | sed '$ s: \\$::' > "$tmpdepfile"
71245bc899bSmrg  rm -f "$depfile"
71345bc899bSmrg  echo "$object : \\" > "$depfile"
71445bc899bSmrg  cat < "$tmpdepfile" >> "$depfile"
71545bc899bSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
71645bc899bSmrg  rm -f "$tmpdepfile"
71745bc899bSmrg  ;;
71845bc899bSmrg
71945bc899bSmrgmsvisualcpp)
72045bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
721b40a6198Smrg  # always write the preprocessed file to stdout.
72245bc899bSmrg  "$@" || exit $?
723b40a6198Smrg
724b40a6198Smrg  # Remove the call to Libtool.
725b40a6198Smrg  if test "$libtool" = yes; then
726b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
727b40a6198Smrg      shift
728b40a6198Smrg    done
729b40a6198Smrg    shift
730b40a6198Smrg  fi
731b40a6198Smrg
73245bc899bSmrg  IFS=" "
73345bc899bSmrg  for arg
73445bc899bSmrg  do
73545bc899bSmrg    case "$arg" in
736b40a6198Smrg    -o)
737b40a6198Smrg      shift
738b40a6198Smrg      ;;
739b40a6198Smrg    $object)
740b40a6198Smrg      shift
741b40a6198Smrg      ;;
74245bc899bSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743c97b1c41Smrg        set fnord "$@"
744c97b1c41Smrg        shift
745c97b1c41Smrg        shift
746c97b1c41Smrg        ;;
74745bc899bSmrg    *)
748c97b1c41Smrg        set fnord "$@" "$arg"
749c97b1c41Smrg        shift
750c97b1c41Smrg        shift
751c97b1c41Smrg        ;;
75245bc899bSmrg    esac
75345bc899bSmrg  done
754b40a6198Smrg  "$@" -E 2>/dev/null |
755b40a6198Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
75645bc899bSmrg  rm -f "$depfile"
75745bc899bSmrg  echo "$object : \\" > "$depfile"
758c97b1c41Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759c97b1c41Smrg  echo "$tab" >> "$depfile"
760b40a6198Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
76145bc899bSmrg  rm -f "$tmpdepfile"
76245bc899bSmrg  ;;
76345bc899bSmrg
764b40a6198Smrgmsvcmsys)
765b40a6198Smrg  # This case exists only to let depend.m4 do its work.  It works by
766b40a6198Smrg  # looking at the text of this script.  This case will never be run,
767b40a6198Smrg  # since it is checked for above.
768b40a6198Smrg  exit 1
769b40a6198Smrg  ;;
770b40a6198Smrg
77145bc899bSmrgnone)
77245bc899bSmrg  exec "$@"
77345bc899bSmrg  ;;
77445bc899bSmrg
77545bc899bSmrg*)
77645bc899bSmrg  echo "Unknown depmode $depmode" 1>&2
77745bc899bSmrg  exit 1
77845bc899bSmrg  ;;
77945bc899bSmrgesac
78045bc899bSmrg
78145bc899bSmrgexit 0
78245bc899bSmrg
78345bc899bSmrg# Local Variables:
78445bc899bSmrg# mode: shell-script
78545bc899bSmrg# sh-indentation: 2
78645bc899bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
78745bc899bSmrg# time-stamp-start: "scriptversion="
78845bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
789f2408745Smrg# time-stamp-time-zone: "UTC0"
790b40a6198Smrg# time-stamp-end: "; # UTC"
79145bc899bSmrg# End:
792