depcomp revision adb5514a
102be438aSmrg#! /bin/sh
202be438aSmrg# depcomp - compile a program generating dependencies as side-effects
302be438aSmrg
4e2463426Smrgscriptversion=2013-05-30.07; # UTC
502be438aSmrg
6adb5514aSmrg# Copyright (C) 1999-2014 Free Software Foundation, Inc.
702be438aSmrg
802be438aSmrg# This program is free software; you can redistribute it and/or modify
902be438aSmrg# it under the terms of the GNU General Public License as published by
1002be438aSmrg# the Free Software Foundation; either version 2, or (at your option)
1102be438aSmrg# any later version.
1202be438aSmrg
1302be438aSmrg# This program is distributed in the hope that it will be useful,
1402be438aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1502be438aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1602be438aSmrg# GNU General Public License for more details.
1702be438aSmrg
1802be438aSmrg# You should have received a copy of the GNU General Public License
1961dc2d86Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2002be438aSmrg
2102be438aSmrg# As a special exception to the GNU General Public License, if you
2202be438aSmrg# distribute this file as part of a program that contains a
2302be438aSmrg# configuration script generated by Autoconf, you may include it under
2402be438aSmrg# the same distribution terms that you use for the rest of that program.
2502be438aSmrg
2602be438aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2702be438aSmrg
2802be438aSmrgcase $1 in
2902be438aSmrg  '')
30e2463426Smrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31e2463426Smrg    exit 1;
32e2463426Smrg    ;;
3302be438aSmrg  -h | --h*)
3402be438aSmrg    cat <<\EOF
3502be438aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3602be438aSmrg
3702be438aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3802be438aSmrgas side-effects.
3902be438aSmrg
4002be438aSmrgEnvironment variables:
4102be438aSmrg  depmode     Dependency tracking mode.
42e2463426Smrg  source      Source file read by 'PROGRAMS ARGS'.
43e2463426Smrg  object      Object file output by 'PROGRAMS ARGS'.
4402be438aSmrg  DEPDIR      directory where to store dependencies.
4502be438aSmrg  depfile     Dependency file to output.
46909209eeSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
4702be438aSmrg  libtool     Whether libtool is used (yes/no).
4802be438aSmrg
4902be438aSmrgReport bugs to <bug-automake@gnu.org>.
5002be438aSmrgEOF
5102be438aSmrg    exit $?
5202be438aSmrg    ;;
5302be438aSmrg  -v | --v*)
5402be438aSmrg    echo "depcomp $scriptversion"
5502be438aSmrg    exit $?
5602be438aSmrg    ;;
5702be438aSmrgesac
5802be438aSmrg
59e2463426Smrg# Get the directory component of the given path, and save it in the
60e2463426Smrg# global variables '$dir'.  Note that this directory component will
61e2463426Smrg# be either empty or ending with a '/' character.  This is deliberate.
62e2463426Smrgset_dir_from ()
63e2463426Smrg{
64e2463426Smrg  case $1 in
65e2463426Smrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66e2463426Smrg      *) dir=;;
67e2463426Smrg  esac
68e2463426Smrg}
69e2463426Smrg
70e2463426Smrg# Get the suffix-stripped basename of the given path, and save it the
71e2463426Smrg# global variable '$base'.
72e2463426Smrgset_base_from ()
73e2463426Smrg{
74e2463426Smrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75e2463426Smrg}
76e2463426Smrg
77e2463426Smrg# If no dependency file was actually created by the compiler invocation,
78e2463426Smrg# we still have to create a dummy depfile, to avoid errors with the
79e2463426Smrg# Makefile "include basename.Plo" scheme.
80e2463426Smrgmake_dummy_depfile ()
81e2463426Smrg{
82e2463426Smrg  echo "#dummy" > "$depfile"
83e2463426Smrg}
84e2463426Smrg
85e2463426Smrg# Factor out some common post-processing of the generated depfile.
86e2463426Smrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
87e2463426Smrgaix_post_process_depfile ()
88e2463426Smrg{
89e2463426Smrg  # If the compiler actually managed to produce a dependency file,
90e2463426Smrg  # post-process it.
91e2463426Smrg  if test -f "$tmpdepfile"; then
92e2463426Smrg    # Each line is of the form 'foo.o: dependency.h'.
93e2463426Smrg    # Do two passes, one to just change these to
94e2463426Smrg    #   $object: dependency.h
95e2463426Smrg    # and one to simply output
96e2463426Smrg    #   dependency.h:
97e2463426Smrg    # which is needed to avoid the deleted-header problem.
98e2463426Smrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99e2463426Smrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100e2463426Smrg    } > "$depfile"
101e2463426Smrg    rm -f "$tmpdepfile"
102e2463426Smrg  else
103e2463426Smrg    make_dummy_depfile
104e2463426Smrg  fi
105e2463426Smrg}
106e2463426Smrg
107e2463426Smrg# A tabulation character.
108e2463426Smrgtab='	'
109e2463426Smrg# A newline character.
110e2463426Smrgnl='
111e2463426Smrg'
112e2463426Smrg# Character ranges might be problematic outside the C locale.
113e2463426Smrg# These definitions help.
114e2463426Smrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115e2463426Smrglower=abcdefghijklmnopqrstuvwxyz
116e2463426Smrgdigits=0123456789
117e2463426Smrgalpha=${upper}${lower}
118e2463426Smrg
11902be438aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
12002be438aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
12102be438aSmrg  exit 1
12202be438aSmrgfi
12302be438aSmrg
12402be438aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
12502be438aSmrgdepfile=${depfile-`echo "$object" |
12602be438aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
12702be438aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
12802be438aSmrg
12902be438aSmrgrm -f "$tmpdepfile"
13002be438aSmrg
131e2463426Smrg# Avoid interferences from the environment.
132e2463426Smrggccflag= dashmflag=
133e2463426Smrg
13402be438aSmrg# Some modes work just like other modes, but use different flags.  We
13502be438aSmrg# parameterize here, but still list the modes in the big case below,
13602be438aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
13702be438aSmrg# here, because this file can only contain one case statement.
13802be438aSmrgif test "$depmode" = hp; then
13902be438aSmrg  # HP compiler uses -M and no extra arg.
14002be438aSmrg  gccflag=-M
14102be438aSmrg  depmode=gcc
14202be438aSmrgfi
14302be438aSmrg
14402be438aSmrgif test "$depmode" = dashXmstdout; then
145e2463426Smrg  # This is just like dashmstdout with a different argument.
146e2463426Smrg  dashmflag=-xM
147e2463426Smrg  depmode=dashmstdout
14802be438aSmrgfi
14902be438aSmrg
15061dc2d86Smrgcygpath_u="cygpath -u -f -"
15161dc2d86Smrgif test "$depmode" = msvcmsys; then
152e2463426Smrg  # This is just like msvisualcpp but w/o cygpath translation.
153e2463426Smrg  # Just convert the backslash-escaped backslashes to single forward
154e2463426Smrg  # slashes to satisfy depend.m4
155e2463426Smrg  cygpath_u='sed s,\\\\,/,g'
156e2463426Smrg  depmode=msvisualcpp
15761dc2d86Smrgfi
15861dc2d86Smrg
159909209eeSmrgif test "$depmode" = msvc7msys; then
160e2463426Smrg  # This is just like msvc7 but w/o cygpath translation.
161e2463426Smrg  # Just convert the backslash-escaped backslashes to single forward
162e2463426Smrg  # slashes to satisfy depend.m4
163e2463426Smrg  cygpath_u='sed s,\\\\,/,g'
164e2463426Smrg  depmode=msvc7
165e2463426Smrgfi
166e2463426Smrg
167e2463426Smrgif test "$depmode" = xlc; then
168e2463426Smrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169e2463426Smrg  gccflag=-qmakedep=gcc,-MF
170e2463426Smrg  depmode=gcc
171909209eeSmrgfi
172909209eeSmrg
17302be438aSmrgcase "$depmode" in
17402be438aSmrggcc3)
17502be438aSmrg## gcc 3 implements dependency tracking that does exactly what
17602be438aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
17702be438aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
178880ed95aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179880ed95aSmrg## the command line argument order; so add the flags where they
180880ed95aSmrg## appear in depend2.am.  Note that the slowdown incurred here
181880ed95aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182880ed95aSmrg  for arg
183880ed95aSmrg  do
184880ed95aSmrg    case $arg in
185880ed95aSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186880ed95aSmrg    *)  set fnord "$@" "$arg" ;;
187880ed95aSmrg    esac
188880ed95aSmrg    shift # fnord
189880ed95aSmrg    shift # $arg
190880ed95aSmrg  done
191880ed95aSmrg  "$@"
19202be438aSmrg  stat=$?
193e2463426Smrg  if test $stat -ne 0; then
19402be438aSmrg    rm -f "$tmpdepfile"
19502be438aSmrg    exit $stat
19602be438aSmrg  fi
19702be438aSmrg  mv "$tmpdepfile" "$depfile"
19802be438aSmrg  ;;
19902be438aSmrg
20002be438aSmrggcc)
201e2463426Smrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202e2463426Smrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203e2463426Smrg## (see the conditional assignment to $gccflag above).
20402be438aSmrg## There are various ways to get dependency output from gcc.  Here's
20502be438aSmrg## why we pick this rather obscure method:
20602be438aSmrg## - Don't want to use -MD because we'd like the dependencies to end
20702be438aSmrg##   up in a subdir.  Having to rename by hand is ugly.
20802be438aSmrg##   (We might end up doing this anyway to support other compilers.)
20902be438aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210e2463426Smrg##   -MM, not -M (despite what the docs say).  Also, it might not be
211e2463426Smrg##   supported by the other compilers which use the 'gcc' depmode.
21202be438aSmrg## - Using -M directly means running the compiler twice (even worse
21302be438aSmrg##   than renaming).
21402be438aSmrg  if test -z "$gccflag"; then
21502be438aSmrg    gccflag=-MD,
21602be438aSmrg  fi
21702be438aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
21802be438aSmrg  stat=$?
219e2463426Smrg  if test $stat -ne 0; then
22002be438aSmrg    rm -f "$tmpdepfile"
22102be438aSmrg    exit $stat
22202be438aSmrg  fi
22302be438aSmrg  rm -f "$depfile"
22402be438aSmrg  echo "$object : \\" > "$depfile"
225e2463426Smrg  # The second -e expression handles DOS-style file names with drive
226e2463426Smrg  # letters.
22702be438aSmrg  sed -e 's/^[^:]*: / /' \
22802be438aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229e2463426Smrg## This next piece of magic avoids the "deleted header file" problem.
23002be438aSmrg## The problem is that when a header file which appears in a .P file
23102be438aSmrg## is deleted, the dependency causes make to die (because there is
23202be438aSmrg## typically no way to rebuild the header).  We avoid this by adding
23302be438aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
23402be438aSmrg## this for us directly.
235e2463426Smrg## Some versions of gcc put a space before the ':'.  On the theory
23602be438aSmrg## that the space means something, we add a space to the output as
237909209eeSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
238909209eeSmrg## to the object.  Take care to not repeat it in the output.
23902be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
24002be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
241e2463426Smrg  tr ' ' "$nl" < "$tmpdepfile" \
242e2463426Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243e2463426Smrg    | sed -e 's/$/ :/' >> "$depfile"
24402be438aSmrg  rm -f "$tmpdepfile"
24502be438aSmrg  ;;
24602be438aSmrg
24702be438aSmrghp)
24802be438aSmrg  # This case exists only to let depend.m4 do its work.  It works by
24902be438aSmrg  # looking at the text of this script.  This case will never be run,
25002be438aSmrg  # since it is checked for above.
25102be438aSmrg  exit 1
25202be438aSmrg  ;;
25302be438aSmrg
25402be438aSmrgsgi)
25502be438aSmrg  if test "$libtool" = yes; then
25602be438aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
25702be438aSmrg  else
25802be438aSmrg    "$@" -MDupdate "$tmpdepfile"
25902be438aSmrg  fi
26002be438aSmrg  stat=$?
261e2463426Smrg  if test $stat -ne 0; then
26202be438aSmrg    rm -f "$tmpdepfile"
26302be438aSmrg    exit $stat
26402be438aSmrg  fi
26502be438aSmrg  rm -f "$depfile"
26602be438aSmrg
26702be438aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
26802be438aSmrg    echo "$object : \\" > "$depfile"
26902be438aSmrg    # Clip off the initial element (the dependent).  Don't try to be
27002be438aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
27102be438aSmrg    # lines with more than a fixed number of characters (4096 in
27202be438aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273e2463426Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
27402be438aSmrg    # dependency line.
275e2463426Smrg    tr ' ' "$nl" < "$tmpdepfile" \
276e2463426Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277e2463426Smrg      | tr "$nl" ' ' >> "$depfile"
27861dc2d86Smrg    echo >> "$depfile"
27902be438aSmrg    # The second pass generates a dummy entry for each header file.
280e2463426Smrg    tr ' ' "$nl" < "$tmpdepfile" \
281e2463426Smrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282e2463426Smrg      >> "$depfile"
28302be438aSmrg  else
284e2463426Smrg    make_dummy_depfile
28502be438aSmrg  fi
28602be438aSmrg  rm -f "$tmpdepfile"
28702be438aSmrg  ;;
28802be438aSmrg
289e2463426Smrgxlc)
290e2463426Smrg  # This case exists only to let depend.m4 do its work.  It works by
291e2463426Smrg  # looking at the text of this script.  This case will never be run,
292e2463426Smrg  # since it is checked for above.
293e2463426Smrg  exit 1
294e2463426Smrg  ;;
295e2463426Smrg
29602be438aSmrgaix)
29702be438aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
29802be438aSmrg  # in a .u file.  In older versions, this file always lives in the
299e2463426Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
30002be438aSmrg  # start of each line; $object doesn't have directory information.
30102be438aSmrg  # Version 6 uses the directory in both cases.
302e2463426Smrg  set_dir_from "$object"
303e2463426Smrg  set_base_from "$object"
30402be438aSmrg  if test "$libtool" = yes; then
305880ed95aSmrg    tmpdepfile1=$dir$base.u
306880ed95aSmrg    tmpdepfile2=$base.u
307880ed95aSmrg    tmpdepfile3=$dir.libs/$base.u
30802be438aSmrg    "$@" -Wc,-M
30902be438aSmrg  else
310880ed95aSmrg    tmpdepfile1=$dir$base.u
311880ed95aSmrg    tmpdepfile2=$dir$base.u
312880ed95aSmrg    tmpdepfile3=$dir$base.u
31302be438aSmrg    "$@" -M
31402be438aSmrg  fi
31502be438aSmrg  stat=$?
316e2463426Smrg  if test $stat -ne 0; then
317880ed95aSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
31802be438aSmrg    exit $stat
31902be438aSmrg  fi
32002be438aSmrg
321880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322880ed95aSmrg  do
323880ed95aSmrg    test -f "$tmpdepfile" && break
324880ed95aSmrg  done
325e2463426Smrg  aix_post_process_depfile
326e2463426Smrg  ;;
327e2463426Smrg
328e2463426Smrgtcc)
329e2463426Smrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330e2463426Smrg  # FIXME: That version still under development at the moment of writing.
331e2463426Smrg  #        Make that this statement remains true also for stable, released
332e2463426Smrg  #        versions.
333e2463426Smrg  # It will wrap lines (doesn't matter whether long or short) with a
334e2463426Smrg  # trailing '\', as in:
335e2463426Smrg  #
336e2463426Smrg  #   foo.o : \
337e2463426Smrg  #    foo.c \
338e2463426Smrg  #    foo.h \
339e2463426Smrg  #
340e2463426Smrg  # It will put a trailing '\' even on the last line, and will use leading
341e2463426Smrg  # spaces rather than leading tabs (at least since its commit 0394caf7
342e2463426Smrg  # "Emit spaces for -MD").
343e2463426Smrg  "$@" -MD -MF "$tmpdepfile"
344e2463426Smrg  stat=$?
345e2463426Smrg  if test $stat -ne 0; then
346e2463426Smrg    rm -f "$tmpdepfile"
347e2463426Smrg    exit $stat
34802be438aSmrg  fi
349e2463426Smrg  rm -f "$depfile"
350e2463426Smrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351e2463426Smrg  # We have to change lines of the first kind to '$object: \'.
352e2463426Smrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353e2463426Smrg  # And for each line of the second kind, we have to emit a 'dep.h:'
354e2463426Smrg  # dummy dependency, to avoid the deleted-header problem.
355e2463426Smrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
35602be438aSmrg  rm -f "$tmpdepfile"
35702be438aSmrg  ;;
35802be438aSmrg
359e2463426Smrg## The order of this option in the case statement is important, since the
360e2463426Smrg## shell code in configure will try each of these formats in the order
361e2463426Smrg## listed in this file.  A plain '-MD' option would be understood by many
362e2463426Smrg## compilers, so we must ensure this comes after the gcc and icc options.
363e2463426Smrgpgcc)
364e2463426Smrg  # Portland's C compiler understands '-MD'.
365e2463426Smrg  # Will always output deps to 'file.d' where file is the root name of the
366e2463426Smrg  # source file under compilation, even if file resides in a subdirectory.
367e2463426Smrg  # The object file name does not affect the name of the '.d' file.
368e2463426Smrg  # pgcc 10.2 will output
36902be438aSmrg  #    foo.o: sub/foo.c sub/foo.h
370e2463426Smrg  # and will wrap long lines using '\' :
37102be438aSmrg  #    foo.o: sub/foo.c ... \
37202be438aSmrg  #     sub/foo.h ... \
37302be438aSmrg  #     ...
374e2463426Smrg  set_dir_from "$object"
375e2463426Smrg  # Use the source, not the object, to determine the base name, since
376e2463426Smrg  # that's sadly what pgcc will do too.
377e2463426Smrg  set_base_from "$source"
378e2463426Smrg  tmpdepfile=$base.d
379e2463426Smrg
380e2463426Smrg  # For projects that build the same source file twice into different object
381e2463426Smrg  # files, the pgcc approach of using the *source* file root name can cause
382e2463426Smrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383e2463426Smrg  # the same $tmpdepfile.
384e2463426Smrg  lockdir=$base.d-lock
385e2463426Smrg  trap "
386e2463426Smrg    echo '$0: caught signal, cleaning up...' >&2
387e2463426Smrg    rmdir '$lockdir'
388e2463426Smrg    exit 1
389e2463426Smrg  " 1 2 13 15
390e2463426Smrg  numtries=100
391e2463426Smrg  i=$numtries
392e2463426Smrg  while test $i -gt 0; do
393e2463426Smrg    # mkdir is a portable test-and-set.
394e2463426Smrg    if mkdir "$lockdir" 2>/dev/null; then
395e2463426Smrg      # This process acquired the lock.
396e2463426Smrg      "$@" -MD
397e2463426Smrg      stat=$?
398e2463426Smrg      # Release the lock.
399e2463426Smrg      rmdir "$lockdir"
400e2463426Smrg      break
401e2463426Smrg    else
402e2463426Smrg      # If the lock is being held by a different process, wait
403e2463426Smrg      # until the winning process is done or we timeout.
404e2463426Smrg      while test -d "$lockdir" && test $i -gt 0; do
405e2463426Smrg        sleep 1
406e2463426Smrg        i=`expr $i - 1`
407e2463426Smrg      done
408e2463426Smrg    fi
409e2463426Smrg    i=`expr $i - 1`
410e2463426Smrg  done
411e2463426Smrg  trap - 1 2 13 15
412e2463426Smrg  if test $i -le 0; then
413e2463426Smrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
414e2463426Smrg    echo "$0: check lockdir '$lockdir'" >&2
415e2463426Smrg    exit 1
416e2463426Smrg  fi
41702be438aSmrg
418e2463426Smrg  if test $stat -ne 0; then
41902be438aSmrg    rm -f "$tmpdepfile"
42002be438aSmrg    exit $stat
42102be438aSmrg  fi
42202be438aSmrg  rm -f "$depfile"
42302be438aSmrg  # Each line is of the form `foo.o: dependent.h',
42402be438aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
42502be438aSmrg  # Do two passes, one to just change these to
42602be438aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
42702be438aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
42802be438aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
42902be438aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
430e2463426Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431e2463426Smrg    | sed -e 's/$/ :/' >> "$depfile"
43202be438aSmrg  rm -f "$tmpdepfile"
43302be438aSmrg  ;;
43402be438aSmrg
435880ed95aSmrghp2)
436880ed95aSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437880ed95aSmrg  # compilers, which have integrated preprocessors.  The correct option
438880ed95aSmrg  # to use with these is +Maked; it writes dependencies to a file named
439880ed95aSmrg  # 'foo.d', which lands next to the object file, wherever that
440880ed95aSmrg  # happens to be.
441880ed95aSmrg  # Much of this is similar to the tru64 case; see comments there.
442e2463426Smrg  set_dir_from  "$object"
443e2463426Smrg  set_base_from "$object"
444880ed95aSmrg  if test "$libtool" = yes; then
445880ed95aSmrg    tmpdepfile1=$dir$base.d
446880ed95aSmrg    tmpdepfile2=$dir.libs/$base.d
447880ed95aSmrg    "$@" -Wc,+Maked
448880ed95aSmrg  else
449880ed95aSmrg    tmpdepfile1=$dir$base.d
450880ed95aSmrg    tmpdepfile2=$dir$base.d
451880ed95aSmrg    "$@" +Maked
452880ed95aSmrg  fi
453880ed95aSmrg  stat=$?
454e2463426Smrg  if test $stat -ne 0; then
455880ed95aSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
456880ed95aSmrg     exit $stat
457880ed95aSmrg  fi
458880ed95aSmrg
459880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460880ed95aSmrg  do
461880ed95aSmrg    test -f "$tmpdepfile" && break
462880ed95aSmrg  done
463880ed95aSmrg  if test -f "$tmpdepfile"; then
464e2463426Smrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465e2463426Smrg    # Add 'dependent.h:' lines.
46661dc2d86Smrg    sed -ne '2,${
467e2463426Smrg               s/^ *//
468e2463426Smrg               s/ \\*$//
469e2463426Smrg               s/$/:/
470e2463426Smrg               p
471e2463426Smrg             }' "$tmpdepfile" >> "$depfile"
472880ed95aSmrg  else
473e2463426Smrg    make_dummy_depfile
474880ed95aSmrg  fi
475880ed95aSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
476880ed95aSmrg  ;;
477880ed95aSmrg
47802be438aSmrgtru64)
479e2463426Smrg  # The Tru64 compiler uses -MD to generate dependencies as a side
480e2463426Smrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481e2463426Smrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482e2463426Smrg  # dependencies in 'foo.d' instead, so we check for that too.
483e2463426Smrg  # Subdirectories are respected.
484e2463426Smrg  set_dir_from  "$object"
485e2463426Smrg  set_base_from "$object"
486e2463426Smrg
487e2463426Smrg  if test "$libtool" = yes; then
488e2463426Smrg    # Libtool generates 2 separate objects for the 2 libraries.  These
489e2463426Smrg    # two compilations output dependencies in $dir.libs/$base.o.d and
490e2463426Smrg    # in $dir$base.o.d.  We have to check for both files, because
491e2463426Smrg    # one of the two compilations can be disabled.  We should prefer
492e2463426Smrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493e2463426Smrg    # automatically cleaned when .libs/ is deleted, while ignoring
494e2463426Smrg    # the former would cause a distcleancheck panic.
495e2463426Smrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496e2463426Smrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497e2463426Smrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498e2463426Smrg    "$@" -Wc,-MD
499e2463426Smrg  else
500e2463426Smrg    tmpdepfile1=$dir$base.d
501e2463426Smrg    tmpdepfile2=$dir$base.d
502e2463426Smrg    tmpdepfile3=$dir$base.d
503e2463426Smrg    "$@" -MD
504e2463426Smrg  fi
505e2463426Smrg
506e2463426Smrg  stat=$?
507e2463426Smrg  if test $stat -ne 0; then
508e2463426Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509e2463426Smrg    exit $stat
510e2463426Smrg  fi
511e2463426Smrg
512e2463426Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513e2463426Smrg  do
514e2463426Smrg    test -f "$tmpdepfile" && break
515e2463426Smrg  done
516e2463426Smrg  # Same post-processing that is required for AIX mode.
517e2463426Smrg  aix_post_process_depfile
518e2463426Smrg  ;;
51902be438aSmrg
520909209eeSmrgmsvc7)
521909209eeSmrg  if test "$libtool" = yes; then
522909209eeSmrg    showIncludes=-Wc,-showIncludes
523909209eeSmrg  else
524909209eeSmrg    showIncludes=-showIncludes
525909209eeSmrg  fi
526909209eeSmrg  "$@" $showIncludes > "$tmpdepfile"
527909209eeSmrg  stat=$?
528909209eeSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
529e2463426Smrg  if test $stat -ne 0; then
530909209eeSmrg    rm -f "$tmpdepfile"
531909209eeSmrg    exit $stat
532909209eeSmrg  fi
533909209eeSmrg  rm -f "$depfile"
534909209eeSmrg  echo "$object : \\" > "$depfile"
535909209eeSmrg  # The first sed program below extracts the file names and escapes
536909209eeSmrg  # backslashes for cygpath.  The second sed program outputs the file
537909209eeSmrg  # name when reading, but also accumulates all include files in the
538909209eeSmrg  # hold buffer in order to output them again at the end.  This only
539909209eeSmrg  # works with sed implementations that can handle large buffers.
540909209eeSmrg  sed < "$tmpdepfile" -n '
541909209eeSmrg/^Note: including file:  *\(.*\)/ {
542909209eeSmrg  s//\1/
543909209eeSmrg  s/\\/\\\\/g
544909209eeSmrg  p
545909209eeSmrg}' | $cygpath_u | sort -u | sed -n '
546909209eeSmrgs/ /\\ /g
547e2463426Smrgs/\(.*\)/'"$tab"'\1 \\/p
548909209eeSmrgs/.\(.*\) \\/\1:/
549909209eeSmrgH
550909209eeSmrg$ {
551e2463426Smrg  s/.*/'"$tab"'/
552909209eeSmrg  G
553909209eeSmrg  p
554909209eeSmrg}' >> "$depfile"
555e2463426Smrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556909209eeSmrg  rm -f "$tmpdepfile"
557909209eeSmrg  ;;
558909209eeSmrg
559909209eeSmrgmsvc7msys)
560909209eeSmrg  # This case exists only to let depend.m4 do its work.  It works by
561909209eeSmrg  # looking at the text of this script.  This case will never be run,
562909209eeSmrg  # since it is checked for above.
563909209eeSmrg  exit 1
564909209eeSmrg  ;;
565909209eeSmrg
56602be438aSmrg#nosideeffect)
56702be438aSmrg  # This comment above is used by automake to tell side-effect
56802be438aSmrg  # dependency tracking mechanisms from slower ones.
56902be438aSmrg
57002be438aSmrgdashmstdout)
57102be438aSmrg  # Important note: in order to support this mode, a compiler *must*
57202be438aSmrg  # always write the preprocessed file to stdout, regardless of -o.
57302be438aSmrg  "$@" || exit $?
57402be438aSmrg
57502be438aSmrg  # Remove the call to Libtool.
57602be438aSmrg  if test "$libtool" = yes; then
57761dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
57802be438aSmrg      shift
57902be438aSmrg    done
58002be438aSmrg    shift
58102be438aSmrg  fi
58202be438aSmrg
583e2463426Smrg  # Remove '-o $object'.
58402be438aSmrg  IFS=" "
58502be438aSmrg  for arg
58602be438aSmrg  do
58702be438aSmrg    case $arg in
58802be438aSmrg    -o)
58902be438aSmrg      shift
59002be438aSmrg      ;;
59102be438aSmrg    $object)
59202be438aSmrg      shift
59302be438aSmrg      ;;
59402be438aSmrg    *)
59502be438aSmrg      set fnord "$@" "$arg"
59602be438aSmrg      shift # fnord
59702be438aSmrg      shift # $arg
59802be438aSmrg      ;;
59902be438aSmrg    esac
60002be438aSmrg  done
60102be438aSmrg
60202be438aSmrg  test -z "$dashmflag" && dashmflag=-M
603e2463426Smrg  # Require at least two characters before searching for ':'
60402be438aSmrg  # in the target name.  This is to cope with DOS-style filenames:
605e2463426Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
60602be438aSmrg  "$@" $dashmflag |
607e2463426Smrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
60802be438aSmrg  rm -f "$depfile"
60902be438aSmrg  cat < "$tmpdepfile" > "$depfile"
610e2463426Smrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611e2463426Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
612e2463426Smrg  tr ' ' "$nl" < "$tmpdepfile" \
613e2463426Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614e2463426Smrg    | sed -e 's/$/ :/' >> "$depfile"
61502be438aSmrg  rm -f "$tmpdepfile"
61602be438aSmrg  ;;
61702be438aSmrg
61802be438aSmrgdashXmstdout)
61902be438aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
62002be438aSmrg  # run, as this mode is specially recognized in the preamble.
62102be438aSmrg  exit 1
62202be438aSmrg  ;;
62302be438aSmrg
62402be438aSmrgmakedepend)
62502be438aSmrg  "$@" || exit $?
62602be438aSmrg  # Remove any Libtool call
62702be438aSmrg  if test "$libtool" = yes; then
62861dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
62902be438aSmrg      shift
63002be438aSmrg    done
63102be438aSmrg    shift
63202be438aSmrg  fi
63302be438aSmrg  # X makedepend
63402be438aSmrg  shift
63561dc2d86Smrg  cleared=no eat=no
63661dc2d86Smrg  for arg
63761dc2d86Smrg  do
63802be438aSmrg    case $cleared in
63902be438aSmrg    no)
64002be438aSmrg      set ""; shift
64102be438aSmrg      cleared=yes ;;
64202be438aSmrg    esac
64361dc2d86Smrg    if test $eat = yes; then
64461dc2d86Smrg      eat=no
64561dc2d86Smrg      continue
64661dc2d86Smrg    fi
64702be438aSmrg    case "$arg" in
64802be438aSmrg    -D*|-I*)
64902be438aSmrg      set fnord "$@" "$arg"; shift ;;
65002be438aSmrg    # Strip any option that makedepend may not understand.  Remove
65102be438aSmrg    # the object too, otherwise makedepend will parse it as a source file.
65261dc2d86Smrg    -arch)
65361dc2d86Smrg      eat=yes ;;
65402be438aSmrg    -*|$object)
65502be438aSmrg      ;;
65602be438aSmrg    *)
65702be438aSmrg      set fnord "$@" "$arg"; shift ;;
65802be438aSmrg    esac
65902be438aSmrg  done
66061dc2d86Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
66102be438aSmrg  touch "$tmpdepfile"
66202be438aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
66302be438aSmrg  rm -f "$depfile"
664909209eeSmrg  # makedepend may prepend the VPATH from the source file name to the object.
665909209eeSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
666909209eeSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667e2463426Smrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
668e2463426Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
669e2463426Smrg  sed '1,2d' "$tmpdepfile" \
670e2463426Smrg    | tr ' ' "$nl" \
671e2463426Smrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672e2463426Smrg    | sed -e 's/$/ :/' >> "$depfile"
67302be438aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
67402be438aSmrg  ;;
67502be438aSmrg
67602be438aSmrgcpp)
67702be438aSmrg  # Important note: in order to support this mode, a compiler *must*
67802be438aSmrg  # always write the preprocessed file to stdout.
67902be438aSmrg  "$@" || exit $?
68002be438aSmrg
68102be438aSmrg  # Remove the call to Libtool.
68202be438aSmrg  if test "$libtool" = yes; then
68361dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
68402be438aSmrg      shift
68502be438aSmrg    done
68602be438aSmrg    shift
68702be438aSmrg  fi
68802be438aSmrg
689e2463426Smrg  # Remove '-o $object'.
69002be438aSmrg  IFS=" "
69102be438aSmrg  for arg
69202be438aSmrg  do
69302be438aSmrg    case $arg in
69402be438aSmrg    -o)
69502be438aSmrg      shift
69602be438aSmrg      ;;
69702be438aSmrg    $object)
69802be438aSmrg      shift
69902be438aSmrg      ;;
70002be438aSmrg    *)
70102be438aSmrg      set fnord "$@" "$arg"
70202be438aSmrg      shift # fnord
70302be438aSmrg      shift # $arg
70402be438aSmrg      ;;
70502be438aSmrg    esac
70602be438aSmrg  done
70702be438aSmrg
708e2463426Smrg  "$@" -E \
709e2463426Smrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710e2463426Smrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711e2463426Smrg    | sed '$ s: \\$::' > "$tmpdepfile"
71202be438aSmrg  rm -f "$depfile"
71302be438aSmrg  echo "$object : \\" > "$depfile"
71402be438aSmrg  cat < "$tmpdepfile" >> "$depfile"
71502be438aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
71602be438aSmrg  rm -f "$tmpdepfile"
71702be438aSmrg  ;;
71802be438aSmrg
71902be438aSmrgmsvisualcpp)
72002be438aSmrg  # Important note: in order to support this mode, a compiler *must*
72161dc2d86Smrg  # always write the preprocessed file to stdout.
72202be438aSmrg  "$@" || exit $?
72361dc2d86Smrg
72461dc2d86Smrg  # Remove the call to Libtool.
72561dc2d86Smrg  if test "$libtool" = yes; then
72661dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
72761dc2d86Smrg      shift
72861dc2d86Smrg    done
72961dc2d86Smrg    shift
73061dc2d86Smrg  fi
73161dc2d86Smrg
73202be438aSmrg  IFS=" "
73302be438aSmrg  for arg
73402be438aSmrg  do
73502be438aSmrg    case "$arg" in
73661dc2d86Smrg    -o)
73761dc2d86Smrg      shift
73861dc2d86Smrg      ;;
73961dc2d86Smrg    $object)
74061dc2d86Smrg      shift
74161dc2d86Smrg      ;;
74202be438aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743e2463426Smrg        set fnord "$@"
744e2463426Smrg        shift
745e2463426Smrg        shift
746e2463426Smrg        ;;
74702be438aSmrg    *)
748e2463426Smrg        set fnord "$@" "$arg"
749e2463426Smrg        shift
750e2463426Smrg        shift
751e2463426Smrg        ;;
75202be438aSmrg    esac
75302be438aSmrg  done
75461dc2d86Smrg  "$@" -E 2>/dev/null |
75561dc2d86Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
75602be438aSmrg  rm -f "$depfile"
75702be438aSmrg  echo "$object : \\" > "$depfile"
758e2463426Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759e2463426Smrg  echo "$tab" >> "$depfile"
76061dc2d86Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
76102be438aSmrg  rm -f "$tmpdepfile"
76202be438aSmrg  ;;
76302be438aSmrg
76461dc2d86Smrgmsvcmsys)
76561dc2d86Smrg  # This case exists only to let depend.m4 do its work.  It works by
76661dc2d86Smrg  # looking at the text of this script.  This case will never be run,
76761dc2d86Smrg  # since it is checked for above.
76861dc2d86Smrg  exit 1
76961dc2d86Smrg  ;;
77061dc2d86Smrg
77102be438aSmrgnone)
77202be438aSmrg  exec "$@"
77302be438aSmrg  ;;
77402be438aSmrg
77502be438aSmrg*)
77602be438aSmrg  echo "Unknown depmode $depmode" 1>&2
77702be438aSmrg  exit 1
77802be438aSmrg  ;;
77902be438aSmrgesac
78002be438aSmrg
78102be438aSmrgexit 0
78202be438aSmrg
78302be438aSmrg# Local Variables:
78402be438aSmrg# mode: shell-script
78502be438aSmrg# sh-indentation: 2
78602be438aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
78702be438aSmrg# time-stamp-start: "scriptversion="
78802be438aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
78961dc2d86Smrg# time-stamp-time-zone: "UTC"
79061dc2d86Smrg# time-stamp-end: "; # UTC"
79102be438aSmrg# End:
792