depcomp revision ba064abe
1191cded7Smrg#! /bin/sh 2191cded7Smrg# depcomp - compile a program generating dependencies as side-effects 3191cded7Smrg 4ba064abeSmrgscriptversion=2009-04-28.21; # UTC 5191cded7Smrg 6ba064abeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7ba064abeSmrg# Software Foundation, Inc. 8191cded7Smrg 9191cded7Smrg# This program is free software; you can redistribute it and/or modify 10191cded7Smrg# it under the terms of the GNU General Public License as published by 11191cded7Smrg# the Free Software Foundation; either version 2, or (at your option) 12191cded7Smrg# any later version. 13191cded7Smrg 14191cded7Smrg# This program is distributed in the hope that it will be useful, 15191cded7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16191cded7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17191cded7Smrg# GNU General Public License for more details. 18191cded7Smrg 19191cded7Smrg# You should have received a copy of the GNU General Public License 20ba064abeSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21191cded7Smrg 22191cded7Smrg# As a special exception to the GNU General Public License, if you 23191cded7Smrg# distribute this file as part of a program that contains a 24191cded7Smrg# configuration script generated by Autoconf, you may include it under 25191cded7Smrg# the same distribution terms that you use for the rest of that program. 26191cded7Smrg 27191cded7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28191cded7Smrg 29191cded7Smrgcase $1 in 30191cded7Smrg '') 31191cded7Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32191cded7Smrg exit 1; 33191cded7Smrg ;; 34191cded7Smrg -h | --h*) 35191cded7Smrg cat <<\EOF 36191cded7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37191cded7Smrg 38191cded7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39191cded7Smrgas side-effects. 40191cded7Smrg 41191cded7SmrgEnvironment variables: 42191cded7Smrg depmode Dependency tracking mode. 43191cded7Smrg source Source file read by `PROGRAMS ARGS'. 44191cded7Smrg object Object file output by `PROGRAMS ARGS'. 45191cded7Smrg DEPDIR directory where to store dependencies. 46191cded7Smrg depfile Dependency file to output. 47191cded7Smrg tmpdepfile Temporary file to use when outputing dependencies. 48191cded7Smrg libtool Whether libtool is used (yes/no). 49191cded7Smrg 50191cded7SmrgReport bugs to <bug-automake@gnu.org>. 51191cded7SmrgEOF 52191cded7Smrg exit $? 53191cded7Smrg ;; 54191cded7Smrg -v | --v*) 55191cded7Smrg echo "depcomp $scriptversion" 56191cded7Smrg exit $? 57191cded7Smrg ;; 58191cded7Smrgesac 59191cded7Smrg 60191cded7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61191cded7Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62191cded7Smrg exit 1 63191cded7Smrgfi 64191cded7Smrg 65191cded7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66191cded7Smrgdepfile=${depfile-`echo "$object" | 67191cded7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68191cded7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69191cded7Smrg 70191cded7Smrgrm -f "$tmpdepfile" 71191cded7Smrg 72191cded7Smrg# Some modes work just like other modes, but use different flags. We 73191cded7Smrg# parameterize here, but still list the modes in the big case below, 74191cded7Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75191cded7Smrg# here, because this file can only contain one case statement. 76191cded7Smrgif test "$depmode" = hp; then 77191cded7Smrg # HP compiler uses -M and no extra arg. 78191cded7Smrg gccflag=-M 79191cded7Smrg depmode=gcc 80191cded7Smrgfi 81191cded7Smrg 82191cded7Smrgif test "$depmode" = dashXmstdout; then 83191cded7Smrg # This is just like dashmstdout with a different argument. 84191cded7Smrg dashmflag=-xM 85191cded7Smrg depmode=dashmstdout 86191cded7Smrgfi 87191cded7Smrg 88ba064abeSmrgcygpath_u="cygpath -u -f -" 89ba064abeSmrgif test "$depmode" = msvcmsys; then 90ba064abeSmrg # This is just like msvisualcpp but w/o cygpath translation. 91ba064abeSmrg # Just convert the backslash-escaped backslashes to single forward 92ba064abeSmrg # slashes to satisfy depend.m4 93ba064abeSmrg cygpath_u="sed s,\\\\\\\\,/,g" 94ba064abeSmrg depmode=msvisualcpp 95ba064abeSmrgfi 96ba064abeSmrg 97191cded7Smrgcase "$depmode" in 98191cded7Smrggcc3) 99191cded7Smrg## gcc 3 implements dependency tracking that does exactly what 100191cded7Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101191cded7Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102b290cf36Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103b290cf36Smrg## the command line argument order; so add the flags where they 104b290cf36Smrg## appear in depend2.am. Note that the slowdown incurred here 105b290cf36Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106b290cf36Smrg for arg 107b290cf36Smrg do 108b290cf36Smrg case $arg in 109b290cf36Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110b290cf36Smrg *) set fnord "$@" "$arg" ;; 111b290cf36Smrg esac 112b290cf36Smrg shift # fnord 113b290cf36Smrg shift # $arg 114b290cf36Smrg done 115b290cf36Smrg "$@" 116191cded7Smrg stat=$? 117191cded7Smrg if test $stat -eq 0; then : 118191cded7Smrg else 119191cded7Smrg rm -f "$tmpdepfile" 120191cded7Smrg exit $stat 121191cded7Smrg fi 122191cded7Smrg mv "$tmpdepfile" "$depfile" 123191cded7Smrg ;; 124191cded7Smrg 125191cded7Smrggcc) 126191cded7Smrg## There are various ways to get dependency output from gcc. Here's 127191cded7Smrg## why we pick this rather obscure method: 128191cded7Smrg## - Don't want to use -MD because we'd like the dependencies to end 129191cded7Smrg## up in a subdir. Having to rename by hand is ugly. 130191cded7Smrg## (We might end up doing this anyway to support other compilers.) 131191cded7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132191cded7Smrg## -MM, not -M (despite what the docs say). 133191cded7Smrg## - Using -M directly means running the compiler twice (even worse 134191cded7Smrg## than renaming). 135191cded7Smrg if test -z "$gccflag"; then 136191cded7Smrg gccflag=-MD, 137191cded7Smrg fi 138191cded7Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139191cded7Smrg stat=$? 140191cded7Smrg if test $stat -eq 0; then : 141191cded7Smrg else 142191cded7Smrg rm -f "$tmpdepfile" 143191cded7Smrg exit $stat 144191cded7Smrg fi 145191cded7Smrg rm -f "$depfile" 146191cded7Smrg echo "$object : \\" > "$depfile" 147191cded7Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148191cded7Smrg## The second -e expression handles DOS-style file names with drive letters. 149191cded7Smrg sed -e 's/^[^:]*: / /' \ 150191cded7Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151191cded7Smrg## This next piece of magic avoids the `deleted header file' problem. 152191cded7Smrg## The problem is that when a header file which appears in a .P file 153191cded7Smrg## is deleted, the dependency causes make to die (because there is 154191cded7Smrg## typically no way to rebuild the header). We avoid this by adding 155191cded7Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156191cded7Smrg## this for us directly. 157191cded7Smrg tr ' ' ' 158191cded7Smrg' < "$tmpdepfile" | 159191cded7Smrg## Some versions of gcc put a space before the `:'. On the theory 160191cded7Smrg## that the space means something, we add a space to the output as 161191cded7Smrg## well. 162191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 164191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165191cded7Smrg rm -f "$tmpdepfile" 166191cded7Smrg ;; 167191cded7Smrg 168191cded7Smrghp) 169191cded7Smrg # This case exists only to let depend.m4 do its work. It works by 170191cded7Smrg # looking at the text of this script. This case will never be run, 171191cded7Smrg # since it is checked for above. 172191cded7Smrg exit 1 173191cded7Smrg ;; 174191cded7Smrg 175191cded7Smrgsgi) 176191cded7Smrg if test "$libtool" = yes; then 177191cded7Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178191cded7Smrg else 179191cded7Smrg "$@" -MDupdate "$tmpdepfile" 180191cded7Smrg fi 181191cded7Smrg stat=$? 182191cded7Smrg if test $stat -eq 0; then : 183191cded7Smrg else 184191cded7Smrg rm -f "$tmpdepfile" 185191cded7Smrg exit $stat 186191cded7Smrg fi 187191cded7Smrg rm -f "$depfile" 188191cded7Smrg 189191cded7Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190191cded7Smrg echo "$object : \\" > "$depfile" 191191cded7Smrg 192191cded7Smrg # Clip off the initial element (the dependent). Don't try to be 193191cded7Smrg # clever and replace this with sed code, as IRIX sed won't handle 194191cded7Smrg # lines with more than a fixed number of characters (4096 in 195191cded7Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196191cded7Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197191cded7Smrg # dependency line. 198191cded7Smrg tr ' ' ' 199191cded7Smrg' < "$tmpdepfile" \ 200191cded7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201191cded7Smrg tr ' 202ba064abeSmrg' ' ' >> "$depfile" 203ba064abeSmrg echo >> "$depfile" 204191cded7Smrg 205191cded7Smrg # The second pass generates a dummy entry for each header file. 206191cded7Smrg tr ' ' ' 207191cded7Smrg' < "$tmpdepfile" \ 208191cded7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209ba064abeSmrg >> "$depfile" 210191cded7Smrg else 211191cded7Smrg # The sourcefile does not contain any dependencies, so just 212191cded7Smrg # store a dummy comment line, to avoid errors with the Makefile 213191cded7Smrg # "include basename.Plo" scheme. 214191cded7Smrg echo "#dummy" > "$depfile" 215191cded7Smrg fi 216191cded7Smrg rm -f "$tmpdepfile" 217191cded7Smrg ;; 218191cded7Smrg 219191cded7Smrgaix) 220191cded7Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221191cded7Smrg # in a .u file. In older versions, this file always lives in the 222191cded7Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223191cded7Smrg # start of each line; $object doesn't have directory information. 224191cded7Smrg # Version 6 uses the directory in both cases. 225b290cf36Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226b290cf36Smrg test "x$dir" = "x$object" && dir= 227b290cf36Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228191cded7Smrg if test "$libtool" = yes; then 229b290cf36Smrg tmpdepfile1=$dir$base.u 230b290cf36Smrg tmpdepfile2=$base.u 231b290cf36Smrg tmpdepfile3=$dir.libs/$base.u 232191cded7Smrg "$@" -Wc,-M 233191cded7Smrg else 234b290cf36Smrg tmpdepfile1=$dir$base.u 235b290cf36Smrg tmpdepfile2=$dir$base.u 236b290cf36Smrg tmpdepfile3=$dir$base.u 237191cded7Smrg "$@" -M 238191cded7Smrg fi 239191cded7Smrg stat=$? 240191cded7Smrg 241191cded7Smrg if test $stat -eq 0; then : 242191cded7Smrg else 243b290cf36Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244191cded7Smrg exit $stat 245191cded7Smrg fi 246191cded7Smrg 247b290cf36Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248b290cf36Smrg do 249b290cf36Smrg test -f "$tmpdepfile" && break 250b290cf36Smrg done 251191cded7Smrg if test -f "$tmpdepfile"; then 252191cded7Smrg # Each line is of the form `foo.o: dependent.h'. 253191cded7Smrg # Do two passes, one to just change these to 254191cded7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255b290cf36Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256b290cf36Smrg # That's a tab and a space in the []. 257b290cf36Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258191cded7Smrg else 259191cded7Smrg # The sourcefile does not contain any dependencies, so just 260191cded7Smrg # store a dummy comment line, to avoid errors with the Makefile 261191cded7Smrg # "include basename.Plo" scheme. 262191cded7Smrg echo "#dummy" > "$depfile" 263191cded7Smrg fi 264191cded7Smrg rm -f "$tmpdepfile" 265191cded7Smrg ;; 266191cded7Smrg 267191cded7Smrgicc) 268191cded7Smrg # Intel's C compiler understands `-MD -MF file'. However on 269191cded7Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270191cded7Smrg # ICC 7.0 will fill foo.d with something like 271191cded7Smrg # foo.o: sub/foo.c 272191cded7Smrg # foo.o: sub/foo.h 273191cded7Smrg # which is wrong. We want: 274191cded7Smrg # sub/foo.o: sub/foo.c 275191cded7Smrg # sub/foo.o: sub/foo.h 276191cded7Smrg # sub/foo.c: 277191cded7Smrg # sub/foo.h: 278191cded7Smrg # ICC 7.1 will output 279191cded7Smrg # foo.o: sub/foo.c sub/foo.h 280191cded7Smrg # and will wrap long lines using \ : 281191cded7Smrg # foo.o: sub/foo.c ... \ 282191cded7Smrg # sub/foo.h ... \ 283191cded7Smrg # ... 284191cded7Smrg 285191cded7Smrg "$@" -MD -MF "$tmpdepfile" 286191cded7Smrg stat=$? 287191cded7Smrg if test $stat -eq 0; then : 288191cded7Smrg else 289191cded7Smrg rm -f "$tmpdepfile" 290191cded7Smrg exit $stat 291191cded7Smrg fi 292191cded7Smrg rm -f "$depfile" 293191cded7Smrg # Each line is of the form `foo.o: dependent.h', 294191cded7Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295191cded7Smrg # Do two passes, one to just change these to 296191cded7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297191cded7Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298191cded7Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299191cded7Smrg # correctly. Breaking it into two sed invocations is a workaround. 300191cded7Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301191cded7Smrg sed -e 's/$/ :/' >> "$depfile" 302191cded7Smrg rm -f "$tmpdepfile" 303191cded7Smrg ;; 304191cded7Smrg 305b290cf36Smrghp2) 306b290cf36Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307b290cf36Smrg # compilers, which have integrated preprocessors. The correct option 308b290cf36Smrg # to use with these is +Maked; it writes dependencies to a file named 309b290cf36Smrg # 'foo.d', which lands next to the object file, wherever that 310b290cf36Smrg # happens to be. 311b290cf36Smrg # Much of this is similar to the tru64 case; see comments there. 312b290cf36Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313b290cf36Smrg test "x$dir" = "x$object" && dir= 314b290cf36Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315b290cf36Smrg if test "$libtool" = yes; then 316b290cf36Smrg tmpdepfile1=$dir$base.d 317b290cf36Smrg tmpdepfile2=$dir.libs/$base.d 318b290cf36Smrg "$@" -Wc,+Maked 319b290cf36Smrg else 320b290cf36Smrg tmpdepfile1=$dir$base.d 321b290cf36Smrg tmpdepfile2=$dir$base.d 322b290cf36Smrg "$@" +Maked 323b290cf36Smrg fi 324b290cf36Smrg stat=$? 325b290cf36Smrg if test $stat -eq 0; then : 326b290cf36Smrg else 327b290cf36Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328b290cf36Smrg exit $stat 329b290cf36Smrg fi 330b290cf36Smrg 331b290cf36Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332b290cf36Smrg do 333b290cf36Smrg test -f "$tmpdepfile" && break 334b290cf36Smrg done 335b290cf36Smrg if test -f "$tmpdepfile"; then 336b290cf36Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337b290cf36Smrg # Add `dependent.h:' lines. 338ba064abeSmrg sed -ne '2,${ 339ba064abeSmrg s/^ *// 340ba064abeSmrg s/ \\*$// 341ba064abeSmrg s/$/:/ 342ba064abeSmrg p 343ba064abeSmrg }' "$tmpdepfile" >> "$depfile" 344b290cf36Smrg else 345b290cf36Smrg echo "#dummy" > "$depfile" 346b290cf36Smrg fi 347b290cf36Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348b290cf36Smrg ;; 349b290cf36Smrg 350191cded7Smrgtru64) 351191cded7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352191cded7Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353191cded7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354191cded7Smrg # dependencies in `foo.d' instead, so we check for that too. 355191cded7Smrg # Subdirectories are respected. 356191cded7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357191cded7Smrg test "x$dir" = "x$object" && dir= 358191cded7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359191cded7Smrg 360191cded7Smrg if test "$libtool" = yes; then 361191cded7Smrg # With Tru64 cc, shared objects can also be used to make a 362b290cf36Smrg # static library. This mechanism is used in libtool 1.4 series to 363191cded7Smrg # handle both shared and static libraries in a single compilation. 364191cded7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365191cded7Smrg # 366191cded7Smrg # With libtool 1.5 this exception was removed, and libtool now 367191cded7Smrg # generates 2 separate objects for the 2 libraries. These two 368b290cf36Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369191cded7Smrg # in $dir$base.o.d. We have to check for both files, because 370191cded7Smrg # one of the two compilations can be disabled. We should prefer 371191cded7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372191cded7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373191cded7Smrg # the former would cause a distcleancheck panic. 374191cded7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375191cded7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376191cded7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377191cded7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378191cded7Smrg "$@" -Wc,-MD 379191cded7Smrg else 380191cded7Smrg tmpdepfile1=$dir$base.o.d 381191cded7Smrg tmpdepfile2=$dir$base.d 382191cded7Smrg tmpdepfile3=$dir$base.d 383191cded7Smrg tmpdepfile4=$dir$base.d 384191cded7Smrg "$@" -MD 385191cded7Smrg fi 386191cded7Smrg 387191cded7Smrg stat=$? 388191cded7Smrg if test $stat -eq 0; then : 389191cded7Smrg else 390191cded7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391191cded7Smrg exit $stat 392191cded7Smrg fi 393191cded7Smrg 394191cded7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395191cded7Smrg do 396191cded7Smrg test -f "$tmpdepfile" && break 397191cded7Smrg done 398191cded7Smrg if test -f "$tmpdepfile"; then 399191cded7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400191cded7Smrg # That's a tab and a space in the []. 401191cded7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402191cded7Smrg else 403191cded7Smrg echo "#dummy" > "$depfile" 404191cded7Smrg fi 405191cded7Smrg rm -f "$tmpdepfile" 406191cded7Smrg ;; 407191cded7Smrg 408191cded7Smrg#nosideeffect) 409191cded7Smrg # This comment above is used by automake to tell side-effect 410191cded7Smrg # dependency tracking mechanisms from slower ones. 411191cded7Smrg 412191cded7Smrgdashmstdout) 413191cded7Smrg # Important note: in order to support this mode, a compiler *must* 414191cded7Smrg # always write the preprocessed file to stdout, regardless of -o. 415191cded7Smrg "$@" || exit $? 416191cded7Smrg 417191cded7Smrg # Remove the call to Libtool. 418191cded7Smrg if test "$libtool" = yes; then 419ba064abeSmrg while test "X$1" != 'X--mode=compile'; do 420191cded7Smrg shift 421191cded7Smrg done 422191cded7Smrg shift 423191cded7Smrg fi 424191cded7Smrg 425191cded7Smrg # Remove `-o $object'. 426191cded7Smrg IFS=" " 427191cded7Smrg for arg 428191cded7Smrg do 429191cded7Smrg case $arg in 430191cded7Smrg -o) 431191cded7Smrg shift 432191cded7Smrg ;; 433191cded7Smrg $object) 434191cded7Smrg shift 435191cded7Smrg ;; 436191cded7Smrg *) 437191cded7Smrg set fnord "$@" "$arg" 438191cded7Smrg shift # fnord 439191cded7Smrg shift # $arg 440191cded7Smrg ;; 441191cded7Smrg esac 442191cded7Smrg done 443191cded7Smrg 444191cded7Smrg test -z "$dashmflag" && dashmflag=-M 445191cded7Smrg # Require at least two characters before searching for `:' 446191cded7Smrg # in the target name. This is to cope with DOS-style filenames: 447191cded7Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448191cded7Smrg "$@" $dashmflag | 449191cded7Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450191cded7Smrg rm -f "$depfile" 451191cded7Smrg cat < "$tmpdepfile" > "$depfile" 452191cded7Smrg tr ' ' ' 453191cded7Smrg' < "$tmpdepfile" | \ 454191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 456191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457191cded7Smrg rm -f "$tmpdepfile" 458191cded7Smrg ;; 459191cded7Smrg 460191cded7SmrgdashXmstdout) 461191cded7Smrg # This case only exists to satisfy depend.m4. It is never actually 462191cded7Smrg # run, as this mode is specially recognized in the preamble. 463191cded7Smrg exit 1 464191cded7Smrg ;; 465191cded7Smrg 466191cded7Smrgmakedepend) 467191cded7Smrg "$@" || exit $? 468191cded7Smrg # Remove any Libtool call 469191cded7Smrg if test "$libtool" = yes; then 470ba064abeSmrg while test "X$1" != 'X--mode=compile'; do 471191cded7Smrg shift 472191cded7Smrg done 473191cded7Smrg shift 474191cded7Smrg fi 475191cded7Smrg # X makedepend 476191cded7Smrg shift 477ba064abeSmrg cleared=no eat=no 478ba064abeSmrg for arg 479ba064abeSmrg do 480191cded7Smrg case $cleared in 481191cded7Smrg no) 482191cded7Smrg set ""; shift 483191cded7Smrg cleared=yes ;; 484191cded7Smrg esac 485ba064abeSmrg if test $eat = yes; then 486ba064abeSmrg eat=no 487ba064abeSmrg continue 488ba064abeSmrg fi 489191cded7Smrg case "$arg" in 490191cded7Smrg -D*|-I*) 491191cded7Smrg set fnord "$@" "$arg"; shift ;; 492191cded7Smrg # Strip any option that makedepend may not understand. Remove 493191cded7Smrg # the object too, otherwise makedepend will parse it as a source file. 494ba064abeSmrg -arch) 495ba064abeSmrg eat=yes ;; 496191cded7Smrg -*|$object) 497191cded7Smrg ;; 498191cded7Smrg *) 499191cded7Smrg set fnord "$@" "$arg"; shift ;; 500191cded7Smrg esac 501191cded7Smrg done 502ba064abeSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503191cded7Smrg touch "$tmpdepfile" 504191cded7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505191cded7Smrg rm -f "$depfile" 506191cded7Smrg cat < "$tmpdepfile" > "$depfile" 507191cded7Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508191cded7Smrg' | \ 509191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 511191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512191cded7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513191cded7Smrg ;; 514191cded7Smrg 515191cded7Smrgcpp) 516191cded7Smrg # Important note: in order to support this mode, a compiler *must* 517191cded7Smrg # always write the preprocessed file to stdout. 518191cded7Smrg "$@" || exit $? 519191cded7Smrg 520191cded7Smrg # Remove the call to Libtool. 521191cded7Smrg if test "$libtool" = yes; then 522ba064abeSmrg while test "X$1" != 'X--mode=compile'; do 523191cded7Smrg shift 524191cded7Smrg done 525191cded7Smrg shift 526191cded7Smrg fi 527191cded7Smrg 528191cded7Smrg # Remove `-o $object'. 529191cded7Smrg IFS=" " 530191cded7Smrg for arg 531191cded7Smrg do 532191cded7Smrg case $arg in 533191cded7Smrg -o) 534191cded7Smrg shift 535191cded7Smrg ;; 536191cded7Smrg $object) 537191cded7Smrg shift 538191cded7Smrg ;; 539191cded7Smrg *) 540191cded7Smrg set fnord "$@" "$arg" 541191cded7Smrg shift # fnord 542191cded7Smrg shift # $arg 543191cded7Smrg ;; 544191cded7Smrg esac 545191cded7Smrg done 546191cded7Smrg 547191cded7Smrg "$@" -E | 548191cded7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549191cded7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550191cded7Smrg sed '$ s: \\$::' > "$tmpdepfile" 551191cded7Smrg rm -f "$depfile" 552191cded7Smrg echo "$object : \\" > "$depfile" 553191cded7Smrg cat < "$tmpdepfile" >> "$depfile" 554191cded7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555191cded7Smrg rm -f "$tmpdepfile" 556191cded7Smrg ;; 557191cded7Smrg 558191cded7Smrgmsvisualcpp) 559191cded7Smrg # Important note: in order to support this mode, a compiler *must* 560ba064abeSmrg # always write the preprocessed file to stdout. 561191cded7Smrg "$@" || exit $? 562ba064abeSmrg 563ba064abeSmrg # Remove the call to Libtool. 564ba064abeSmrg if test "$libtool" = yes; then 565ba064abeSmrg while test "X$1" != 'X--mode=compile'; do 566ba064abeSmrg shift 567ba064abeSmrg done 568ba064abeSmrg shift 569ba064abeSmrg fi 570ba064abeSmrg 571191cded7Smrg IFS=" " 572191cded7Smrg for arg 573191cded7Smrg do 574191cded7Smrg case "$arg" in 575ba064abeSmrg -o) 576ba064abeSmrg shift 577ba064abeSmrg ;; 578ba064abeSmrg $object) 579ba064abeSmrg shift 580ba064abeSmrg ;; 581191cded7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582191cded7Smrg set fnord "$@" 583191cded7Smrg shift 584191cded7Smrg shift 585191cded7Smrg ;; 586191cded7Smrg *) 587191cded7Smrg set fnord "$@" "$arg" 588191cded7Smrg shift 589191cded7Smrg shift 590191cded7Smrg ;; 591191cded7Smrg esac 592191cded7Smrg done 593ba064abeSmrg "$@" -E 2>/dev/null | 594ba064abeSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595191cded7Smrg rm -f "$depfile" 596191cded7Smrg echo "$object : \\" > "$depfile" 597ba064abeSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598191cded7Smrg echo " " >> "$depfile" 599ba064abeSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600191cded7Smrg rm -f "$tmpdepfile" 601191cded7Smrg ;; 602191cded7Smrg 603ba064abeSmrgmsvcmsys) 604ba064abeSmrg # This case exists only to let depend.m4 do its work. It works by 605ba064abeSmrg # looking at the text of this script. This case will never be run, 606ba064abeSmrg # since it is checked for above. 607ba064abeSmrg exit 1 608ba064abeSmrg ;; 609ba064abeSmrg 610191cded7Smrgnone) 611191cded7Smrg exec "$@" 612191cded7Smrg ;; 613191cded7Smrg 614191cded7Smrg*) 615191cded7Smrg echo "Unknown depmode $depmode" 1>&2 616191cded7Smrg exit 1 617191cded7Smrg ;; 618191cded7Smrgesac 619191cded7Smrg 620191cded7Smrgexit 0 621191cded7Smrg 622191cded7Smrg# Local Variables: 623191cded7Smrg# mode: shell-script 624191cded7Smrg# sh-indentation: 2 625191cded7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626191cded7Smrg# time-stamp-start: "scriptversion=" 627191cded7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628ba064abeSmrg# time-stamp-time-zone: "UTC" 629ba064abeSmrg# time-stamp-end: "; # UTC" 630191cded7Smrg# End: 631