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