depcomp revision 72313efb
1bdcaa8d0Smrg#! /bin/sh 2bdcaa8d0Smrg# depcomp - compile a program generating dependencies as side-effects 3bdcaa8d0Smrg 472313efbSmrgscriptversion=2007-03-29.01 5bdcaa8d0Smrg 672313efbSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 772313efbSmrg# Foundation, Inc. 8bdcaa8d0Smrg 9bdcaa8d0Smrg# This program is free software; you can redistribute it and/or modify 10bdcaa8d0Smrg# it under the terms of the GNU General Public License as published by 11bdcaa8d0Smrg# the Free Software Foundation; either version 2, or (at your option) 12bdcaa8d0Smrg# any later version. 13bdcaa8d0Smrg 14bdcaa8d0Smrg# This program is distributed in the hope that it will be useful, 15bdcaa8d0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16bdcaa8d0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17bdcaa8d0Smrg# GNU General Public License for more details. 18bdcaa8d0Smrg 19bdcaa8d0Smrg# You should have received a copy of the GNU General Public License 20bdcaa8d0Smrg# along with this program; if not, write to the Free Software 21bdcaa8d0Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22bdcaa8d0Smrg# 02110-1301, USA. 23bdcaa8d0Smrg 24bdcaa8d0Smrg# As a special exception to the GNU General Public License, if you 25bdcaa8d0Smrg# distribute this file as part of a program that contains a 26bdcaa8d0Smrg# configuration script generated by Autoconf, you may include it under 27bdcaa8d0Smrg# the same distribution terms that you use for the rest of that program. 28bdcaa8d0Smrg 29bdcaa8d0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30bdcaa8d0Smrg 31bdcaa8d0Smrgcase $1 in 32bdcaa8d0Smrg '') 33bdcaa8d0Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34bdcaa8d0Smrg exit 1; 35bdcaa8d0Smrg ;; 36bdcaa8d0Smrg -h | --h*) 37bdcaa8d0Smrg cat <<\EOF 38bdcaa8d0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39bdcaa8d0Smrg 40bdcaa8d0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41bdcaa8d0Smrgas side-effects. 42bdcaa8d0Smrg 43bdcaa8d0SmrgEnvironment variables: 44bdcaa8d0Smrg depmode Dependency tracking mode. 45bdcaa8d0Smrg source Source file read by `PROGRAMS ARGS'. 46bdcaa8d0Smrg object Object file output by `PROGRAMS ARGS'. 47bdcaa8d0Smrg DEPDIR directory where to store dependencies. 48bdcaa8d0Smrg depfile Dependency file to output. 49bdcaa8d0Smrg tmpdepfile Temporary file to use when outputing dependencies. 50bdcaa8d0Smrg libtool Whether libtool is used (yes/no). 51bdcaa8d0Smrg 52bdcaa8d0SmrgReport bugs to <bug-automake@gnu.org>. 53bdcaa8d0SmrgEOF 54bdcaa8d0Smrg exit $? 55bdcaa8d0Smrg ;; 56bdcaa8d0Smrg -v | --v*) 57bdcaa8d0Smrg echo "depcomp $scriptversion" 58bdcaa8d0Smrg exit $? 59bdcaa8d0Smrg ;; 60bdcaa8d0Smrgesac 61bdcaa8d0Smrg 62bdcaa8d0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63bdcaa8d0Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64bdcaa8d0Smrg exit 1 65bdcaa8d0Smrgfi 66bdcaa8d0Smrg 67bdcaa8d0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68bdcaa8d0Smrgdepfile=${depfile-`echo "$object" | 69bdcaa8d0Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70bdcaa8d0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71bdcaa8d0Smrg 72bdcaa8d0Smrgrm -f "$tmpdepfile" 73bdcaa8d0Smrg 74bdcaa8d0Smrg# Some modes work just like other modes, but use different flags. We 75bdcaa8d0Smrg# parameterize here, but still list the modes in the big case below, 76bdcaa8d0Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77bdcaa8d0Smrg# here, because this file can only contain one case statement. 78bdcaa8d0Smrgif test "$depmode" = hp; then 79bdcaa8d0Smrg # HP compiler uses -M and no extra arg. 80bdcaa8d0Smrg gccflag=-M 81bdcaa8d0Smrg depmode=gcc 82bdcaa8d0Smrgfi 83bdcaa8d0Smrg 84bdcaa8d0Smrgif test "$depmode" = dashXmstdout; then 85bdcaa8d0Smrg # This is just like dashmstdout with a different argument. 86bdcaa8d0Smrg dashmflag=-xM 87bdcaa8d0Smrg depmode=dashmstdout 88bdcaa8d0Smrgfi 89bdcaa8d0Smrg 90bdcaa8d0Smrgcase "$depmode" in 91bdcaa8d0Smrggcc3) 92bdcaa8d0Smrg## gcc 3 implements dependency tracking that does exactly what 93bdcaa8d0Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94bdcaa8d0Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 9572313efbSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 9672313efbSmrg## the command line argument order; so add the flags where they 9772313efbSmrg## appear in depend2.am. Note that the slowdown incurred here 9872313efbSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 9972313efbSmrg for arg 10072313efbSmrg do 10172313efbSmrg case $arg in 10272313efbSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 10372313efbSmrg *) set fnord "$@" "$arg" ;; 10472313efbSmrg esac 10572313efbSmrg shift # fnord 10672313efbSmrg shift # $arg 10772313efbSmrg done 10872313efbSmrg "$@" 109bdcaa8d0Smrg stat=$? 110bdcaa8d0Smrg if test $stat -eq 0; then : 111bdcaa8d0Smrg else 112bdcaa8d0Smrg rm -f "$tmpdepfile" 113bdcaa8d0Smrg exit $stat 114bdcaa8d0Smrg fi 115bdcaa8d0Smrg mv "$tmpdepfile" "$depfile" 116bdcaa8d0Smrg ;; 117bdcaa8d0Smrg 118bdcaa8d0Smrggcc) 119bdcaa8d0Smrg## There are various ways to get dependency output from gcc. Here's 120bdcaa8d0Smrg## why we pick this rather obscure method: 121bdcaa8d0Smrg## - Don't want to use -MD because we'd like the dependencies to end 122bdcaa8d0Smrg## up in a subdir. Having to rename by hand is ugly. 123bdcaa8d0Smrg## (We might end up doing this anyway to support other compilers.) 124bdcaa8d0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125bdcaa8d0Smrg## -MM, not -M (despite what the docs say). 126bdcaa8d0Smrg## - Using -M directly means running the compiler twice (even worse 127bdcaa8d0Smrg## than renaming). 128bdcaa8d0Smrg if test -z "$gccflag"; then 129bdcaa8d0Smrg gccflag=-MD, 130bdcaa8d0Smrg fi 131bdcaa8d0Smrg "$@" -Wp,"$gccflag$tmpdepfile" 132bdcaa8d0Smrg stat=$? 133bdcaa8d0Smrg if test $stat -eq 0; then : 134bdcaa8d0Smrg else 135bdcaa8d0Smrg rm -f "$tmpdepfile" 136bdcaa8d0Smrg exit $stat 137bdcaa8d0Smrg fi 138bdcaa8d0Smrg rm -f "$depfile" 139bdcaa8d0Smrg echo "$object : \\" > "$depfile" 140bdcaa8d0Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141bdcaa8d0Smrg## The second -e expression handles DOS-style file names with drive letters. 142bdcaa8d0Smrg sed -e 's/^[^:]*: / /' \ 143bdcaa8d0Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144bdcaa8d0Smrg## This next piece of magic avoids the `deleted header file' problem. 145bdcaa8d0Smrg## The problem is that when a header file which appears in a .P file 146bdcaa8d0Smrg## is deleted, the dependency causes make to die (because there is 147bdcaa8d0Smrg## typically no way to rebuild the header). We avoid this by adding 148bdcaa8d0Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 149bdcaa8d0Smrg## this for us directly. 150bdcaa8d0Smrg tr ' ' ' 151bdcaa8d0Smrg' < "$tmpdepfile" | 152bdcaa8d0Smrg## Some versions of gcc put a space before the `:'. On the theory 153bdcaa8d0Smrg## that the space means something, we add a space to the output as 154bdcaa8d0Smrg## well. 155bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 156bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 157bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158bdcaa8d0Smrg rm -f "$tmpdepfile" 159bdcaa8d0Smrg ;; 160bdcaa8d0Smrg 161bdcaa8d0Smrghp) 162bdcaa8d0Smrg # This case exists only to let depend.m4 do its work. It works by 163bdcaa8d0Smrg # looking at the text of this script. This case will never be run, 164bdcaa8d0Smrg # since it is checked for above. 165bdcaa8d0Smrg exit 1 166bdcaa8d0Smrg ;; 167bdcaa8d0Smrg 168bdcaa8d0Smrgsgi) 169bdcaa8d0Smrg if test "$libtool" = yes; then 170bdcaa8d0Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171bdcaa8d0Smrg else 172bdcaa8d0Smrg "$@" -MDupdate "$tmpdepfile" 173bdcaa8d0Smrg fi 174bdcaa8d0Smrg stat=$? 175bdcaa8d0Smrg if test $stat -eq 0; then : 176bdcaa8d0Smrg else 177bdcaa8d0Smrg rm -f "$tmpdepfile" 178bdcaa8d0Smrg exit $stat 179bdcaa8d0Smrg fi 180bdcaa8d0Smrg rm -f "$depfile" 181bdcaa8d0Smrg 182bdcaa8d0Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183bdcaa8d0Smrg echo "$object : \\" > "$depfile" 184bdcaa8d0Smrg 185bdcaa8d0Smrg # Clip off the initial element (the dependent). Don't try to be 186bdcaa8d0Smrg # clever and replace this with sed code, as IRIX sed won't handle 187bdcaa8d0Smrg # lines with more than a fixed number of characters (4096 in 188bdcaa8d0Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189bdcaa8d0Smrg # the IRIX cc adds comments like `#:fec' to the end of the 190bdcaa8d0Smrg # dependency line. 191bdcaa8d0Smrg tr ' ' ' 192bdcaa8d0Smrg' < "$tmpdepfile" \ 193bdcaa8d0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194bdcaa8d0Smrg tr ' 195bdcaa8d0Smrg' ' ' >> $depfile 196bdcaa8d0Smrg echo >> $depfile 197bdcaa8d0Smrg 198bdcaa8d0Smrg # The second pass generates a dummy entry for each header file. 199bdcaa8d0Smrg tr ' ' ' 200bdcaa8d0Smrg' < "$tmpdepfile" \ 201bdcaa8d0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202bdcaa8d0Smrg >> $depfile 203bdcaa8d0Smrg else 204bdcaa8d0Smrg # The sourcefile does not contain any dependencies, so just 205bdcaa8d0Smrg # store a dummy comment line, to avoid errors with the Makefile 206bdcaa8d0Smrg # "include basename.Plo" scheme. 207bdcaa8d0Smrg echo "#dummy" > "$depfile" 208bdcaa8d0Smrg fi 209bdcaa8d0Smrg rm -f "$tmpdepfile" 210bdcaa8d0Smrg ;; 211bdcaa8d0Smrg 212bdcaa8d0Smrgaix) 213bdcaa8d0Smrg # The C for AIX Compiler uses -M and outputs the dependencies 214bdcaa8d0Smrg # in a .u file. In older versions, this file always lives in the 215bdcaa8d0Smrg # current directory. Also, the AIX compiler puts `$object:' at the 216bdcaa8d0Smrg # start of each line; $object doesn't have directory information. 217bdcaa8d0Smrg # Version 6 uses the directory in both cases. 21872313efbSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 21972313efbSmrg test "x$dir" = "x$object" && dir= 22072313efbSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221bdcaa8d0Smrg if test "$libtool" = yes; then 22272313efbSmrg tmpdepfile1=$dir$base.u 22372313efbSmrg tmpdepfile2=$base.u 22472313efbSmrg tmpdepfile3=$dir.libs/$base.u 225bdcaa8d0Smrg "$@" -Wc,-M 226bdcaa8d0Smrg else 22772313efbSmrg tmpdepfile1=$dir$base.u 22872313efbSmrg tmpdepfile2=$dir$base.u 22972313efbSmrg tmpdepfile3=$dir$base.u 230bdcaa8d0Smrg "$@" -M 231bdcaa8d0Smrg fi 232bdcaa8d0Smrg stat=$? 233bdcaa8d0Smrg 234bdcaa8d0Smrg if test $stat -eq 0; then : 235bdcaa8d0Smrg else 23672313efbSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237bdcaa8d0Smrg exit $stat 238bdcaa8d0Smrg fi 239bdcaa8d0Smrg 24072313efbSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24172313efbSmrg do 24272313efbSmrg test -f "$tmpdepfile" && break 24372313efbSmrg done 244bdcaa8d0Smrg if test -f "$tmpdepfile"; then 245bdcaa8d0Smrg # Each line is of the form `foo.o: dependent.h'. 246bdcaa8d0Smrg # Do two passes, one to just change these to 247bdcaa8d0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 24872313efbSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 24972313efbSmrg # That's a tab and a space in the []. 25072313efbSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251bdcaa8d0Smrg else 252bdcaa8d0Smrg # The sourcefile does not contain any dependencies, so just 253bdcaa8d0Smrg # store a dummy comment line, to avoid errors with the Makefile 254bdcaa8d0Smrg # "include basename.Plo" scheme. 255bdcaa8d0Smrg echo "#dummy" > "$depfile" 256bdcaa8d0Smrg fi 257bdcaa8d0Smrg rm -f "$tmpdepfile" 258bdcaa8d0Smrg ;; 259bdcaa8d0Smrg 260bdcaa8d0Smrgicc) 261bdcaa8d0Smrg # Intel's C compiler understands `-MD -MF file'. However on 262bdcaa8d0Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263bdcaa8d0Smrg # ICC 7.0 will fill foo.d with something like 264bdcaa8d0Smrg # foo.o: sub/foo.c 265bdcaa8d0Smrg # foo.o: sub/foo.h 266bdcaa8d0Smrg # which is wrong. We want: 267bdcaa8d0Smrg # sub/foo.o: sub/foo.c 268bdcaa8d0Smrg # sub/foo.o: sub/foo.h 269bdcaa8d0Smrg # sub/foo.c: 270bdcaa8d0Smrg # sub/foo.h: 271bdcaa8d0Smrg # ICC 7.1 will output 272bdcaa8d0Smrg # foo.o: sub/foo.c sub/foo.h 273bdcaa8d0Smrg # and will wrap long lines using \ : 274bdcaa8d0Smrg # foo.o: sub/foo.c ... \ 275bdcaa8d0Smrg # sub/foo.h ... \ 276bdcaa8d0Smrg # ... 277bdcaa8d0Smrg 278bdcaa8d0Smrg "$@" -MD -MF "$tmpdepfile" 279bdcaa8d0Smrg stat=$? 280bdcaa8d0Smrg if test $stat -eq 0; then : 281bdcaa8d0Smrg else 282bdcaa8d0Smrg rm -f "$tmpdepfile" 283bdcaa8d0Smrg exit $stat 284bdcaa8d0Smrg fi 285bdcaa8d0Smrg rm -f "$depfile" 286bdcaa8d0Smrg # Each line is of the form `foo.o: dependent.h', 287bdcaa8d0Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288bdcaa8d0Smrg # Do two passes, one to just change these to 289bdcaa8d0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 290bdcaa8d0Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291bdcaa8d0Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 292bdcaa8d0Smrg # correctly. Breaking it into two sed invocations is a workaround. 293bdcaa8d0Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294bdcaa8d0Smrg sed -e 's/$/ :/' >> "$depfile" 295bdcaa8d0Smrg rm -f "$tmpdepfile" 296bdcaa8d0Smrg ;; 297bdcaa8d0Smrg 29872313efbSmrghp2) 29972313efbSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 30072313efbSmrg # compilers, which have integrated preprocessors. The correct option 30172313efbSmrg # to use with these is +Maked; it writes dependencies to a file named 30272313efbSmrg # 'foo.d', which lands next to the object file, wherever that 30372313efbSmrg # happens to be. 30472313efbSmrg # Much of this is similar to the tru64 case; see comments there. 30572313efbSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 30672313efbSmrg test "x$dir" = "x$object" && dir= 30772313efbSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 30872313efbSmrg if test "$libtool" = yes; then 30972313efbSmrg tmpdepfile1=$dir$base.d 31072313efbSmrg tmpdepfile2=$dir.libs/$base.d 31172313efbSmrg "$@" -Wc,+Maked 31272313efbSmrg else 31372313efbSmrg tmpdepfile1=$dir$base.d 31472313efbSmrg tmpdepfile2=$dir$base.d 31572313efbSmrg "$@" +Maked 31672313efbSmrg fi 31772313efbSmrg stat=$? 31872313efbSmrg if test $stat -eq 0; then : 31972313efbSmrg else 32072313efbSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 32172313efbSmrg exit $stat 32272313efbSmrg fi 32372313efbSmrg 32472313efbSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 32572313efbSmrg do 32672313efbSmrg test -f "$tmpdepfile" && break 32772313efbSmrg done 32872313efbSmrg if test -f "$tmpdepfile"; then 32972313efbSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 33072313efbSmrg # Add `dependent.h:' lines. 33172313efbSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 33272313efbSmrg else 33372313efbSmrg echo "#dummy" > "$depfile" 33472313efbSmrg fi 33572313efbSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 33672313efbSmrg ;; 33772313efbSmrg 338bdcaa8d0Smrgtru64) 339bdcaa8d0Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 340bdcaa8d0Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341bdcaa8d0Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342bdcaa8d0Smrg # dependencies in `foo.d' instead, so we check for that too. 343bdcaa8d0Smrg # Subdirectories are respected. 344bdcaa8d0Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345bdcaa8d0Smrg test "x$dir" = "x$object" && dir= 346bdcaa8d0Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347bdcaa8d0Smrg 348bdcaa8d0Smrg if test "$libtool" = yes; then 349bdcaa8d0Smrg # With Tru64 cc, shared objects can also be used to make a 35072313efbSmrg # static library. This mechanism is used in libtool 1.4 series to 351bdcaa8d0Smrg # handle both shared and static libraries in a single compilation. 352bdcaa8d0Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353bdcaa8d0Smrg # 354bdcaa8d0Smrg # With libtool 1.5 this exception was removed, and libtool now 355bdcaa8d0Smrg # generates 2 separate objects for the 2 libraries. These two 35672313efbSmrg # compilations output dependencies in $dir.libs/$base.o.d and 357bdcaa8d0Smrg # in $dir$base.o.d. We have to check for both files, because 358bdcaa8d0Smrg # one of the two compilations can be disabled. We should prefer 359bdcaa8d0Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360bdcaa8d0Smrg # automatically cleaned when .libs/ is deleted, while ignoring 361bdcaa8d0Smrg # the former would cause a distcleancheck panic. 362bdcaa8d0Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363bdcaa8d0Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364bdcaa8d0Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365bdcaa8d0Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366bdcaa8d0Smrg "$@" -Wc,-MD 367bdcaa8d0Smrg else 368bdcaa8d0Smrg tmpdepfile1=$dir$base.o.d 369bdcaa8d0Smrg tmpdepfile2=$dir$base.d 370bdcaa8d0Smrg tmpdepfile3=$dir$base.d 371bdcaa8d0Smrg tmpdepfile4=$dir$base.d 372bdcaa8d0Smrg "$@" -MD 373bdcaa8d0Smrg fi 374bdcaa8d0Smrg 375bdcaa8d0Smrg stat=$? 376bdcaa8d0Smrg if test $stat -eq 0; then : 377bdcaa8d0Smrg else 378bdcaa8d0Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379bdcaa8d0Smrg exit $stat 380bdcaa8d0Smrg fi 381bdcaa8d0Smrg 382bdcaa8d0Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383bdcaa8d0Smrg do 384bdcaa8d0Smrg test -f "$tmpdepfile" && break 385bdcaa8d0Smrg done 386bdcaa8d0Smrg if test -f "$tmpdepfile"; then 387bdcaa8d0Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388bdcaa8d0Smrg # That's a tab and a space in the []. 389bdcaa8d0Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390bdcaa8d0Smrg else 391bdcaa8d0Smrg echo "#dummy" > "$depfile" 392bdcaa8d0Smrg fi 393bdcaa8d0Smrg rm -f "$tmpdepfile" 394bdcaa8d0Smrg ;; 395bdcaa8d0Smrg 396bdcaa8d0Smrg#nosideeffect) 397bdcaa8d0Smrg # This comment above is used by automake to tell side-effect 398bdcaa8d0Smrg # dependency tracking mechanisms from slower ones. 399bdcaa8d0Smrg 400bdcaa8d0Smrgdashmstdout) 401bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 402bdcaa8d0Smrg # always write the preprocessed file to stdout, regardless of -o. 403bdcaa8d0Smrg "$@" || exit $? 404bdcaa8d0Smrg 405bdcaa8d0Smrg # Remove the call to Libtool. 406bdcaa8d0Smrg if test "$libtool" = yes; then 407bdcaa8d0Smrg while test $1 != '--mode=compile'; do 408bdcaa8d0Smrg shift 409bdcaa8d0Smrg done 410bdcaa8d0Smrg shift 411bdcaa8d0Smrg fi 412bdcaa8d0Smrg 413bdcaa8d0Smrg # Remove `-o $object'. 414bdcaa8d0Smrg IFS=" " 415bdcaa8d0Smrg for arg 416bdcaa8d0Smrg do 417bdcaa8d0Smrg case $arg in 418bdcaa8d0Smrg -o) 419bdcaa8d0Smrg shift 420bdcaa8d0Smrg ;; 421bdcaa8d0Smrg $object) 422bdcaa8d0Smrg shift 423bdcaa8d0Smrg ;; 424bdcaa8d0Smrg *) 425bdcaa8d0Smrg set fnord "$@" "$arg" 426bdcaa8d0Smrg shift # fnord 427bdcaa8d0Smrg shift # $arg 428bdcaa8d0Smrg ;; 429bdcaa8d0Smrg esac 430bdcaa8d0Smrg done 431bdcaa8d0Smrg 432bdcaa8d0Smrg test -z "$dashmflag" && dashmflag=-M 433bdcaa8d0Smrg # Require at least two characters before searching for `:' 434bdcaa8d0Smrg # in the target name. This is to cope with DOS-style filenames: 435bdcaa8d0Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436bdcaa8d0Smrg "$@" $dashmflag | 437bdcaa8d0Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438bdcaa8d0Smrg rm -f "$depfile" 439bdcaa8d0Smrg cat < "$tmpdepfile" > "$depfile" 440bdcaa8d0Smrg tr ' ' ' 441bdcaa8d0Smrg' < "$tmpdepfile" | \ 442bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 443bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 444bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445bdcaa8d0Smrg rm -f "$tmpdepfile" 446bdcaa8d0Smrg ;; 447bdcaa8d0Smrg 448bdcaa8d0SmrgdashXmstdout) 449bdcaa8d0Smrg # This case only exists to satisfy depend.m4. It is never actually 450bdcaa8d0Smrg # run, as this mode is specially recognized in the preamble. 451bdcaa8d0Smrg exit 1 452bdcaa8d0Smrg ;; 453bdcaa8d0Smrg 454bdcaa8d0Smrgmakedepend) 455bdcaa8d0Smrg "$@" || exit $? 456bdcaa8d0Smrg # Remove any Libtool call 457bdcaa8d0Smrg if test "$libtool" = yes; then 458bdcaa8d0Smrg while test $1 != '--mode=compile'; do 459bdcaa8d0Smrg shift 460bdcaa8d0Smrg done 461bdcaa8d0Smrg shift 462bdcaa8d0Smrg fi 463bdcaa8d0Smrg # X makedepend 464bdcaa8d0Smrg shift 465bdcaa8d0Smrg cleared=no 466bdcaa8d0Smrg for arg in "$@"; do 467bdcaa8d0Smrg case $cleared in 468bdcaa8d0Smrg no) 469bdcaa8d0Smrg set ""; shift 470bdcaa8d0Smrg cleared=yes ;; 471bdcaa8d0Smrg esac 472bdcaa8d0Smrg case "$arg" in 473bdcaa8d0Smrg -D*|-I*) 474bdcaa8d0Smrg set fnord "$@" "$arg"; shift ;; 475bdcaa8d0Smrg # Strip any option that makedepend may not understand. Remove 476bdcaa8d0Smrg # the object too, otherwise makedepend will parse it as a source file. 477bdcaa8d0Smrg -*|$object) 478bdcaa8d0Smrg ;; 479bdcaa8d0Smrg *) 480bdcaa8d0Smrg set fnord "$@" "$arg"; shift ;; 481bdcaa8d0Smrg esac 482bdcaa8d0Smrg done 483bdcaa8d0Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484bdcaa8d0Smrg touch "$tmpdepfile" 485bdcaa8d0Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486bdcaa8d0Smrg rm -f "$depfile" 487bdcaa8d0Smrg cat < "$tmpdepfile" > "$depfile" 488bdcaa8d0Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489bdcaa8d0Smrg' | \ 490bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 491bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 492bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493bdcaa8d0Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494bdcaa8d0Smrg ;; 495bdcaa8d0Smrg 496bdcaa8d0Smrgcpp) 497bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 498bdcaa8d0Smrg # always write the preprocessed file to stdout. 499bdcaa8d0Smrg "$@" || exit $? 500bdcaa8d0Smrg 501bdcaa8d0Smrg # Remove the call to Libtool. 502bdcaa8d0Smrg if test "$libtool" = yes; then 503bdcaa8d0Smrg while test $1 != '--mode=compile'; do 504bdcaa8d0Smrg shift 505bdcaa8d0Smrg done 506bdcaa8d0Smrg shift 507bdcaa8d0Smrg fi 508bdcaa8d0Smrg 509bdcaa8d0Smrg # Remove `-o $object'. 510bdcaa8d0Smrg IFS=" " 511bdcaa8d0Smrg for arg 512bdcaa8d0Smrg do 513bdcaa8d0Smrg case $arg in 514bdcaa8d0Smrg -o) 515bdcaa8d0Smrg shift 516bdcaa8d0Smrg ;; 517bdcaa8d0Smrg $object) 518bdcaa8d0Smrg shift 519bdcaa8d0Smrg ;; 520bdcaa8d0Smrg *) 521bdcaa8d0Smrg set fnord "$@" "$arg" 522bdcaa8d0Smrg shift # fnord 523bdcaa8d0Smrg shift # $arg 524bdcaa8d0Smrg ;; 525bdcaa8d0Smrg esac 526bdcaa8d0Smrg done 527bdcaa8d0Smrg 528bdcaa8d0Smrg "$@" -E | 529bdcaa8d0Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530bdcaa8d0Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531bdcaa8d0Smrg sed '$ s: \\$::' > "$tmpdepfile" 532bdcaa8d0Smrg rm -f "$depfile" 533bdcaa8d0Smrg echo "$object : \\" > "$depfile" 534bdcaa8d0Smrg cat < "$tmpdepfile" >> "$depfile" 535bdcaa8d0Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536bdcaa8d0Smrg rm -f "$tmpdepfile" 537bdcaa8d0Smrg ;; 538bdcaa8d0Smrg 539bdcaa8d0Smrgmsvisualcpp) 540bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 541bdcaa8d0Smrg # always write the preprocessed file to stdout, regardless of -o, 542bdcaa8d0Smrg # because we must use -o when running libtool. 543bdcaa8d0Smrg "$@" || exit $? 544bdcaa8d0Smrg IFS=" " 545bdcaa8d0Smrg for arg 546bdcaa8d0Smrg do 547bdcaa8d0Smrg case "$arg" in 548bdcaa8d0Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549bdcaa8d0Smrg set fnord "$@" 550bdcaa8d0Smrg shift 551bdcaa8d0Smrg shift 552bdcaa8d0Smrg ;; 553bdcaa8d0Smrg *) 554bdcaa8d0Smrg set fnord "$@" "$arg" 555bdcaa8d0Smrg shift 556bdcaa8d0Smrg shift 557bdcaa8d0Smrg ;; 558bdcaa8d0Smrg esac 559bdcaa8d0Smrg done 560bdcaa8d0Smrg "$@" -E | 561bdcaa8d0Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562bdcaa8d0Smrg rm -f "$depfile" 563bdcaa8d0Smrg echo "$object : \\" > "$depfile" 564bdcaa8d0Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565bdcaa8d0Smrg echo " " >> "$depfile" 566bdcaa8d0Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567bdcaa8d0Smrg rm -f "$tmpdepfile" 568bdcaa8d0Smrg ;; 569bdcaa8d0Smrg 570bdcaa8d0Smrgnone) 571bdcaa8d0Smrg exec "$@" 572bdcaa8d0Smrg ;; 573bdcaa8d0Smrg 574bdcaa8d0Smrg*) 575bdcaa8d0Smrg echo "Unknown depmode $depmode" 1>&2 576bdcaa8d0Smrg exit 1 577bdcaa8d0Smrg ;; 578bdcaa8d0Smrgesac 579bdcaa8d0Smrg 580bdcaa8d0Smrgexit 0 581bdcaa8d0Smrg 582bdcaa8d0Smrg# Local Variables: 583bdcaa8d0Smrg# mode: shell-script 584bdcaa8d0Smrg# sh-indentation: 2 585bdcaa8d0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586bdcaa8d0Smrg# time-stamp-start: "scriptversion=" 587bdcaa8d0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588bdcaa8d0Smrg# time-stamp-end: "$" 589bdcaa8d0Smrg# End: 590