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