xref: /freebsd/contrib/sqlite3/depcomp (revision 70b56f4b92877578741e5aba2a72d6088cb13ecb)
1937a2000SPeter Wemm#! /bin/sh
2937a2000SPeter Wemm# depcomp - compile a program generating dependencies as side-effects
3937a2000SPeter Wemm
4*70b56f4bSCy Schubertscriptversion=2018-03-07.03; # UTC
5937a2000SPeter Wemm
6*70b56f4bSCy Schubert# Copyright (C) 1999-2021 Free Software Foundation, Inc.
7937a2000SPeter Wemm
8937a2000SPeter Wemm# This program is free software; you can redistribute it and/or modify
9937a2000SPeter Wemm# it under the terms of the GNU General Public License as published by
10937a2000SPeter Wemm# the Free Software Foundation; either version 2, or (at your option)
11937a2000SPeter Wemm# any later version.
12937a2000SPeter Wemm
13937a2000SPeter Wemm# This program is distributed in the hope that it will be useful,
14937a2000SPeter Wemm# but WITHOUT ANY WARRANTY; without even the implied warranty of
15937a2000SPeter Wemm# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16937a2000SPeter Wemm# GNU General Public License for more details.
17937a2000SPeter Wemm
18937a2000SPeter Wemm# You should have received a copy of the GNU General Public License
19*70b56f4bSCy Schubert# along with this program.  If not, see <https://www.gnu.org/licenses/>.
20937a2000SPeter Wemm
21937a2000SPeter Wemm# As a special exception to the GNU General Public License, if you
22937a2000SPeter Wemm# distribute this file as part of a program that contains a
23937a2000SPeter Wemm# configuration script generated by Autoconf, you may include it under
24937a2000SPeter Wemm# the same distribution terms that you use for the rest of that program.
25937a2000SPeter Wemm
26937a2000SPeter Wemm# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27937a2000SPeter Wemm
28937a2000SPeter Wemmcase $1 in
29937a2000SPeter Wemm  '')
308bc5c7c0SPeter Wemm    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31937a2000SPeter Wemm    exit 1;
32937a2000SPeter Wemm    ;;
33937a2000SPeter Wemm  -h | --h*)
34937a2000SPeter Wemm    cat <<\EOF
35937a2000SPeter WemmUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36937a2000SPeter Wemm
37937a2000SPeter WemmRun PROGRAMS ARGS to compile a file, generating dependencies
38937a2000SPeter Wemmas side-effects.
39937a2000SPeter Wemm
40937a2000SPeter WemmEnvironment variables:
41937a2000SPeter Wemm  depmode     Dependency tracking mode.
428bc5c7c0SPeter Wemm  source      Source file read by 'PROGRAMS ARGS'.
438bc5c7c0SPeter Wemm  object      Object file output by 'PROGRAMS ARGS'.
44937a2000SPeter Wemm  DEPDIR      directory where to store dependencies.
45937a2000SPeter Wemm  depfile     Dependency file to output.
468bc5c7c0SPeter Wemm  tmpdepfile  Temporary file to use when outputting dependencies.
47937a2000SPeter Wemm  libtool     Whether libtool is used (yes/no).
48937a2000SPeter Wemm
49937a2000SPeter WemmReport bugs to <bug-automake@gnu.org>.
50937a2000SPeter WemmEOF
51937a2000SPeter Wemm    exit $?
52937a2000SPeter Wemm    ;;
53937a2000SPeter Wemm  -v | --v*)
54937a2000SPeter Wemm    echo "depcomp $scriptversion"
55937a2000SPeter Wemm    exit $?
56937a2000SPeter Wemm    ;;
57937a2000SPeter Wemmesac
58937a2000SPeter Wemm
59d915215eSBaptiste Daroussin# Get the directory component of the given path, and save it in the
60d915215eSBaptiste Daroussin# global variables '$dir'.  Note that this directory component will
61d915215eSBaptiste Daroussin# be either empty or ending with a '/' character.  This is deliberate.
62d915215eSBaptiste Daroussinset_dir_from ()
63d915215eSBaptiste Daroussin{
64d915215eSBaptiste Daroussin  case $1 in
65d915215eSBaptiste Daroussin    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66d915215eSBaptiste Daroussin      *) dir=;;
67d915215eSBaptiste Daroussin  esac
68d915215eSBaptiste Daroussin}
69d915215eSBaptiste Daroussin
70d915215eSBaptiste Daroussin# Get the suffix-stripped basename of the given path, and save it the
71d915215eSBaptiste Daroussin# global variable '$base'.
72d915215eSBaptiste Daroussinset_base_from ()
73d915215eSBaptiste Daroussin{
74d915215eSBaptiste Daroussin  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75d915215eSBaptiste Daroussin}
76d915215eSBaptiste Daroussin
77d915215eSBaptiste Daroussin# If no dependency file was actually created by the compiler invocation,
78d915215eSBaptiste Daroussin# we still have to create a dummy depfile, to avoid errors with the
79d915215eSBaptiste Daroussin# Makefile "include basename.Plo" scheme.
80d915215eSBaptiste Daroussinmake_dummy_depfile ()
81d915215eSBaptiste Daroussin{
82d915215eSBaptiste Daroussin  echo "#dummy" > "$depfile"
83d915215eSBaptiste Daroussin}
84d915215eSBaptiste Daroussin
85d915215eSBaptiste Daroussin# Factor out some common post-processing of the generated depfile.
86d915215eSBaptiste Daroussin# Requires the auxiliary global variable '$tmpdepfile' to be set.
87d915215eSBaptiste Daroussinaix_post_process_depfile ()
88d915215eSBaptiste Daroussin{
89d915215eSBaptiste Daroussin  # If the compiler actually managed to produce a dependency file,
90d915215eSBaptiste Daroussin  # post-process it.
91d915215eSBaptiste Daroussin  if test -f "$tmpdepfile"; then
92d915215eSBaptiste Daroussin    # Each line is of the form 'foo.o: dependency.h'.
93d915215eSBaptiste Daroussin    # Do two passes, one to just change these to
94d915215eSBaptiste Daroussin    #   $object: dependency.h
95d915215eSBaptiste Daroussin    # and one to simply output
96d915215eSBaptiste Daroussin    #   dependency.h:
97d915215eSBaptiste Daroussin    # which is needed to avoid the deleted-header problem.
98d915215eSBaptiste Daroussin    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99d915215eSBaptiste Daroussin      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100d915215eSBaptiste Daroussin    } > "$depfile"
101d915215eSBaptiste Daroussin    rm -f "$tmpdepfile"
102d915215eSBaptiste Daroussin  else
103d915215eSBaptiste Daroussin    make_dummy_depfile
104d915215eSBaptiste Daroussin  fi
105d915215eSBaptiste Daroussin}
106d915215eSBaptiste Daroussin
1078bc5c7c0SPeter Wemm# A tabulation character.
1088bc5c7c0SPeter Wemmtab='	'
1098bc5c7c0SPeter Wemm# A newline character.
1108bc5c7c0SPeter Wemmnl='
1118bc5c7c0SPeter Wemm'
112d915215eSBaptiste Daroussin# Character ranges might be problematic outside the C locale.
113d915215eSBaptiste Daroussin# These definitions help.
114d915215eSBaptiste Daroussinupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115d915215eSBaptiste Daroussinlower=abcdefghijklmnopqrstuvwxyz
116d915215eSBaptiste Daroussindigits=0123456789
117d915215eSBaptiste Daroussinalpha=${upper}${lower}
1188bc5c7c0SPeter Wemm
119937a2000SPeter Wemmif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120937a2000SPeter Wemm  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121937a2000SPeter Wemm  exit 1
122937a2000SPeter Wemmfi
123937a2000SPeter Wemm
124937a2000SPeter Wemm# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125937a2000SPeter Wemmdepfile=${depfile-`echo "$object" |
126937a2000SPeter Wemm  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127937a2000SPeter Wemmtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128937a2000SPeter Wemm
129937a2000SPeter Wemmrm -f "$tmpdepfile"
130937a2000SPeter Wemm
131d915215eSBaptiste Daroussin# Avoid interferences from the environment.
132d915215eSBaptiste Daroussingccflag= dashmflag=
133d915215eSBaptiste Daroussin
134937a2000SPeter Wemm# Some modes work just like other modes, but use different flags.  We
135937a2000SPeter Wemm# parameterize here, but still list the modes in the big case below,
136937a2000SPeter Wemm# to make depend.m4 easier to write.  Note that we *cannot* use a case
137937a2000SPeter Wemm# here, because this file can only contain one case statement.
138937a2000SPeter Wemmif test "$depmode" = hp; then
139937a2000SPeter Wemm  # HP compiler uses -M and no extra arg.
140937a2000SPeter Wemm  gccflag=-M
141937a2000SPeter Wemm  depmode=gcc
142937a2000SPeter Wemmfi
143937a2000SPeter Wemm
144937a2000SPeter Wemmif test "$depmode" = dashXmstdout; then
145937a2000SPeter Wemm  # This is just like dashmstdout with a different argument.
146937a2000SPeter Wemm  dashmflag=-xM
147937a2000SPeter Wemm  depmode=dashmstdout
148937a2000SPeter Wemmfi
149937a2000SPeter Wemm
1508bc5c7c0SPeter Wemmcygpath_u="cygpath -u -f -"
1518bc5c7c0SPeter Wemmif test "$depmode" = msvcmsys; then
1528bc5c7c0SPeter Wemm  # This is just like msvisualcpp but w/o cygpath translation.
1538bc5c7c0SPeter Wemm  # Just convert the backslash-escaped backslashes to single forward
1548bc5c7c0SPeter Wemm  # slashes to satisfy depend.m4
1558bc5c7c0SPeter Wemm  cygpath_u='sed s,\\\\,/,g'
1568bc5c7c0SPeter Wemm  depmode=msvisualcpp
1578bc5c7c0SPeter Wemmfi
1588bc5c7c0SPeter Wemm
1598bc5c7c0SPeter Wemmif test "$depmode" = msvc7msys; then
1608bc5c7c0SPeter Wemm  # This is just like msvc7 but w/o cygpath translation.
1618bc5c7c0SPeter Wemm  # Just convert the backslash-escaped backslashes to single forward
1628bc5c7c0SPeter Wemm  # slashes to satisfy depend.m4
1638bc5c7c0SPeter Wemm  cygpath_u='sed s,\\\\,/,g'
1648bc5c7c0SPeter Wemm  depmode=msvc7
1658bc5c7c0SPeter Wemmfi
1668bc5c7c0SPeter Wemm
1678bc5c7c0SPeter Wemmif test "$depmode" = xlc; then
168d915215eSBaptiste Daroussin  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
1698bc5c7c0SPeter Wemm  gccflag=-qmakedep=gcc,-MF
1708bc5c7c0SPeter Wemm  depmode=gcc
1718bc5c7c0SPeter Wemmfi
1728bc5c7c0SPeter Wemm
173937a2000SPeter Wemmcase "$depmode" in
174937a2000SPeter Wemmgcc3)
175937a2000SPeter Wemm## gcc 3 implements dependency tracking that does exactly what
176937a2000SPeter Wemm## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177937a2000SPeter Wemm## it if -MD -MP comes after the -MF stuff.  Hmm.
1788bc5c7c0SPeter Wemm## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1798bc5c7c0SPeter Wemm## the command line argument order; so add the flags where they
1808bc5c7c0SPeter Wemm## appear in depend2.am.  Note that the slowdown incurred here
1818bc5c7c0SPeter Wemm## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1828bc5c7c0SPeter Wemm  for arg
1838bc5c7c0SPeter Wemm  do
1848bc5c7c0SPeter Wemm    case $arg in
1858bc5c7c0SPeter Wemm    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1868bc5c7c0SPeter Wemm    *)  set fnord "$@" "$arg" ;;
1878bc5c7c0SPeter Wemm    esac
1888bc5c7c0SPeter Wemm    shift # fnord
1898bc5c7c0SPeter Wemm    shift # $arg
1908bc5c7c0SPeter Wemm  done
1918bc5c7c0SPeter Wemm  "$@"
192937a2000SPeter Wemm  stat=$?
193d915215eSBaptiste Daroussin  if test $stat -ne 0; then
194937a2000SPeter Wemm    rm -f "$tmpdepfile"
195937a2000SPeter Wemm    exit $stat
196937a2000SPeter Wemm  fi
197937a2000SPeter Wemm  mv "$tmpdepfile" "$depfile"
198937a2000SPeter Wemm  ;;
199937a2000SPeter Wemm
200937a2000SPeter Wemmgcc)
201d915215eSBaptiste Daroussin## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202d915215eSBaptiste Daroussin## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203d915215eSBaptiste Daroussin## (see the conditional assignment to $gccflag above).
204937a2000SPeter Wemm## There are various ways to get dependency output from gcc.  Here's
205937a2000SPeter Wemm## why we pick this rather obscure method:
206937a2000SPeter Wemm## - Don't want to use -MD because we'd like the dependencies to end
207937a2000SPeter Wemm##   up in a subdir.  Having to rename by hand is ugly.
208937a2000SPeter Wemm##   (We might end up doing this anyway to support other compilers.)
209937a2000SPeter Wemm## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210d915215eSBaptiste Daroussin##   -MM, not -M (despite what the docs say).  Also, it might not be
211d915215eSBaptiste Daroussin##   supported by the other compilers which use the 'gcc' depmode.
212937a2000SPeter Wemm## - Using -M directly means running the compiler twice (even worse
213937a2000SPeter Wemm##   than renaming).
214937a2000SPeter Wemm  if test -z "$gccflag"; then
215937a2000SPeter Wemm    gccflag=-MD,
216937a2000SPeter Wemm  fi
217937a2000SPeter Wemm  "$@" -Wp,"$gccflag$tmpdepfile"
218937a2000SPeter Wemm  stat=$?
219d915215eSBaptiste Daroussin  if test $stat -ne 0; then
220937a2000SPeter Wemm    rm -f "$tmpdepfile"
221937a2000SPeter Wemm    exit $stat
222937a2000SPeter Wemm  fi
223937a2000SPeter Wemm  rm -f "$depfile"
224937a2000SPeter Wemm  echo "$object : \\" > "$depfile"
225d915215eSBaptiste Daroussin  # The second -e expression handles DOS-style file names with drive
226d915215eSBaptiste Daroussin  # letters.
227937a2000SPeter Wemm  sed -e 's/^[^:]*: / /' \
228937a2000SPeter Wemm      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
2298bc5c7c0SPeter Wemm## This next piece of magic avoids the "deleted header file" problem.
230937a2000SPeter Wemm## The problem is that when a header file which appears in a .P file
231937a2000SPeter Wemm## is deleted, the dependency causes make to die (because there is
232937a2000SPeter Wemm## typically no way to rebuild the header).  We avoid this by adding
233937a2000SPeter Wemm## dummy dependencies for each header file.  Too bad gcc doesn't do
234937a2000SPeter Wemm## this for us directly.
2358bc5c7c0SPeter Wemm## Some versions of gcc put a space before the ':'.  On the theory
236937a2000SPeter Wemm## that the space means something, we add a space to the output as
2378bc5c7c0SPeter Wemm## well.  hp depmode also adds that space, but also prefixes the VPATH
2388bc5c7c0SPeter Wemm## to the object.  Take care to not repeat it in the output.
239937a2000SPeter Wemm## Some versions of the HPUX 10.20 sed can't process this invocation
240937a2000SPeter Wemm## correctly.  Breaking it into two sed invocations is a workaround.
241d915215eSBaptiste Daroussin  tr ' ' "$nl" < "$tmpdepfile" \
242d915215eSBaptiste Daroussin    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
2438bc5c7c0SPeter Wemm    | sed -e 's/$/ :/' >> "$depfile"
244937a2000SPeter Wemm  rm -f "$tmpdepfile"
245937a2000SPeter Wemm  ;;
246937a2000SPeter Wemm
247937a2000SPeter Wemmhp)
248937a2000SPeter Wemm  # This case exists only to let depend.m4 do its work.  It works by
249937a2000SPeter Wemm  # looking at the text of this script.  This case will never be run,
250937a2000SPeter Wemm  # since it is checked for above.
251937a2000SPeter Wemm  exit 1
252937a2000SPeter Wemm  ;;
253937a2000SPeter Wemm
254937a2000SPeter Wemmsgi)
255937a2000SPeter Wemm  if test "$libtool" = yes; then
256937a2000SPeter Wemm    "$@" "-Wp,-MDupdate,$tmpdepfile"
257937a2000SPeter Wemm  else
258937a2000SPeter Wemm    "$@" -MDupdate "$tmpdepfile"
259937a2000SPeter Wemm  fi
260937a2000SPeter Wemm  stat=$?
261d915215eSBaptiste Daroussin  if test $stat -ne 0; then
262937a2000SPeter Wemm    rm -f "$tmpdepfile"
263937a2000SPeter Wemm    exit $stat
264937a2000SPeter Wemm  fi
265937a2000SPeter Wemm  rm -f "$depfile"
266937a2000SPeter Wemm
267937a2000SPeter Wemm  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268937a2000SPeter Wemm    echo "$object : \\" > "$depfile"
269937a2000SPeter Wemm    # Clip off the initial element (the dependent).  Don't try to be
270937a2000SPeter Wemm    # clever and replace this with sed code, as IRIX sed won't handle
271937a2000SPeter Wemm    # lines with more than a fixed number of characters (4096 in
272937a2000SPeter Wemm    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2738bc5c7c0SPeter Wemm    # the IRIX cc adds comments like '#:fec' to the end of the
274937a2000SPeter Wemm    # dependency line.
2758bc5c7c0SPeter Wemm    tr ' ' "$nl" < "$tmpdepfile" \
276d915215eSBaptiste Daroussin      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277d915215eSBaptiste Daroussin      | tr "$nl" ' ' >> "$depfile"
2788bc5c7c0SPeter Wemm    echo >> "$depfile"
279937a2000SPeter Wemm    # The second pass generates a dummy entry for each header file.
2808bc5c7c0SPeter Wemm    tr ' ' "$nl" < "$tmpdepfile" \
281937a2000SPeter Wemm      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2828bc5c7c0SPeter Wemm      >> "$depfile"
283937a2000SPeter Wemm  else
284d915215eSBaptiste Daroussin    make_dummy_depfile
285937a2000SPeter Wemm  fi
286937a2000SPeter Wemm  rm -f "$tmpdepfile"
287937a2000SPeter Wemm  ;;
288937a2000SPeter Wemm
2898bc5c7c0SPeter Wemmxlc)
2908bc5c7c0SPeter Wemm  # This case exists only to let depend.m4 do its work.  It works by
2918bc5c7c0SPeter Wemm  # looking at the text of this script.  This case will never be run,
2928bc5c7c0SPeter Wemm  # since it is checked for above.
2938bc5c7c0SPeter Wemm  exit 1
2948bc5c7c0SPeter Wemm  ;;
2958bc5c7c0SPeter Wemm
296937a2000SPeter Wemmaix)
297937a2000SPeter Wemm  # The C for AIX Compiler uses -M and outputs the dependencies
298937a2000SPeter Wemm  # in a .u file.  In older versions, this file always lives in the
2998bc5c7c0SPeter Wemm  # current directory.  Also, the AIX compiler puts '$object:' at the
300937a2000SPeter Wemm  # start of each line; $object doesn't have directory information.
301937a2000SPeter Wemm  # Version 6 uses the directory in both cases.
302d915215eSBaptiste Daroussin  set_dir_from "$object"
303d915215eSBaptiste Daroussin  set_base_from "$object"
304937a2000SPeter Wemm  if test "$libtool" = yes; then
3058bc5c7c0SPeter Wemm    tmpdepfile1=$dir$base.u
3068bc5c7c0SPeter Wemm    tmpdepfile2=$base.u
3078bc5c7c0SPeter Wemm    tmpdepfile3=$dir.libs/$base.u
308937a2000SPeter Wemm    "$@" -Wc,-M
309937a2000SPeter Wemm  else
3108bc5c7c0SPeter Wemm    tmpdepfile1=$dir$base.u
3118bc5c7c0SPeter Wemm    tmpdepfile2=$dir$base.u
3128bc5c7c0SPeter Wemm    tmpdepfile3=$dir$base.u
313937a2000SPeter Wemm    "$@" -M
314937a2000SPeter Wemm  fi
315937a2000SPeter Wemm  stat=$?
316d915215eSBaptiste Daroussin  if test $stat -ne 0; then
3178bc5c7c0SPeter Wemm    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318937a2000SPeter Wemm    exit $stat
319937a2000SPeter Wemm  fi
320937a2000SPeter Wemm
3218bc5c7c0SPeter Wemm  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
3228bc5c7c0SPeter Wemm  do
3238bc5c7c0SPeter Wemm    test -f "$tmpdepfile" && break
3248bc5c7c0SPeter Wemm  done
325d915215eSBaptiste Daroussin  aix_post_process_depfile
326d915215eSBaptiste Daroussin  ;;
327d915215eSBaptiste Daroussin
328d915215eSBaptiste Daroussintcc)
329d915215eSBaptiste Daroussin  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330d915215eSBaptiste Daroussin  # FIXME: That version still under development at the moment of writing.
331d915215eSBaptiste Daroussin  #        Make that this statement remains true also for stable, released
332d915215eSBaptiste Daroussin  #        versions.
333d915215eSBaptiste Daroussin  # It will wrap lines (doesn't matter whether long or short) with a
334d915215eSBaptiste Daroussin  # trailing '\', as in:
335d915215eSBaptiste Daroussin  #
336d915215eSBaptiste Daroussin  #   foo.o : \
337d915215eSBaptiste Daroussin  #    foo.c \
338d915215eSBaptiste Daroussin  #    foo.h \
339d915215eSBaptiste Daroussin  #
340d915215eSBaptiste Daroussin  # It will put a trailing '\' even on the last line, and will use leading
341d915215eSBaptiste Daroussin  # spaces rather than leading tabs (at least since its commit 0394caf7
342d915215eSBaptiste Daroussin  # "Emit spaces for -MD").
343d915215eSBaptiste Daroussin  "$@" -MD -MF "$tmpdepfile"
344d915215eSBaptiste Daroussin  stat=$?
345d915215eSBaptiste Daroussin  if test $stat -ne 0; then
346d915215eSBaptiste Daroussin    rm -f "$tmpdepfile"
347d915215eSBaptiste Daroussin    exit $stat
348937a2000SPeter Wemm  fi
349d915215eSBaptiste Daroussin  rm -f "$depfile"
350d915215eSBaptiste Daroussin  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351d915215eSBaptiste Daroussin  # We have to change lines of the first kind to '$object: \'.
352d915215eSBaptiste Daroussin  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353d915215eSBaptiste Daroussin  # And for each line of the second kind, we have to emit a 'dep.h:'
354d915215eSBaptiste Daroussin  # dummy dependency, to avoid the deleted-header problem.
355d915215eSBaptiste Daroussin  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356937a2000SPeter Wemm  rm -f "$tmpdepfile"
357937a2000SPeter Wemm  ;;
358937a2000SPeter Wemm
359d915215eSBaptiste Daroussin## The order of this option in the case statement is important, since the
360d915215eSBaptiste Daroussin## shell code in configure will try each of these formats in the order
361d915215eSBaptiste Daroussin## listed in this file.  A plain '-MD' option would be understood by many
362d915215eSBaptiste Daroussin## compilers, so we must ensure this comes after the gcc and icc options.
363d915215eSBaptiste Daroussinpgcc)
364d915215eSBaptiste Daroussin  # Portland's C compiler understands '-MD'.
365d915215eSBaptiste Daroussin  # Will always output deps to 'file.d' where file is the root name of the
366d915215eSBaptiste Daroussin  # source file under compilation, even if file resides in a subdirectory.
367d915215eSBaptiste Daroussin  # The object file name does not affect the name of the '.d' file.
368d915215eSBaptiste Daroussin  # pgcc 10.2 will output
369937a2000SPeter Wemm  #    foo.o: sub/foo.c sub/foo.h
3708bc5c7c0SPeter Wemm  # and will wrap long lines using '\' :
371937a2000SPeter Wemm  #    foo.o: sub/foo.c ... \
372937a2000SPeter Wemm  #     sub/foo.h ... \
373937a2000SPeter Wemm  #     ...
374d915215eSBaptiste Daroussin  set_dir_from "$object"
375d915215eSBaptiste Daroussin  # Use the source, not the object, to determine the base name, since
376d915215eSBaptiste Daroussin  # that's sadly what pgcc will do too.
377d915215eSBaptiste Daroussin  set_base_from "$source"
378d915215eSBaptiste Daroussin  tmpdepfile=$base.d
379d915215eSBaptiste Daroussin
380d915215eSBaptiste Daroussin  # For projects that build the same source file twice into different object
381d915215eSBaptiste Daroussin  # files, the pgcc approach of using the *source* file root name can cause
382d915215eSBaptiste Daroussin  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383d915215eSBaptiste Daroussin  # the same $tmpdepfile.
384d915215eSBaptiste Daroussin  lockdir=$base.d-lock
385d915215eSBaptiste Daroussin  trap "
386d915215eSBaptiste Daroussin    echo '$0: caught signal, cleaning up...' >&2
387d915215eSBaptiste Daroussin    rmdir '$lockdir'
388d915215eSBaptiste Daroussin    exit 1
389d915215eSBaptiste Daroussin  " 1 2 13 15
390d915215eSBaptiste Daroussin  numtries=100
391d915215eSBaptiste Daroussin  i=$numtries
392d915215eSBaptiste Daroussin  while test $i -gt 0; do
393d915215eSBaptiste Daroussin    # mkdir is a portable test-and-set.
394d915215eSBaptiste Daroussin    if mkdir "$lockdir" 2>/dev/null; then
395d915215eSBaptiste Daroussin      # This process acquired the lock.
396d915215eSBaptiste Daroussin      "$@" -MD
397937a2000SPeter Wemm      stat=$?
398d915215eSBaptiste Daroussin      # Release the lock.
399d915215eSBaptiste Daroussin      rmdir "$lockdir"
400d915215eSBaptiste Daroussin      break
401937a2000SPeter Wemm    else
402d915215eSBaptiste Daroussin      # If the lock is being held by a different process, wait
403d915215eSBaptiste Daroussin      # until the winning process is done or we timeout.
404d915215eSBaptiste Daroussin      while test -d "$lockdir" && test $i -gt 0; do
405d915215eSBaptiste Daroussin        sleep 1
406d915215eSBaptiste Daroussin        i=`expr $i - 1`
407d915215eSBaptiste Daroussin      done
408d915215eSBaptiste Daroussin    fi
409d915215eSBaptiste Daroussin    i=`expr $i - 1`
410d915215eSBaptiste Daroussin  done
411d915215eSBaptiste Daroussin  trap - 1 2 13 15
412d915215eSBaptiste Daroussin  if test $i -le 0; then
413d915215eSBaptiste Daroussin    echo "$0: failed to acquire lock after $numtries attempts" >&2
414d915215eSBaptiste Daroussin    echo "$0: check lockdir '$lockdir'" >&2
415d915215eSBaptiste Daroussin    exit 1
416d915215eSBaptiste Daroussin  fi
417d915215eSBaptiste Daroussin
418d915215eSBaptiste Daroussin  if test $stat -ne 0; then
419937a2000SPeter Wemm    rm -f "$tmpdepfile"
420937a2000SPeter Wemm    exit $stat
421937a2000SPeter Wemm  fi
422937a2000SPeter Wemm  rm -f "$depfile"
423d915215eSBaptiste Daroussin  # Each line is of the form `foo.o: dependent.h',
424d915215eSBaptiste Daroussin  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425937a2000SPeter Wemm  # Do two passes, one to just change these to
426d915215eSBaptiste Daroussin  # `$object: dependent.h' and one to simply `dependent.h:'.
427d915215eSBaptiste Daroussin  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428d915215eSBaptiste Daroussin  # Some versions of the HPUX 10.20 sed can't process this invocation
429d915215eSBaptiste Daroussin  # correctly.  Breaking it into two sed invocations is a workaround.
430d915215eSBaptiste Daroussin  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431d915215eSBaptiste Daroussin    | sed -e 's/$/ :/' >> "$depfile"
432937a2000SPeter Wemm  rm -f "$tmpdepfile"
433937a2000SPeter Wemm  ;;
434937a2000SPeter Wemm
4358bc5c7c0SPeter Wemmhp2)
4368bc5c7c0SPeter Wemm  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
4378bc5c7c0SPeter Wemm  # compilers, which have integrated preprocessors.  The correct option
4388bc5c7c0SPeter Wemm  # to use with these is +Maked; it writes dependencies to a file named
4398bc5c7c0SPeter Wemm  # 'foo.d', which lands next to the object file, wherever that
4408bc5c7c0SPeter Wemm  # happens to be.
4418bc5c7c0SPeter Wemm  # Much of this is similar to the tru64 case; see comments there.
442d915215eSBaptiste Daroussin  set_dir_from  "$object"
443d915215eSBaptiste Daroussin  set_base_from "$object"
4448bc5c7c0SPeter Wemm  if test "$libtool" = yes; then
4458bc5c7c0SPeter Wemm    tmpdepfile1=$dir$base.d
4468bc5c7c0SPeter Wemm    tmpdepfile2=$dir.libs/$base.d
4478bc5c7c0SPeter Wemm    "$@" -Wc,+Maked
4488bc5c7c0SPeter Wemm  else
4498bc5c7c0SPeter Wemm    tmpdepfile1=$dir$base.d
4508bc5c7c0SPeter Wemm    tmpdepfile2=$dir$base.d
4518bc5c7c0SPeter Wemm    "$@" +Maked
4528bc5c7c0SPeter Wemm  fi
4538bc5c7c0SPeter Wemm  stat=$?
454d915215eSBaptiste Daroussin  if test $stat -ne 0; then
4558bc5c7c0SPeter Wemm     rm -f "$tmpdepfile1" "$tmpdepfile2"
4568bc5c7c0SPeter Wemm     exit $stat
4578bc5c7c0SPeter Wemm  fi
4588bc5c7c0SPeter Wemm
4598bc5c7c0SPeter Wemm  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
4608bc5c7c0SPeter Wemm  do
4618bc5c7c0SPeter Wemm    test -f "$tmpdepfile" && break
4628bc5c7c0SPeter Wemm  done
4638bc5c7c0SPeter Wemm  if test -f "$tmpdepfile"; then
464d915215eSBaptiste Daroussin    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
4658bc5c7c0SPeter Wemm    # Add 'dependent.h:' lines.
4668bc5c7c0SPeter Wemm    sed -ne '2,${
4678bc5c7c0SPeter Wemm               s/^ *//
4688bc5c7c0SPeter Wemm               s/ \\*$//
4698bc5c7c0SPeter Wemm               s/$/:/
4708bc5c7c0SPeter Wemm               p
4718bc5c7c0SPeter Wemm             }' "$tmpdepfile" >> "$depfile"
4728bc5c7c0SPeter Wemm  else
473d915215eSBaptiste Daroussin    make_dummy_depfile
4748bc5c7c0SPeter Wemm  fi
4758bc5c7c0SPeter Wemm  rm -f "$tmpdepfile" "$tmpdepfile2"
4768bc5c7c0SPeter Wemm  ;;
4778bc5c7c0SPeter Wemm
478937a2000SPeter Wemmtru64)
479937a2000SPeter Wemm  # The Tru64 compiler uses -MD to generate dependencies as a side
4808bc5c7c0SPeter Wemm  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481937a2000SPeter Wemm  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
4828bc5c7c0SPeter Wemm  # dependencies in 'foo.d' instead, so we check for that too.
483937a2000SPeter Wemm  # Subdirectories are respected.
484d915215eSBaptiste Daroussin  set_dir_from  "$object"
485d915215eSBaptiste Daroussin  set_base_from "$object"
486937a2000SPeter Wemm
487937a2000SPeter Wemm  if test "$libtool" = yes; then
488d915215eSBaptiste Daroussin    # Libtool generates 2 separate objects for the 2 libraries.  These
489d915215eSBaptiste Daroussin    # two compilations output dependencies in $dir.libs/$base.o.d and
490937a2000SPeter Wemm    # in $dir$base.o.d.  We have to check for both files, because
491937a2000SPeter Wemm    # one of the two compilations can be disabled.  We should prefer
492937a2000SPeter Wemm    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493937a2000SPeter Wemm    # automatically cleaned when .libs/ is deleted, while ignoring
494937a2000SPeter Wemm    # the former would cause a distcleancheck panic.
495d915215eSBaptiste Daroussin    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496d915215eSBaptiste Daroussin    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497d915215eSBaptiste Daroussin    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498937a2000SPeter Wemm    "$@" -Wc,-MD
499937a2000SPeter Wemm  else
500d915215eSBaptiste Daroussin    tmpdepfile1=$dir$base.d
501937a2000SPeter Wemm    tmpdepfile2=$dir$base.d
502937a2000SPeter Wemm    tmpdepfile3=$dir$base.d
503937a2000SPeter Wemm    "$@" -MD
504937a2000SPeter Wemm  fi
505937a2000SPeter Wemm
506937a2000SPeter Wemm  stat=$?
507d915215eSBaptiste Daroussin  if test $stat -ne 0; then
508d915215eSBaptiste Daroussin    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509937a2000SPeter Wemm    exit $stat
510937a2000SPeter Wemm  fi
511937a2000SPeter Wemm
512d915215eSBaptiste Daroussin  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513937a2000SPeter Wemm  do
514937a2000SPeter Wemm    test -f "$tmpdepfile" && break
515937a2000SPeter Wemm  done
516d915215eSBaptiste Daroussin  # Same post-processing that is required for AIX mode.
517d915215eSBaptiste Daroussin  aix_post_process_depfile
518937a2000SPeter Wemm  ;;
519937a2000SPeter Wemm
5208bc5c7c0SPeter Wemmmsvc7)
5218bc5c7c0SPeter Wemm  if test "$libtool" = yes; then
5228bc5c7c0SPeter Wemm    showIncludes=-Wc,-showIncludes
5238bc5c7c0SPeter Wemm  else
5248bc5c7c0SPeter Wemm    showIncludes=-showIncludes
5258bc5c7c0SPeter Wemm  fi
5268bc5c7c0SPeter Wemm  "$@" $showIncludes > "$tmpdepfile"
5278bc5c7c0SPeter Wemm  stat=$?
5288bc5c7c0SPeter Wemm  grep -v '^Note: including file: ' "$tmpdepfile"
529d915215eSBaptiste Daroussin  if test $stat -ne 0; then
5308bc5c7c0SPeter Wemm    rm -f "$tmpdepfile"
5318bc5c7c0SPeter Wemm    exit $stat
5328bc5c7c0SPeter Wemm  fi
5338bc5c7c0SPeter Wemm  rm -f "$depfile"
5348bc5c7c0SPeter Wemm  echo "$object : \\" > "$depfile"
5358bc5c7c0SPeter Wemm  # The first sed program below extracts the file names and escapes
5368bc5c7c0SPeter Wemm  # backslashes for cygpath.  The second sed program outputs the file
5378bc5c7c0SPeter Wemm  # name when reading, but also accumulates all include files in the
5388bc5c7c0SPeter Wemm  # hold buffer in order to output them again at the end.  This only
5398bc5c7c0SPeter Wemm  # works with sed implementations that can handle large buffers.
5408bc5c7c0SPeter Wemm  sed < "$tmpdepfile" -n '
5418bc5c7c0SPeter Wemm/^Note: including file:  *\(.*\)/ {
5428bc5c7c0SPeter Wemm  s//\1/
5438bc5c7c0SPeter Wemm  s/\\/\\\\/g
5448bc5c7c0SPeter Wemm  p
5458bc5c7c0SPeter Wemm}' | $cygpath_u | sort -u | sed -n '
5468bc5c7c0SPeter Wemms/ /\\ /g
5478bc5c7c0SPeter Wemms/\(.*\)/'"$tab"'\1 \\/p
5488bc5c7c0SPeter Wemms/.\(.*\) \\/\1:/
5498bc5c7c0SPeter WemmH
5508bc5c7c0SPeter Wemm$ {
5518bc5c7c0SPeter Wemm  s/.*/'"$tab"'/
5528bc5c7c0SPeter Wemm  G
5538bc5c7c0SPeter Wemm  p
5548bc5c7c0SPeter Wemm}' >> "$depfile"
555d915215eSBaptiste Daroussin  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
5568bc5c7c0SPeter Wemm  rm -f "$tmpdepfile"
5578bc5c7c0SPeter Wemm  ;;
5588bc5c7c0SPeter Wemm
5598bc5c7c0SPeter Wemmmsvc7msys)
5608bc5c7c0SPeter Wemm  # This case exists only to let depend.m4 do its work.  It works by
5618bc5c7c0SPeter Wemm  # looking at the text of this script.  This case will never be run,
5628bc5c7c0SPeter Wemm  # since it is checked for above.
5638bc5c7c0SPeter Wemm  exit 1
5648bc5c7c0SPeter Wemm  ;;
5658bc5c7c0SPeter Wemm
566937a2000SPeter Wemm#nosideeffect)
567937a2000SPeter Wemm  # This comment above is used by automake to tell side-effect
568937a2000SPeter Wemm  # dependency tracking mechanisms from slower ones.
569937a2000SPeter Wemm
570937a2000SPeter Wemmdashmstdout)
571937a2000SPeter Wemm  # Important note: in order to support this mode, a compiler *must*
572937a2000SPeter Wemm  # always write the preprocessed file to stdout, regardless of -o.
573937a2000SPeter Wemm  "$@" || exit $?
574937a2000SPeter Wemm
575937a2000SPeter Wemm  # Remove the call to Libtool.
576937a2000SPeter Wemm  if test "$libtool" = yes; then
5778bc5c7c0SPeter Wemm    while test "X$1" != 'X--mode=compile'; do
578937a2000SPeter Wemm      shift
579937a2000SPeter Wemm    done
580937a2000SPeter Wemm    shift
581937a2000SPeter Wemm  fi
582937a2000SPeter Wemm
5838bc5c7c0SPeter Wemm  # Remove '-o $object'.
584937a2000SPeter Wemm  IFS=" "
585937a2000SPeter Wemm  for arg
586937a2000SPeter Wemm  do
587937a2000SPeter Wemm    case $arg in
588937a2000SPeter Wemm    -o)
589937a2000SPeter Wemm      shift
590937a2000SPeter Wemm      ;;
591937a2000SPeter Wemm    $object)
592937a2000SPeter Wemm      shift
593937a2000SPeter Wemm      ;;
594937a2000SPeter Wemm    *)
595937a2000SPeter Wemm      set fnord "$@" "$arg"
596937a2000SPeter Wemm      shift # fnord
597937a2000SPeter Wemm      shift # $arg
598937a2000SPeter Wemm      ;;
599937a2000SPeter Wemm    esac
600937a2000SPeter Wemm  done
601937a2000SPeter Wemm
602937a2000SPeter Wemm  test -z "$dashmflag" && dashmflag=-M
6038bc5c7c0SPeter Wemm  # Require at least two characters before searching for ':'
604937a2000SPeter Wemm  # in the target name.  This is to cope with DOS-style filenames:
6058bc5c7c0SPeter Wemm  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606937a2000SPeter Wemm  "$@" $dashmflag |
607d915215eSBaptiste Daroussin    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608937a2000SPeter Wemm  rm -f "$depfile"
609937a2000SPeter Wemm  cat < "$tmpdepfile" > "$depfile"
610d915215eSBaptiste Daroussin  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611d915215eSBaptiste Daroussin  # correctly.  Breaking it into two sed invocations is a workaround.
612d915215eSBaptiste Daroussin  tr ' ' "$nl" < "$tmpdepfile" \
613d915215eSBaptiste Daroussin    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614d915215eSBaptiste Daroussin    | sed -e 's/$/ :/' >> "$depfile"
615937a2000SPeter Wemm  rm -f "$tmpdepfile"
616937a2000SPeter Wemm  ;;
617937a2000SPeter Wemm
618937a2000SPeter WemmdashXmstdout)
619937a2000SPeter Wemm  # This case only exists to satisfy depend.m4.  It is never actually
620937a2000SPeter Wemm  # run, as this mode is specially recognized in the preamble.
621937a2000SPeter Wemm  exit 1
622937a2000SPeter Wemm  ;;
623937a2000SPeter Wemm
624937a2000SPeter Wemmmakedepend)
625937a2000SPeter Wemm  "$@" || exit $?
626937a2000SPeter Wemm  # Remove any Libtool call
627937a2000SPeter Wemm  if test "$libtool" = yes; then
6288bc5c7c0SPeter Wemm    while test "X$1" != 'X--mode=compile'; do
629937a2000SPeter Wemm      shift
630937a2000SPeter Wemm    done
631937a2000SPeter Wemm    shift
632937a2000SPeter Wemm  fi
633937a2000SPeter Wemm  # X makedepend
634937a2000SPeter Wemm  shift
6358bc5c7c0SPeter Wemm  cleared=no eat=no
6368bc5c7c0SPeter Wemm  for arg
6378bc5c7c0SPeter Wemm  do
638937a2000SPeter Wemm    case $cleared in
639937a2000SPeter Wemm    no)
640937a2000SPeter Wemm      set ""; shift
641937a2000SPeter Wemm      cleared=yes ;;
642937a2000SPeter Wemm    esac
6438bc5c7c0SPeter Wemm    if test $eat = yes; then
6448bc5c7c0SPeter Wemm      eat=no
6458bc5c7c0SPeter Wemm      continue
6468bc5c7c0SPeter Wemm    fi
647937a2000SPeter Wemm    case "$arg" in
648937a2000SPeter Wemm    -D*|-I*)
649937a2000SPeter Wemm      set fnord "$@" "$arg"; shift ;;
650937a2000SPeter Wemm    # Strip any option that makedepend may not understand.  Remove
651937a2000SPeter Wemm    # the object too, otherwise makedepend will parse it as a source file.
6528bc5c7c0SPeter Wemm    -arch)
6538bc5c7c0SPeter Wemm      eat=yes ;;
654937a2000SPeter Wemm    -*|$object)
655937a2000SPeter Wemm      ;;
656937a2000SPeter Wemm    *)
657937a2000SPeter Wemm      set fnord "$@" "$arg"; shift ;;
658937a2000SPeter Wemm    esac
659937a2000SPeter Wemm  done
6608bc5c7c0SPeter Wemm  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661937a2000SPeter Wemm  touch "$tmpdepfile"
662937a2000SPeter Wemm  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663937a2000SPeter Wemm  rm -f "$depfile"
6648bc5c7c0SPeter Wemm  # makedepend may prepend the VPATH from the source file name to the object.
6658bc5c7c0SPeter Wemm  # No need to regex-escape $object, excess matching of '.' is harmless.
6668bc5c7c0SPeter Wemm  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667d915215eSBaptiste Daroussin  # Some versions of the HPUX 10.20 sed can't process the last invocation
668d915215eSBaptiste Daroussin  # correctly.  Breaking it into two sed invocations is a workaround.
669d915215eSBaptiste Daroussin  sed '1,2d' "$tmpdepfile" \
670d915215eSBaptiste Daroussin    | tr ' ' "$nl" \
671d915215eSBaptiste Daroussin    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672d915215eSBaptiste Daroussin    | sed -e 's/$/ :/' >> "$depfile"
673937a2000SPeter Wemm  rm -f "$tmpdepfile" "$tmpdepfile".bak
674937a2000SPeter Wemm  ;;
675937a2000SPeter Wemm
676937a2000SPeter Wemmcpp)
677937a2000SPeter Wemm  # Important note: in order to support this mode, a compiler *must*
678937a2000SPeter Wemm  # always write the preprocessed file to stdout.
679937a2000SPeter Wemm  "$@" || exit $?
680937a2000SPeter Wemm
681937a2000SPeter Wemm  # Remove the call to Libtool.
682937a2000SPeter Wemm  if test "$libtool" = yes; then
6838bc5c7c0SPeter Wemm    while test "X$1" != 'X--mode=compile'; do
684937a2000SPeter Wemm      shift
685937a2000SPeter Wemm    done
686937a2000SPeter Wemm    shift
687937a2000SPeter Wemm  fi
688937a2000SPeter Wemm
6898bc5c7c0SPeter Wemm  # Remove '-o $object'.
690937a2000SPeter Wemm  IFS=" "
691937a2000SPeter Wemm  for arg
692937a2000SPeter Wemm  do
693937a2000SPeter Wemm    case $arg in
694937a2000SPeter Wemm    -o)
695937a2000SPeter Wemm      shift
696937a2000SPeter Wemm      ;;
697937a2000SPeter Wemm    $object)
698937a2000SPeter Wemm      shift
699937a2000SPeter Wemm      ;;
700937a2000SPeter Wemm    *)
701937a2000SPeter Wemm      set fnord "$@" "$arg"
702937a2000SPeter Wemm      shift # fnord
703937a2000SPeter Wemm      shift # $arg
704937a2000SPeter Wemm      ;;
705937a2000SPeter Wemm    esac
706937a2000SPeter Wemm  done
707937a2000SPeter Wemm
708d915215eSBaptiste Daroussin  "$@" -E \
709d915215eSBaptiste Daroussin    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710d915215eSBaptiste Daroussin             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711d915215eSBaptiste Daroussin    | sed '$ s: \\$::' > "$tmpdepfile"
712937a2000SPeter Wemm  rm -f "$depfile"
713937a2000SPeter Wemm  echo "$object : \\" > "$depfile"
714937a2000SPeter Wemm  cat < "$tmpdepfile" >> "$depfile"
715937a2000SPeter Wemm  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716937a2000SPeter Wemm  rm -f "$tmpdepfile"
717937a2000SPeter Wemm  ;;
718937a2000SPeter Wemm
719937a2000SPeter Wemmmsvisualcpp)
720937a2000SPeter Wemm  # Important note: in order to support this mode, a compiler *must*
7218bc5c7c0SPeter Wemm  # always write the preprocessed file to stdout.
722937a2000SPeter Wemm  "$@" || exit $?
7238bc5c7c0SPeter Wemm
7248bc5c7c0SPeter Wemm  # Remove the call to Libtool.
7258bc5c7c0SPeter Wemm  if test "$libtool" = yes; then
7268bc5c7c0SPeter Wemm    while test "X$1" != 'X--mode=compile'; do
7278bc5c7c0SPeter Wemm      shift
7288bc5c7c0SPeter Wemm    done
7298bc5c7c0SPeter Wemm    shift
7308bc5c7c0SPeter Wemm  fi
7318bc5c7c0SPeter Wemm
732937a2000SPeter Wemm  IFS=" "
733937a2000SPeter Wemm  for arg
734937a2000SPeter Wemm  do
735937a2000SPeter Wemm    case "$arg" in
7368bc5c7c0SPeter Wemm    -o)
7378bc5c7c0SPeter Wemm      shift
7388bc5c7c0SPeter Wemm      ;;
7398bc5c7c0SPeter Wemm    $object)
7408bc5c7c0SPeter Wemm      shift
7418bc5c7c0SPeter Wemm      ;;
742937a2000SPeter Wemm    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743937a2000SPeter Wemm        set fnord "$@"
744937a2000SPeter Wemm        shift
745937a2000SPeter Wemm        shift
746937a2000SPeter Wemm        ;;
747937a2000SPeter Wemm    *)
748937a2000SPeter Wemm        set fnord "$@" "$arg"
749937a2000SPeter Wemm        shift
750937a2000SPeter Wemm        shift
751937a2000SPeter Wemm        ;;
752937a2000SPeter Wemm    esac
753937a2000SPeter Wemm  done
7548bc5c7c0SPeter Wemm  "$@" -E 2>/dev/null |
7558bc5c7c0SPeter Wemm  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756937a2000SPeter Wemm  rm -f "$depfile"
757937a2000SPeter Wemm  echo "$object : \\" > "$depfile"
7588bc5c7c0SPeter Wemm  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
7598bc5c7c0SPeter Wemm  echo "$tab" >> "$depfile"
7608bc5c7c0SPeter Wemm  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761937a2000SPeter Wemm  rm -f "$tmpdepfile"
762937a2000SPeter Wemm  ;;
763937a2000SPeter Wemm
7648bc5c7c0SPeter Wemmmsvcmsys)
7658bc5c7c0SPeter Wemm  # This case exists only to let depend.m4 do its work.  It works by
7668bc5c7c0SPeter Wemm  # looking at the text of this script.  This case will never be run,
7678bc5c7c0SPeter Wemm  # since it is checked for above.
7688bc5c7c0SPeter Wemm  exit 1
7698bc5c7c0SPeter Wemm  ;;
7708bc5c7c0SPeter Wemm
771937a2000SPeter Wemmnone)
772937a2000SPeter Wemm  exec "$@"
773937a2000SPeter Wemm  ;;
774937a2000SPeter Wemm
775937a2000SPeter Wemm*)
776937a2000SPeter Wemm  echo "Unknown depmode $depmode" 1>&2
777937a2000SPeter Wemm  exit 1
778937a2000SPeter Wemm  ;;
779937a2000SPeter Wemmesac
780937a2000SPeter Wemm
781937a2000SPeter Wemmexit 0
782937a2000SPeter Wemm
783937a2000SPeter Wemm# Local Variables:
784937a2000SPeter Wemm# mode: shell-script
785937a2000SPeter Wemm# sh-indentation: 2
786*70b56f4bSCy Schubert# eval: (add-hook 'before-save-hook 'time-stamp)
787937a2000SPeter Wemm# time-stamp-start: "scriptversion="
788937a2000SPeter Wemm# time-stamp-format: "%:y-%02m-%02d.%02H"
789bca4681bSCy Schubert# time-stamp-time-zone: "UTC0"
7908bc5c7c0SPeter Wemm# time-stamp-end: "; # UTC"
791937a2000SPeter Wemm# End:
792