depcomp revision e9554658
1e9554658Smrg#! /bin/sh 2e9554658Smrg# depcomp - compile a program generating dependencies as side-effects 3e9554658Smrg 4e9554658Smrgscriptversion=2006-10-15.18 5e9554658Smrg 6e9554658Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 7e9554658Smrg# Foundation, Inc. 8e9554658Smrg 9e9554658Smrg# This program is free software; you can redistribute it and/or modify 10e9554658Smrg# it under the terms of the GNU General Public License as published by 11e9554658Smrg# the Free Software Foundation; either version 2, or (at your option) 12e9554658Smrg# any later version. 13e9554658Smrg 14e9554658Smrg# This program is distributed in the hope that it will be useful, 15e9554658Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16e9554658Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17e9554658Smrg# GNU General Public License for more details. 18e9554658Smrg 19e9554658Smrg# You should have received a copy of the GNU General Public License 20e9554658Smrg# along with this program; if not, write to the Free Software 21e9554658Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22e9554658Smrg# 02110-1301, USA. 23e9554658Smrg 24e9554658Smrg# As a special exception to the GNU General Public License, if you 25e9554658Smrg# distribute this file as part of a program that contains a 26e9554658Smrg# configuration script generated by Autoconf, you may include it under 27e9554658Smrg# the same distribution terms that you use for the rest of that program. 28e9554658Smrg 29e9554658Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30e9554658Smrg 31e9554658Smrgcase $1 in 32e9554658Smrg '') 33e9554658Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34e9554658Smrg exit 1; 35e9554658Smrg ;; 36e9554658Smrg -h | --h*) 37e9554658Smrg cat <<\EOF 38e9554658SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39e9554658Smrg 40e9554658SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41e9554658Smrgas side-effects. 42e9554658Smrg 43e9554658SmrgEnvironment variables: 44e9554658Smrg depmode Dependency tracking mode. 45e9554658Smrg source Source file read by `PROGRAMS ARGS'. 46e9554658Smrg object Object file output by `PROGRAMS ARGS'. 47e9554658Smrg DEPDIR directory where to store dependencies. 48e9554658Smrg depfile Dependency file to output. 49e9554658Smrg tmpdepfile Temporary file to use when outputing dependencies. 50e9554658Smrg libtool Whether libtool is used (yes/no). 51e9554658Smrg 52e9554658SmrgReport bugs to <bug-automake@gnu.org>. 53e9554658SmrgEOF 54e9554658Smrg exit $? 55e9554658Smrg ;; 56e9554658Smrg -v | --v*) 57e9554658Smrg echo "depcomp $scriptversion" 58e9554658Smrg exit $? 59e9554658Smrg ;; 60e9554658Smrgesac 61e9554658Smrg 62e9554658Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63e9554658Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64e9554658Smrg exit 1 65e9554658Smrgfi 66e9554658Smrg 67e9554658Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68e9554658Smrgdepfile=${depfile-`echo "$object" | 69e9554658Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70e9554658Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71e9554658Smrg 72e9554658Smrgrm -f "$tmpdepfile" 73e9554658Smrg 74e9554658Smrg# Some modes work just like other modes, but use different flags. We 75e9554658Smrg# parameterize here, but still list the modes in the big case below, 76e9554658Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77e9554658Smrg# here, because this file can only contain one case statement. 78e9554658Smrgif test "$depmode" = hp; then 79e9554658Smrg # HP compiler uses -M and no extra arg. 80e9554658Smrg gccflag=-M 81e9554658Smrg depmode=gcc 82e9554658Smrgfi 83e9554658Smrg 84e9554658Smrgif test "$depmode" = dashXmstdout; then 85e9554658Smrg # This is just like dashmstdout with a different argument. 86e9554658Smrg dashmflag=-xM 87e9554658Smrg depmode=dashmstdout 88e9554658Smrgfi 89e9554658Smrg 90e9554658Smrgcase "$depmode" in 91e9554658Smrggcc3) 92e9554658Smrg## gcc 3 implements dependency tracking that does exactly what 93e9554658Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94e9554658Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 95e9554658Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96e9554658Smrg## the command line argument order; so add the flags where they 97e9554658Smrg## appear in depend2.am. Note that the slowdown incurred here 98e9554658Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99e9554658Smrg for arg 100e9554658Smrg do 101e9554658Smrg case $arg in 102e9554658Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103e9554658Smrg *) set fnord "$@" "$arg" ;; 104e9554658Smrg esac 105e9554658Smrg shift # fnord 106e9554658Smrg shift # $arg 107e9554658Smrg done 108e9554658Smrg "$@" 109e9554658Smrg stat=$? 110e9554658Smrg if test $stat -eq 0; then : 111e9554658Smrg else 112e9554658Smrg rm -f "$tmpdepfile" 113e9554658Smrg exit $stat 114e9554658Smrg fi 115e9554658Smrg mv "$tmpdepfile" "$depfile" 116e9554658Smrg ;; 117e9554658Smrg 118e9554658Smrggcc) 119e9554658Smrg## There are various ways to get dependency output from gcc. Here's 120e9554658Smrg## why we pick this rather obscure method: 121e9554658Smrg## - Don't want to use -MD because we'd like the dependencies to end 122e9554658Smrg## up in a subdir. Having to rename by hand is ugly. 123e9554658Smrg## (We might end up doing this anyway to support other compilers.) 124e9554658Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125e9554658Smrg## -MM, not -M (despite what the docs say). 126e9554658Smrg## - Using -M directly means running the compiler twice (even worse 127e9554658Smrg## than renaming). 128e9554658Smrg if test -z "$gccflag"; then 129e9554658Smrg gccflag=-MD, 130e9554658Smrg fi 131e9554658Smrg "$@" -Wp,"$gccflag$tmpdepfile" 132e9554658Smrg stat=$? 133e9554658Smrg if test $stat -eq 0; then : 134e9554658Smrg else 135e9554658Smrg rm -f "$tmpdepfile" 136e9554658Smrg exit $stat 137e9554658Smrg fi 138e9554658Smrg rm -f "$depfile" 139e9554658Smrg echo "$object : \\" > "$depfile" 140e9554658Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141e9554658Smrg## The second -e expression handles DOS-style file names with drive letters. 142e9554658Smrg sed -e 's/^[^:]*: / /' \ 143e9554658Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144e9554658Smrg## This next piece of magic avoids the `deleted header file' problem. 145e9554658Smrg## The problem is that when a header file which appears in a .P file 146e9554658Smrg## is deleted, the dependency causes make to die (because there is 147e9554658Smrg## typically no way to rebuild the header). We avoid this by adding 148e9554658Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 149e9554658Smrg## this for us directly. 150e9554658Smrg tr ' ' ' 151e9554658Smrg' < "$tmpdepfile" | 152e9554658Smrg## Some versions of gcc put a space before the `:'. On the theory 153e9554658Smrg## that the space means something, we add a space to the output as 154e9554658Smrg## well. 155e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 156e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 157e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158e9554658Smrg rm -f "$tmpdepfile" 159e9554658Smrg ;; 160e9554658Smrg 161e9554658Smrghp) 162e9554658Smrg # This case exists only to let depend.m4 do its work. It works by 163e9554658Smrg # looking at the text of this script. This case will never be run, 164e9554658Smrg # since it is checked for above. 165e9554658Smrg exit 1 166e9554658Smrg ;; 167e9554658Smrg 168e9554658Smrgsgi) 169e9554658Smrg if test "$libtool" = yes; then 170e9554658Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171e9554658Smrg else 172e9554658Smrg "$@" -MDupdate "$tmpdepfile" 173e9554658Smrg fi 174e9554658Smrg stat=$? 175e9554658Smrg if test $stat -eq 0; then : 176e9554658Smrg else 177e9554658Smrg rm -f "$tmpdepfile" 178e9554658Smrg exit $stat 179e9554658Smrg fi 180e9554658Smrg rm -f "$depfile" 181e9554658Smrg 182e9554658Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183e9554658Smrg echo "$object : \\" > "$depfile" 184e9554658Smrg 185e9554658Smrg # Clip off the initial element (the dependent). Don't try to be 186e9554658Smrg # clever and replace this with sed code, as IRIX sed won't handle 187e9554658Smrg # lines with more than a fixed number of characters (4096 in 188e9554658Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189e9554658Smrg # the IRIX cc adds comments like `#:fec' to the end of the 190e9554658Smrg # dependency line. 191e9554658Smrg tr ' ' ' 192e9554658Smrg' < "$tmpdepfile" \ 193e9554658Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194e9554658Smrg tr ' 195e9554658Smrg' ' ' >> $depfile 196e9554658Smrg echo >> $depfile 197e9554658Smrg 198e9554658Smrg # The second pass generates a dummy entry for each header file. 199e9554658Smrg tr ' ' ' 200e9554658Smrg' < "$tmpdepfile" \ 201e9554658Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202e9554658Smrg >> $depfile 203e9554658Smrg else 204e9554658Smrg # The sourcefile does not contain any dependencies, so just 205e9554658Smrg # store a dummy comment line, to avoid errors with the Makefile 206e9554658Smrg # "include basename.Plo" scheme. 207e9554658Smrg echo "#dummy" > "$depfile" 208e9554658Smrg fi 209e9554658Smrg rm -f "$tmpdepfile" 210e9554658Smrg ;; 211e9554658Smrg 212e9554658Smrgaix) 213e9554658Smrg # The C for AIX Compiler uses -M and outputs the dependencies 214e9554658Smrg # in a .u file. In older versions, this file always lives in the 215e9554658Smrg # current directory. Also, the AIX compiler puts `$object:' at the 216e9554658Smrg # start of each line; $object doesn't have directory information. 217e9554658Smrg # Version 6 uses the directory in both cases. 218e9554658Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 219e9554658Smrg tmpdepfile="$stripped.u" 220e9554658Smrg if test "$libtool" = yes; then 221e9554658Smrg "$@" -Wc,-M 222e9554658Smrg else 223e9554658Smrg "$@" -M 224e9554658Smrg fi 225e9554658Smrg stat=$? 226e9554658Smrg 227e9554658Smrg if test -f "$tmpdepfile"; then : 228e9554658Smrg else 229e9554658Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 230e9554658Smrg tmpdepfile="$stripped.u" 231e9554658Smrg fi 232e9554658Smrg 233e9554658Smrg if test $stat -eq 0; then : 234e9554658Smrg else 235e9554658Smrg rm -f "$tmpdepfile" 236e9554658Smrg exit $stat 237e9554658Smrg fi 238e9554658Smrg 239e9554658Smrg if test -f "$tmpdepfile"; then 240e9554658Smrg outname="$stripped.o" 241e9554658Smrg # Each line is of the form `foo.o: dependent.h'. 242e9554658Smrg # Do two passes, one to just change these to 243e9554658Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 244e9554658Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 245e9554658Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 246e9554658Smrg else 247e9554658Smrg # The sourcefile does not contain any dependencies, so just 248e9554658Smrg # store a dummy comment line, to avoid errors with the Makefile 249e9554658Smrg # "include basename.Plo" scheme. 250e9554658Smrg echo "#dummy" > "$depfile" 251e9554658Smrg fi 252e9554658Smrg rm -f "$tmpdepfile" 253e9554658Smrg ;; 254e9554658Smrg 255e9554658Smrgicc) 256e9554658Smrg # Intel's C compiler understands `-MD -MF file'. However on 257e9554658Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 258e9554658Smrg # ICC 7.0 will fill foo.d with something like 259e9554658Smrg # foo.o: sub/foo.c 260e9554658Smrg # foo.o: sub/foo.h 261e9554658Smrg # which is wrong. We want: 262e9554658Smrg # sub/foo.o: sub/foo.c 263e9554658Smrg # sub/foo.o: sub/foo.h 264e9554658Smrg # sub/foo.c: 265e9554658Smrg # sub/foo.h: 266e9554658Smrg # ICC 7.1 will output 267e9554658Smrg # foo.o: sub/foo.c sub/foo.h 268e9554658Smrg # and will wrap long lines using \ : 269e9554658Smrg # foo.o: sub/foo.c ... \ 270e9554658Smrg # sub/foo.h ... \ 271e9554658Smrg # ... 272e9554658Smrg 273e9554658Smrg "$@" -MD -MF "$tmpdepfile" 274e9554658Smrg stat=$? 275e9554658Smrg if test $stat -eq 0; then : 276e9554658Smrg else 277e9554658Smrg rm -f "$tmpdepfile" 278e9554658Smrg exit $stat 279e9554658Smrg fi 280e9554658Smrg rm -f "$depfile" 281e9554658Smrg # Each line is of the form `foo.o: dependent.h', 282e9554658Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 283e9554658Smrg # Do two passes, one to just change these to 284e9554658Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 285e9554658Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 286e9554658Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 287e9554658Smrg # correctly. Breaking it into two sed invocations is a workaround. 288e9554658Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 289e9554658Smrg sed -e 's/$/ :/' >> "$depfile" 290e9554658Smrg rm -f "$tmpdepfile" 291e9554658Smrg ;; 292e9554658Smrg 293e9554658Smrghp2) 294e9554658Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 295e9554658Smrg # compilers, which have integrated preprocessors. The correct option 296e9554658Smrg # to use with these is +Maked; it writes dependencies to a file named 297e9554658Smrg # 'foo.d', which lands next to the object file, wherever that 298e9554658Smrg # happens to be. 299e9554658Smrg # Much of this is similar to the tru64 case; see comments there. 300e9554658Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 301e9554658Smrg test "x$dir" = "x$object" && dir= 302e9554658Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 303e9554658Smrg if test "$libtool" = yes; then 304e9554658Smrg tmpdepfile1=$dir$base.d 305e9554658Smrg tmpdepfile2=$dir.libs/$base.d 306e9554658Smrg "$@" -Wc,+Maked 307e9554658Smrg else 308e9554658Smrg tmpdepfile1=$dir$base.d 309e9554658Smrg tmpdepfile2=$dir$base.d 310e9554658Smrg "$@" +Maked 311e9554658Smrg fi 312e9554658Smrg stat=$? 313e9554658Smrg if test $stat -eq 0; then : 314e9554658Smrg else 315e9554658Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 316e9554658Smrg exit $stat 317e9554658Smrg fi 318e9554658Smrg 319e9554658Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 320e9554658Smrg do 321e9554658Smrg test -f "$tmpdepfile" && break 322e9554658Smrg done 323e9554658Smrg if test -f "$tmpdepfile"; then 324e9554658Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 325e9554658Smrg # Add `dependent.h:' lines. 326e9554658Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 327e9554658Smrg else 328e9554658Smrg echo "#dummy" > "$depfile" 329e9554658Smrg fi 330e9554658Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 331e9554658Smrg ;; 332e9554658Smrg 333e9554658Smrgtru64) 334e9554658Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 335e9554658Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 336e9554658Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 337e9554658Smrg # dependencies in `foo.d' instead, so we check for that too. 338e9554658Smrg # Subdirectories are respected. 339e9554658Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 340e9554658Smrg test "x$dir" = "x$object" && dir= 341e9554658Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 342e9554658Smrg 343e9554658Smrg if test "$libtool" = yes; then 344e9554658Smrg # With Tru64 cc, shared objects can also be used to make a 345e9554658Smrg # static library. This mechanism is used in libtool 1.4 series to 346e9554658Smrg # handle both shared and static libraries in a single compilation. 347e9554658Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 348e9554658Smrg # 349e9554658Smrg # With libtool 1.5 this exception was removed, and libtool now 350e9554658Smrg # generates 2 separate objects for the 2 libraries. These two 351e9554658Smrg # compilations output dependencies in $dir.libs/$base.o.d and 352e9554658Smrg # in $dir$base.o.d. We have to check for both files, because 353e9554658Smrg # one of the two compilations can be disabled. We should prefer 354e9554658Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 355e9554658Smrg # automatically cleaned when .libs/ is deleted, while ignoring 356e9554658Smrg # the former would cause a distcleancheck panic. 357e9554658Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 358e9554658Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 359e9554658Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 360e9554658Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 361e9554658Smrg "$@" -Wc,-MD 362e9554658Smrg else 363e9554658Smrg tmpdepfile1=$dir$base.o.d 364e9554658Smrg tmpdepfile2=$dir$base.d 365e9554658Smrg tmpdepfile3=$dir$base.d 366e9554658Smrg tmpdepfile4=$dir$base.d 367e9554658Smrg "$@" -MD 368e9554658Smrg fi 369e9554658Smrg 370e9554658Smrg stat=$? 371e9554658Smrg if test $stat -eq 0; then : 372e9554658Smrg else 373e9554658Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 374e9554658Smrg exit $stat 375e9554658Smrg fi 376e9554658Smrg 377e9554658Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 378e9554658Smrg do 379e9554658Smrg test -f "$tmpdepfile" && break 380e9554658Smrg done 381e9554658Smrg if test -f "$tmpdepfile"; then 382e9554658Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 383e9554658Smrg # That's a tab and a space in the []. 384e9554658Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 385e9554658Smrg else 386e9554658Smrg echo "#dummy" > "$depfile" 387e9554658Smrg fi 388e9554658Smrg rm -f "$tmpdepfile" 389e9554658Smrg ;; 390e9554658Smrg 391e9554658Smrg#nosideeffect) 392e9554658Smrg # This comment above is used by automake to tell side-effect 393e9554658Smrg # dependency tracking mechanisms from slower ones. 394e9554658Smrg 395e9554658Smrgdashmstdout) 396e9554658Smrg # Important note: in order to support this mode, a compiler *must* 397e9554658Smrg # always write the preprocessed file to stdout, regardless of -o. 398e9554658Smrg "$@" || exit $? 399e9554658Smrg 400e9554658Smrg # Remove the call to Libtool. 401e9554658Smrg if test "$libtool" = yes; then 402e9554658Smrg while test $1 != '--mode=compile'; do 403e9554658Smrg shift 404e9554658Smrg done 405e9554658Smrg shift 406e9554658Smrg fi 407e9554658Smrg 408e9554658Smrg # Remove `-o $object'. 409e9554658Smrg IFS=" " 410e9554658Smrg for arg 411e9554658Smrg do 412e9554658Smrg case $arg in 413e9554658Smrg -o) 414e9554658Smrg shift 415e9554658Smrg ;; 416e9554658Smrg $object) 417e9554658Smrg shift 418e9554658Smrg ;; 419e9554658Smrg *) 420e9554658Smrg set fnord "$@" "$arg" 421e9554658Smrg shift # fnord 422e9554658Smrg shift # $arg 423e9554658Smrg ;; 424e9554658Smrg esac 425e9554658Smrg done 426e9554658Smrg 427e9554658Smrg test -z "$dashmflag" && dashmflag=-M 428e9554658Smrg # Require at least two characters before searching for `:' 429e9554658Smrg # in the target name. This is to cope with DOS-style filenames: 430e9554658Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 431e9554658Smrg "$@" $dashmflag | 432e9554658Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 433e9554658Smrg rm -f "$depfile" 434e9554658Smrg cat < "$tmpdepfile" > "$depfile" 435e9554658Smrg tr ' ' ' 436e9554658Smrg' < "$tmpdepfile" | \ 437e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 438e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 439e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 440e9554658Smrg rm -f "$tmpdepfile" 441e9554658Smrg ;; 442e9554658Smrg 443e9554658SmrgdashXmstdout) 444e9554658Smrg # This case only exists to satisfy depend.m4. It is never actually 445e9554658Smrg # run, as this mode is specially recognized in the preamble. 446e9554658Smrg exit 1 447e9554658Smrg ;; 448e9554658Smrg 449e9554658Smrgmakedepend) 450e9554658Smrg "$@" || exit $? 451e9554658Smrg # Remove any Libtool call 452e9554658Smrg if test "$libtool" = yes; then 453e9554658Smrg while test $1 != '--mode=compile'; do 454e9554658Smrg shift 455e9554658Smrg done 456e9554658Smrg shift 457e9554658Smrg fi 458e9554658Smrg # X makedepend 459e9554658Smrg shift 460e9554658Smrg cleared=no 461e9554658Smrg for arg in "$@"; do 462e9554658Smrg case $cleared in 463e9554658Smrg no) 464e9554658Smrg set ""; shift 465e9554658Smrg cleared=yes ;; 466e9554658Smrg esac 467e9554658Smrg case "$arg" in 468e9554658Smrg -D*|-I*) 469e9554658Smrg set fnord "$@" "$arg"; shift ;; 470e9554658Smrg # Strip any option that makedepend may not understand. Remove 471e9554658Smrg # the object too, otherwise makedepend will parse it as a source file. 472e9554658Smrg -*|$object) 473e9554658Smrg ;; 474e9554658Smrg *) 475e9554658Smrg set fnord "$@" "$arg"; shift ;; 476e9554658Smrg esac 477e9554658Smrg done 478e9554658Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 479e9554658Smrg touch "$tmpdepfile" 480e9554658Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 481e9554658Smrg rm -f "$depfile" 482e9554658Smrg cat < "$tmpdepfile" > "$depfile" 483e9554658Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 484e9554658Smrg' | \ 485e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 486e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 487e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 488e9554658Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 489e9554658Smrg ;; 490e9554658Smrg 491e9554658Smrgcpp) 492e9554658Smrg # Important note: in order to support this mode, a compiler *must* 493e9554658Smrg # always write the preprocessed file to stdout. 494e9554658Smrg "$@" || exit $? 495e9554658Smrg 496e9554658Smrg # Remove the call to Libtool. 497e9554658Smrg if test "$libtool" = yes; then 498e9554658Smrg while test $1 != '--mode=compile'; do 499e9554658Smrg shift 500e9554658Smrg done 501e9554658Smrg shift 502e9554658Smrg fi 503e9554658Smrg 504e9554658Smrg # Remove `-o $object'. 505e9554658Smrg IFS=" " 506e9554658Smrg for arg 507e9554658Smrg do 508e9554658Smrg case $arg in 509e9554658Smrg -o) 510e9554658Smrg shift 511e9554658Smrg ;; 512e9554658Smrg $object) 513e9554658Smrg shift 514e9554658Smrg ;; 515e9554658Smrg *) 516e9554658Smrg set fnord "$@" "$arg" 517e9554658Smrg shift # fnord 518e9554658Smrg shift # $arg 519e9554658Smrg ;; 520e9554658Smrg esac 521e9554658Smrg done 522e9554658Smrg 523e9554658Smrg "$@" -E | 524e9554658Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 525e9554658Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 526e9554658Smrg sed '$ s: \\$::' > "$tmpdepfile" 527e9554658Smrg rm -f "$depfile" 528e9554658Smrg echo "$object : \\" > "$depfile" 529e9554658Smrg cat < "$tmpdepfile" >> "$depfile" 530e9554658Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 531e9554658Smrg rm -f "$tmpdepfile" 532e9554658Smrg ;; 533e9554658Smrg 534e9554658Smrgmsvisualcpp) 535e9554658Smrg # Important note: in order to support this mode, a compiler *must* 536e9554658Smrg # always write the preprocessed file to stdout, regardless of -o, 537e9554658Smrg # because we must use -o when running libtool. 538e9554658Smrg "$@" || exit $? 539e9554658Smrg IFS=" " 540e9554658Smrg for arg 541e9554658Smrg do 542e9554658Smrg case "$arg" in 543e9554658Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 544e9554658Smrg set fnord "$@" 545e9554658Smrg shift 546e9554658Smrg shift 547e9554658Smrg ;; 548e9554658Smrg *) 549e9554658Smrg set fnord "$@" "$arg" 550e9554658Smrg shift 551e9554658Smrg shift 552e9554658Smrg ;; 553e9554658Smrg esac 554e9554658Smrg done 555e9554658Smrg "$@" -E | 556e9554658Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 557e9554658Smrg rm -f "$depfile" 558e9554658Smrg echo "$object : \\" > "$depfile" 559e9554658Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 560e9554658Smrg echo " " >> "$depfile" 561e9554658Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 562e9554658Smrg rm -f "$tmpdepfile" 563e9554658Smrg ;; 564e9554658Smrg 565e9554658Smrgnone) 566e9554658Smrg exec "$@" 567e9554658Smrg ;; 568e9554658Smrg 569e9554658Smrg*) 570e9554658Smrg echo "Unknown depmode $depmode" 1>&2 571e9554658Smrg exit 1 572e9554658Smrg ;; 573e9554658Smrgesac 574e9554658Smrg 575e9554658Smrgexit 0 576e9554658Smrg 577e9554658Smrg# Local Variables: 578e9554658Smrg# mode: shell-script 579e9554658Smrg# sh-indentation: 2 580e9554658Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 581e9554658Smrg# time-stamp-start: "scriptversion=" 582e9554658Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 583e9554658Smrg# time-stamp-end: "$" 584e9554658Smrg# End: 585