xref: /minix3/external/bsd/dhcp/dist/depcomp (revision 83ee113ee0d94f3844d44065af2311604e9a30ad)
1*83ee113eSDavid van Moolenbroek#! /bin/sh
2*83ee113eSDavid van Moolenbroek# depcomp - compile a program generating dependencies as side-effects
3*83ee113eSDavid van Moolenbroek
4*83ee113eSDavid van Moolenbroekscriptversion=2013-05-30.07; # UTC
5*83ee113eSDavid van Moolenbroek
6*83ee113eSDavid van Moolenbroek# Copyright (C) 1999-2013 Free Software Foundation, Inc.
7*83ee113eSDavid van Moolenbroek
8*83ee113eSDavid van Moolenbroek# This program is free software; you can redistribute it and/or modify
9*83ee113eSDavid van Moolenbroek# it under the terms of the GNU General Public License as published by
10*83ee113eSDavid van Moolenbroek# the Free Software Foundation; either version 2, or (at your option)
11*83ee113eSDavid van Moolenbroek# any later version.
12*83ee113eSDavid van Moolenbroek
13*83ee113eSDavid van Moolenbroek# This program is distributed in the hope that it will be useful,
14*83ee113eSDavid van Moolenbroek# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*83ee113eSDavid van Moolenbroek# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*83ee113eSDavid van Moolenbroek# GNU General Public License for more details.
17*83ee113eSDavid van Moolenbroek
18*83ee113eSDavid van Moolenbroek# You should have received a copy of the GNU General Public License
19*83ee113eSDavid van Moolenbroek# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20*83ee113eSDavid van Moolenbroek
21*83ee113eSDavid van Moolenbroek# As a special exception to the GNU General Public License, if you
22*83ee113eSDavid van Moolenbroek# distribute this file as part of a program that contains a
23*83ee113eSDavid van Moolenbroek# configuration script generated by Autoconf, you may include it under
24*83ee113eSDavid van Moolenbroek# the same distribution terms that you use for the rest of that program.
25*83ee113eSDavid van Moolenbroek
26*83ee113eSDavid van Moolenbroek# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27*83ee113eSDavid van Moolenbroek
28*83ee113eSDavid van Moolenbroekcase $1 in
29*83ee113eSDavid van Moolenbroek  '')
30*83ee113eSDavid van Moolenbroek    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31*83ee113eSDavid van Moolenbroek    exit 1;
32*83ee113eSDavid van Moolenbroek    ;;
33*83ee113eSDavid van Moolenbroek  -h | --h*)
34*83ee113eSDavid van Moolenbroek    cat <<\EOF
35*83ee113eSDavid van MoolenbroekUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36*83ee113eSDavid van Moolenbroek
37*83ee113eSDavid van MoolenbroekRun PROGRAMS ARGS to compile a file, generating dependencies
38*83ee113eSDavid van Moolenbroekas side-effects.
39*83ee113eSDavid van Moolenbroek
40*83ee113eSDavid van MoolenbroekEnvironment variables:
41*83ee113eSDavid van Moolenbroek  depmode     Dependency tracking mode.
42*83ee113eSDavid van Moolenbroek  source      Source file read by 'PROGRAMS ARGS'.
43*83ee113eSDavid van Moolenbroek  object      Object file output by 'PROGRAMS ARGS'.
44*83ee113eSDavid van Moolenbroek  DEPDIR      directory where to store dependencies.
45*83ee113eSDavid van Moolenbroek  depfile     Dependency file to output.
46*83ee113eSDavid van Moolenbroek  tmpdepfile  Temporary file to use when outputting dependencies.
47*83ee113eSDavid van Moolenbroek  libtool     Whether libtool is used (yes/no).
48*83ee113eSDavid van Moolenbroek
49*83ee113eSDavid van MoolenbroekReport bugs to <bug-automake@gnu.org>.
50*83ee113eSDavid van MoolenbroekEOF
51*83ee113eSDavid van Moolenbroek    exit $?
52*83ee113eSDavid van Moolenbroek    ;;
53*83ee113eSDavid van Moolenbroek  -v | --v*)
54*83ee113eSDavid van Moolenbroek    echo "depcomp $scriptversion"
55*83ee113eSDavid van Moolenbroek    exit $?
56*83ee113eSDavid van Moolenbroek    ;;
57*83ee113eSDavid van Moolenbroekesac
58*83ee113eSDavid van Moolenbroek
59*83ee113eSDavid van Moolenbroek# Get the directory component of the given path, and save it in the
60*83ee113eSDavid van Moolenbroek# global variables '$dir'.  Note that this directory component will
61*83ee113eSDavid van Moolenbroek# be either empty or ending with a '/' character.  This is deliberate.
62*83ee113eSDavid van Moolenbroekset_dir_from ()
63*83ee113eSDavid van Moolenbroek{
64*83ee113eSDavid van Moolenbroek  case $1 in
65*83ee113eSDavid van Moolenbroek    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66*83ee113eSDavid van Moolenbroek      *) dir=;;
67*83ee113eSDavid van Moolenbroek  esac
68*83ee113eSDavid van Moolenbroek}
69*83ee113eSDavid van Moolenbroek
70*83ee113eSDavid van Moolenbroek# Get the suffix-stripped basename of the given path, and save it the
71*83ee113eSDavid van Moolenbroek# global variable '$base'.
72*83ee113eSDavid van Moolenbroekset_base_from ()
73*83ee113eSDavid van Moolenbroek{
74*83ee113eSDavid van Moolenbroek  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75*83ee113eSDavid van Moolenbroek}
76*83ee113eSDavid van Moolenbroek
77*83ee113eSDavid van Moolenbroek# If no dependency file was actually created by the compiler invocation,
78*83ee113eSDavid van Moolenbroek# we still have to create a dummy depfile, to avoid errors with the
79*83ee113eSDavid van Moolenbroek# Makefile "include basename.Plo" scheme.
80*83ee113eSDavid van Moolenbroekmake_dummy_depfile ()
81*83ee113eSDavid van Moolenbroek{
82*83ee113eSDavid van Moolenbroek  echo "#dummy" > "$depfile"
83*83ee113eSDavid van Moolenbroek}
84*83ee113eSDavid van Moolenbroek
85*83ee113eSDavid van Moolenbroek# Factor out some common post-processing of the generated depfile.
86*83ee113eSDavid van Moolenbroek# Requires the auxiliary global variable '$tmpdepfile' to be set.
87*83ee113eSDavid van Moolenbroekaix_post_process_depfile ()
88*83ee113eSDavid van Moolenbroek{
89*83ee113eSDavid van Moolenbroek  # If the compiler actually managed to produce a dependency file,
90*83ee113eSDavid van Moolenbroek  # post-process it.
91*83ee113eSDavid van Moolenbroek  if test -f "$tmpdepfile"; then
92*83ee113eSDavid van Moolenbroek    # Each line is of the form 'foo.o: dependency.h'.
93*83ee113eSDavid van Moolenbroek    # Do two passes, one to just change these to
94*83ee113eSDavid van Moolenbroek    #   $object: dependency.h
95*83ee113eSDavid van Moolenbroek    # and one to simply output
96*83ee113eSDavid van Moolenbroek    #   dependency.h:
97*83ee113eSDavid van Moolenbroek    # which is needed to avoid the deleted-header problem.
98*83ee113eSDavid van Moolenbroek    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99*83ee113eSDavid van Moolenbroek      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100*83ee113eSDavid van Moolenbroek    } > "$depfile"
101*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
102*83ee113eSDavid van Moolenbroek  else
103*83ee113eSDavid van Moolenbroek    make_dummy_depfile
104*83ee113eSDavid van Moolenbroek  fi
105*83ee113eSDavid van Moolenbroek}
106*83ee113eSDavid van Moolenbroek
107*83ee113eSDavid van Moolenbroek# A tabulation character.
108*83ee113eSDavid van Moolenbroektab='	'
109*83ee113eSDavid van Moolenbroek# A newline character.
110*83ee113eSDavid van Moolenbroeknl='
111*83ee113eSDavid van Moolenbroek'
112*83ee113eSDavid van Moolenbroek# Character ranges might be problematic outside the C locale.
113*83ee113eSDavid van Moolenbroek# These definitions help.
114*83ee113eSDavid van Moolenbroekupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115*83ee113eSDavid van Moolenbroeklower=abcdefghijklmnopqrstuvwxyz
116*83ee113eSDavid van Moolenbroekdigits=0123456789
117*83ee113eSDavid van Moolenbroekalpha=${upper}${lower}
118*83ee113eSDavid van Moolenbroek
119*83ee113eSDavid van Moolenbroekif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120*83ee113eSDavid van Moolenbroek  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121*83ee113eSDavid van Moolenbroek  exit 1
122*83ee113eSDavid van Moolenbroekfi
123*83ee113eSDavid van Moolenbroek
124*83ee113eSDavid van Moolenbroek# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125*83ee113eSDavid van Moolenbroekdepfile=${depfile-`echo "$object" |
126*83ee113eSDavid van Moolenbroek  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127*83ee113eSDavid van Moolenbroektmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128*83ee113eSDavid van Moolenbroek
129*83ee113eSDavid van Moolenbroekrm -f "$tmpdepfile"
130*83ee113eSDavid van Moolenbroek
131*83ee113eSDavid van Moolenbroek# Avoid interferences from the environment.
132*83ee113eSDavid van Moolenbroekgccflag= dashmflag=
133*83ee113eSDavid van Moolenbroek
134*83ee113eSDavid van Moolenbroek# Some modes work just like other modes, but use different flags.  We
135*83ee113eSDavid van Moolenbroek# parameterize here, but still list the modes in the big case below,
136*83ee113eSDavid van Moolenbroek# to make depend.m4 easier to write.  Note that we *cannot* use a case
137*83ee113eSDavid van Moolenbroek# here, because this file can only contain one case statement.
138*83ee113eSDavid van Moolenbroekif test "$depmode" = hp; then
139*83ee113eSDavid van Moolenbroek  # HP compiler uses -M and no extra arg.
140*83ee113eSDavid van Moolenbroek  gccflag=-M
141*83ee113eSDavid van Moolenbroek  depmode=gcc
142*83ee113eSDavid van Moolenbroekfi
143*83ee113eSDavid van Moolenbroek
144*83ee113eSDavid van Moolenbroekif test "$depmode" = dashXmstdout; then
145*83ee113eSDavid van Moolenbroek  # This is just like dashmstdout with a different argument.
146*83ee113eSDavid van Moolenbroek  dashmflag=-xM
147*83ee113eSDavid van Moolenbroek  depmode=dashmstdout
148*83ee113eSDavid van Moolenbroekfi
149*83ee113eSDavid van Moolenbroek
150*83ee113eSDavid van Moolenbroekcygpath_u="cygpath -u -f -"
151*83ee113eSDavid van Moolenbroekif test "$depmode" = msvcmsys; then
152*83ee113eSDavid van Moolenbroek  # This is just like msvisualcpp but w/o cygpath translation.
153*83ee113eSDavid van Moolenbroek  # Just convert the backslash-escaped backslashes to single forward
154*83ee113eSDavid van Moolenbroek  # slashes to satisfy depend.m4
155*83ee113eSDavid van Moolenbroek  cygpath_u='sed s,\\\\,/,g'
156*83ee113eSDavid van Moolenbroek  depmode=msvisualcpp
157*83ee113eSDavid van Moolenbroekfi
158*83ee113eSDavid van Moolenbroek
159*83ee113eSDavid van Moolenbroekif test "$depmode" = msvc7msys; then
160*83ee113eSDavid van Moolenbroek  # This is just like msvc7 but w/o cygpath translation.
161*83ee113eSDavid van Moolenbroek  # Just convert the backslash-escaped backslashes to single forward
162*83ee113eSDavid van Moolenbroek  # slashes to satisfy depend.m4
163*83ee113eSDavid van Moolenbroek  cygpath_u='sed s,\\\\,/,g'
164*83ee113eSDavid van Moolenbroek  depmode=msvc7
165*83ee113eSDavid van Moolenbroekfi
166*83ee113eSDavid van Moolenbroek
167*83ee113eSDavid van Moolenbroekif test "$depmode" = xlc; then
168*83ee113eSDavid van Moolenbroek  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169*83ee113eSDavid van Moolenbroek  gccflag=-qmakedep=gcc,-MF
170*83ee113eSDavid van Moolenbroek  depmode=gcc
171*83ee113eSDavid van Moolenbroekfi
172*83ee113eSDavid van Moolenbroek
173*83ee113eSDavid van Moolenbroekcase "$depmode" in
174*83ee113eSDavid van Moolenbroekgcc3)
175*83ee113eSDavid van Moolenbroek## gcc 3 implements dependency tracking that does exactly what
176*83ee113eSDavid van Moolenbroek## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177*83ee113eSDavid van Moolenbroek## it if -MD -MP comes after the -MF stuff.  Hmm.
178*83ee113eSDavid van Moolenbroek## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179*83ee113eSDavid van Moolenbroek## the command line argument order; so add the flags where they
180*83ee113eSDavid van Moolenbroek## appear in depend2.am.  Note that the slowdown incurred here
181*83ee113eSDavid van Moolenbroek## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182*83ee113eSDavid van Moolenbroek  for arg
183*83ee113eSDavid van Moolenbroek  do
184*83ee113eSDavid van Moolenbroek    case $arg in
185*83ee113eSDavid van Moolenbroek    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186*83ee113eSDavid van Moolenbroek    *)  set fnord "$@" "$arg" ;;
187*83ee113eSDavid van Moolenbroek    esac
188*83ee113eSDavid van Moolenbroek    shift # fnord
189*83ee113eSDavid van Moolenbroek    shift # $arg
190*83ee113eSDavid van Moolenbroek  done
191*83ee113eSDavid van Moolenbroek  "$@"
192*83ee113eSDavid van Moolenbroek  stat=$?
193*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
194*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
195*83ee113eSDavid van Moolenbroek    exit $stat
196*83ee113eSDavid van Moolenbroek  fi
197*83ee113eSDavid van Moolenbroek  mv "$tmpdepfile" "$depfile"
198*83ee113eSDavid van Moolenbroek  ;;
199*83ee113eSDavid van Moolenbroek
200*83ee113eSDavid van Moolenbroekgcc)
201*83ee113eSDavid van Moolenbroek## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202*83ee113eSDavid van Moolenbroek## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203*83ee113eSDavid van Moolenbroek## (see the conditional assignment to $gccflag above).
204*83ee113eSDavid van Moolenbroek## There are various ways to get dependency output from gcc.  Here's
205*83ee113eSDavid van Moolenbroek## why we pick this rather obscure method:
206*83ee113eSDavid van Moolenbroek## - Don't want to use -MD because we'd like the dependencies to end
207*83ee113eSDavid van Moolenbroek##   up in a subdir.  Having to rename by hand is ugly.
208*83ee113eSDavid van Moolenbroek##   (We might end up doing this anyway to support other compilers.)
209*83ee113eSDavid van Moolenbroek## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210*83ee113eSDavid van Moolenbroek##   -MM, not -M (despite what the docs say).  Also, it might not be
211*83ee113eSDavid van Moolenbroek##   supported by the other compilers which use the 'gcc' depmode.
212*83ee113eSDavid van Moolenbroek## - Using -M directly means running the compiler twice (even worse
213*83ee113eSDavid van Moolenbroek##   than renaming).
214*83ee113eSDavid van Moolenbroek  if test -z "$gccflag"; then
215*83ee113eSDavid van Moolenbroek    gccflag=-MD,
216*83ee113eSDavid van Moolenbroek  fi
217*83ee113eSDavid van Moolenbroek  "$@" -Wp,"$gccflag$tmpdepfile"
218*83ee113eSDavid van Moolenbroek  stat=$?
219*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
220*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
221*83ee113eSDavid van Moolenbroek    exit $stat
222*83ee113eSDavid van Moolenbroek  fi
223*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
224*83ee113eSDavid van Moolenbroek  echo "$object : \\" > "$depfile"
225*83ee113eSDavid van Moolenbroek  # The second -e expression handles DOS-style file names with drive
226*83ee113eSDavid van Moolenbroek  # letters.
227*83ee113eSDavid van Moolenbroek  sed -e 's/^[^:]*: / /' \
228*83ee113eSDavid van Moolenbroek      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229*83ee113eSDavid van Moolenbroek## This next piece of magic avoids the "deleted header file" problem.
230*83ee113eSDavid van Moolenbroek## The problem is that when a header file which appears in a .P file
231*83ee113eSDavid van Moolenbroek## is deleted, the dependency causes make to die (because there is
232*83ee113eSDavid van Moolenbroek## typically no way to rebuild the header).  We avoid this by adding
233*83ee113eSDavid van Moolenbroek## dummy dependencies for each header file.  Too bad gcc doesn't do
234*83ee113eSDavid van Moolenbroek## this for us directly.
235*83ee113eSDavid van Moolenbroek## Some versions of gcc put a space before the ':'.  On the theory
236*83ee113eSDavid van Moolenbroek## that the space means something, we add a space to the output as
237*83ee113eSDavid van Moolenbroek## well.  hp depmode also adds that space, but also prefixes the VPATH
238*83ee113eSDavid van Moolenbroek## to the object.  Take care to not repeat it in the output.
239*83ee113eSDavid van Moolenbroek## Some versions of the HPUX 10.20 sed can't process this invocation
240*83ee113eSDavid van Moolenbroek## correctly.  Breaking it into two sed invocations is a workaround.
241*83ee113eSDavid van Moolenbroek  tr ' ' "$nl" < "$tmpdepfile" \
242*83ee113eSDavid van Moolenbroek    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243*83ee113eSDavid van Moolenbroek    | sed -e 's/$/ :/' >> "$depfile"
244*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
245*83ee113eSDavid van Moolenbroek  ;;
246*83ee113eSDavid van Moolenbroek
247*83ee113eSDavid van Moolenbroekhp)
248*83ee113eSDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
249*83ee113eSDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
250*83ee113eSDavid van Moolenbroek  # since it is checked for above.
251*83ee113eSDavid van Moolenbroek  exit 1
252*83ee113eSDavid van Moolenbroek  ;;
253*83ee113eSDavid van Moolenbroek
254*83ee113eSDavid van Moolenbroeksgi)
255*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
256*83ee113eSDavid van Moolenbroek    "$@" "-Wp,-MDupdate,$tmpdepfile"
257*83ee113eSDavid van Moolenbroek  else
258*83ee113eSDavid van Moolenbroek    "$@" -MDupdate "$tmpdepfile"
259*83ee113eSDavid van Moolenbroek  fi
260*83ee113eSDavid van Moolenbroek  stat=$?
261*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
262*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
263*83ee113eSDavid van Moolenbroek    exit $stat
264*83ee113eSDavid van Moolenbroek  fi
265*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
266*83ee113eSDavid van Moolenbroek
267*83ee113eSDavid van Moolenbroek  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268*83ee113eSDavid van Moolenbroek    echo "$object : \\" > "$depfile"
269*83ee113eSDavid van Moolenbroek    # Clip off the initial element (the dependent).  Don't try to be
270*83ee113eSDavid van Moolenbroek    # clever and replace this with sed code, as IRIX sed won't handle
271*83ee113eSDavid van Moolenbroek    # lines with more than a fixed number of characters (4096 in
272*83ee113eSDavid van Moolenbroek    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273*83ee113eSDavid van Moolenbroek    # the IRIX cc adds comments like '#:fec' to the end of the
274*83ee113eSDavid van Moolenbroek    # dependency line.
275*83ee113eSDavid van Moolenbroek    tr ' ' "$nl" < "$tmpdepfile" \
276*83ee113eSDavid van Moolenbroek      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277*83ee113eSDavid van Moolenbroek      | tr "$nl" ' ' >> "$depfile"
278*83ee113eSDavid van Moolenbroek    echo >> "$depfile"
279*83ee113eSDavid van Moolenbroek    # The second pass generates a dummy entry for each header file.
280*83ee113eSDavid van Moolenbroek    tr ' ' "$nl" < "$tmpdepfile" \
281*83ee113eSDavid van Moolenbroek      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282*83ee113eSDavid van Moolenbroek      >> "$depfile"
283*83ee113eSDavid van Moolenbroek  else
284*83ee113eSDavid van Moolenbroek    make_dummy_depfile
285*83ee113eSDavid van Moolenbroek  fi
286*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
287*83ee113eSDavid van Moolenbroek  ;;
288*83ee113eSDavid van Moolenbroek
289*83ee113eSDavid van Moolenbroekxlc)
290*83ee113eSDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
291*83ee113eSDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
292*83ee113eSDavid van Moolenbroek  # since it is checked for above.
293*83ee113eSDavid van Moolenbroek  exit 1
294*83ee113eSDavid van Moolenbroek  ;;
295*83ee113eSDavid van Moolenbroek
296*83ee113eSDavid van Moolenbroekaix)
297*83ee113eSDavid van Moolenbroek  # The C for AIX Compiler uses -M and outputs the dependencies
298*83ee113eSDavid van Moolenbroek  # in a .u file.  In older versions, this file always lives in the
299*83ee113eSDavid van Moolenbroek  # current directory.  Also, the AIX compiler puts '$object:' at the
300*83ee113eSDavid van Moolenbroek  # start of each line; $object doesn't have directory information.
301*83ee113eSDavid van Moolenbroek  # Version 6 uses the directory in both cases.
302*83ee113eSDavid van Moolenbroek  set_dir_from "$object"
303*83ee113eSDavid van Moolenbroek  set_base_from "$object"
304*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
305*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.u
306*83ee113eSDavid van Moolenbroek    tmpdepfile2=$base.u
307*83ee113eSDavid van Moolenbroek    tmpdepfile3=$dir.libs/$base.u
308*83ee113eSDavid van Moolenbroek    "$@" -Wc,-M
309*83ee113eSDavid van Moolenbroek  else
310*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.u
311*83ee113eSDavid van Moolenbroek    tmpdepfile2=$dir$base.u
312*83ee113eSDavid van Moolenbroek    tmpdepfile3=$dir$base.u
313*83ee113eSDavid van Moolenbroek    "$@" -M
314*83ee113eSDavid van Moolenbroek  fi
315*83ee113eSDavid van Moolenbroek  stat=$?
316*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
317*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318*83ee113eSDavid van Moolenbroek    exit $stat
319*83ee113eSDavid van Moolenbroek  fi
320*83ee113eSDavid van Moolenbroek
321*83ee113eSDavid van Moolenbroek  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322*83ee113eSDavid van Moolenbroek  do
323*83ee113eSDavid van Moolenbroek    test -f "$tmpdepfile" && break
324*83ee113eSDavid van Moolenbroek  done
325*83ee113eSDavid van Moolenbroek  aix_post_process_depfile
326*83ee113eSDavid van Moolenbroek  ;;
327*83ee113eSDavid van Moolenbroek
328*83ee113eSDavid van Moolenbroektcc)
329*83ee113eSDavid van Moolenbroek  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330*83ee113eSDavid van Moolenbroek  # FIXME: That version still under development at the moment of writing.
331*83ee113eSDavid van Moolenbroek  #        Make that this statement remains true also for stable, released
332*83ee113eSDavid van Moolenbroek  #        versions.
333*83ee113eSDavid van Moolenbroek  # It will wrap lines (doesn't matter whether long or short) with a
334*83ee113eSDavid van Moolenbroek  # trailing '\', as in:
335*83ee113eSDavid van Moolenbroek  #
336*83ee113eSDavid van Moolenbroek  #   foo.o : \
337*83ee113eSDavid van Moolenbroek  #    foo.c \
338*83ee113eSDavid van Moolenbroek  #    foo.h \
339*83ee113eSDavid van Moolenbroek  #
340*83ee113eSDavid van Moolenbroek  # It will put a trailing '\' even on the last line, and will use leading
341*83ee113eSDavid van Moolenbroek  # spaces rather than leading tabs (at least since its commit 0394caf7
342*83ee113eSDavid van Moolenbroek  # "Emit spaces for -MD").
343*83ee113eSDavid van Moolenbroek  "$@" -MD -MF "$tmpdepfile"
344*83ee113eSDavid van Moolenbroek  stat=$?
345*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
346*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
347*83ee113eSDavid van Moolenbroek    exit $stat
348*83ee113eSDavid van Moolenbroek  fi
349*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
350*83ee113eSDavid van Moolenbroek  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351*83ee113eSDavid van Moolenbroek  # We have to change lines of the first kind to '$object: \'.
352*83ee113eSDavid van Moolenbroek  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353*83ee113eSDavid van Moolenbroek  # And for each line of the second kind, we have to emit a 'dep.h:'
354*83ee113eSDavid van Moolenbroek  # dummy dependency, to avoid the deleted-header problem.
355*83ee113eSDavid van Moolenbroek  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
357*83ee113eSDavid van Moolenbroek  ;;
358*83ee113eSDavid van Moolenbroek
359*83ee113eSDavid van Moolenbroek## The order of this option in the case statement is important, since the
360*83ee113eSDavid van Moolenbroek## shell code in configure will try each of these formats in the order
361*83ee113eSDavid van Moolenbroek## listed in this file.  A plain '-MD' option would be understood by many
362*83ee113eSDavid van Moolenbroek## compilers, so we must ensure this comes after the gcc and icc options.
363*83ee113eSDavid van Moolenbroekpgcc)
364*83ee113eSDavid van Moolenbroek  # Portland's C compiler understands '-MD'.
365*83ee113eSDavid van Moolenbroek  # Will always output deps to 'file.d' where file is the root name of the
366*83ee113eSDavid van Moolenbroek  # source file under compilation, even if file resides in a subdirectory.
367*83ee113eSDavid van Moolenbroek  # The object file name does not affect the name of the '.d' file.
368*83ee113eSDavid van Moolenbroek  # pgcc 10.2 will output
369*83ee113eSDavid van Moolenbroek  #    foo.o: sub/foo.c sub/foo.h
370*83ee113eSDavid van Moolenbroek  # and will wrap long lines using '\' :
371*83ee113eSDavid van Moolenbroek  #    foo.o: sub/foo.c ... \
372*83ee113eSDavid van Moolenbroek  #     sub/foo.h ... \
373*83ee113eSDavid van Moolenbroek  #     ...
374*83ee113eSDavid van Moolenbroek  set_dir_from "$object"
375*83ee113eSDavid van Moolenbroek  # Use the source, not the object, to determine the base name, since
376*83ee113eSDavid van Moolenbroek  # that's sadly what pgcc will do too.
377*83ee113eSDavid van Moolenbroek  set_base_from "$source"
378*83ee113eSDavid van Moolenbroek  tmpdepfile=$base.d
379*83ee113eSDavid van Moolenbroek
380*83ee113eSDavid van Moolenbroek  # For projects that build the same source file twice into different object
381*83ee113eSDavid van Moolenbroek  # files, the pgcc approach of using the *source* file root name can cause
382*83ee113eSDavid van Moolenbroek  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383*83ee113eSDavid van Moolenbroek  # the same $tmpdepfile.
384*83ee113eSDavid van Moolenbroek  lockdir=$base.d-lock
385*83ee113eSDavid van Moolenbroek  trap "
386*83ee113eSDavid van Moolenbroek    echo '$0: caught signal, cleaning up...' >&2
387*83ee113eSDavid van Moolenbroek    rmdir '$lockdir'
388*83ee113eSDavid van Moolenbroek    exit 1
389*83ee113eSDavid van Moolenbroek  " 1 2 13 15
390*83ee113eSDavid van Moolenbroek  numtries=100
391*83ee113eSDavid van Moolenbroek  i=$numtries
392*83ee113eSDavid van Moolenbroek  while test $i -gt 0; do
393*83ee113eSDavid van Moolenbroek    # mkdir is a portable test-and-set.
394*83ee113eSDavid van Moolenbroek    if mkdir "$lockdir" 2>/dev/null; then
395*83ee113eSDavid van Moolenbroek      # This process acquired the lock.
396*83ee113eSDavid van Moolenbroek      "$@" -MD
397*83ee113eSDavid van Moolenbroek      stat=$?
398*83ee113eSDavid van Moolenbroek      # Release the lock.
399*83ee113eSDavid van Moolenbroek      rmdir "$lockdir"
400*83ee113eSDavid van Moolenbroek      break
401*83ee113eSDavid van Moolenbroek    else
402*83ee113eSDavid van Moolenbroek      # If the lock is being held by a different process, wait
403*83ee113eSDavid van Moolenbroek      # until the winning process is done or we timeout.
404*83ee113eSDavid van Moolenbroek      while test -d "$lockdir" && test $i -gt 0; do
405*83ee113eSDavid van Moolenbroek        sleep 1
406*83ee113eSDavid van Moolenbroek        i=`expr $i - 1`
407*83ee113eSDavid van Moolenbroek      done
408*83ee113eSDavid van Moolenbroek    fi
409*83ee113eSDavid van Moolenbroek    i=`expr $i - 1`
410*83ee113eSDavid van Moolenbroek  done
411*83ee113eSDavid van Moolenbroek  trap - 1 2 13 15
412*83ee113eSDavid van Moolenbroek  if test $i -le 0; then
413*83ee113eSDavid van Moolenbroek    echo "$0: failed to acquire lock after $numtries attempts" >&2
414*83ee113eSDavid van Moolenbroek    echo "$0: check lockdir '$lockdir'" >&2
415*83ee113eSDavid van Moolenbroek    exit 1
416*83ee113eSDavid van Moolenbroek  fi
417*83ee113eSDavid van Moolenbroek
418*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
419*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
420*83ee113eSDavid van Moolenbroek    exit $stat
421*83ee113eSDavid van Moolenbroek  fi
422*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
423*83ee113eSDavid van Moolenbroek  # Each line is of the form `foo.o: dependent.h',
424*83ee113eSDavid van Moolenbroek  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425*83ee113eSDavid van Moolenbroek  # Do two passes, one to just change these to
426*83ee113eSDavid van Moolenbroek  # `$object: dependent.h' and one to simply `dependent.h:'.
427*83ee113eSDavid van Moolenbroek  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428*83ee113eSDavid van Moolenbroek  # Some versions of the HPUX 10.20 sed can't process this invocation
429*83ee113eSDavid van Moolenbroek  # correctly.  Breaking it into two sed invocations is a workaround.
430*83ee113eSDavid van Moolenbroek  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431*83ee113eSDavid van Moolenbroek    | sed -e 's/$/ :/' >> "$depfile"
432*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
433*83ee113eSDavid van Moolenbroek  ;;
434*83ee113eSDavid van Moolenbroek
435*83ee113eSDavid van Moolenbroekhp2)
436*83ee113eSDavid van Moolenbroek  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437*83ee113eSDavid van Moolenbroek  # compilers, which have integrated preprocessors.  The correct option
438*83ee113eSDavid van Moolenbroek  # to use with these is +Maked; it writes dependencies to a file named
439*83ee113eSDavid van Moolenbroek  # 'foo.d', which lands next to the object file, wherever that
440*83ee113eSDavid van Moolenbroek  # happens to be.
441*83ee113eSDavid van Moolenbroek  # Much of this is similar to the tru64 case; see comments there.
442*83ee113eSDavid van Moolenbroek  set_dir_from  "$object"
443*83ee113eSDavid van Moolenbroek  set_base_from "$object"
444*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
445*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.d
446*83ee113eSDavid van Moolenbroek    tmpdepfile2=$dir.libs/$base.d
447*83ee113eSDavid van Moolenbroek    "$@" -Wc,+Maked
448*83ee113eSDavid van Moolenbroek  else
449*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.d
450*83ee113eSDavid van Moolenbroek    tmpdepfile2=$dir$base.d
451*83ee113eSDavid van Moolenbroek    "$@" +Maked
452*83ee113eSDavid van Moolenbroek  fi
453*83ee113eSDavid van Moolenbroek  stat=$?
454*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
455*83ee113eSDavid van Moolenbroek     rm -f "$tmpdepfile1" "$tmpdepfile2"
456*83ee113eSDavid van Moolenbroek     exit $stat
457*83ee113eSDavid van Moolenbroek  fi
458*83ee113eSDavid van Moolenbroek
459*83ee113eSDavid van Moolenbroek  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460*83ee113eSDavid van Moolenbroek  do
461*83ee113eSDavid van Moolenbroek    test -f "$tmpdepfile" && break
462*83ee113eSDavid van Moolenbroek  done
463*83ee113eSDavid van Moolenbroek  if test -f "$tmpdepfile"; then
464*83ee113eSDavid van Moolenbroek    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465*83ee113eSDavid van Moolenbroek    # Add 'dependent.h:' lines.
466*83ee113eSDavid van Moolenbroek    sed -ne '2,${
467*83ee113eSDavid van Moolenbroek               s/^ *//
468*83ee113eSDavid van Moolenbroek               s/ \\*$//
469*83ee113eSDavid van Moolenbroek               s/$/:/
470*83ee113eSDavid van Moolenbroek               p
471*83ee113eSDavid van Moolenbroek             }' "$tmpdepfile" >> "$depfile"
472*83ee113eSDavid van Moolenbroek  else
473*83ee113eSDavid van Moolenbroek    make_dummy_depfile
474*83ee113eSDavid van Moolenbroek  fi
475*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile" "$tmpdepfile2"
476*83ee113eSDavid van Moolenbroek  ;;
477*83ee113eSDavid van Moolenbroek
478*83ee113eSDavid van Moolenbroektru64)
479*83ee113eSDavid van Moolenbroek  # The Tru64 compiler uses -MD to generate dependencies as a side
480*83ee113eSDavid van Moolenbroek  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481*83ee113eSDavid van Moolenbroek  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482*83ee113eSDavid van Moolenbroek  # dependencies in 'foo.d' instead, so we check for that too.
483*83ee113eSDavid van Moolenbroek  # Subdirectories are respected.
484*83ee113eSDavid van Moolenbroek  set_dir_from  "$object"
485*83ee113eSDavid van Moolenbroek  set_base_from "$object"
486*83ee113eSDavid van Moolenbroek
487*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
488*83ee113eSDavid van Moolenbroek    # Libtool generates 2 separate objects for the 2 libraries.  These
489*83ee113eSDavid van Moolenbroek    # two compilations output dependencies in $dir.libs/$base.o.d and
490*83ee113eSDavid van Moolenbroek    # in $dir$base.o.d.  We have to check for both files, because
491*83ee113eSDavid van Moolenbroek    # one of the two compilations can be disabled.  We should prefer
492*83ee113eSDavid van Moolenbroek    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493*83ee113eSDavid van Moolenbroek    # automatically cleaned when .libs/ is deleted, while ignoring
494*83ee113eSDavid van Moolenbroek    # the former would cause a distcleancheck panic.
495*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496*83ee113eSDavid van Moolenbroek    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497*83ee113eSDavid van Moolenbroek    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498*83ee113eSDavid van Moolenbroek    "$@" -Wc,-MD
499*83ee113eSDavid van Moolenbroek  else
500*83ee113eSDavid van Moolenbroek    tmpdepfile1=$dir$base.d
501*83ee113eSDavid van Moolenbroek    tmpdepfile2=$dir$base.d
502*83ee113eSDavid van Moolenbroek    tmpdepfile3=$dir$base.d
503*83ee113eSDavid van Moolenbroek    "$@" -MD
504*83ee113eSDavid van Moolenbroek  fi
505*83ee113eSDavid van Moolenbroek
506*83ee113eSDavid van Moolenbroek  stat=$?
507*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
508*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509*83ee113eSDavid van Moolenbroek    exit $stat
510*83ee113eSDavid van Moolenbroek  fi
511*83ee113eSDavid van Moolenbroek
512*83ee113eSDavid van Moolenbroek  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513*83ee113eSDavid van Moolenbroek  do
514*83ee113eSDavid van Moolenbroek    test -f "$tmpdepfile" && break
515*83ee113eSDavid van Moolenbroek  done
516*83ee113eSDavid van Moolenbroek  # Same post-processing that is required for AIX mode.
517*83ee113eSDavid van Moolenbroek  aix_post_process_depfile
518*83ee113eSDavid van Moolenbroek  ;;
519*83ee113eSDavid van Moolenbroek
520*83ee113eSDavid van Moolenbroekmsvc7)
521*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
522*83ee113eSDavid van Moolenbroek    showIncludes=-Wc,-showIncludes
523*83ee113eSDavid van Moolenbroek  else
524*83ee113eSDavid van Moolenbroek    showIncludes=-showIncludes
525*83ee113eSDavid van Moolenbroek  fi
526*83ee113eSDavid van Moolenbroek  "$@" $showIncludes > "$tmpdepfile"
527*83ee113eSDavid van Moolenbroek  stat=$?
528*83ee113eSDavid van Moolenbroek  grep -v '^Note: including file: ' "$tmpdepfile"
529*83ee113eSDavid van Moolenbroek  if test $stat -ne 0; then
530*83ee113eSDavid van Moolenbroek    rm -f "$tmpdepfile"
531*83ee113eSDavid van Moolenbroek    exit $stat
532*83ee113eSDavid van Moolenbroek  fi
533*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
534*83ee113eSDavid van Moolenbroek  echo "$object : \\" > "$depfile"
535*83ee113eSDavid van Moolenbroek  # The first sed program below extracts the file names and escapes
536*83ee113eSDavid van Moolenbroek  # backslashes for cygpath.  The second sed program outputs the file
537*83ee113eSDavid van Moolenbroek  # name when reading, but also accumulates all include files in the
538*83ee113eSDavid van Moolenbroek  # hold buffer in order to output them again at the end.  This only
539*83ee113eSDavid van Moolenbroek  # works with sed implementations that can handle large buffers.
540*83ee113eSDavid van Moolenbroek  sed < "$tmpdepfile" -n '
541*83ee113eSDavid van Moolenbroek/^Note: including file:  *\(.*\)/ {
542*83ee113eSDavid van Moolenbroek  s//\1/
543*83ee113eSDavid van Moolenbroek  s/\\/\\\\/g
544*83ee113eSDavid van Moolenbroek  p
545*83ee113eSDavid van Moolenbroek}' | $cygpath_u | sort -u | sed -n '
546*83ee113eSDavid van Moolenbroeks/ /\\ /g
547*83ee113eSDavid van Moolenbroeks/\(.*\)/'"$tab"'\1 \\/p
548*83ee113eSDavid van Moolenbroeks/.\(.*\) \\/\1:/
549*83ee113eSDavid van MoolenbroekH
550*83ee113eSDavid van Moolenbroek$ {
551*83ee113eSDavid van Moolenbroek  s/.*/'"$tab"'/
552*83ee113eSDavid van Moolenbroek  G
553*83ee113eSDavid van Moolenbroek  p
554*83ee113eSDavid van Moolenbroek}' >> "$depfile"
555*83ee113eSDavid van Moolenbroek  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
557*83ee113eSDavid van Moolenbroek  ;;
558*83ee113eSDavid van Moolenbroek
559*83ee113eSDavid van Moolenbroekmsvc7msys)
560*83ee113eSDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
561*83ee113eSDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
562*83ee113eSDavid van Moolenbroek  # since it is checked for above.
563*83ee113eSDavid van Moolenbroek  exit 1
564*83ee113eSDavid van Moolenbroek  ;;
565*83ee113eSDavid van Moolenbroek
566*83ee113eSDavid van Moolenbroek#nosideeffect)
567*83ee113eSDavid van Moolenbroek  # This comment above is used by automake to tell side-effect
568*83ee113eSDavid van Moolenbroek  # dependency tracking mechanisms from slower ones.
569*83ee113eSDavid van Moolenbroek
570*83ee113eSDavid van Moolenbroekdashmstdout)
571*83ee113eSDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
572*83ee113eSDavid van Moolenbroek  # always write the preprocessed file to stdout, regardless of -o.
573*83ee113eSDavid van Moolenbroek  "$@" || exit $?
574*83ee113eSDavid van Moolenbroek
575*83ee113eSDavid van Moolenbroek  # Remove the call to Libtool.
576*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
577*83ee113eSDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
578*83ee113eSDavid van Moolenbroek      shift
579*83ee113eSDavid van Moolenbroek    done
580*83ee113eSDavid van Moolenbroek    shift
581*83ee113eSDavid van Moolenbroek  fi
582*83ee113eSDavid van Moolenbroek
583*83ee113eSDavid van Moolenbroek  # Remove '-o $object'.
584*83ee113eSDavid van Moolenbroek  IFS=" "
585*83ee113eSDavid van Moolenbroek  for arg
586*83ee113eSDavid van Moolenbroek  do
587*83ee113eSDavid van Moolenbroek    case $arg in
588*83ee113eSDavid van Moolenbroek    -o)
589*83ee113eSDavid van Moolenbroek      shift
590*83ee113eSDavid van Moolenbroek      ;;
591*83ee113eSDavid van Moolenbroek    $object)
592*83ee113eSDavid van Moolenbroek      shift
593*83ee113eSDavid van Moolenbroek      ;;
594*83ee113eSDavid van Moolenbroek    *)
595*83ee113eSDavid van Moolenbroek      set fnord "$@" "$arg"
596*83ee113eSDavid van Moolenbroek      shift # fnord
597*83ee113eSDavid van Moolenbroek      shift # $arg
598*83ee113eSDavid van Moolenbroek      ;;
599*83ee113eSDavid van Moolenbroek    esac
600*83ee113eSDavid van Moolenbroek  done
601*83ee113eSDavid van Moolenbroek
602*83ee113eSDavid van Moolenbroek  test -z "$dashmflag" && dashmflag=-M
603*83ee113eSDavid van Moolenbroek  # Require at least two characters before searching for ':'
604*83ee113eSDavid van Moolenbroek  # in the target name.  This is to cope with DOS-style filenames:
605*83ee113eSDavid van Moolenbroek  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606*83ee113eSDavid van Moolenbroek  "$@" $dashmflag |
607*83ee113eSDavid van Moolenbroek    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
609*83ee113eSDavid van Moolenbroek  cat < "$tmpdepfile" > "$depfile"
610*83ee113eSDavid van Moolenbroek  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611*83ee113eSDavid van Moolenbroek  # correctly.  Breaking it into two sed invocations is a workaround.
612*83ee113eSDavid van Moolenbroek  tr ' ' "$nl" < "$tmpdepfile" \
613*83ee113eSDavid van Moolenbroek    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614*83ee113eSDavid van Moolenbroek    | sed -e 's/$/ :/' >> "$depfile"
615*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
616*83ee113eSDavid van Moolenbroek  ;;
617*83ee113eSDavid van Moolenbroek
618*83ee113eSDavid van MoolenbroekdashXmstdout)
619*83ee113eSDavid van Moolenbroek  # This case only exists to satisfy depend.m4.  It is never actually
620*83ee113eSDavid van Moolenbroek  # run, as this mode is specially recognized in the preamble.
621*83ee113eSDavid van Moolenbroek  exit 1
622*83ee113eSDavid van Moolenbroek  ;;
623*83ee113eSDavid van Moolenbroek
624*83ee113eSDavid van Moolenbroekmakedepend)
625*83ee113eSDavid van Moolenbroek  "$@" || exit $?
626*83ee113eSDavid van Moolenbroek  # Remove any Libtool call
627*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
628*83ee113eSDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
629*83ee113eSDavid van Moolenbroek      shift
630*83ee113eSDavid van Moolenbroek    done
631*83ee113eSDavid van Moolenbroek    shift
632*83ee113eSDavid van Moolenbroek  fi
633*83ee113eSDavid van Moolenbroek  # X makedepend
634*83ee113eSDavid van Moolenbroek  shift
635*83ee113eSDavid van Moolenbroek  cleared=no eat=no
636*83ee113eSDavid van Moolenbroek  for arg
637*83ee113eSDavid van Moolenbroek  do
638*83ee113eSDavid van Moolenbroek    case $cleared in
639*83ee113eSDavid van Moolenbroek    no)
640*83ee113eSDavid van Moolenbroek      set ""; shift
641*83ee113eSDavid van Moolenbroek      cleared=yes ;;
642*83ee113eSDavid van Moolenbroek    esac
643*83ee113eSDavid van Moolenbroek    if test $eat = yes; then
644*83ee113eSDavid van Moolenbroek      eat=no
645*83ee113eSDavid van Moolenbroek      continue
646*83ee113eSDavid van Moolenbroek    fi
647*83ee113eSDavid van Moolenbroek    case "$arg" in
648*83ee113eSDavid van Moolenbroek    -D*|-I*)
649*83ee113eSDavid van Moolenbroek      set fnord "$@" "$arg"; shift ;;
650*83ee113eSDavid van Moolenbroek    # Strip any option that makedepend may not understand.  Remove
651*83ee113eSDavid van Moolenbroek    # the object too, otherwise makedepend will parse it as a source file.
652*83ee113eSDavid van Moolenbroek    -arch)
653*83ee113eSDavid van Moolenbroek      eat=yes ;;
654*83ee113eSDavid van Moolenbroek    -*|$object)
655*83ee113eSDavid van Moolenbroek      ;;
656*83ee113eSDavid van Moolenbroek    *)
657*83ee113eSDavid van Moolenbroek      set fnord "$@" "$arg"; shift ;;
658*83ee113eSDavid van Moolenbroek    esac
659*83ee113eSDavid van Moolenbroek  done
660*83ee113eSDavid van Moolenbroek  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661*83ee113eSDavid van Moolenbroek  touch "$tmpdepfile"
662*83ee113eSDavid van Moolenbroek  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
664*83ee113eSDavid van Moolenbroek  # makedepend may prepend the VPATH from the source file name to the object.
665*83ee113eSDavid van Moolenbroek  # No need to regex-escape $object, excess matching of '.' is harmless.
666*83ee113eSDavid van Moolenbroek  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667*83ee113eSDavid van Moolenbroek  # Some versions of the HPUX 10.20 sed can't process the last invocation
668*83ee113eSDavid van Moolenbroek  # correctly.  Breaking it into two sed invocations is a workaround.
669*83ee113eSDavid van Moolenbroek  sed '1,2d' "$tmpdepfile" \
670*83ee113eSDavid van Moolenbroek    | tr ' ' "$nl" \
671*83ee113eSDavid van Moolenbroek    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672*83ee113eSDavid van Moolenbroek    | sed -e 's/$/ :/' >> "$depfile"
673*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile" "$tmpdepfile".bak
674*83ee113eSDavid van Moolenbroek  ;;
675*83ee113eSDavid van Moolenbroek
676*83ee113eSDavid van Moolenbroekcpp)
677*83ee113eSDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
678*83ee113eSDavid van Moolenbroek  # always write the preprocessed file to stdout.
679*83ee113eSDavid van Moolenbroek  "$@" || exit $?
680*83ee113eSDavid van Moolenbroek
681*83ee113eSDavid van Moolenbroek  # Remove the call to Libtool.
682*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
683*83ee113eSDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
684*83ee113eSDavid van Moolenbroek      shift
685*83ee113eSDavid van Moolenbroek    done
686*83ee113eSDavid van Moolenbroek    shift
687*83ee113eSDavid van Moolenbroek  fi
688*83ee113eSDavid van Moolenbroek
689*83ee113eSDavid van Moolenbroek  # Remove '-o $object'.
690*83ee113eSDavid van Moolenbroek  IFS=" "
691*83ee113eSDavid van Moolenbroek  for arg
692*83ee113eSDavid van Moolenbroek  do
693*83ee113eSDavid van Moolenbroek    case $arg in
694*83ee113eSDavid van Moolenbroek    -o)
695*83ee113eSDavid van Moolenbroek      shift
696*83ee113eSDavid van Moolenbroek      ;;
697*83ee113eSDavid van Moolenbroek    $object)
698*83ee113eSDavid van Moolenbroek      shift
699*83ee113eSDavid van Moolenbroek      ;;
700*83ee113eSDavid van Moolenbroek    *)
701*83ee113eSDavid van Moolenbroek      set fnord "$@" "$arg"
702*83ee113eSDavid van Moolenbroek      shift # fnord
703*83ee113eSDavid van Moolenbroek      shift # $arg
704*83ee113eSDavid van Moolenbroek      ;;
705*83ee113eSDavid van Moolenbroek    esac
706*83ee113eSDavid van Moolenbroek  done
707*83ee113eSDavid van Moolenbroek
708*83ee113eSDavid van Moolenbroek  "$@" -E \
709*83ee113eSDavid van Moolenbroek    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710*83ee113eSDavid van Moolenbroek             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711*83ee113eSDavid van Moolenbroek    | sed '$ s: \\$::' > "$tmpdepfile"
712*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
713*83ee113eSDavid van Moolenbroek  echo "$object : \\" > "$depfile"
714*83ee113eSDavid van Moolenbroek  cat < "$tmpdepfile" >> "$depfile"
715*83ee113eSDavid van Moolenbroek  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
717*83ee113eSDavid van Moolenbroek  ;;
718*83ee113eSDavid van Moolenbroek
719*83ee113eSDavid van Moolenbroekmsvisualcpp)
720*83ee113eSDavid van Moolenbroek  # Important note: in order to support this mode, a compiler *must*
721*83ee113eSDavid van Moolenbroek  # always write the preprocessed file to stdout.
722*83ee113eSDavid van Moolenbroek  "$@" || exit $?
723*83ee113eSDavid van Moolenbroek
724*83ee113eSDavid van Moolenbroek  # Remove the call to Libtool.
725*83ee113eSDavid van Moolenbroek  if test "$libtool" = yes; then
726*83ee113eSDavid van Moolenbroek    while test "X$1" != 'X--mode=compile'; do
727*83ee113eSDavid van Moolenbroek      shift
728*83ee113eSDavid van Moolenbroek    done
729*83ee113eSDavid van Moolenbroek    shift
730*83ee113eSDavid van Moolenbroek  fi
731*83ee113eSDavid van Moolenbroek
732*83ee113eSDavid van Moolenbroek  IFS=" "
733*83ee113eSDavid van Moolenbroek  for arg
734*83ee113eSDavid van Moolenbroek  do
735*83ee113eSDavid van Moolenbroek    case "$arg" in
736*83ee113eSDavid van Moolenbroek    -o)
737*83ee113eSDavid van Moolenbroek      shift
738*83ee113eSDavid van Moolenbroek      ;;
739*83ee113eSDavid van Moolenbroek    $object)
740*83ee113eSDavid van Moolenbroek      shift
741*83ee113eSDavid van Moolenbroek      ;;
742*83ee113eSDavid van Moolenbroek    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743*83ee113eSDavid van Moolenbroek        set fnord "$@"
744*83ee113eSDavid van Moolenbroek        shift
745*83ee113eSDavid van Moolenbroek        shift
746*83ee113eSDavid van Moolenbroek        ;;
747*83ee113eSDavid van Moolenbroek    *)
748*83ee113eSDavid van Moolenbroek        set fnord "$@" "$arg"
749*83ee113eSDavid van Moolenbroek        shift
750*83ee113eSDavid van Moolenbroek        shift
751*83ee113eSDavid van Moolenbroek        ;;
752*83ee113eSDavid van Moolenbroek    esac
753*83ee113eSDavid van Moolenbroek  done
754*83ee113eSDavid van Moolenbroek  "$@" -E 2>/dev/null |
755*83ee113eSDavid van Moolenbroek  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756*83ee113eSDavid van Moolenbroek  rm -f "$depfile"
757*83ee113eSDavid van Moolenbroek  echo "$object : \\" > "$depfile"
758*83ee113eSDavid van Moolenbroek  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759*83ee113eSDavid van Moolenbroek  echo "$tab" >> "$depfile"
760*83ee113eSDavid van Moolenbroek  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761*83ee113eSDavid van Moolenbroek  rm -f "$tmpdepfile"
762*83ee113eSDavid van Moolenbroek  ;;
763*83ee113eSDavid van Moolenbroek
764*83ee113eSDavid van Moolenbroekmsvcmsys)
765*83ee113eSDavid van Moolenbroek  # This case exists only to let depend.m4 do its work.  It works by
766*83ee113eSDavid van Moolenbroek  # looking at the text of this script.  This case will never be run,
767*83ee113eSDavid van Moolenbroek  # since it is checked for above.
768*83ee113eSDavid van Moolenbroek  exit 1
769*83ee113eSDavid van Moolenbroek  ;;
770*83ee113eSDavid van Moolenbroek
771*83ee113eSDavid van Moolenbroeknone)
772*83ee113eSDavid van Moolenbroek  exec "$@"
773*83ee113eSDavid van Moolenbroek  ;;
774*83ee113eSDavid van Moolenbroek
775*83ee113eSDavid van Moolenbroek*)
776*83ee113eSDavid van Moolenbroek  echo "Unknown depmode $depmode" 1>&2
777*83ee113eSDavid van Moolenbroek  exit 1
778*83ee113eSDavid van Moolenbroek  ;;
779*83ee113eSDavid van Moolenbroekesac
780*83ee113eSDavid van Moolenbroek
781*83ee113eSDavid van Moolenbroekexit 0
782*83ee113eSDavid van Moolenbroek
783*83ee113eSDavid van Moolenbroek# Local Variables:
784*83ee113eSDavid van Moolenbroek# mode: shell-script
785*83ee113eSDavid van Moolenbroek# sh-indentation: 2
786*83ee113eSDavid van Moolenbroek# eval: (add-hook 'write-file-hooks 'time-stamp)
787*83ee113eSDavid van Moolenbroek# time-stamp-start: "scriptversion="
788*83ee113eSDavid van Moolenbroek# time-stamp-format: "%:y-%02m-%02d.%02H"
789*83ee113eSDavid van Moolenbroek# time-stamp-time-zone: "UTC"
790*83ee113eSDavid van Moolenbroek# time-stamp-end: "; # UTC"
791*83ee113eSDavid van Moolenbroek# End:
792