depcomp revision 9ef7378b
1c19de146Smrg#! /bin/sh 2c19de146Smrg# depcomp - compile a program generating dependencies as side-effects 39ef7378bSmrg 49ef7378bSmrgscriptversion=2009-04-28.21; # UTC 59ef7378bSmrg 69ef7378bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 79ef7378bSmrg# Software Foundation, Inc. 8c19de146Smrg 9c19de146Smrg# This program is free software; you can redistribute it and/or modify 10c19de146Smrg# it under the terms of the GNU General Public License as published by 11c19de146Smrg# the Free Software Foundation; either version 2, or (at your option) 12c19de146Smrg# any later version. 13c19de146Smrg 14c19de146Smrg# This program is distributed in the hope that it will be useful, 15c19de146Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16c19de146Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17c19de146Smrg# GNU General Public License for more details. 18c19de146Smrg 19c19de146Smrg# You should have received a copy of the GNU General Public License 209ef7378bSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21c19de146Smrg 22c19de146Smrg# As a special exception to the GNU General Public License, if you 23c19de146Smrg# distribute this file as part of a program that contains a 24c19de146Smrg# configuration script generated by Autoconf, you may include it under 25c19de146Smrg# the same distribution terms that you use for the rest of that program. 26c19de146Smrg 27c19de146Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28c19de146Smrg 299ef7378bSmrgcase $1 in 309ef7378bSmrg '') 319ef7378bSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 329ef7378bSmrg exit 1; 339ef7378bSmrg ;; 349ef7378bSmrg -h | --h*) 359ef7378bSmrg cat <<\EOF 369ef7378bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 379ef7378bSmrg 389ef7378bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 399ef7378bSmrgas side-effects. 409ef7378bSmrg 419ef7378bSmrgEnvironment variables: 429ef7378bSmrg depmode Dependency tracking mode. 439ef7378bSmrg source Source file read by `PROGRAMS ARGS'. 449ef7378bSmrg object Object file output by `PROGRAMS ARGS'. 459ef7378bSmrg DEPDIR directory where to store dependencies. 469ef7378bSmrg depfile Dependency file to output. 479ef7378bSmrg tmpdepfile Temporary file to use when outputing dependencies. 489ef7378bSmrg libtool Whether libtool is used (yes/no). 499ef7378bSmrg 509ef7378bSmrgReport bugs to <bug-automake@gnu.org>. 519ef7378bSmrgEOF 529ef7378bSmrg exit $? 539ef7378bSmrg ;; 549ef7378bSmrg -v | --v*) 559ef7378bSmrg echo "depcomp $scriptversion" 569ef7378bSmrg exit $? 579ef7378bSmrg ;; 589ef7378bSmrgesac 599ef7378bSmrg 60c19de146Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61c19de146Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62c19de146Smrg exit 1 63c19de146Smrgfi 64c19de146Smrg 659ef7378bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 669ef7378bSmrgdepfile=${depfile-`echo "$object" | 679ef7378bSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68c19de146Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69c19de146Smrg 70c19de146Smrgrm -f "$tmpdepfile" 71c19de146Smrg 72c19de146Smrg# Some modes work just like other modes, but use different flags. We 73c19de146Smrg# parameterize here, but still list the modes in the big case below, 74c19de146Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75c19de146Smrg# here, because this file can only contain one case statement. 76c19de146Smrgif test "$depmode" = hp; then 77c19de146Smrg # HP compiler uses -M and no extra arg. 78c19de146Smrg gccflag=-M 79c19de146Smrg depmode=gcc 80c19de146Smrgfi 81c19de146Smrg 82c19de146Smrgif test "$depmode" = dashXmstdout; then 83c19de146Smrg # This is just like dashmstdout with a different argument. 84c19de146Smrg dashmflag=-xM 85c19de146Smrg depmode=dashmstdout 86c19de146Smrgfi 87c19de146Smrg 889ef7378bSmrgcygpath_u="cygpath -u -f -" 899ef7378bSmrgif test "$depmode" = msvcmsys; then 909ef7378bSmrg # This is just like msvisualcpp but w/o cygpath translation. 919ef7378bSmrg # Just convert the backslash-escaped backslashes to single forward 929ef7378bSmrg # slashes to satisfy depend.m4 939ef7378bSmrg cygpath_u="sed s,\\\\\\\\,/,g" 949ef7378bSmrg depmode=msvisualcpp 959ef7378bSmrgfi 969ef7378bSmrg 97c19de146Smrgcase "$depmode" in 98c19de146Smrggcc3) 99c19de146Smrg## gcc 3 implements dependency tracking that does exactly what 100c19de146Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101c19de146Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1029ef7378bSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1039ef7378bSmrg## the command line argument order; so add the flags where they 1049ef7378bSmrg## appear in depend2.am. Note that the slowdown incurred here 1059ef7378bSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1069ef7378bSmrg for arg 1079ef7378bSmrg do 1089ef7378bSmrg case $arg in 1099ef7378bSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1109ef7378bSmrg *) set fnord "$@" "$arg" ;; 1119ef7378bSmrg esac 1129ef7378bSmrg shift # fnord 1139ef7378bSmrg shift # $arg 1149ef7378bSmrg done 1159ef7378bSmrg "$@" 116c19de146Smrg stat=$? 117c19de146Smrg if test $stat -eq 0; then : 118c19de146Smrg else 119c19de146Smrg rm -f "$tmpdepfile" 120c19de146Smrg exit $stat 121c19de146Smrg fi 122c19de146Smrg mv "$tmpdepfile" "$depfile" 123c19de146Smrg ;; 124c19de146Smrg 125c19de146Smrggcc) 126c19de146Smrg## There are various ways to get dependency output from gcc. Here's 127c19de146Smrg## why we pick this rather obscure method: 128c19de146Smrg## - Don't want to use -MD because we'd like the dependencies to end 129c19de146Smrg## up in a subdir. Having to rename by hand is ugly. 130c19de146Smrg## (We might end up doing this anyway to support other compilers.) 131c19de146Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132c19de146Smrg## -MM, not -M (despite what the docs say). 133c19de146Smrg## - Using -M directly means running the compiler twice (even worse 134c19de146Smrg## than renaming). 135c19de146Smrg if test -z "$gccflag"; then 136c19de146Smrg gccflag=-MD, 137c19de146Smrg fi 138c19de146Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139c19de146Smrg stat=$? 140c19de146Smrg if test $stat -eq 0; then : 141c19de146Smrg else 142c19de146Smrg rm -f "$tmpdepfile" 143c19de146Smrg exit $stat 144c19de146Smrg fi 145c19de146Smrg rm -f "$depfile" 146c19de146Smrg echo "$object : \\" > "$depfile" 147c19de146Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148c19de146Smrg## The second -e expression handles DOS-style file names with drive letters. 149c19de146Smrg sed -e 's/^[^:]*: / /' \ 150c19de146Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151c19de146Smrg## This next piece of magic avoids the `deleted header file' problem. 152c19de146Smrg## The problem is that when a header file which appears in a .P file 153c19de146Smrg## is deleted, the dependency causes make to die (because there is 154c19de146Smrg## typically no way to rebuild the header). We avoid this by adding 155c19de146Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156c19de146Smrg## this for us directly. 157c19de146Smrg tr ' ' ' 158c19de146Smrg' < "$tmpdepfile" | 159c19de146Smrg## Some versions of gcc put a space before the `:'. On the theory 160c19de146Smrg## that the space means something, we add a space to the output as 161c19de146Smrg## well. 162c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163c19de146Smrg## correctly. Breaking it into two sed invocations is a workaround. 164c19de146Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165c19de146Smrg rm -f "$tmpdepfile" 166c19de146Smrg ;; 167c19de146Smrg 168c19de146Smrghp) 169c19de146Smrg # This case exists only to let depend.m4 do its work. It works by 170c19de146Smrg # looking at the text of this script. This case will never be run, 171c19de146Smrg # since it is checked for above. 172c19de146Smrg exit 1 173c19de146Smrg ;; 174c19de146Smrg 175c19de146Smrgsgi) 176c19de146Smrg if test "$libtool" = yes; then 177c19de146Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178c19de146Smrg else 179c19de146Smrg "$@" -MDupdate "$tmpdepfile" 180c19de146Smrg fi 181c19de146Smrg stat=$? 182c19de146Smrg if test $stat -eq 0; then : 183c19de146Smrg else 184c19de146Smrg rm -f "$tmpdepfile" 185c19de146Smrg exit $stat 186c19de146Smrg fi 187c19de146Smrg rm -f "$depfile" 188c19de146Smrg 189c19de146Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190c19de146Smrg echo "$object : \\" > "$depfile" 191c19de146Smrg 192c19de146Smrg # Clip off the initial element (the dependent). Don't try to be 193c19de146Smrg # clever and replace this with sed code, as IRIX sed won't handle 194c19de146Smrg # lines with more than a fixed number of characters (4096 in 195c19de146Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196c19de146Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197c19de146Smrg # dependency line. 198c19de146Smrg tr ' ' ' 199c19de146Smrg' < "$tmpdepfile" \ 200c19de146Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201c19de146Smrg tr ' 2029ef7378bSmrg' ' ' >> "$depfile" 2039ef7378bSmrg echo >> "$depfile" 204c19de146Smrg 205c19de146Smrg # The second pass generates a dummy entry for each header file. 206c19de146Smrg tr ' ' ' 207c19de146Smrg' < "$tmpdepfile" \ 208c19de146Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2099ef7378bSmrg >> "$depfile" 210c19de146Smrg else 211c19de146Smrg # The sourcefile does not contain any dependencies, so just 212c19de146Smrg # store a dummy comment line, to avoid errors with the Makefile 213c19de146Smrg # "include basename.Plo" scheme. 214c19de146Smrg echo "#dummy" > "$depfile" 215c19de146Smrg fi 216c19de146Smrg rm -f "$tmpdepfile" 217c19de146Smrg ;; 218c19de146Smrg 219c19de146Smrgaix) 220c19de146Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221c19de146Smrg # in a .u file. In older versions, this file always lives in the 222c19de146Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223c19de146Smrg # start of each line; $object doesn't have directory information. 224c19de146Smrg # Version 6 uses the directory in both cases. 2259ef7378bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2269ef7378bSmrg test "x$dir" = "x$object" && dir= 2279ef7378bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228c19de146Smrg if test "$libtool" = yes; then 2299ef7378bSmrg tmpdepfile1=$dir$base.u 2309ef7378bSmrg tmpdepfile2=$base.u 2319ef7378bSmrg tmpdepfile3=$dir.libs/$base.u 232c19de146Smrg "$@" -Wc,-M 233c19de146Smrg else 2349ef7378bSmrg tmpdepfile1=$dir$base.u 2359ef7378bSmrg tmpdepfile2=$dir$base.u 2369ef7378bSmrg tmpdepfile3=$dir$base.u 237c19de146Smrg "$@" -M 238c19de146Smrg fi 239c19de146Smrg stat=$? 240c19de146Smrg 241c19de146Smrg if test $stat -eq 0; then : 242c19de146Smrg else 2439ef7378bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244c19de146Smrg exit $stat 245c19de146Smrg fi 246c19de146Smrg 2479ef7378bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2489ef7378bSmrg do 2499ef7378bSmrg test -f "$tmpdepfile" && break 2509ef7378bSmrg done 251c19de146Smrg if test -f "$tmpdepfile"; then 252c19de146Smrg # Each line is of the form `foo.o: dependent.h'. 253c19de146Smrg # Do two passes, one to just change these to 254c19de146Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2559ef7378bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2569ef7378bSmrg # That's a tab and a space in the []. 2579ef7378bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258c19de146Smrg else 259c19de146Smrg # The sourcefile does not contain any dependencies, so just 260c19de146Smrg # store a dummy comment line, to avoid errors with the Makefile 261c19de146Smrg # "include basename.Plo" scheme. 262c19de146Smrg echo "#dummy" > "$depfile" 263c19de146Smrg fi 264c19de146Smrg rm -f "$tmpdepfile" 265c19de146Smrg ;; 266c19de146Smrg 267c19de146Smrgicc) 268c19de146Smrg # Intel's C compiler understands `-MD -MF file'. However on 269c19de146Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270c19de146Smrg # ICC 7.0 will fill foo.d with something like 271c19de146Smrg # foo.o: sub/foo.c 272c19de146Smrg # foo.o: sub/foo.h 273c19de146Smrg # which is wrong. We want: 274c19de146Smrg # sub/foo.o: sub/foo.c 275c19de146Smrg # sub/foo.o: sub/foo.h 276c19de146Smrg # sub/foo.c: 277c19de146Smrg # sub/foo.h: 278c19de146Smrg # ICC 7.1 will output 279c19de146Smrg # foo.o: sub/foo.c sub/foo.h 280c19de146Smrg # and will wrap long lines using \ : 281c19de146Smrg # foo.o: sub/foo.c ... \ 282c19de146Smrg # sub/foo.h ... \ 283c19de146Smrg # ... 284c19de146Smrg 285c19de146Smrg "$@" -MD -MF "$tmpdepfile" 286c19de146Smrg stat=$? 287c19de146Smrg if test $stat -eq 0; then : 288c19de146Smrg else 289c19de146Smrg rm -f "$tmpdepfile" 290c19de146Smrg exit $stat 291c19de146Smrg fi 292c19de146Smrg rm -f "$depfile" 293c19de146Smrg # Each line is of the form `foo.o: dependent.h', 294c19de146Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295c19de146Smrg # Do two passes, one to just change these to 296c19de146Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297c19de146Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298c19de146Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299c19de146Smrg # correctly. Breaking it into two sed invocations is a workaround. 300c19de146Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301c19de146Smrg sed -e 's/$/ :/' >> "$depfile" 302c19de146Smrg rm -f "$tmpdepfile" 303c19de146Smrg ;; 304c19de146Smrg 3059ef7378bSmrghp2) 3069ef7378bSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3079ef7378bSmrg # compilers, which have integrated preprocessors. The correct option 3089ef7378bSmrg # to use with these is +Maked; it writes dependencies to a file named 3099ef7378bSmrg # 'foo.d', which lands next to the object file, wherever that 3109ef7378bSmrg # happens to be. 3119ef7378bSmrg # Much of this is similar to the tru64 case; see comments there. 3129ef7378bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3139ef7378bSmrg test "x$dir" = "x$object" && dir= 3149ef7378bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3159ef7378bSmrg if test "$libtool" = yes; then 3169ef7378bSmrg tmpdepfile1=$dir$base.d 3179ef7378bSmrg tmpdepfile2=$dir.libs/$base.d 3189ef7378bSmrg "$@" -Wc,+Maked 3199ef7378bSmrg else 3209ef7378bSmrg tmpdepfile1=$dir$base.d 3219ef7378bSmrg tmpdepfile2=$dir$base.d 3229ef7378bSmrg "$@" +Maked 3239ef7378bSmrg fi 3249ef7378bSmrg stat=$? 3259ef7378bSmrg if test $stat -eq 0; then : 3269ef7378bSmrg else 3279ef7378bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3289ef7378bSmrg exit $stat 3299ef7378bSmrg fi 3309ef7378bSmrg 3319ef7378bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3329ef7378bSmrg do 3339ef7378bSmrg test -f "$tmpdepfile" && break 3349ef7378bSmrg done 3359ef7378bSmrg if test -f "$tmpdepfile"; then 3369ef7378bSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3379ef7378bSmrg # Add `dependent.h:' lines. 3389ef7378bSmrg sed -ne '2,${ 3399ef7378bSmrg s/^ *// 3409ef7378bSmrg s/ \\*$// 3419ef7378bSmrg s/$/:/ 3429ef7378bSmrg p 3439ef7378bSmrg }' "$tmpdepfile" >> "$depfile" 3449ef7378bSmrg else 3459ef7378bSmrg echo "#dummy" > "$depfile" 3469ef7378bSmrg fi 3479ef7378bSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3489ef7378bSmrg ;; 3499ef7378bSmrg 350c19de146Smrgtru64) 351c19de146Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352c19de146Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353c19de146Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354c19de146Smrg # dependencies in `foo.d' instead, so we check for that too. 355c19de146Smrg # Subdirectories are respected. 356c19de146Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357c19de146Smrg test "x$dir" = "x$object" && dir= 358c19de146Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359c19de146Smrg 360c19de146Smrg if test "$libtool" = yes; then 3619ef7378bSmrg # With Tru64 cc, shared objects can also be used to make a 3629ef7378bSmrg # static library. This mechanism is used in libtool 1.4 series to 3639ef7378bSmrg # handle both shared and static libraries in a single compilation. 3649ef7378bSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3659ef7378bSmrg # 3669ef7378bSmrg # With libtool 1.5 this exception was removed, and libtool now 3679ef7378bSmrg # generates 2 separate objects for the 2 libraries. These two 3689ef7378bSmrg # compilations output dependencies in $dir.libs/$base.o.d and 3699ef7378bSmrg # in $dir$base.o.d. We have to check for both files, because 3709ef7378bSmrg # one of the two compilations can be disabled. We should prefer 3719ef7378bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3729ef7378bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 3739ef7378bSmrg # the former would cause a distcleancheck panic. 3749ef7378bSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3759ef7378bSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3769ef7378bSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3779ef7378bSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378c19de146Smrg "$@" -Wc,-MD 379c19de146Smrg else 3809ef7378bSmrg tmpdepfile1=$dir$base.o.d 3819ef7378bSmrg tmpdepfile2=$dir$base.d 3829ef7378bSmrg tmpdepfile3=$dir$base.d 3839ef7378bSmrg tmpdepfile4=$dir$base.d 384c19de146Smrg "$@" -MD 385c19de146Smrg fi 386c19de146Smrg 387c19de146Smrg stat=$? 388c19de146Smrg if test $stat -eq 0; then : 389c19de146Smrg else 3909ef7378bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391c19de146Smrg exit $stat 392c19de146Smrg fi 393c19de146Smrg 3949ef7378bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3959ef7378bSmrg do 3969ef7378bSmrg test -f "$tmpdepfile" && break 3979ef7378bSmrg done 398c19de146Smrg if test -f "$tmpdepfile"; then 399c19de146Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400c19de146Smrg # That's a tab and a space in the []. 401c19de146Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402c19de146Smrg else 403c19de146Smrg echo "#dummy" > "$depfile" 404c19de146Smrg fi 405c19de146Smrg rm -f "$tmpdepfile" 406c19de146Smrg ;; 407c19de146Smrg 408c19de146Smrg#nosideeffect) 409c19de146Smrg # This comment above is used by automake to tell side-effect 410c19de146Smrg # dependency tracking mechanisms from slower ones. 411c19de146Smrg 412c19de146Smrgdashmstdout) 413c19de146Smrg # Important note: in order to support this mode, a compiler *must* 414c19de146Smrg # always write the preprocessed file to stdout, regardless of -o. 415c19de146Smrg "$@" || exit $? 416c19de146Smrg 417c19de146Smrg # Remove the call to Libtool. 418c19de146Smrg if test "$libtool" = yes; then 4199ef7378bSmrg while test "X$1" != 'X--mode=compile'; do 420c19de146Smrg shift 421c19de146Smrg done 422c19de146Smrg shift 423c19de146Smrg fi 424c19de146Smrg 425c19de146Smrg # Remove `-o $object'. 426c19de146Smrg IFS=" " 427c19de146Smrg for arg 428c19de146Smrg do 429c19de146Smrg case $arg in 430c19de146Smrg -o) 431c19de146Smrg shift 432c19de146Smrg ;; 433c19de146Smrg $object) 434c19de146Smrg shift 435c19de146Smrg ;; 436c19de146Smrg *) 437c19de146Smrg set fnord "$@" "$arg" 438c19de146Smrg shift # fnord 439c19de146Smrg shift # $arg 440c19de146Smrg ;; 441c19de146Smrg esac 442c19de146Smrg done 443c19de146Smrg 444c19de146Smrg test -z "$dashmflag" && dashmflag=-M 445c19de146Smrg # Require at least two characters before searching for `:' 446c19de146Smrg # in the target name. This is to cope with DOS-style filenames: 447c19de146Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448c19de146Smrg "$@" $dashmflag | 449c19de146Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450c19de146Smrg rm -f "$depfile" 451c19de146Smrg cat < "$tmpdepfile" > "$depfile" 452c19de146Smrg tr ' ' ' 453c19de146Smrg' < "$tmpdepfile" | \ 454c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455c19de146Smrg## correctly. Breaking it into two sed invocations is a workaround. 456c19de146Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457c19de146Smrg rm -f "$tmpdepfile" 458c19de146Smrg ;; 459c19de146Smrg 460c19de146SmrgdashXmstdout) 461c19de146Smrg # This case only exists to satisfy depend.m4. It is never actually 462c19de146Smrg # run, as this mode is specially recognized in the preamble. 463c19de146Smrg exit 1 464c19de146Smrg ;; 465c19de146Smrg 466c19de146Smrgmakedepend) 467c19de146Smrg "$@" || exit $? 468c19de146Smrg # Remove any Libtool call 469c19de146Smrg if test "$libtool" = yes; then 4709ef7378bSmrg while test "X$1" != 'X--mode=compile'; do 471c19de146Smrg shift 472c19de146Smrg done 473c19de146Smrg shift 474c19de146Smrg fi 475c19de146Smrg # X makedepend 476c19de146Smrg shift 4779ef7378bSmrg cleared=no eat=no 4789ef7378bSmrg for arg 4799ef7378bSmrg do 480c19de146Smrg case $cleared in 481c19de146Smrg no) 482c19de146Smrg set ""; shift 483c19de146Smrg cleared=yes ;; 484c19de146Smrg esac 4859ef7378bSmrg if test $eat = yes; then 4869ef7378bSmrg eat=no 4879ef7378bSmrg continue 4889ef7378bSmrg fi 489c19de146Smrg case "$arg" in 490c19de146Smrg -D*|-I*) 491c19de146Smrg set fnord "$@" "$arg"; shift ;; 492c19de146Smrg # Strip any option that makedepend may not understand. Remove 493c19de146Smrg # the object too, otherwise makedepend will parse it as a source file. 4949ef7378bSmrg -arch) 4959ef7378bSmrg eat=yes ;; 496c19de146Smrg -*|$object) 497c19de146Smrg ;; 498c19de146Smrg *) 499c19de146Smrg set fnord "$@" "$arg"; shift ;; 500c19de146Smrg esac 501c19de146Smrg done 5029ef7378bSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503c19de146Smrg touch "$tmpdepfile" 504c19de146Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505c19de146Smrg rm -f "$depfile" 506c19de146Smrg cat < "$tmpdepfile" > "$depfile" 507c19de146Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508c19de146Smrg' | \ 509c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510c19de146Smrg## correctly. Breaking it into two sed invocations is a workaround. 511c19de146Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512c19de146Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513c19de146Smrg ;; 514c19de146Smrg 515c19de146Smrgcpp) 516c19de146Smrg # Important note: in order to support this mode, a compiler *must* 517c19de146Smrg # always write the preprocessed file to stdout. 518c19de146Smrg "$@" || exit $? 519c19de146Smrg 520c19de146Smrg # Remove the call to Libtool. 521c19de146Smrg if test "$libtool" = yes; then 5229ef7378bSmrg while test "X$1" != 'X--mode=compile'; do 523c19de146Smrg shift 524c19de146Smrg done 525c19de146Smrg shift 526c19de146Smrg fi 527c19de146Smrg 528c19de146Smrg # Remove `-o $object'. 529c19de146Smrg IFS=" " 530c19de146Smrg for arg 531c19de146Smrg do 532c19de146Smrg case $arg in 533c19de146Smrg -o) 534c19de146Smrg shift 535c19de146Smrg ;; 536c19de146Smrg $object) 537c19de146Smrg shift 538c19de146Smrg ;; 539c19de146Smrg *) 540c19de146Smrg set fnord "$@" "$arg" 541c19de146Smrg shift # fnord 542c19de146Smrg shift # $arg 543c19de146Smrg ;; 544c19de146Smrg esac 545c19de146Smrg done 546c19de146Smrg 547c19de146Smrg "$@" -E | 5489ef7378bSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5499ef7378bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550c19de146Smrg sed '$ s: \\$::' > "$tmpdepfile" 551c19de146Smrg rm -f "$depfile" 552c19de146Smrg echo "$object : \\" > "$depfile" 553c19de146Smrg cat < "$tmpdepfile" >> "$depfile" 554c19de146Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555c19de146Smrg rm -f "$tmpdepfile" 556c19de146Smrg ;; 557c19de146Smrg 558c19de146Smrgmsvisualcpp) 559c19de146Smrg # Important note: in order to support this mode, a compiler *must* 5609ef7378bSmrg # always write the preprocessed file to stdout. 561c19de146Smrg "$@" || exit $? 5629ef7378bSmrg 5639ef7378bSmrg # Remove the call to Libtool. 5649ef7378bSmrg if test "$libtool" = yes; then 5659ef7378bSmrg while test "X$1" != 'X--mode=compile'; do 5669ef7378bSmrg shift 5679ef7378bSmrg done 5689ef7378bSmrg shift 5699ef7378bSmrg fi 5709ef7378bSmrg 571c19de146Smrg IFS=" " 572c19de146Smrg for arg 573c19de146Smrg do 574c19de146Smrg case "$arg" in 5759ef7378bSmrg -o) 5769ef7378bSmrg shift 5779ef7378bSmrg ;; 5789ef7378bSmrg $object) 5799ef7378bSmrg shift 5809ef7378bSmrg ;; 581c19de146Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582c19de146Smrg set fnord "$@" 583c19de146Smrg shift 584c19de146Smrg shift 585c19de146Smrg ;; 586c19de146Smrg *) 587c19de146Smrg set fnord "$@" "$arg" 588c19de146Smrg shift 589c19de146Smrg shift 590c19de146Smrg ;; 591c19de146Smrg esac 592c19de146Smrg done 5939ef7378bSmrg "$@" -E 2>/dev/null | 5949ef7378bSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595c19de146Smrg rm -f "$depfile" 596c19de146Smrg echo "$object : \\" > "$depfile" 5979ef7378bSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598c19de146Smrg echo " " >> "$depfile" 5999ef7378bSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600c19de146Smrg rm -f "$tmpdepfile" 601c19de146Smrg ;; 602c19de146Smrg 6039ef7378bSmrgmsvcmsys) 6049ef7378bSmrg # This case exists only to let depend.m4 do its work. It works by 6059ef7378bSmrg # looking at the text of this script. This case will never be run, 6069ef7378bSmrg # since it is checked for above. 6079ef7378bSmrg exit 1 6089ef7378bSmrg ;; 6099ef7378bSmrg 610c19de146Smrgnone) 611c19de146Smrg exec "$@" 612c19de146Smrg ;; 613c19de146Smrg 614c19de146Smrg*) 615c19de146Smrg echo "Unknown depmode $depmode" 1>&2 616c19de146Smrg exit 1 617c19de146Smrg ;; 618c19de146Smrgesac 619c19de146Smrg 620c19de146Smrgexit 0 6219ef7378bSmrg 6229ef7378bSmrg# Local Variables: 6239ef7378bSmrg# mode: shell-script 6249ef7378bSmrg# sh-indentation: 2 6259ef7378bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6269ef7378bSmrg# time-stamp-start: "scriptversion=" 6279ef7378bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6289ef7378bSmrg# time-stamp-time-zone: "UTC" 6299ef7378bSmrg# time-stamp-end: "; # UTC" 6309ef7378bSmrg# End: 631