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