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