depcomp revision 43ecf206
1fd0c672fSmrg#! /bin/sh
2fd0c672fSmrg# depcomp - compile a program generating dependencies as side-effects
3fd0c672fSmrg
443ecf206Smrgscriptversion=2018-03-07.03; # UTC
5fd0c672fSmrg
643ecf206Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc.
7fd0c672fSmrg
8fd0c672fSmrg# This program is free software; you can redistribute it and/or modify
9fd0c672fSmrg# it under the terms of the GNU General Public License as published by
10fd0c672fSmrg# the Free Software Foundation; either version 2, or (at your option)
11fd0c672fSmrg# any later version.
12fd0c672fSmrg
13fd0c672fSmrg# This program is distributed in the hope that it will be useful,
14fd0c672fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15fd0c672fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16fd0c672fSmrg# GNU General Public License for more details.
17fd0c672fSmrg
18fd0c672fSmrg# You should have received a copy of the GNU General Public License
1943ecf206Smrg# along with this program.  If not, see <https://www.gnu.org/licenses/>.
20fd0c672fSmrg
21fd0c672fSmrg# As a special exception to the GNU General Public License, if you
22fd0c672fSmrg# distribute this file as part of a program that contains a
23fd0c672fSmrg# configuration script generated by Autoconf, you may include it under
24fd0c672fSmrg# the same distribution terms that you use for the rest of that program.
25fd0c672fSmrg
26fd0c672fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27fd0c672fSmrg
28fd0c672fSmrgcase $1 in
29fd0c672fSmrg  '')
30953c684bSmrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31953c684bSmrg    exit 1;
32953c684bSmrg    ;;
33fd0c672fSmrg  -h | --h*)
34fd0c672fSmrg    cat <<\EOF
35fd0c672fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36fd0c672fSmrg
37fd0c672fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38fd0c672fSmrgas side-effects.
39fd0c672fSmrg
40fd0c672fSmrgEnvironment variables:
41fd0c672fSmrg  depmode     Dependency tracking mode.
42953c684bSmrg  source      Source file read by 'PROGRAMS ARGS'.
43953c684bSmrg  object      Object file output by 'PROGRAMS ARGS'.
44fd0c672fSmrg  DEPDIR      directory where to store dependencies.
45fd0c672fSmrg  depfile     Dependency file to output.
46953c684bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
47fd0c672fSmrg  libtool     Whether libtool is used (yes/no).
48fd0c672fSmrg
49fd0c672fSmrgReport bugs to <bug-automake@gnu.org>.
50fd0c672fSmrgEOF
51fd0c672fSmrg    exit $?
52fd0c672fSmrg    ;;
53fd0c672fSmrg  -v | --v*)
54fd0c672fSmrg    echo "depcomp $scriptversion"
55fd0c672fSmrg    exit $?
56fd0c672fSmrg    ;;
57fd0c672fSmrgesac
58fd0c672fSmrg
59953c684bSmrg# Get the directory component of the given path, and save it in the
60953c684bSmrg# global variables '$dir'.  Note that this directory component will
61953c684bSmrg# be either empty or ending with a '/' character.  This is deliberate.
62953c684bSmrgset_dir_from ()
63953c684bSmrg{
64953c684bSmrg  case $1 in
65953c684bSmrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66953c684bSmrg      *) dir=;;
67953c684bSmrg  esac
68953c684bSmrg}
69953c684bSmrg
70953c684bSmrg# Get the suffix-stripped basename of the given path, and save it the
71953c684bSmrg# global variable '$base'.
72953c684bSmrgset_base_from ()
73953c684bSmrg{
74953c684bSmrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75953c684bSmrg}
76953c684bSmrg
77953c684bSmrg# If no dependency file was actually created by the compiler invocation,
78953c684bSmrg# we still have to create a dummy depfile, to avoid errors with the
79953c684bSmrg# Makefile "include basename.Plo" scheme.
80953c684bSmrgmake_dummy_depfile ()
81953c684bSmrg{
82953c684bSmrg  echo "#dummy" > "$depfile"
83953c684bSmrg}
84953c684bSmrg
85953c684bSmrg# Factor out some common post-processing of the generated depfile.
86953c684bSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
87953c684bSmrgaix_post_process_depfile ()
88953c684bSmrg{
89953c684bSmrg  # If the compiler actually managed to produce a dependency file,
90953c684bSmrg  # post-process it.
91953c684bSmrg  if test -f "$tmpdepfile"; then
92953c684bSmrg    # Each line is of the form 'foo.o: dependency.h'.
93953c684bSmrg    # Do two passes, one to just change these to
94953c684bSmrg    #   $object: dependency.h
95953c684bSmrg    # and one to simply output
96953c684bSmrg    #   dependency.h:
97953c684bSmrg    # which is needed to avoid the deleted-header problem.
98953c684bSmrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99953c684bSmrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100953c684bSmrg    } > "$depfile"
101953c684bSmrg    rm -f "$tmpdepfile"
102953c684bSmrg  else
103953c684bSmrg    make_dummy_depfile
104953c684bSmrg  fi
105953c684bSmrg}
106953c684bSmrg
107953c684bSmrg# A tabulation character.
108953c684bSmrgtab='	'
109953c684bSmrg# A newline character.
110953c684bSmrgnl='
111953c684bSmrg'
112953c684bSmrg# Character ranges might be problematic outside the C locale.
113953c684bSmrg# These definitions help.
114953c684bSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115953c684bSmrglower=abcdefghijklmnopqrstuvwxyz
116953c684bSmrgdigits=0123456789
117953c684bSmrgalpha=${upper}${lower}
118953c684bSmrg
119fd0c672fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120fd0c672fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121fd0c672fSmrg  exit 1
122fd0c672fSmrgfi
123fd0c672fSmrg
124fd0c672fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125fd0c672fSmrgdepfile=${depfile-`echo "$object" |
126fd0c672fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127fd0c672fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128fd0c672fSmrg
129fd0c672fSmrgrm -f "$tmpdepfile"
130fd0c672fSmrg
131953c684bSmrg# Avoid interferences from the environment.
132953c684bSmrggccflag= dashmflag=
133953c684bSmrg
134fd0c672fSmrg# Some modes work just like other modes, but use different flags.  We
135fd0c672fSmrg# parameterize here, but still list the modes in the big case below,
136fd0c672fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
137fd0c672fSmrg# here, because this file can only contain one case statement.
138fd0c672fSmrgif test "$depmode" = hp; then
139fd0c672fSmrg  # HP compiler uses -M and no extra arg.
140fd0c672fSmrg  gccflag=-M
141fd0c672fSmrg  depmode=gcc
142fd0c672fSmrgfi
143fd0c672fSmrg
144fd0c672fSmrgif test "$depmode" = dashXmstdout; then
145953c684bSmrg  # This is just like dashmstdout with a different argument.
146953c684bSmrg  dashmflag=-xM
147953c684bSmrg  depmode=dashmstdout
148fd0c672fSmrgfi
149fd0c672fSmrg
15048e69166Smrgcygpath_u="cygpath -u -f -"
15148e69166Smrgif test "$depmode" = msvcmsys; then
152953c684bSmrg  # This is just like msvisualcpp but w/o cygpath translation.
153953c684bSmrg  # Just convert the backslash-escaped backslashes to single forward
154953c684bSmrg  # slashes to satisfy depend.m4
155953c684bSmrg  cygpath_u='sed s,\\\\,/,g'
156953c684bSmrg  depmode=msvisualcpp
157953c684bSmrgfi
158953c684bSmrg
159953c684bSmrgif test "$depmode" = msvc7msys; then
160953c684bSmrg  # This is just like msvc7 but w/o cygpath translation.
161953c684bSmrg  # Just convert the backslash-escaped backslashes to single forward
162953c684bSmrg  # slashes to satisfy depend.m4
163953c684bSmrg  cygpath_u='sed s,\\\\,/,g'
164953c684bSmrg  depmode=msvc7
165953c684bSmrgfi
166953c684bSmrg
167953c684bSmrgif test "$depmode" = xlc; then
168953c684bSmrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169953c684bSmrg  gccflag=-qmakedep=gcc,-MF
170953c684bSmrg  depmode=gcc
17148e69166Smrgfi
17248e69166Smrg
173fd0c672fSmrgcase "$depmode" in
174fd0c672fSmrggcc3)
175fd0c672fSmrg## gcc 3 implements dependency tracking that does exactly what
176fd0c672fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177fd0c672fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
17848e69166Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
17948e69166Smrg## the command line argument order; so add the flags where they
18048e69166Smrg## appear in depend2.am.  Note that the slowdown incurred here
18148e69166Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
18248e69166Smrg  for arg
18348e69166Smrg  do
18448e69166Smrg    case $arg in
18548e69166Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
18648e69166Smrg    *)  set fnord "$@" "$arg" ;;
18748e69166Smrg    esac
18848e69166Smrg    shift # fnord
18948e69166Smrg    shift # $arg
19048e69166Smrg  done
19148e69166Smrg  "$@"
192fd0c672fSmrg  stat=$?
193953c684bSmrg  if test $stat -ne 0; then
194fd0c672fSmrg    rm -f "$tmpdepfile"
195fd0c672fSmrg    exit $stat
196fd0c672fSmrg  fi
197fd0c672fSmrg  mv "$tmpdepfile" "$depfile"
198fd0c672fSmrg  ;;
199fd0c672fSmrg
200fd0c672fSmrggcc)
201953c684bSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202953c684bSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203953c684bSmrg## (see the conditional assignment to $gccflag above).
204fd0c672fSmrg## There are various ways to get dependency output from gcc.  Here's
205fd0c672fSmrg## why we pick this rather obscure method:
206fd0c672fSmrg## - Don't want to use -MD because we'd like the dependencies to end
207fd0c672fSmrg##   up in a subdir.  Having to rename by hand is ugly.
208fd0c672fSmrg##   (We might end up doing this anyway to support other compilers.)
209fd0c672fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210953c684bSmrg##   -MM, not -M (despite what the docs say).  Also, it might not be
211953c684bSmrg##   supported by the other compilers which use the 'gcc' depmode.
212fd0c672fSmrg## - Using -M directly means running the compiler twice (even worse
213fd0c672fSmrg##   than renaming).
214fd0c672fSmrg  if test -z "$gccflag"; then
215fd0c672fSmrg    gccflag=-MD,
216fd0c672fSmrg  fi
217fd0c672fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
218fd0c672fSmrg  stat=$?
219953c684bSmrg  if test $stat -ne 0; then
220fd0c672fSmrg    rm -f "$tmpdepfile"
221fd0c672fSmrg    exit $stat
222fd0c672fSmrg  fi
223fd0c672fSmrg  rm -f "$depfile"
224fd0c672fSmrg  echo "$object : \\" > "$depfile"
225953c684bSmrg  # The second -e expression handles DOS-style file names with drive
226953c684bSmrg  # letters.
227fd0c672fSmrg  sed -e 's/^[^:]*: / /' \
228fd0c672fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229953c684bSmrg## This next piece of magic avoids the "deleted header file" problem.
230fd0c672fSmrg## The problem is that when a header file which appears in a .P file
231fd0c672fSmrg## is deleted, the dependency causes make to die (because there is
232fd0c672fSmrg## typically no way to rebuild the header).  We avoid this by adding
233fd0c672fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
234fd0c672fSmrg## this for us directly.
235953c684bSmrg## Some versions of gcc put a space before the ':'.  On the theory
236fd0c672fSmrg## that the space means something, we add a space to the output as
237953c684bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
238953c684bSmrg## to the object.  Take care to not repeat it in the output.
239fd0c672fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
240fd0c672fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
241953c684bSmrg  tr ' ' "$nl" < "$tmpdepfile" \
242953c684bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243953c684bSmrg    | sed -e 's/$/ :/' >> "$depfile"
244fd0c672fSmrg  rm -f "$tmpdepfile"
245fd0c672fSmrg  ;;
246fd0c672fSmrg
247fd0c672fSmrghp)
248fd0c672fSmrg  # This case exists only to let depend.m4 do its work.  It works by
249fd0c672fSmrg  # looking at the text of this script.  This case will never be run,
250fd0c672fSmrg  # since it is checked for above.
251fd0c672fSmrg  exit 1
252fd0c672fSmrg  ;;
253fd0c672fSmrg
254fd0c672fSmrgsgi)
255fd0c672fSmrg  if test "$libtool" = yes; then
256fd0c672fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
257fd0c672fSmrg  else
258fd0c672fSmrg    "$@" -MDupdate "$tmpdepfile"
259fd0c672fSmrg  fi
260fd0c672fSmrg  stat=$?
261953c684bSmrg  if test $stat -ne 0; then
262fd0c672fSmrg    rm -f "$tmpdepfile"
263fd0c672fSmrg    exit $stat
264fd0c672fSmrg  fi
265fd0c672fSmrg  rm -f "$depfile"
266fd0c672fSmrg
267fd0c672fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268fd0c672fSmrg    echo "$object : \\" > "$depfile"
269fd0c672fSmrg    # Clip off the initial element (the dependent).  Don't try to be
270fd0c672fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
271fd0c672fSmrg    # lines with more than a fixed number of characters (4096 in
272fd0c672fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273953c684bSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
274fd0c672fSmrg    # dependency line.
275953c684bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
276953c684bSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277953c684bSmrg      | tr "$nl" ' ' >> "$depfile"
27848e69166Smrg    echo >> "$depfile"
279fd0c672fSmrg    # The second pass generates a dummy entry for each header file.
280953c684bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
281953c684bSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282953c684bSmrg      >> "$depfile"
283fd0c672fSmrg  else
284953c684bSmrg    make_dummy_depfile
285fd0c672fSmrg  fi
286fd0c672fSmrg  rm -f "$tmpdepfile"
287fd0c672fSmrg  ;;
288fd0c672fSmrg
289953c684bSmrgxlc)
290953c684bSmrg  # This case exists only to let depend.m4 do its work.  It works by
291953c684bSmrg  # looking at the text of this script.  This case will never be run,
292953c684bSmrg  # since it is checked for above.
293953c684bSmrg  exit 1
294953c684bSmrg  ;;
295953c684bSmrg
296fd0c672fSmrgaix)
297fd0c672fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
298fd0c672fSmrg  # in a .u file.  In older versions, this file always lives in the
299953c684bSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
300fd0c672fSmrg  # start of each line; $object doesn't have directory information.
301fd0c672fSmrg  # Version 6 uses the directory in both cases.
302953c684bSmrg  set_dir_from "$object"
303953c684bSmrg  set_base_from "$object"
304fd0c672fSmrg  if test "$libtool" = yes; then
30548e69166Smrg    tmpdepfile1=$dir$base.u
30648e69166Smrg    tmpdepfile2=$base.u
30748e69166Smrg    tmpdepfile3=$dir.libs/$base.u
308fd0c672fSmrg    "$@" -Wc,-M
309fd0c672fSmrg  else
31048e69166Smrg    tmpdepfile1=$dir$base.u
31148e69166Smrg    tmpdepfile2=$dir$base.u
31248e69166Smrg    tmpdepfile3=$dir$base.u
313fd0c672fSmrg    "$@" -M
314fd0c672fSmrg  fi
315fd0c672fSmrg  stat=$?
316953c684bSmrg  if test $stat -ne 0; then
31748e69166Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318fd0c672fSmrg    exit $stat
319fd0c672fSmrg  fi
320fd0c672fSmrg
32148e69166Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
32248e69166Smrg  do
32348e69166Smrg    test -f "$tmpdepfile" && break
32448e69166Smrg  done
325953c684bSmrg  aix_post_process_depfile
326953c684bSmrg  ;;
327953c684bSmrg
328953c684bSmrgtcc)
329953c684bSmrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330953c684bSmrg  # FIXME: That version still under development at the moment of writing.
331953c684bSmrg  #        Make that this statement remains true also for stable, released
332953c684bSmrg  #        versions.
333953c684bSmrg  # It will wrap lines (doesn't matter whether long or short) with a
334953c684bSmrg  # trailing '\', as in:
335953c684bSmrg  #
336953c684bSmrg  #   foo.o : \
337953c684bSmrg  #    foo.c \
338953c684bSmrg  #    foo.h \
339953c684bSmrg  #
340953c684bSmrg  # It will put a trailing '\' even on the last line, and will use leading
341953c684bSmrg  # spaces rather than leading tabs (at least since its commit 0394caf7
342953c684bSmrg  # "Emit spaces for -MD").
343953c684bSmrg  "$@" -MD -MF "$tmpdepfile"
344953c684bSmrg  stat=$?
345953c684bSmrg  if test $stat -ne 0; then
346953c684bSmrg    rm -f "$tmpdepfile"
347953c684bSmrg    exit $stat
348fd0c672fSmrg  fi
349953c684bSmrg  rm -f "$depfile"
350953c684bSmrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351953c684bSmrg  # We have to change lines of the first kind to '$object: \'.
352953c684bSmrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353953c684bSmrg  # And for each line of the second kind, we have to emit a 'dep.h:'
354953c684bSmrg  # dummy dependency, to avoid the deleted-header problem.
355953c684bSmrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356fd0c672fSmrg  rm -f "$tmpdepfile"
357fd0c672fSmrg  ;;
358fd0c672fSmrg
359953c684bSmrg## The order of this option in the case statement is important, since the
360953c684bSmrg## shell code in configure will try each of these formats in the order
361953c684bSmrg## listed in this file.  A plain '-MD' option would be understood by many
362953c684bSmrg## compilers, so we must ensure this comes after the gcc and icc options.
363953c684bSmrgpgcc)
364953c684bSmrg  # Portland's C compiler understands '-MD'.
365953c684bSmrg  # Will always output deps to 'file.d' where file is the root name of the
366953c684bSmrg  # source file under compilation, even if file resides in a subdirectory.
367953c684bSmrg  # The object file name does not affect the name of the '.d' file.
368953c684bSmrg  # pgcc 10.2 will output
369fd0c672fSmrg  #    foo.o: sub/foo.c sub/foo.h
370953c684bSmrg  # and will wrap long lines using '\' :
371fd0c672fSmrg  #    foo.o: sub/foo.c ... \
372fd0c672fSmrg  #     sub/foo.h ... \
373fd0c672fSmrg  #     ...
374953c684bSmrg  set_dir_from "$object"
375953c684bSmrg  # Use the source, not the object, to determine the base name, since
376953c684bSmrg  # that's sadly what pgcc will do too.
377953c684bSmrg  set_base_from "$source"
378953c684bSmrg  tmpdepfile=$base.d
379953c684bSmrg
380953c684bSmrg  # For projects that build the same source file twice into different object
381953c684bSmrg  # files, the pgcc approach of using the *source* file root name can cause
382953c684bSmrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383953c684bSmrg  # the same $tmpdepfile.
384953c684bSmrg  lockdir=$base.d-lock
385953c684bSmrg  trap "
386953c684bSmrg    echo '$0: caught signal, cleaning up...' >&2
387953c684bSmrg    rmdir '$lockdir'
388953c684bSmrg    exit 1
389953c684bSmrg  " 1 2 13 15
390953c684bSmrg  numtries=100
391953c684bSmrg  i=$numtries
392953c684bSmrg  while test $i -gt 0; do
393953c684bSmrg    # mkdir is a portable test-and-set.
394953c684bSmrg    if mkdir "$lockdir" 2>/dev/null; then
395953c684bSmrg      # This process acquired the lock.
396953c684bSmrg      "$@" -MD
397953c684bSmrg      stat=$?
398953c684bSmrg      # Release the lock.
399953c684bSmrg      rmdir "$lockdir"
400953c684bSmrg      break
401953c684bSmrg    else
402953c684bSmrg      # If the lock is being held by a different process, wait
403953c684bSmrg      # until the winning process is done or we timeout.
404953c684bSmrg      while test -d "$lockdir" && test $i -gt 0; do
405953c684bSmrg        sleep 1
406953c684bSmrg        i=`expr $i - 1`
407953c684bSmrg      done
408953c684bSmrg    fi
409953c684bSmrg    i=`expr $i - 1`
410953c684bSmrg  done
411953c684bSmrg  trap - 1 2 13 15
412953c684bSmrg  if test $i -le 0; then
413953c684bSmrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
414953c684bSmrg    echo "$0: check lockdir '$lockdir'" >&2
415953c684bSmrg    exit 1
416953c684bSmrg  fi
417fd0c672fSmrg
418953c684bSmrg  if test $stat -ne 0; then
419fd0c672fSmrg    rm -f "$tmpdepfile"
420fd0c672fSmrg    exit $stat
421fd0c672fSmrg  fi
422fd0c672fSmrg  rm -f "$depfile"
423fd0c672fSmrg  # Each line is of the form `foo.o: dependent.h',
424fd0c672fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425fd0c672fSmrg  # Do two passes, one to just change these to
426fd0c672fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
427fd0c672fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428fd0c672fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
429fd0c672fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
430953c684bSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431953c684bSmrg    | sed -e 's/$/ :/' >> "$depfile"
432fd0c672fSmrg  rm -f "$tmpdepfile"
433fd0c672fSmrg  ;;
434fd0c672fSmrg
43548e69166Smrghp2)
43648e69166Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
43748e69166Smrg  # compilers, which have integrated preprocessors.  The correct option
43848e69166Smrg  # to use with these is +Maked; it writes dependencies to a file named
43948e69166Smrg  # 'foo.d', which lands next to the object file, wherever that
44048e69166Smrg  # happens to be.
44148e69166Smrg  # Much of this is similar to the tru64 case; see comments there.
442953c684bSmrg  set_dir_from  "$object"
443953c684bSmrg  set_base_from "$object"
44448e69166Smrg  if test "$libtool" = yes; then
44548e69166Smrg    tmpdepfile1=$dir$base.d
44648e69166Smrg    tmpdepfile2=$dir.libs/$base.d
44748e69166Smrg    "$@" -Wc,+Maked
44848e69166Smrg  else
44948e69166Smrg    tmpdepfile1=$dir$base.d
45048e69166Smrg    tmpdepfile2=$dir$base.d
45148e69166Smrg    "$@" +Maked
45248e69166Smrg  fi
45348e69166Smrg  stat=$?
454953c684bSmrg  if test $stat -ne 0; then
45548e69166Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
45648e69166Smrg     exit $stat
45748e69166Smrg  fi
45848e69166Smrg
45948e69166Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
46048e69166Smrg  do
46148e69166Smrg    test -f "$tmpdepfile" && break
46248e69166Smrg  done
46348e69166Smrg  if test -f "$tmpdepfile"; then
464953c684bSmrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465953c684bSmrg    # Add 'dependent.h:' lines.
46648e69166Smrg    sed -ne '2,${
467953c684bSmrg               s/^ *//
468953c684bSmrg               s/ \\*$//
469953c684bSmrg               s/$/:/
470953c684bSmrg               p
471953c684bSmrg             }' "$tmpdepfile" >> "$depfile"
47248e69166Smrg  else
473953c684bSmrg    make_dummy_depfile
47448e69166Smrg  fi
47548e69166Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
47648e69166Smrg  ;;
47748e69166Smrg
478fd0c672fSmrgtru64)
479953c684bSmrg  # The Tru64 compiler uses -MD to generate dependencies as a side
480953c684bSmrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481953c684bSmrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482953c684bSmrg  # dependencies in 'foo.d' instead, so we check for that too.
483953c684bSmrg  # Subdirectories are respected.
484953c684bSmrg  set_dir_from  "$object"
485953c684bSmrg  set_base_from "$object"
486953c684bSmrg
487953c684bSmrg  if test "$libtool" = yes; then
488953c684bSmrg    # Libtool generates 2 separate objects for the 2 libraries.  These
489953c684bSmrg    # two compilations output dependencies in $dir.libs/$base.o.d and
490953c684bSmrg    # in $dir$base.o.d.  We have to check for both files, because
491953c684bSmrg    # one of the two compilations can be disabled.  We should prefer
492953c684bSmrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493953c684bSmrg    # automatically cleaned when .libs/ is deleted, while ignoring
494953c684bSmrg    # the former would cause a distcleancheck panic.
495953c684bSmrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496953c684bSmrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497953c684bSmrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498953c684bSmrg    "$@" -Wc,-MD
499953c684bSmrg  else
500953c684bSmrg    tmpdepfile1=$dir$base.d
501953c684bSmrg    tmpdepfile2=$dir$base.d
502953c684bSmrg    tmpdepfile3=$dir$base.d
503953c684bSmrg    "$@" -MD
504953c684bSmrg  fi
505953c684bSmrg
506953c684bSmrg  stat=$?
507953c684bSmrg  if test $stat -ne 0; then
508953c684bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509953c684bSmrg    exit $stat
510953c684bSmrg  fi
511953c684bSmrg
512953c684bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513953c684bSmrg  do
514953c684bSmrg    test -f "$tmpdepfile" && break
515953c684bSmrg  done
516953c684bSmrg  # Same post-processing that is required for AIX mode.
517953c684bSmrg  aix_post_process_depfile
518953c684bSmrg  ;;
519953c684bSmrg
520953c684bSmrgmsvc7)
521953c684bSmrg  if test "$libtool" = yes; then
522953c684bSmrg    showIncludes=-Wc,-showIncludes
523953c684bSmrg  else
524953c684bSmrg    showIncludes=-showIncludes
525953c684bSmrg  fi
526953c684bSmrg  "$@" $showIncludes > "$tmpdepfile"
527953c684bSmrg  stat=$?
528953c684bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
529953c684bSmrg  if test $stat -ne 0; then
530953c684bSmrg    rm -f "$tmpdepfile"
531953c684bSmrg    exit $stat
532953c684bSmrg  fi
533953c684bSmrg  rm -f "$depfile"
534953c684bSmrg  echo "$object : \\" > "$depfile"
535953c684bSmrg  # The first sed program below extracts the file names and escapes
536953c684bSmrg  # backslashes for cygpath.  The second sed program outputs the file
537953c684bSmrg  # name when reading, but also accumulates all include files in the
538953c684bSmrg  # hold buffer in order to output them again at the end.  This only
539953c684bSmrg  # works with sed implementations that can handle large buffers.
540953c684bSmrg  sed < "$tmpdepfile" -n '
541953c684bSmrg/^Note: including file:  *\(.*\)/ {
542953c684bSmrg  s//\1/
543953c684bSmrg  s/\\/\\\\/g
544953c684bSmrg  p
545953c684bSmrg}' | $cygpath_u | sort -u | sed -n '
546953c684bSmrgs/ /\\ /g
547953c684bSmrgs/\(.*\)/'"$tab"'\1 \\/p
548953c684bSmrgs/.\(.*\) \\/\1:/
549953c684bSmrgH
550953c684bSmrg$ {
551953c684bSmrg  s/.*/'"$tab"'/
552953c684bSmrg  G
553953c684bSmrg  p
554953c684bSmrg}' >> "$depfile"
555953c684bSmrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556953c684bSmrg  rm -f "$tmpdepfile"
557953c684bSmrg  ;;
558953c684bSmrg
559953c684bSmrgmsvc7msys)
560953c684bSmrg  # This case exists only to let depend.m4 do its work.  It works by
561953c684bSmrg  # looking at the text of this script.  This case will never be run,
562953c684bSmrg  # since it is checked for above.
563953c684bSmrg  exit 1
564953c684bSmrg  ;;
565fd0c672fSmrg
566fd0c672fSmrg#nosideeffect)
567fd0c672fSmrg  # This comment above is used by automake to tell side-effect
568fd0c672fSmrg  # dependency tracking mechanisms from slower ones.
569fd0c672fSmrg
570fd0c672fSmrgdashmstdout)
571fd0c672fSmrg  # Important note: in order to support this mode, a compiler *must*
572fd0c672fSmrg  # always write the preprocessed file to stdout, regardless of -o.
573fd0c672fSmrg  "$@" || exit $?
574fd0c672fSmrg
575fd0c672fSmrg  # Remove the call to Libtool.
576fd0c672fSmrg  if test "$libtool" = yes; then
57748e69166Smrg    while test "X$1" != 'X--mode=compile'; do
578fd0c672fSmrg      shift
579fd0c672fSmrg    done
580fd0c672fSmrg    shift
581fd0c672fSmrg  fi
582fd0c672fSmrg
583953c684bSmrg  # Remove '-o $object'.
584fd0c672fSmrg  IFS=" "
585fd0c672fSmrg  for arg
586fd0c672fSmrg  do
587fd0c672fSmrg    case $arg in
588fd0c672fSmrg    -o)
589fd0c672fSmrg      shift
590fd0c672fSmrg      ;;
591fd0c672fSmrg    $object)
592fd0c672fSmrg      shift
593fd0c672fSmrg      ;;
594fd0c672fSmrg    *)
595fd0c672fSmrg      set fnord "$@" "$arg"
596fd0c672fSmrg      shift # fnord
597fd0c672fSmrg      shift # $arg
598fd0c672fSmrg      ;;
599fd0c672fSmrg    esac
600fd0c672fSmrg  done
601fd0c672fSmrg
602fd0c672fSmrg  test -z "$dashmflag" && dashmflag=-M
603953c684bSmrg  # Require at least two characters before searching for ':'
604fd0c672fSmrg  # in the target name.  This is to cope with DOS-style filenames:
605953c684bSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606fd0c672fSmrg  "$@" $dashmflag |
607953c684bSmrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608fd0c672fSmrg  rm -f "$depfile"
609fd0c672fSmrg  cat < "$tmpdepfile" > "$depfile"
610953c684bSmrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611953c684bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
612953c684bSmrg  tr ' ' "$nl" < "$tmpdepfile" \
613953c684bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614953c684bSmrg    | sed -e 's/$/ :/' >> "$depfile"
615fd0c672fSmrg  rm -f "$tmpdepfile"
616fd0c672fSmrg  ;;
617fd0c672fSmrg
618fd0c672fSmrgdashXmstdout)
619fd0c672fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
620fd0c672fSmrg  # run, as this mode is specially recognized in the preamble.
621fd0c672fSmrg  exit 1
622fd0c672fSmrg  ;;
623fd0c672fSmrg
624fd0c672fSmrgmakedepend)
625fd0c672fSmrg  "$@" || exit $?
626fd0c672fSmrg  # Remove any Libtool call
627fd0c672fSmrg  if test "$libtool" = yes; then
62848e69166Smrg    while test "X$1" != 'X--mode=compile'; do
629fd0c672fSmrg      shift
630fd0c672fSmrg    done
631fd0c672fSmrg    shift
632fd0c672fSmrg  fi
633fd0c672fSmrg  # X makedepend
634fd0c672fSmrg  shift
63548e69166Smrg  cleared=no eat=no
63648e69166Smrg  for arg
63748e69166Smrg  do
638fd0c672fSmrg    case $cleared in
639fd0c672fSmrg    no)
640fd0c672fSmrg      set ""; shift
641fd0c672fSmrg      cleared=yes ;;
642fd0c672fSmrg    esac
64348e69166Smrg    if test $eat = yes; then
64448e69166Smrg      eat=no
64548e69166Smrg      continue
64648e69166Smrg    fi
647fd0c672fSmrg    case "$arg" in
648fd0c672fSmrg    -D*|-I*)
649fd0c672fSmrg      set fnord "$@" "$arg"; shift ;;
650fd0c672fSmrg    # Strip any option that makedepend may not understand.  Remove
651fd0c672fSmrg    # the object too, otherwise makedepend will parse it as a source file.
65248e69166Smrg    -arch)
65348e69166Smrg      eat=yes ;;
654fd0c672fSmrg    -*|$object)
655fd0c672fSmrg      ;;
656fd0c672fSmrg    *)
657fd0c672fSmrg      set fnord "$@" "$arg"; shift ;;
658fd0c672fSmrg    esac
659fd0c672fSmrg  done
66048e69166Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661fd0c672fSmrg  touch "$tmpdepfile"
662fd0c672fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663fd0c672fSmrg  rm -f "$depfile"
664953c684bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
665953c684bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
666953c684bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667953c684bSmrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
668953c684bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
669953c684bSmrg  sed '1,2d' "$tmpdepfile" \
670953c684bSmrg    | tr ' ' "$nl" \
671953c684bSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672953c684bSmrg    | sed -e 's/$/ :/' >> "$depfile"
673fd0c672fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
674fd0c672fSmrg  ;;
675fd0c672fSmrg
676fd0c672fSmrgcpp)
677fd0c672fSmrg  # Important note: in order to support this mode, a compiler *must*
678fd0c672fSmrg  # always write the preprocessed file to stdout.
679fd0c672fSmrg  "$@" || exit $?
680fd0c672fSmrg
681fd0c672fSmrg  # Remove the call to Libtool.
682fd0c672fSmrg  if test "$libtool" = yes; then
68348e69166Smrg    while test "X$1" != 'X--mode=compile'; do
684fd0c672fSmrg      shift
685fd0c672fSmrg    done
686fd0c672fSmrg    shift
687fd0c672fSmrg  fi
688fd0c672fSmrg
689953c684bSmrg  # Remove '-o $object'.
690fd0c672fSmrg  IFS=" "
691fd0c672fSmrg  for arg
692fd0c672fSmrg  do
693fd0c672fSmrg    case $arg in
694fd0c672fSmrg    -o)
695fd0c672fSmrg      shift
696fd0c672fSmrg      ;;
697fd0c672fSmrg    $object)
698fd0c672fSmrg      shift
699fd0c672fSmrg      ;;
700fd0c672fSmrg    *)
701fd0c672fSmrg      set fnord "$@" "$arg"
702fd0c672fSmrg      shift # fnord
703fd0c672fSmrg      shift # $arg
704fd0c672fSmrg      ;;
705fd0c672fSmrg    esac
706fd0c672fSmrg  done
707fd0c672fSmrg
708953c684bSmrg  "$@" -E \
709953c684bSmrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710953c684bSmrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711953c684bSmrg    | sed '$ s: \\$::' > "$tmpdepfile"
712fd0c672fSmrg  rm -f "$depfile"
713fd0c672fSmrg  echo "$object : \\" > "$depfile"
714fd0c672fSmrg  cat < "$tmpdepfile" >> "$depfile"
715fd0c672fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716fd0c672fSmrg  rm -f "$tmpdepfile"
717fd0c672fSmrg  ;;
718fd0c672fSmrg
719fd0c672fSmrgmsvisualcpp)
720fd0c672fSmrg  # Important note: in order to support this mode, a compiler *must*
72148e69166Smrg  # always write the preprocessed file to stdout.
722fd0c672fSmrg  "$@" || exit $?
72348e69166Smrg
72448e69166Smrg  # Remove the call to Libtool.
72548e69166Smrg  if test "$libtool" = yes; then
72648e69166Smrg    while test "X$1" != 'X--mode=compile'; do
72748e69166Smrg      shift
72848e69166Smrg    done
72948e69166Smrg    shift
73048e69166Smrg  fi
73148e69166Smrg
732fd0c672fSmrg  IFS=" "
733fd0c672fSmrg  for arg
734fd0c672fSmrg  do
735fd0c672fSmrg    case "$arg" in
73648e69166Smrg    -o)
73748e69166Smrg      shift
73848e69166Smrg      ;;
73948e69166Smrg    $object)
74048e69166Smrg      shift
74148e69166Smrg      ;;
742fd0c672fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743953c684bSmrg        set fnord "$@"
744953c684bSmrg        shift
745953c684bSmrg        shift
746953c684bSmrg        ;;
747fd0c672fSmrg    *)
748953c684bSmrg        set fnord "$@" "$arg"
749953c684bSmrg        shift
750953c684bSmrg        shift
751953c684bSmrg        ;;
752fd0c672fSmrg    esac
753fd0c672fSmrg  done
75448e69166Smrg  "$@" -E 2>/dev/null |
75548e69166Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756fd0c672fSmrg  rm -f "$depfile"
757fd0c672fSmrg  echo "$object : \\" > "$depfile"
758953c684bSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759953c684bSmrg  echo "$tab" >> "$depfile"
76048e69166Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761fd0c672fSmrg  rm -f "$tmpdepfile"
762fd0c672fSmrg  ;;
763fd0c672fSmrg
76448e69166Smrgmsvcmsys)
76548e69166Smrg  # This case exists only to let depend.m4 do its work.  It works by
76648e69166Smrg  # looking at the text of this script.  This case will never be run,
76748e69166Smrg  # since it is checked for above.
76848e69166Smrg  exit 1
76948e69166Smrg  ;;
77048e69166Smrg
771fd0c672fSmrgnone)
772fd0c672fSmrg  exec "$@"
773fd0c672fSmrg  ;;
774fd0c672fSmrg
775fd0c672fSmrg*)
776fd0c672fSmrg  echo "Unknown depmode $depmode" 1>&2
777fd0c672fSmrg  exit 1
778fd0c672fSmrg  ;;
779fd0c672fSmrgesac
780fd0c672fSmrg
781fd0c672fSmrgexit 0
782fd0c672fSmrg
783fd0c672fSmrg# Local Variables:
784fd0c672fSmrg# mode: shell-script
785fd0c672fSmrg# sh-indentation: 2
78643ecf206Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
787fd0c672fSmrg# time-stamp-start: "scriptversion="
788fd0c672fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
78943ecf206Smrg# time-stamp-time-zone: "UTC0"
79048e69166Smrg# time-stamp-end: "; # UTC"
791fd0c672fSmrg# End:
792