1251883Speter#! /bin/sh 2251883Speter# depcomp - compile a program generating dependencies as side-effects 3251883Speter 4289166Speterscriptversion=2012-03-27.16; # UTC 5251883Speter 6289166Speter# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7289166Speter# 2011, 2012 Free Software Foundation, Inc. 8251883Speter 9251883Speter# This program is free software; you can redistribute it and/or modify 10251883Speter# it under the terms of the GNU General Public License as published by 11251883Speter# the Free Software Foundation; either version 2, or (at your option) 12251883Speter# any later version. 13251883Speter 14251883Speter# This program is distributed in the hope that it will be useful, 15251883Speter# but WITHOUT ANY WARRANTY; without even the implied warranty of 16251883Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17251883Speter# GNU General Public License for more details. 18251883Speter 19251883Speter# You should have received a copy of the GNU General Public License 20289166Speter# along with this program. If not, see <http://www.gnu.org/licenses/>. 21251883Speter 22251883Speter# As a special exception to the GNU General Public License, if you 23251883Speter# distribute this file as part of a program that contains a 24251883Speter# configuration script generated by Autoconf, you may include it under 25251883Speter# the same distribution terms that you use for the rest of that program. 26251883Speter 27251883Speter# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28251883Speter 29251883Spetercase $1 in 30251883Speter '') 31289166Speter echo "$0: No command. Try '$0 --help' for more information." 1>&2 32251883Speter exit 1; 33251883Speter ;; 34251883Speter -h | --h*) 35251883Speter cat <<\EOF 36251883SpeterUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37251883Speter 38251883SpeterRun PROGRAMS ARGS to compile a file, generating dependencies 39251883Speteras side-effects. 40251883Speter 41251883SpeterEnvironment variables: 42251883Speter depmode Dependency tracking mode. 43289166Speter source Source file read by 'PROGRAMS ARGS'. 44289166Speter object Object file output by 'PROGRAMS ARGS'. 45251883Speter DEPDIR directory where to store dependencies. 46251883Speter depfile Dependency file to output. 47289166Speter tmpdepfile Temporary file to use when outputting dependencies. 48251883Speter libtool Whether libtool is used (yes/no). 49251883Speter 50251883SpeterReport bugs to <bug-automake@gnu.org>. 51251883SpeterEOF 52251883Speter exit $? 53251883Speter ;; 54251883Speter -v | --v*) 55251883Speter echo "depcomp $scriptversion" 56251883Speter exit $? 57251883Speter ;; 58251883Speteresac 59251883Speter 60289166Speter# A tabulation character. 61289166Spetertab=' ' 62289166Speter# A newline character. 63289166Speternl=' 64289166Speter' 65289166Speter 66251883Speterif test -z "$depmode" || test -z "$source" || test -z "$object"; then 67251883Speter echo "depcomp: Variables source, object and depmode must be set" 1>&2 68251883Speter exit 1 69251883Speterfi 70251883Speter 71251883Speter# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 72251883Speterdepfile=${depfile-`echo "$object" | 73251883Speter sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 74251883Spetertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 75251883Speter 76251883Speterrm -f "$tmpdepfile" 77251883Speter 78251883Speter# Some modes work just like other modes, but use different flags. We 79251883Speter# parameterize here, but still list the modes in the big case below, 80251883Speter# to make depend.m4 easier to write. Note that we *cannot* use a case 81251883Speter# here, because this file can only contain one case statement. 82251883Speterif test "$depmode" = hp; then 83251883Speter # HP compiler uses -M and no extra arg. 84251883Speter gccflag=-M 85251883Speter depmode=gcc 86251883Speterfi 87251883Speter 88251883Speterif test "$depmode" = dashXmstdout; then 89251883Speter # This is just like dashmstdout with a different argument. 90251883Speter dashmflag=-xM 91251883Speter depmode=dashmstdout 92251883Speterfi 93251883Speter 94289166Spetercygpath_u="cygpath -u -f -" 95289166Speterif test "$depmode" = msvcmsys; then 96289166Speter # This is just like msvisualcpp but w/o cygpath translation. 97289166Speter # Just convert the backslash-escaped backslashes to single forward 98289166Speter # slashes to satisfy depend.m4 99289166Speter cygpath_u='sed s,\\\\,/,g' 100289166Speter depmode=msvisualcpp 101289166Speterfi 102289166Speter 103289166Speterif test "$depmode" = msvc7msys; then 104289166Speter # This is just like msvc7 but w/o cygpath translation. 105289166Speter # Just convert the backslash-escaped backslashes to single forward 106289166Speter # slashes to satisfy depend.m4 107289166Speter cygpath_u='sed s,\\\\,/,g' 108289166Speter depmode=msvc7 109289166Speterfi 110289166Speter 111289166Speterif test "$depmode" = xlc; then 112289166Speter # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. 113289166Speter gccflag=-qmakedep=gcc,-MF 114289166Speter depmode=gcc 115289166Speterfi 116289166Speter 117251883Spetercase "$depmode" in 118251883Spetergcc3) 119251883Speter## gcc 3 implements dependency tracking that does exactly what 120251883Speter## we want. Yay! Note: for some reason libtool 1.4 doesn't like 121251883Speter## it if -MD -MP comes after the -MF stuff. Hmm. 122289166Speter## Unfortunately, FreeBSD c89 acceptance of flags depends upon 123289166Speter## the command line argument order; so add the flags where they 124289166Speter## appear in depend2.am. Note that the slowdown incurred here 125289166Speter## affects only configure: in makefiles, %FASTDEP% shortcuts this. 126289166Speter for arg 127289166Speter do 128289166Speter case $arg in 129289166Speter -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 130289166Speter *) set fnord "$@" "$arg" ;; 131289166Speter esac 132289166Speter shift # fnord 133289166Speter shift # $arg 134289166Speter done 135289166Speter "$@" 136251883Speter stat=$? 137251883Speter if test $stat -eq 0; then : 138251883Speter else 139251883Speter rm -f "$tmpdepfile" 140251883Speter exit $stat 141251883Speter fi 142251883Speter mv "$tmpdepfile" "$depfile" 143251883Speter ;; 144251883Speter 145251883Spetergcc) 146251883Speter## There are various ways to get dependency output from gcc. Here's 147251883Speter## why we pick this rather obscure method: 148251883Speter## - Don't want to use -MD because we'd like the dependencies to end 149251883Speter## up in a subdir. Having to rename by hand is ugly. 150251883Speter## (We might end up doing this anyway to support other compilers.) 151251883Speter## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 152251883Speter## -MM, not -M (despite what the docs say). 153251883Speter## - Using -M directly means running the compiler twice (even worse 154251883Speter## than renaming). 155251883Speter if test -z "$gccflag"; then 156251883Speter gccflag=-MD, 157251883Speter fi 158251883Speter "$@" -Wp,"$gccflag$tmpdepfile" 159251883Speter stat=$? 160251883Speter if test $stat -eq 0; then : 161251883Speter else 162251883Speter rm -f "$tmpdepfile" 163251883Speter exit $stat 164251883Speter fi 165251883Speter rm -f "$depfile" 166251883Speter echo "$object : \\" > "$depfile" 167251883Speter alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 168251883Speter## The second -e expression handles DOS-style file names with drive letters. 169251883Speter sed -e 's/^[^:]*: / /' \ 170251883Speter -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 171289166Speter## This next piece of magic avoids the "deleted header file" problem. 172251883Speter## The problem is that when a header file which appears in a .P file 173251883Speter## is deleted, the dependency causes make to die (because there is 174251883Speter## typically no way to rebuild the header). We avoid this by adding 175251883Speter## dummy dependencies for each header file. Too bad gcc doesn't do 176251883Speter## this for us directly. 177289166Speter tr ' ' "$nl" < "$tmpdepfile" | 178289166Speter## Some versions of gcc put a space before the ':'. On the theory 179251883Speter## that the space means something, we add a space to the output as 180289166Speter## well. hp depmode also adds that space, but also prefixes the VPATH 181289166Speter## to the object. Take care to not repeat it in the output. 182251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation 183251883Speter## correctly. Breaking it into two sed invocations is a workaround. 184289166Speter sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 185289166Speter | sed -e 's/$/ :/' >> "$depfile" 186251883Speter rm -f "$tmpdepfile" 187251883Speter ;; 188251883Speter 189251883Speterhp) 190251883Speter # This case exists only to let depend.m4 do its work. It works by 191251883Speter # looking at the text of this script. This case will never be run, 192251883Speter # since it is checked for above. 193251883Speter exit 1 194251883Speter ;; 195251883Speter 196251883Spetersgi) 197251883Speter if test "$libtool" = yes; then 198251883Speter "$@" "-Wp,-MDupdate,$tmpdepfile" 199251883Speter else 200251883Speter "$@" -MDupdate "$tmpdepfile" 201251883Speter fi 202251883Speter stat=$? 203251883Speter if test $stat -eq 0; then : 204251883Speter else 205251883Speter rm -f "$tmpdepfile" 206251883Speter exit $stat 207251883Speter fi 208251883Speter rm -f "$depfile" 209251883Speter 210251883Speter if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 211251883Speter echo "$object : \\" > "$depfile" 212251883Speter 213251883Speter # Clip off the initial element (the dependent). Don't try to be 214251883Speter # clever and replace this with sed code, as IRIX sed won't handle 215251883Speter # lines with more than a fixed number of characters (4096 in 216251883Speter # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 217289166Speter # the IRIX cc adds comments like '#:fec' to the end of the 218251883Speter # dependency line. 219289166Speter tr ' ' "$nl" < "$tmpdepfile" \ 220251883Speter | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 221289166Speter tr "$nl" ' ' >> "$depfile" 222289166Speter echo >> "$depfile" 223251883Speter 224251883Speter # The second pass generates a dummy entry for each header file. 225289166Speter tr ' ' "$nl" < "$tmpdepfile" \ 226251883Speter | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 227289166Speter >> "$depfile" 228251883Speter else 229251883Speter # The sourcefile does not contain any dependencies, so just 230251883Speter # store a dummy comment line, to avoid errors with the Makefile 231251883Speter # "include basename.Plo" scheme. 232251883Speter echo "#dummy" > "$depfile" 233251883Speter fi 234251883Speter rm -f "$tmpdepfile" 235251883Speter ;; 236251883Speter 237289166Speterxlc) 238289166Speter # This case exists only to let depend.m4 do its work. It works by 239289166Speter # looking at the text of this script. This case will never be run, 240289166Speter # since it is checked for above. 241289166Speter exit 1 242289166Speter ;; 243289166Speter 244251883Speteraix) 245251883Speter # The C for AIX Compiler uses -M and outputs the dependencies 246251883Speter # in a .u file. In older versions, this file always lives in the 247289166Speter # current directory. Also, the AIX compiler puts '$object:' at the 248251883Speter # start of each line; $object doesn't have directory information. 249251883Speter # Version 6 uses the directory in both cases. 250289166Speter dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 251289166Speter test "x$dir" = "x$object" && dir= 252289166Speter base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 253251883Speter if test "$libtool" = yes; then 254289166Speter tmpdepfile1=$dir$base.u 255289166Speter tmpdepfile2=$base.u 256289166Speter tmpdepfile3=$dir.libs/$base.u 257251883Speter "$@" -Wc,-M 258251883Speter else 259289166Speter tmpdepfile1=$dir$base.u 260289166Speter tmpdepfile2=$dir$base.u 261289166Speter tmpdepfile3=$dir$base.u 262251883Speter "$@" -M 263251883Speter fi 264251883Speter stat=$? 265251883Speter 266251883Speter if test $stat -eq 0; then : 267251883Speter else 268289166Speter rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 269251883Speter exit $stat 270251883Speter fi 271251883Speter 272289166Speter for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 273289166Speter do 274289166Speter test -f "$tmpdepfile" && break 275289166Speter done 276251883Speter if test -f "$tmpdepfile"; then 277289166Speter # Each line is of the form 'foo.o: dependent.h'. 278251883Speter # Do two passes, one to just change these to 279289166Speter # '$object: dependent.h' and one to simply 'dependent.h:'. 280289166Speter sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 281289166Speter sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 282251883Speter else 283251883Speter # The sourcefile does not contain any dependencies, so just 284251883Speter # store a dummy comment line, to avoid errors with the Makefile 285251883Speter # "include basename.Plo" scheme. 286251883Speter echo "#dummy" > "$depfile" 287251883Speter fi 288251883Speter rm -f "$tmpdepfile" 289251883Speter ;; 290251883Speter 291251883Spetericc) 292289166Speter # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. 293289166Speter # However on 294289166Speter # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c 295251883Speter # ICC 7.0 will fill foo.d with something like 296251883Speter # foo.o: sub/foo.c 297251883Speter # foo.o: sub/foo.h 298289166Speter # which is wrong. We want 299251883Speter # sub/foo.o: sub/foo.c 300251883Speter # sub/foo.o: sub/foo.h 301251883Speter # sub/foo.c: 302251883Speter # sub/foo.h: 303251883Speter # ICC 7.1 will output 304251883Speter # foo.o: sub/foo.c sub/foo.h 305289166Speter # and will wrap long lines using '\': 306251883Speter # foo.o: sub/foo.c ... \ 307251883Speter # sub/foo.h ... \ 308251883Speter # ... 309289166Speter # tcc 0.9.26 (FIXME still under development at the moment of writing) 310289166Speter # will emit a similar output, but also prepend the continuation lines 311289166Speter # with horizontal tabulation characters. 312251883Speter "$@" -MD -MF "$tmpdepfile" 313251883Speter stat=$? 314251883Speter if test $stat -eq 0; then : 315251883Speter else 316251883Speter rm -f "$tmpdepfile" 317251883Speter exit $stat 318251883Speter fi 319251883Speter rm -f "$depfile" 320289166Speter # Each line is of the form 'foo.o: dependent.h', 321289166Speter # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. 322251883Speter # Do two passes, one to just change these to 323289166Speter # '$object: dependent.h' and one to simply 'dependent.h:'. 324289166Speter sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ 325289166Speter < "$tmpdepfile" > "$depfile" 326289166Speter sed ' 327289166Speter s/[ '"$tab"'][ '"$tab"']*/ /g 328289166Speter s/^ *// 329289166Speter s/ *\\*$// 330289166Speter s/^[^:]*: *// 331289166Speter /^$/d 332289166Speter /:$/d 333289166Speter s/$/ :/ 334289166Speter ' < "$tmpdepfile" >> "$depfile" 335251883Speter rm -f "$tmpdepfile" 336251883Speter ;; 337251883Speter 338289166Speterhp2) 339289166Speter # The "hp" stanza above does not work with aCC (C++) and HP's ia64 340289166Speter # compilers, which have integrated preprocessors. The correct option 341289166Speter # to use with these is +Maked; it writes dependencies to a file named 342289166Speter # 'foo.d', which lands next to the object file, wherever that 343289166Speter # happens to be. 344289166Speter # Much of this is similar to the tru64 case; see comments there. 345289166Speter dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 346289166Speter test "x$dir" = "x$object" && dir= 347289166Speter base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 348289166Speter if test "$libtool" = yes; then 349289166Speter tmpdepfile1=$dir$base.d 350289166Speter tmpdepfile2=$dir.libs/$base.d 351289166Speter "$@" -Wc,+Maked 352289166Speter else 353289166Speter tmpdepfile1=$dir$base.d 354289166Speter tmpdepfile2=$dir$base.d 355289166Speter "$@" +Maked 356289166Speter fi 357289166Speter stat=$? 358289166Speter if test $stat -eq 0; then : 359289166Speter else 360289166Speter rm -f "$tmpdepfile1" "$tmpdepfile2" 361289166Speter exit $stat 362289166Speter fi 363289166Speter 364289166Speter for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 365289166Speter do 366289166Speter test -f "$tmpdepfile" && break 367289166Speter done 368289166Speter if test -f "$tmpdepfile"; then 369289166Speter sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 370289166Speter # Add 'dependent.h:' lines. 371289166Speter sed -ne '2,${ 372289166Speter s/^ *// 373289166Speter s/ \\*$// 374289166Speter s/$/:/ 375289166Speter p 376289166Speter }' "$tmpdepfile" >> "$depfile" 377289166Speter else 378289166Speter echo "#dummy" > "$depfile" 379289166Speter fi 380289166Speter rm -f "$tmpdepfile" "$tmpdepfile2" 381289166Speter ;; 382289166Speter 383251883Spetertru64) 384251883Speter # The Tru64 compiler uses -MD to generate dependencies as a side 385289166Speter # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 386251883Speter # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 387289166Speter # dependencies in 'foo.d' instead, so we check for that too. 388251883Speter # Subdirectories are respected. 389251883Speter dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 390251883Speter test "x$dir" = "x$object" && dir= 391251883Speter base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 392251883Speter 393251883Speter if test "$libtool" = yes; then 394251883Speter # With Tru64 cc, shared objects can also be used to make a 395289166Speter # static library. This mechanism is used in libtool 1.4 series to 396251883Speter # handle both shared and static libraries in a single compilation. 397251883Speter # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 398251883Speter # 399251883Speter # With libtool 1.5 this exception was removed, and libtool now 400251883Speter # generates 2 separate objects for the 2 libraries. These two 401289166Speter # compilations output dependencies in $dir.libs/$base.o.d and 402251883Speter # in $dir$base.o.d. We have to check for both files, because 403251883Speter # one of the two compilations can be disabled. We should prefer 404251883Speter # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 405251883Speter # automatically cleaned when .libs/ is deleted, while ignoring 406251883Speter # the former would cause a distcleancheck panic. 407251883Speter tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 408251883Speter tmpdepfile2=$dir$base.o.d # libtool 1.5 409251883Speter tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 410251883Speter tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 411251883Speter "$@" -Wc,-MD 412251883Speter else 413251883Speter tmpdepfile1=$dir$base.o.d 414251883Speter tmpdepfile2=$dir$base.d 415251883Speter tmpdepfile3=$dir$base.d 416251883Speter tmpdepfile4=$dir$base.d 417251883Speter "$@" -MD 418251883Speter fi 419251883Speter 420251883Speter stat=$? 421251883Speter if test $stat -eq 0; then : 422251883Speter else 423251883Speter rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 424251883Speter exit $stat 425251883Speter fi 426251883Speter 427251883Speter for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 428251883Speter do 429251883Speter test -f "$tmpdepfile" && break 430251883Speter done 431251883Speter if test -f "$tmpdepfile"; then 432251883Speter sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 433289166Speter sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 434251883Speter else 435251883Speter echo "#dummy" > "$depfile" 436251883Speter fi 437251883Speter rm -f "$tmpdepfile" 438251883Speter ;; 439251883Speter 440289166Spetermsvc7) 441289166Speter if test "$libtool" = yes; then 442289166Speter showIncludes=-Wc,-showIncludes 443289166Speter else 444289166Speter showIncludes=-showIncludes 445289166Speter fi 446289166Speter "$@" $showIncludes > "$tmpdepfile" 447289166Speter stat=$? 448289166Speter grep -v '^Note: including file: ' "$tmpdepfile" 449289166Speter if test "$stat" = 0; then : 450289166Speter else 451289166Speter rm -f "$tmpdepfile" 452289166Speter exit $stat 453289166Speter fi 454289166Speter rm -f "$depfile" 455289166Speter echo "$object : \\" > "$depfile" 456289166Speter # The first sed program below extracts the file names and escapes 457289166Speter # backslashes for cygpath. The second sed program outputs the file 458289166Speter # name when reading, but also accumulates all include files in the 459289166Speter # hold buffer in order to output them again at the end. This only 460289166Speter # works with sed implementations that can handle large buffers. 461289166Speter sed < "$tmpdepfile" -n ' 462289166Speter/^Note: including file: *\(.*\)/ { 463289166Speter s//\1/ 464289166Speter s/\\/\\\\/g 465289166Speter p 466289166Speter}' | $cygpath_u | sort -u | sed -n ' 467289166Speters/ /\\ /g 468289166Speters/\(.*\)/'"$tab"'\1 \\/p 469289166Speters/.\(.*\) \\/\1:/ 470289166SpeterH 471289166Speter$ { 472289166Speter s/.*/'"$tab"'/ 473289166Speter G 474289166Speter p 475289166Speter}' >> "$depfile" 476289166Speter rm -f "$tmpdepfile" 477289166Speter ;; 478289166Speter 479289166Spetermsvc7msys) 480289166Speter # This case exists only to let depend.m4 do its work. It works by 481289166Speter # looking at the text of this script. This case will never be run, 482289166Speter # since it is checked for above. 483289166Speter exit 1 484289166Speter ;; 485289166Speter 486251883Speter#nosideeffect) 487251883Speter # This comment above is used by automake to tell side-effect 488251883Speter # dependency tracking mechanisms from slower ones. 489251883Speter 490251883Speterdashmstdout) 491251883Speter # Important note: in order to support this mode, a compiler *must* 492251883Speter # always write the preprocessed file to stdout, regardless of -o. 493251883Speter "$@" || exit $? 494251883Speter 495251883Speter # Remove the call to Libtool. 496251883Speter if test "$libtool" = yes; then 497289166Speter while test "X$1" != 'X--mode=compile'; do 498251883Speter shift 499251883Speter done 500251883Speter shift 501251883Speter fi 502251883Speter 503289166Speter # Remove '-o $object'. 504251883Speter IFS=" " 505251883Speter for arg 506251883Speter do 507251883Speter case $arg in 508251883Speter -o) 509251883Speter shift 510251883Speter ;; 511251883Speter $object) 512251883Speter shift 513251883Speter ;; 514251883Speter *) 515251883Speter set fnord "$@" "$arg" 516251883Speter shift # fnord 517251883Speter shift # $arg 518251883Speter ;; 519251883Speter esac 520251883Speter done 521251883Speter 522251883Speter test -z "$dashmflag" && dashmflag=-M 523289166Speter # Require at least two characters before searching for ':' 524251883Speter # in the target name. This is to cope with DOS-style filenames: 525289166Speter # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 526251883Speter "$@" $dashmflag | 527289166Speter sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" 528251883Speter rm -f "$depfile" 529251883Speter cat < "$tmpdepfile" > "$depfile" 530289166Speter tr ' ' "$nl" < "$tmpdepfile" | \ 531251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation 532251883Speter## correctly. Breaking it into two sed invocations is a workaround. 533251883Speter sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 534251883Speter rm -f "$tmpdepfile" 535251883Speter ;; 536251883Speter 537251883SpeterdashXmstdout) 538251883Speter # This case only exists to satisfy depend.m4. It is never actually 539251883Speter # run, as this mode is specially recognized in the preamble. 540251883Speter exit 1 541251883Speter ;; 542251883Speter 543251883Spetermakedepend) 544251883Speter "$@" || exit $? 545251883Speter # Remove any Libtool call 546251883Speter if test "$libtool" = yes; then 547289166Speter while test "X$1" != 'X--mode=compile'; do 548251883Speter shift 549251883Speter done 550251883Speter shift 551251883Speter fi 552251883Speter # X makedepend 553251883Speter shift 554289166Speter cleared=no eat=no 555289166Speter for arg 556289166Speter do 557251883Speter case $cleared in 558251883Speter no) 559251883Speter set ""; shift 560251883Speter cleared=yes ;; 561251883Speter esac 562289166Speter if test $eat = yes; then 563289166Speter eat=no 564289166Speter continue 565289166Speter fi 566251883Speter case "$arg" in 567251883Speter -D*|-I*) 568251883Speter set fnord "$@" "$arg"; shift ;; 569251883Speter # Strip any option that makedepend may not understand. Remove 570251883Speter # the object too, otherwise makedepend will parse it as a source file. 571289166Speter -arch) 572289166Speter eat=yes ;; 573251883Speter -*|$object) 574251883Speter ;; 575251883Speter *) 576251883Speter set fnord "$@" "$arg"; shift ;; 577251883Speter esac 578251883Speter done 579289166Speter obj_suffix=`echo "$object" | sed 's/^.*\././'` 580251883Speter touch "$tmpdepfile" 581251883Speter ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 582251883Speter rm -f "$depfile" 583289166Speter # makedepend may prepend the VPATH from the source file name to the object. 584289166Speter # No need to regex-escape $object, excess matching of '.' is harmless. 585289166Speter sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 586289166Speter sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ 587251883Speter## Some versions of the HPUX 10.20 sed can't process this invocation 588251883Speter## correctly. Breaking it into two sed invocations is a workaround. 589251883Speter sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 590251883Speter rm -f "$tmpdepfile" "$tmpdepfile".bak 591251883Speter ;; 592251883Speter 593251883Spetercpp) 594251883Speter # Important note: in order to support this mode, a compiler *must* 595251883Speter # always write the preprocessed file to stdout. 596251883Speter "$@" || exit $? 597251883Speter 598251883Speter # Remove the call to Libtool. 599251883Speter if test "$libtool" = yes; then 600289166Speter while test "X$1" != 'X--mode=compile'; do 601251883Speter shift 602251883Speter done 603251883Speter shift 604251883Speter fi 605251883Speter 606289166Speter # Remove '-o $object'. 607251883Speter IFS=" " 608251883Speter for arg 609251883Speter do 610251883Speter case $arg in 611251883Speter -o) 612251883Speter shift 613251883Speter ;; 614251883Speter $object) 615251883Speter shift 616251883Speter ;; 617251883Speter *) 618251883Speter set fnord "$@" "$arg" 619251883Speter shift # fnord 620251883Speter shift # $arg 621251883Speter ;; 622251883Speter esac 623251883Speter done 624251883Speter 625251883Speter "$@" -E | 626251883Speter sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 627251883Speter -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 628251883Speter sed '$ s: \\$::' > "$tmpdepfile" 629251883Speter rm -f "$depfile" 630251883Speter echo "$object : \\" > "$depfile" 631251883Speter cat < "$tmpdepfile" >> "$depfile" 632251883Speter sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 633251883Speter rm -f "$tmpdepfile" 634251883Speter ;; 635251883Speter 636251883Spetermsvisualcpp) 637251883Speter # Important note: in order to support this mode, a compiler *must* 638289166Speter # always write the preprocessed file to stdout. 639251883Speter "$@" || exit $? 640289166Speter 641289166Speter # Remove the call to Libtool. 642289166Speter if test "$libtool" = yes; then 643289166Speter while test "X$1" != 'X--mode=compile'; do 644289166Speter shift 645289166Speter done 646289166Speter shift 647289166Speter fi 648289166Speter 649251883Speter IFS=" " 650251883Speter for arg 651251883Speter do 652251883Speter case "$arg" in 653289166Speter -o) 654289166Speter shift 655289166Speter ;; 656289166Speter $object) 657289166Speter shift 658289166Speter ;; 659251883Speter "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 660251883Speter set fnord "$@" 661251883Speter shift 662251883Speter shift 663251883Speter ;; 664251883Speter *) 665251883Speter set fnord "$@" "$arg" 666251883Speter shift 667251883Speter shift 668251883Speter ;; 669251883Speter esac 670251883Speter done 671289166Speter "$@" -E 2>/dev/null | 672289166Speter sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 673251883Speter rm -f "$depfile" 674251883Speter echo "$object : \\" > "$depfile" 675289166Speter sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 676289166Speter echo "$tab" >> "$depfile" 677289166Speter sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 678251883Speter rm -f "$tmpdepfile" 679251883Speter ;; 680251883Speter 681289166Spetermsvcmsys) 682289166Speter # This case exists only to let depend.m4 do its work. It works by 683289166Speter # looking at the text of this script. This case will never be run, 684289166Speter # since it is checked for above. 685289166Speter exit 1 686289166Speter ;; 687289166Speter 688251883Speternone) 689251883Speter exec "$@" 690251883Speter ;; 691251883Speter 692251883Speter*) 693251883Speter echo "Unknown depmode $depmode" 1>&2 694251883Speter exit 1 695251883Speter ;; 696251883Speteresac 697251883Speter 698251883Speterexit 0 699251883Speter 700251883Speter# Local Variables: 701251883Speter# mode: shell-script 702251883Speter# sh-indentation: 2 703251883Speter# eval: (add-hook 'write-file-hooks 'time-stamp) 704251883Speter# time-stamp-start: "scriptversion=" 705251883Speter# time-stamp-format: "%:y-%02m-%02d.%02H" 706289166Speter# time-stamp-time-zone: "UTC" 707289166Speter# time-stamp-end: "; # UTC" 708251883Speter# End: 709