depcomp revision 96ce994a
1bdcaa8d0Smrg#! /bin/sh 2bdcaa8d0Smrg# depcomp - compile a program generating dependencies as side-effects 3bdcaa8d0Smrg 496ce994aSmrgscriptversion=2009-04-28.21; # UTC 5bdcaa8d0Smrg 696ce994aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 796ce994aSmrg# Software 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 2096ce994aSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21bdcaa8d0Smrg 22bdcaa8d0Smrg# As a special exception to the GNU General Public License, if you 23bdcaa8d0Smrg# distribute this file as part of a program that contains a 24bdcaa8d0Smrg# configuration script generated by Autoconf, you may include it under 25bdcaa8d0Smrg# the same distribution terms that you use for the rest of that program. 26bdcaa8d0Smrg 27bdcaa8d0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28bdcaa8d0Smrg 29bdcaa8d0Smrgcase $1 in 30bdcaa8d0Smrg '') 31bdcaa8d0Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32bdcaa8d0Smrg exit 1; 33bdcaa8d0Smrg ;; 34bdcaa8d0Smrg -h | --h*) 35bdcaa8d0Smrg cat <<\EOF 36bdcaa8d0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37bdcaa8d0Smrg 38bdcaa8d0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39bdcaa8d0Smrgas side-effects. 40bdcaa8d0Smrg 41bdcaa8d0SmrgEnvironment variables: 42bdcaa8d0Smrg depmode Dependency tracking mode. 43bdcaa8d0Smrg source Source file read by `PROGRAMS ARGS'. 44bdcaa8d0Smrg object Object file output by `PROGRAMS ARGS'. 45bdcaa8d0Smrg DEPDIR directory where to store dependencies. 46bdcaa8d0Smrg depfile Dependency file to output. 47bdcaa8d0Smrg tmpdepfile Temporary file to use when outputing dependencies. 48bdcaa8d0Smrg libtool Whether libtool is used (yes/no). 49bdcaa8d0Smrg 50bdcaa8d0SmrgReport bugs to <bug-automake@gnu.org>. 51bdcaa8d0SmrgEOF 52bdcaa8d0Smrg exit $? 53bdcaa8d0Smrg ;; 54bdcaa8d0Smrg -v | --v*) 55bdcaa8d0Smrg echo "depcomp $scriptversion" 56bdcaa8d0Smrg exit $? 57bdcaa8d0Smrg ;; 58bdcaa8d0Smrgesac 59bdcaa8d0Smrg 60bdcaa8d0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61bdcaa8d0Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62bdcaa8d0Smrg exit 1 63bdcaa8d0Smrgfi 64bdcaa8d0Smrg 65bdcaa8d0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66bdcaa8d0Smrgdepfile=${depfile-`echo "$object" | 67bdcaa8d0Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68bdcaa8d0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69bdcaa8d0Smrg 70bdcaa8d0Smrgrm -f "$tmpdepfile" 71bdcaa8d0Smrg 72bdcaa8d0Smrg# Some modes work just like other modes, but use different flags. We 73bdcaa8d0Smrg# parameterize here, but still list the modes in the big case below, 74bdcaa8d0Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75bdcaa8d0Smrg# here, because this file can only contain one case statement. 76bdcaa8d0Smrgif test "$depmode" = hp; then 77bdcaa8d0Smrg # HP compiler uses -M and no extra arg. 78bdcaa8d0Smrg gccflag=-M 79bdcaa8d0Smrg depmode=gcc 80bdcaa8d0Smrgfi 81bdcaa8d0Smrg 82bdcaa8d0Smrgif test "$depmode" = dashXmstdout; then 83bdcaa8d0Smrg # This is just like dashmstdout with a different argument. 84bdcaa8d0Smrg dashmflag=-xM 85bdcaa8d0Smrg depmode=dashmstdout 86bdcaa8d0Smrgfi 87bdcaa8d0Smrg 8896ce994aSmrgcygpath_u="cygpath -u -f -" 8996ce994aSmrgif test "$depmode" = msvcmsys; then 9096ce994aSmrg # This is just like msvisualcpp but w/o cygpath translation. 9196ce994aSmrg # Just convert the backslash-escaped backslashes to single forward 9296ce994aSmrg # slashes to satisfy depend.m4 9396ce994aSmrg cygpath_u="sed s,\\\\\\\\,/,g" 9496ce994aSmrg depmode=msvisualcpp 9596ce994aSmrgfi 9696ce994aSmrg 97bdcaa8d0Smrgcase "$depmode" in 98bdcaa8d0Smrggcc3) 99bdcaa8d0Smrg## gcc 3 implements dependency tracking that does exactly what 100bdcaa8d0Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101bdcaa8d0Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 10272313efbSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 10372313efbSmrg## the command line argument order; so add the flags where they 10472313efbSmrg## appear in depend2.am. Note that the slowdown incurred here 10572313efbSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 10672313efbSmrg for arg 10772313efbSmrg do 10872313efbSmrg case $arg in 10972313efbSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11072313efbSmrg *) set fnord "$@" "$arg" ;; 11172313efbSmrg esac 11272313efbSmrg shift # fnord 11372313efbSmrg shift # $arg 11472313efbSmrg done 11572313efbSmrg "$@" 116bdcaa8d0Smrg stat=$? 117bdcaa8d0Smrg if test $stat -eq 0; then : 118bdcaa8d0Smrg else 119bdcaa8d0Smrg rm -f "$tmpdepfile" 120bdcaa8d0Smrg exit $stat 121bdcaa8d0Smrg fi 122bdcaa8d0Smrg mv "$tmpdepfile" "$depfile" 123bdcaa8d0Smrg ;; 124bdcaa8d0Smrg 125bdcaa8d0Smrggcc) 126bdcaa8d0Smrg## There are various ways to get dependency output from gcc. Here's 127bdcaa8d0Smrg## why we pick this rather obscure method: 128bdcaa8d0Smrg## - Don't want to use -MD because we'd like the dependencies to end 129bdcaa8d0Smrg## up in a subdir. Having to rename by hand is ugly. 130bdcaa8d0Smrg## (We might end up doing this anyway to support other compilers.) 131bdcaa8d0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132bdcaa8d0Smrg## -MM, not -M (despite what the docs say). 133bdcaa8d0Smrg## - Using -M directly means running the compiler twice (even worse 134bdcaa8d0Smrg## than renaming). 135bdcaa8d0Smrg if test -z "$gccflag"; then 136bdcaa8d0Smrg gccflag=-MD, 137bdcaa8d0Smrg fi 138bdcaa8d0Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139bdcaa8d0Smrg stat=$? 140bdcaa8d0Smrg if test $stat -eq 0; then : 141bdcaa8d0Smrg else 142bdcaa8d0Smrg rm -f "$tmpdepfile" 143bdcaa8d0Smrg exit $stat 144bdcaa8d0Smrg fi 145bdcaa8d0Smrg rm -f "$depfile" 146bdcaa8d0Smrg echo "$object : \\" > "$depfile" 147bdcaa8d0Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148bdcaa8d0Smrg## The second -e expression handles DOS-style file names with drive letters. 149bdcaa8d0Smrg sed -e 's/^[^:]*: / /' \ 150bdcaa8d0Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151bdcaa8d0Smrg## This next piece of magic avoids the `deleted header file' problem. 152bdcaa8d0Smrg## The problem is that when a header file which appears in a .P file 153bdcaa8d0Smrg## is deleted, the dependency causes make to die (because there is 154bdcaa8d0Smrg## typically no way to rebuild the header). We avoid this by adding 155bdcaa8d0Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156bdcaa8d0Smrg## this for us directly. 157bdcaa8d0Smrg tr ' ' ' 158bdcaa8d0Smrg' < "$tmpdepfile" | 159bdcaa8d0Smrg## Some versions of gcc put a space before the `:'. On the theory 160bdcaa8d0Smrg## that the space means something, we add a space to the output as 161bdcaa8d0Smrg## well. 162bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 164bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165bdcaa8d0Smrg rm -f "$tmpdepfile" 166bdcaa8d0Smrg ;; 167bdcaa8d0Smrg 168bdcaa8d0Smrghp) 169bdcaa8d0Smrg # This case exists only to let depend.m4 do its work. It works by 170bdcaa8d0Smrg # looking at the text of this script. This case will never be run, 171bdcaa8d0Smrg # since it is checked for above. 172bdcaa8d0Smrg exit 1 173bdcaa8d0Smrg ;; 174bdcaa8d0Smrg 175bdcaa8d0Smrgsgi) 176bdcaa8d0Smrg if test "$libtool" = yes; then 177bdcaa8d0Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178bdcaa8d0Smrg else 179bdcaa8d0Smrg "$@" -MDupdate "$tmpdepfile" 180bdcaa8d0Smrg fi 181bdcaa8d0Smrg stat=$? 182bdcaa8d0Smrg if test $stat -eq 0; then : 183bdcaa8d0Smrg else 184bdcaa8d0Smrg rm -f "$tmpdepfile" 185bdcaa8d0Smrg exit $stat 186bdcaa8d0Smrg fi 187bdcaa8d0Smrg rm -f "$depfile" 188bdcaa8d0Smrg 189bdcaa8d0Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190bdcaa8d0Smrg echo "$object : \\" > "$depfile" 191bdcaa8d0Smrg 192bdcaa8d0Smrg # Clip off the initial element (the dependent). Don't try to be 193bdcaa8d0Smrg # clever and replace this with sed code, as IRIX sed won't handle 194bdcaa8d0Smrg # lines with more than a fixed number of characters (4096 in 195bdcaa8d0Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196bdcaa8d0Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197bdcaa8d0Smrg # dependency line. 198bdcaa8d0Smrg tr ' ' ' 199bdcaa8d0Smrg' < "$tmpdepfile" \ 200bdcaa8d0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201bdcaa8d0Smrg tr ' 20296ce994aSmrg' ' ' >> "$depfile" 20396ce994aSmrg echo >> "$depfile" 204bdcaa8d0Smrg 205bdcaa8d0Smrg # The second pass generates a dummy entry for each header file. 206bdcaa8d0Smrg tr ' ' ' 207bdcaa8d0Smrg' < "$tmpdepfile" \ 208bdcaa8d0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20996ce994aSmrg >> "$depfile" 210bdcaa8d0Smrg else 211bdcaa8d0Smrg # The sourcefile does not contain any dependencies, so just 212bdcaa8d0Smrg # store a dummy comment line, to avoid errors with the Makefile 213bdcaa8d0Smrg # "include basename.Plo" scheme. 214bdcaa8d0Smrg echo "#dummy" > "$depfile" 215bdcaa8d0Smrg fi 216bdcaa8d0Smrg rm -f "$tmpdepfile" 217bdcaa8d0Smrg ;; 218bdcaa8d0Smrg 219bdcaa8d0Smrgaix) 220bdcaa8d0Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221bdcaa8d0Smrg # in a .u file. In older versions, this file always lives in the 222bdcaa8d0Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223bdcaa8d0Smrg # start of each line; $object doesn't have directory information. 224bdcaa8d0Smrg # Version 6 uses the directory in both cases. 22572313efbSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 22672313efbSmrg test "x$dir" = "x$object" && dir= 22772313efbSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228bdcaa8d0Smrg if test "$libtool" = yes; then 22972313efbSmrg tmpdepfile1=$dir$base.u 23072313efbSmrg tmpdepfile2=$base.u 23172313efbSmrg tmpdepfile3=$dir.libs/$base.u 232bdcaa8d0Smrg "$@" -Wc,-M 233bdcaa8d0Smrg else 23472313efbSmrg tmpdepfile1=$dir$base.u 23572313efbSmrg tmpdepfile2=$dir$base.u 23672313efbSmrg tmpdepfile3=$dir$base.u 237bdcaa8d0Smrg "$@" -M 238bdcaa8d0Smrg fi 239bdcaa8d0Smrg stat=$? 240bdcaa8d0Smrg 241bdcaa8d0Smrg if test $stat -eq 0; then : 242bdcaa8d0Smrg else 24372313efbSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244bdcaa8d0Smrg exit $stat 245bdcaa8d0Smrg fi 246bdcaa8d0Smrg 24772313efbSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24872313efbSmrg do 24972313efbSmrg test -f "$tmpdepfile" && break 25072313efbSmrg done 251bdcaa8d0Smrg if test -f "$tmpdepfile"; then 252bdcaa8d0Smrg # Each line is of the form `foo.o: dependent.h'. 253bdcaa8d0Smrg # Do two passes, one to just change these to 254bdcaa8d0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 25572313efbSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 25672313efbSmrg # That's a tab and a space in the []. 25772313efbSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258bdcaa8d0Smrg else 259bdcaa8d0Smrg # The sourcefile does not contain any dependencies, so just 260bdcaa8d0Smrg # store a dummy comment line, to avoid errors with the Makefile 261bdcaa8d0Smrg # "include basename.Plo" scheme. 262bdcaa8d0Smrg echo "#dummy" > "$depfile" 263bdcaa8d0Smrg fi 264bdcaa8d0Smrg rm -f "$tmpdepfile" 265bdcaa8d0Smrg ;; 266bdcaa8d0Smrg 267bdcaa8d0Smrgicc) 268bdcaa8d0Smrg # Intel's C compiler understands `-MD -MF file'. However on 269bdcaa8d0Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270bdcaa8d0Smrg # ICC 7.0 will fill foo.d with something like 271bdcaa8d0Smrg # foo.o: sub/foo.c 272bdcaa8d0Smrg # foo.o: sub/foo.h 273bdcaa8d0Smrg # which is wrong. We want: 274bdcaa8d0Smrg # sub/foo.o: sub/foo.c 275bdcaa8d0Smrg # sub/foo.o: sub/foo.h 276bdcaa8d0Smrg # sub/foo.c: 277bdcaa8d0Smrg # sub/foo.h: 278bdcaa8d0Smrg # ICC 7.1 will output 279bdcaa8d0Smrg # foo.o: sub/foo.c sub/foo.h 280bdcaa8d0Smrg # and will wrap long lines using \ : 281bdcaa8d0Smrg # foo.o: sub/foo.c ... \ 282bdcaa8d0Smrg # sub/foo.h ... \ 283bdcaa8d0Smrg # ... 284bdcaa8d0Smrg 285bdcaa8d0Smrg "$@" -MD -MF "$tmpdepfile" 286bdcaa8d0Smrg stat=$? 287bdcaa8d0Smrg if test $stat -eq 0; then : 288bdcaa8d0Smrg else 289bdcaa8d0Smrg rm -f "$tmpdepfile" 290bdcaa8d0Smrg exit $stat 291bdcaa8d0Smrg fi 292bdcaa8d0Smrg rm -f "$depfile" 293bdcaa8d0Smrg # Each line is of the form `foo.o: dependent.h', 294bdcaa8d0Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295bdcaa8d0Smrg # Do two passes, one to just change these to 296bdcaa8d0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297bdcaa8d0Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298bdcaa8d0Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299bdcaa8d0Smrg # correctly. Breaking it into two sed invocations is a workaround. 300bdcaa8d0Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301bdcaa8d0Smrg sed -e 's/$/ :/' >> "$depfile" 302bdcaa8d0Smrg rm -f "$tmpdepfile" 303bdcaa8d0Smrg ;; 304bdcaa8d0Smrg 30572313efbSmrghp2) 30672313efbSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 30772313efbSmrg # compilers, which have integrated preprocessors. The correct option 30872313efbSmrg # to use with these is +Maked; it writes dependencies to a file named 30972313efbSmrg # 'foo.d', which lands next to the object file, wherever that 31072313efbSmrg # happens to be. 31172313efbSmrg # Much of this is similar to the tru64 case; see comments there. 31272313efbSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 31372313efbSmrg test "x$dir" = "x$object" && dir= 31472313efbSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 31572313efbSmrg if test "$libtool" = yes; then 31672313efbSmrg tmpdepfile1=$dir$base.d 31772313efbSmrg tmpdepfile2=$dir.libs/$base.d 31872313efbSmrg "$@" -Wc,+Maked 31972313efbSmrg else 32072313efbSmrg tmpdepfile1=$dir$base.d 32172313efbSmrg tmpdepfile2=$dir$base.d 32272313efbSmrg "$@" +Maked 32372313efbSmrg fi 32472313efbSmrg stat=$? 32572313efbSmrg if test $stat -eq 0; then : 32672313efbSmrg else 32772313efbSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 32872313efbSmrg exit $stat 32972313efbSmrg fi 33072313efbSmrg 33172313efbSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 33272313efbSmrg do 33372313efbSmrg test -f "$tmpdepfile" && break 33472313efbSmrg done 33572313efbSmrg if test -f "$tmpdepfile"; then 33672313efbSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 33772313efbSmrg # Add `dependent.h:' lines. 33896ce994aSmrg sed -ne '2,${ 33996ce994aSmrg s/^ *// 34096ce994aSmrg s/ \\*$// 34196ce994aSmrg s/$/:/ 34296ce994aSmrg p 34396ce994aSmrg }' "$tmpdepfile" >> "$depfile" 34472313efbSmrg else 34572313efbSmrg echo "#dummy" > "$depfile" 34672313efbSmrg fi 34772313efbSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 34872313efbSmrg ;; 34972313efbSmrg 350bdcaa8d0Smrgtru64) 351bdcaa8d0Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352bdcaa8d0Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353bdcaa8d0Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354bdcaa8d0Smrg # dependencies in `foo.d' instead, so we check for that too. 355bdcaa8d0Smrg # Subdirectories are respected. 356bdcaa8d0Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357bdcaa8d0Smrg test "x$dir" = "x$object" && dir= 358bdcaa8d0Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359bdcaa8d0Smrg 360bdcaa8d0Smrg if test "$libtool" = yes; then 361bdcaa8d0Smrg # With Tru64 cc, shared objects can also be used to make a 36272313efbSmrg # static library. This mechanism is used in libtool 1.4 series to 363bdcaa8d0Smrg # handle both shared and static libraries in a single compilation. 364bdcaa8d0Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365bdcaa8d0Smrg # 366bdcaa8d0Smrg # With libtool 1.5 this exception was removed, and libtool now 367bdcaa8d0Smrg # generates 2 separate objects for the 2 libraries. These two 36872313efbSmrg # compilations output dependencies in $dir.libs/$base.o.d and 369bdcaa8d0Smrg # in $dir$base.o.d. We have to check for both files, because 370bdcaa8d0Smrg # one of the two compilations can be disabled. We should prefer 371bdcaa8d0Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372bdcaa8d0Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373bdcaa8d0Smrg # the former would cause a distcleancheck panic. 374bdcaa8d0Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375bdcaa8d0Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376bdcaa8d0Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377bdcaa8d0Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378bdcaa8d0Smrg "$@" -Wc,-MD 379bdcaa8d0Smrg else 380bdcaa8d0Smrg tmpdepfile1=$dir$base.o.d 381bdcaa8d0Smrg tmpdepfile2=$dir$base.d 382bdcaa8d0Smrg tmpdepfile3=$dir$base.d 383bdcaa8d0Smrg tmpdepfile4=$dir$base.d 384bdcaa8d0Smrg "$@" -MD 385bdcaa8d0Smrg fi 386bdcaa8d0Smrg 387bdcaa8d0Smrg stat=$? 388bdcaa8d0Smrg if test $stat -eq 0; then : 389bdcaa8d0Smrg else 390bdcaa8d0Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391bdcaa8d0Smrg exit $stat 392bdcaa8d0Smrg fi 393bdcaa8d0Smrg 394bdcaa8d0Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395bdcaa8d0Smrg do 396bdcaa8d0Smrg test -f "$tmpdepfile" && break 397bdcaa8d0Smrg done 398bdcaa8d0Smrg if test -f "$tmpdepfile"; then 399bdcaa8d0Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400bdcaa8d0Smrg # That's a tab and a space in the []. 401bdcaa8d0Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402bdcaa8d0Smrg else 403bdcaa8d0Smrg echo "#dummy" > "$depfile" 404bdcaa8d0Smrg fi 405bdcaa8d0Smrg rm -f "$tmpdepfile" 406bdcaa8d0Smrg ;; 407bdcaa8d0Smrg 408bdcaa8d0Smrg#nosideeffect) 409bdcaa8d0Smrg # This comment above is used by automake to tell side-effect 410bdcaa8d0Smrg # dependency tracking mechanisms from slower ones. 411bdcaa8d0Smrg 412bdcaa8d0Smrgdashmstdout) 413bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 414bdcaa8d0Smrg # always write the preprocessed file to stdout, regardless of -o. 415bdcaa8d0Smrg "$@" || exit $? 416bdcaa8d0Smrg 417bdcaa8d0Smrg # Remove the call to Libtool. 418bdcaa8d0Smrg if test "$libtool" = yes; then 41996ce994aSmrg while test "X$1" != 'X--mode=compile'; do 420bdcaa8d0Smrg shift 421bdcaa8d0Smrg done 422bdcaa8d0Smrg shift 423bdcaa8d0Smrg fi 424bdcaa8d0Smrg 425bdcaa8d0Smrg # Remove `-o $object'. 426bdcaa8d0Smrg IFS=" " 427bdcaa8d0Smrg for arg 428bdcaa8d0Smrg do 429bdcaa8d0Smrg case $arg in 430bdcaa8d0Smrg -o) 431bdcaa8d0Smrg shift 432bdcaa8d0Smrg ;; 433bdcaa8d0Smrg $object) 434bdcaa8d0Smrg shift 435bdcaa8d0Smrg ;; 436bdcaa8d0Smrg *) 437bdcaa8d0Smrg set fnord "$@" "$arg" 438bdcaa8d0Smrg shift # fnord 439bdcaa8d0Smrg shift # $arg 440bdcaa8d0Smrg ;; 441bdcaa8d0Smrg esac 442bdcaa8d0Smrg done 443bdcaa8d0Smrg 444bdcaa8d0Smrg test -z "$dashmflag" && dashmflag=-M 445bdcaa8d0Smrg # Require at least two characters before searching for `:' 446bdcaa8d0Smrg # in the target name. This is to cope with DOS-style filenames: 447bdcaa8d0Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448bdcaa8d0Smrg "$@" $dashmflag | 449bdcaa8d0Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450bdcaa8d0Smrg rm -f "$depfile" 451bdcaa8d0Smrg cat < "$tmpdepfile" > "$depfile" 452bdcaa8d0Smrg tr ' ' ' 453bdcaa8d0Smrg' < "$tmpdepfile" | \ 454bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 456bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457bdcaa8d0Smrg rm -f "$tmpdepfile" 458bdcaa8d0Smrg ;; 459bdcaa8d0Smrg 460bdcaa8d0SmrgdashXmstdout) 461bdcaa8d0Smrg # This case only exists to satisfy depend.m4. It is never actually 462bdcaa8d0Smrg # run, as this mode is specially recognized in the preamble. 463bdcaa8d0Smrg exit 1 464bdcaa8d0Smrg ;; 465bdcaa8d0Smrg 466bdcaa8d0Smrgmakedepend) 467bdcaa8d0Smrg "$@" || exit $? 468bdcaa8d0Smrg # Remove any Libtool call 469bdcaa8d0Smrg if test "$libtool" = yes; then 47096ce994aSmrg while test "X$1" != 'X--mode=compile'; do 471bdcaa8d0Smrg shift 472bdcaa8d0Smrg done 473bdcaa8d0Smrg shift 474bdcaa8d0Smrg fi 475bdcaa8d0Smrg # X makedepend 476bdcaa8d0Smrg shift 47796ce994aSmrg cleared=no eat=no 47896ce994aSmrg for arg 47996ce994aSmrg do 480bdcaa8d0Smrg case $cleared in 481bdcaa8d0Smrg no) 482bdcaa8d0Smrg set ""; shift 483bdcaa8d0Smrg cleared=yes ;; 484bdcaa8d0Smrg esac 48596ce994aSmrg if test $eat = yes; then 48696ce994aSmrg eat=no 48796ce994aSmrg continue 48896ce994aSmrg fi 489bdcaa8d0Smrg case "$arg" in 490bdcaa8d0Smrg -D*|-I*) 491bdcaa8d0Smrg set fnord "$@" "$arg"; shift ;; 492bdcaa8d0Smrg # Strip any option that makedepend may not understand. Remove 493bdcaa8d0Smrg # the object too, otherwise makedepend will parse it as a source file. 49496ce994aSmrg -arch) 49596ce994aSmrg eat=yes ;; 496bdcaa8d0Smrg -*|$object) 497bdcaa8d0Smrg ;; 498bdcaa8d0Smrg *) 499bdcaa8d0Smrg set fnord "$@" "$arg"; shift ;; 500bdcaa8d0Smrg esac 501bdcaa8d0Smrg done 50296ce994aSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503bdcaa8d0Smrg touch "$tmpdepfile" 504bdcaa8d0Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505bdcaa8d0Smrg rm -f "$depfile" 506bdcaa8d0Smrg cat < "$tmpdepfile" > "$depfile" 507bdcaa8d0Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508bdcaa8d0Smrg' | \ 509bdcaa8d0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510bdcaa8d0Smrg## correctly. Breaking it into two sed invocations is a workaround. 511bdcaa8d0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512bdcaa8d0Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513bdcaa8d0Smrg ;; 514bdcaa8d0Smrg 515bdcaa8d0Smrgcpp) 516bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 517bdcaa8d0Smrg # always write the preprocessed file to stdout. 518bdcaa8d0Smrg "$@" || exit $? 519bdcaa8d0Smrg 520bdcaa8d0Smrg # Remove the call to Libtool. 521bdcaa8d0Smrg if test "$libtool" = yes; then 52296ce994aSmrg while test "X$1" != 'X--mode=compile'; do 523bdcaa8d0Smrg shift 524bdcaa8d0Smrg done 525bdcaa8d0Smrg shift 526bdcaa8d0Smrg fi 527bdcaa8d0Smrg 528bdcaa8d0Smrg # Remove `-o $object'. 529bdcaa8d0Smrg IFS=" " 530bdcaa8d0Smrg for arg 531bdcaa8d0Smrg do 532bdcaa8d0Smrg case $arg in 533bdcaa8d0Smrg -o) 534bdcaa8d0Smrg shift 535bdcaa8d0Smrg ;; 536bdcaa8d0Smrg $object) 537bdcaa8d0Smrg shift 538bdcaa8d0Smrg ;; 539bdcaa8d0Smrg *) 540bdcaa8d0Smrg set fnord "$@" "$arg" 541bdcaa8d0Smrg shift # fnord 542bdcaa8d0Smrg shift # $arg 543bdcaa8d0Smrg ;; 544bdcaa8d0Smrg esac 545bdcaa8d0Smrg done 546bdcaa8d0Smrg 547bdcaa8d0Smrg "$@" -E | 548bdcaa8d0Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549bdcaa8d0Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550bdcaa8d0Smrg sed '$ s: \\$::' > "$tmpdepfile" 551bdcaa8d0Smrg rm -f "$depfile" 552bdcaa8d0Smrg echo "$object : \\" > "$depfile" 553bdcaa8d0Smrg cat < "$tmpdepfile" >> "$depfile" 554bdcaa8d0Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555bdcaa8d0Smrg rm -f "$tmpdepfile" 556bdcaa8d0Smrg ;; 557bdcaa8d0Smrg 558bdcaa8d0Smrgmsvisualcpp) 559bdcaa8d0Smrg # Important note: in order to support this mode, a compiler *must* 56096ce994aSmrg # always write the preprocessed file to stdout. 561bdcaa8d0Smrg "$@" || exit $? 56296ce994aSmrg 56396ce994aSmrg # Remove the call to Libtool. 56496ce994aSmrg if test "$libtool" = yes; then 56596ce994aSmrg while test "X$1" != 'X--mode=compile'; do 56696ce994aSmrg shift 56796ce994aSmrg done 56896ce994aSmrg shift 56996ce994aSmrg fi 57096ce994aSmrg 571bdcaa8d0Smrg IFS=" " 572bdcaa8d0Smrg for arg 573bdcaa8d0Smrg do 574bdcaa8d0Smrg case "$arg" in 57596ce994aSmrg -o) 57696ce994aSmrg shift 57796ce994aSmrg ;; 57896ce994aSmrg $object) 57996ce994aSmrg shift 58096ce994aSmrg ;; 581bdcaa8d0Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582bdcaa8d0Smrg set fnord "$@" 583bdcaa8d0Smrg shift 584bdcaa8d0Smrg shift 585bdcaa8d0Smrg ;; 586bdcaa8d0Smrg *) 587bdcaa8d0Smrg set fnord "$@" "$arg" 588bdcaa8d0Smrg shift 589bdcaa8d0Smrg shift 590bdcaa8d0Smrg ;; 591bdcaa8d0Smrg esac 592bdcaa8d0Smrg done 59396ce994aSmrg "$@" -E 2>/dev/null | 59496ce994aSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595bdcaa8d0Smrg rm -f "$depfile" 596bdcaa8d0Smrg echo "$object : \\" > "$depfile" 59796ce994aSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598bdcaa8d0Smrg echo " " >> "$depfile" 59996ce994aSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600bdcaa8d0Smrg rm -f "$tmpdepfile" 601bdcaa8d0Smrg ;; 602bdcaa8d0Smrg 60396ce994aSmrgmsvcmsys) 60496ce994aSmrg # This case exists only to let depend.m4 do its work. It works by 60596ce994aSmrg # looking at the text of this script. This case will never be run, 60696ce994aSmrg # since it is checked for above. 60796ce994aSmrg exit 1 60896ce994aSmrg ;; 60996ce994aSmrg 610bdcaa8d0Smrgnone) 611bdcaa8d0Smrg exec "$@" 612bdcaa8d0Smrg ;; 613bdcaa8d0Smrg 614bdcaa8d0Smrg*) 615bdcaa8d0Smrg echo "Unknown depmode $depmode" 1>&2 616bdcaa8d0Smrg exit 1 617bdcaa8d0Smrg ;; 618bdcaa8d0Smrgesac 619bdcaa8d0Smrg 620bdcaa8d0Smrgexit 0 621bdcaa8d0Smrg 622bdcaa8d0Smrg# Local Variables: 623bdcaa8d0Smrg# mode: shell-script 624bdcaa8d0Smrg# sh-indentation: 2 625bdcaa8d0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626bdcaa8d0Smrg# time-stamp-start: "scriptversion=" 627bdcaa8d0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62896ce994aSmrg# time-stamp-time-zone: "UTC" 62996ce994aSmrg# time-stamp-end: "; # UTC" 630bdcaa8d0Smrg# End: 631