depcomp revision a5399cb1
1bb2e14f3Smrg#! /bin/sh 2bb2e14f3Smrg# depcomp - compile a program generating dependencies as side-effects 3bb2e14f3Smrg 4a5399cb1Smrgscriptversion=2009-04-28.21; # UTC 5bb2e14f3Smrg 6a5399cb1Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7a5399cb1Smrg# Software Foundation, Inc. 8bb2e14f3Smrg 9bb2e14f3Smrg# This program is free software; you can redistribute it and/or modify 10bb2e14f3Smrg# it under the terms of the GNU General Public License as published by 11bb2e14f3Smrg# the Free Software Foundation; either version 2, or (at your option) 12bb2e14f3Smrg# any later version. 13bb2e14f3Smrg 14bb2e14f3Smrg# This program is distributed in the hope that it will be useful, 15bb2e14f3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16bb2e14f3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17bb2e14f3Smrg# GNU General Public License for more details. 18bb2e14f3Smrg 19bb2e14f3Smrg# You should have received a copy of the GNU General Public License 20a5399cb1Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21bb2e14f3Smrg 22bb2e14f3Smrg# As a special exception to the GNU General Public License, if you 23bb2e14f3Smrg# distribute this file as part of a program that contains a 24bb2e14f3Smrg# configuration script generated by Autoconf, you may include it under 25bb2e14f3Smrg# the same distribution terms that you use for the rest of that program. 26bb2e14f3Smrg 27bb2e14f3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28bb2e14f3Smrg 29bb2e14f3Smrgcase $1 in 30bb2e14f3Smrg '') 31bb2e14f3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32bb2e14f3Smrg exit 1; 33bb2e14f3Smrg ;; 34bb2e14f3Smrg -h | --h*) 35bb2e14f3Smrg cat <<\EOF 36bb2e14f3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37bb2e14f3Smrg 38bb2e14f3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39bb2e14f3Smrgas side-effects. 40bb2e14f3Smrg 41bb2e14f3SmrgEnvironment variables: 42bb2e14f3Smrg depmode Dependency tracking mode. 43bb2e14f3Smrg source Source file read by `PROGRAMS ARGS'. 44bb2e14f3Smrg object Object file output by `PROGRAMS ARGS'. 45bb2e14f3Smrg DEPDIR directory where to store dependencies. 46bb2e14f3Smrg depfile Dependency file to output. 47bb2e14f3Smrg tmpdepfile Temporary file to use when outputing dependencies. 48bb2e14f3Smrg libtool Whether libtool is used (yes/no). 49bb2e14f3Smrg 50bb2e14f3SmrgReport bugs to <bug-automake@gnu.org>. 51bb2e14f3SmrgEOF 52bb2e14f3Smrg exit $? 53bb2e14f3Smrg ;; 54bb2e14f3Smrg -v | --v*) 55bb2e14f3Smrg echo "depcomp $scriptversion" 56bb2e14f3Smrg exit $? 57bb2e14f3Smrg ;; 58bb2e14f3Smrgesac 59bb2e14f3Smrg 60bb2e14f3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61bb2e14f3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62bb2e14f3Smrg exit 1 63bb2e14f3Smrgfi 64bb2e14f3Smrg 65bb2e14f3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66bb2e14f3Smrgdepfile=${depfile-`echo "$object" | 67bb2e14f3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68bb2e14f3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69bb2e14f3Smrg 70bb2e14f3Smrgrm -f "$tmpdepfile" 71bb2e14f3Smrg 72bb2e14f3Smrg# Some modes work just like other modes, but use different flags. We 73bb2e14f3Smrg# parameterize here, but still list the modes in the big case below, 74bb2e14f3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75bb2e14f3Smrg# here, because this file can only contain one case statement. 76bb2e14f3Smrgif test "$depmode" = hp; then 77bb2e14f3Smrg # HP compiler uses -M and no extra arg. 78bb2e14f3Smrg gccflag=-M 79bb2e14f3Smrg depmode=gcc 80bb2e14f3Smrgfi 81bb2e14f3Smrg 82bb2e14f3Smrgif test "$depmode" = dashXmstdout; then 83bb2e14f3Smrg # This is just like dashmstdout with a different argument. 84bb2e14f3Smrg dashmflag=-xM 85bb2e14f3Smrg depmode=dashmstdout 86bb2e14f3Smrgfi 87bb2e14f3Smrg 88a5399cb1Smrgcygpath_u="cygpath -u -f -" 89a5399cb1Smrgif test "$depmode" = msvcmsys; then 90a5399cb1Smrg # This is just like msvisualcpp but w/o cygpath translation. 91a5399cb1Smrg # Just convert the backslash-escaped backslashes to single forward 92a5399cb1Smrg # slashes to satisfy depend.m4 93a5399cb1Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94a5399cb1Smrg depmode=msvisualcpp 95a5399cb1Smrgfi 96a5399cb1Smrg 97bb2e14f3Smrgcase "$depmode" in 98bb2e14f3Smrggcc3) 99bb2e14f3Smrg## gcc 3 implements dependency tracking that does exactly what 100bb2e14f3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101bb2e14f3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102a5399cb1Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103a5399cb1Smrg## the command line argument order; so add the flags where they 104a5399cb1Smrg## appear in depend2.am. Note that the slowdown incurred here 105a5399cb1Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106a5399cb1Smrg for arg 107a5399cb1Smrg do 108a5399cb1Smrg case $arg in 109a5399cb1Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110a5399cb1Smrg *) set fnord "$@" "$arg" ;; 111a5399cb1Smrg esac 112a5399cb1Smrg shift # fnord 113a5399cb1Smrg shift # $arg 114a5399cb1Smrg done 115a5399cb1Smrg "$@" 116bb2e14f3Smrg stat=$? 117bb2e14f3Smrg if test $stat -eq 0; then : 118bb2e14f3Smrg else 119bb2e14f3Smrg rm -f "$tmpdepfile" 120bb2e14f3Smrg exit $stat 121bb2e14f3Smrg fi 122bb2e14f3Smrg mv "$tmpdepfile" "$depfile" 123bb2e14f3Smrg ;; 124bb2e14f3Smrg 125bb2e14f3Smrggcc) 126bb2e14f3Smrg## There are various ways to get dependency output from gcc. Here's 127bb2e14f3Smrg## why we pick this rather obscure method: 128bb2e14f3Smrg## - Don't want to use -MD because we'd like the dependencies to end 129bb2e14f3Smrg## up in a subdir. Having to rename by hand is ugly. 130bb2e14f3Smrg## (We might end up doing this anyway to support other compilers.) 131bb2e14f3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132bb2e14f3Smrg## -MM, not -M (despite what the docs say). 133bb2e14f3Smrg## - Using -M directly means running the compiler twice (even worse 134bb2e14f3Smrg## than renaming). 135bb2e14f3Smrg if test -z "$gccflag"; then 136bb2e14f3Smrg gccflag=-MD, 137bb2e14f3Smrg fi 138bb2e14f3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139bb2e14f3Smrg stat=$? 140bb2e14f3Smrg if test $stat -eq 0; then : 141bb2e14f3Smrg else 142bb2e14f3Smrg rm -f "$tmpdepfile" 143bb2e14f3Smrg exit $stat 144bb2e14f3Smrg fi 145bb2e14f3Smrg rm -f "$depfile" 146bb2e14f3Smrg echo "$object : \\" > "$depfile" 147bb2e14f3Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148bb2e14f3Smrg## The second -e expression handles DOS-style file names with drive letters. 149bb2e14f3Smrg sed -e 's/^[^:]*: / /' \ 150bb2e14f3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151bb2e14f3Smrg## This next piece of magic avoids the `deleted header file' problem. 152bb2e14f3Smrg## The problem is that when a header file which appears in a .P file 153bb2e14f3Smrg## is deleted, the dependency causes make to die (because there is 154bb2e14f3Smrg## typically no way to rebuild the header). We avoid this by adding 155bb2e14f3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156bb2e14f3Smrg## this for us directly. 157bb2e14f3Smrg tr ' ' ' 158bb2e14f3Smrg' < "$tmpdepfile" | 159bb2e14f3Smrg## Some versions of gcc put a space before the `:'. On the theory 160bb2e14f3Smrg## that the space means something, we add a space to the output as 161bb2e14f3Smrg## well. 162bb2e14f3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163bb2e14f3Smrg## correctly. Breaking it into two sed invocations is a workaround. 164bb2e14f3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165bb2e14f3Smrg rm -f "$tmpdepfile" 166bb2e14f3Smrg ;; 167bb2e14f3Smrg 168bb2e14f3Smrghp) 169bb2e14f3Smrg # This case exists only to let depend.m4 do its work. It works by 170bb2e14f3Smrg # looking at the text of this script. This case will never be run, 171bb2e14f3Smrg # since it is checked for above. 172bb2e14f3Smrg exit 1 173bb2e14f3Smrg ;; 174bb2e14f3Smrg 175bb2e14f3Smrgsgi) 176bb2e14f3Smrg if test "$libtool" = yes; then 177bb2e14f3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178bb2e14f3Smrg else 179bb2e14f3Smrg "$@" -MDupdate "$tmpdepfile" 180bb2e14f3Smrg fi 181bb2e14f3Smrg stat=$? 182bb2e14f3Smrg if test $stat -eq 0; then : 183bb2e14f3Smrg else 184bb2e14f3Smrg rm -f "$tmpdepfile" 185bb2e14f3Smrg exit $stat 186bb2e14f3Smrg fi 187bb2e14f3Smrg rm -f "$depfile" 188bb2e14f3Smrg 189bb2e14f3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190bb2e14f3Smrg echo "$object : \\" > "$depfile" 191bb2e14f3Smrg 192bb2e14f3Smrg # Clip off the initial element (the dependent). Don't try to be 193bb2e14f3Smrg # clever and replace this with sed code, as IRIX sed won't handle 194bb2e14f3Smrg # lines with more than a fixed number of characters (4096 in 195bb2e14f3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196bb2e14f3Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197bb2e14f3Smrg # dependency line. 198bb2e14f3Smrg tr ' ' ' 199bb2e14f3Smrg' < "$tmpdepfile" \ 200bb2e14f3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201bb2e14f3Smrg tr ' 202a5399cb1Smrg' ' ' >> "$depfile" 203a5399cb1Smrg echo >> "$depfile" 204bb2e14f3Smrg 205bb2e14f3Smrg # The second pass generates a dummy entry for each header file. 206bb2e14f3Smrg tr ' ' ' 207bb2e14f3Smrg' < "$tmpdepfile" \ 208bb2e14f3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209a5399cb1Smrg >> "$depfile" 210bb2e14f3Smrg else 211bb2e14f3Smrg # The sourcefile does not contain any dependencies, so just 212bb2e14f3Smrg # store a dummy comment line, to avoid errors with the Makefile 213bb2e14f3Smrg # "include basename.Plo" scheme. 214bb2e14f3Smrg echo "#dummy" > "$depfile" 215bb2e14f3Smrg fi 216bb2e14f3Smrg rm -f "$tmpdepfile" 217bb2e14f3Smrg ;; 218bb2e14f3Smrg 219bb2e14f3Smrgaix) 220bb2e14f3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221bb2e14f3Smrg # in a .u file. In older versions, this file always lives in the 222bb2e14f3Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223bb2e14f3Smrg # start of each line; $object doesn't have directory information. 224bb2e14f3Smrg # Version 6 uses the directory in both cases. 225a5399cb1Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226a5399cb1Smrg test "x$dir" = "x$object" && dir= 227a5399cb1Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228bb2e14f3Smrg if test "$libtool" = yes; then 229a5399cb1Smrg tmpdepfile1=$dir$base.u 230a5399cb1Smrg tmpdepfile2=$base.u 231a5399cb1Smrg tmpdepfile3=$dir.libs/$base.u 232bb2e14f3Smrg "$@" -Wc,-M 233bb2e14f3Smrg else 234a5399cb1Smrg tmpdepfile1=$dir$base.u 235a5399cb1Smrg tmpdepfile2=$dir$base.u 236a5399cb1Smrg tmpdepfile3=$dir$base.u 237bb2e14f3Smrg "$@" -M 238bb2e14f3Smrg fi 239bb2e14f3Smrg stat=$? 240bb2e14f3Smrg 241bb2e14f3Smrg if test $stat -eq 0; then : 242bb2e14f3Smrg else 243a5399cb1Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244bb2e14f3Smrg exit $stat 245bb2e14f3Smrg fi 246bb2e14f3Smrg 247a5399cb1Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248a5399cb1Smrg do 249a5399cb1Smrg test -f "$tmpdepfile" && break 250a5399cb1Smrg done 251bb2e14f3Smrg if test -f "$tmpdepfile"; then 252bb2e14f3Smrg # Each line is of the form `foo.o: dependent.h'. 253bb2e14f3Smrg # Do two passes, one to just change these to 254bb2e14f3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255a5399cb1Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256a5399cb1Smrg # That's a tab and a space in the []. 257a5399cb1Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258bb2e14f3Smrg else 259bb2e14f3Smrg # The sourcefile does not contain any dependencies, so just 260bb2e14f3Smrg # store a dummy comment line, to avoid errors with the Makefile 261bb2e14f3Smrg # "include basename.Plo" scheme. 262bb2e14f3Smrg echo "#dummy" > "$depfile" 263bb2e14f3Smrg fi 264bb2e14f3Smrg rm -f "$tmpdepfile" 265bb2e14f3Smrg ;; 266bb2e14f3Smrg 267bb2e14f3Smrgicc) 268bb2e14f3Smrg # Intel's C compiler understands `-MD -MF file'. However on 269bb2e14f3Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270bb2e14f3Smrg # ICC 7.0 will fill foo.d with something like 271bb2e14f3Smrg # foo.o: sub/foo.c 272bb2e14f3Smrg # foo.o: sub/foo.h 273bb2e14f3Smrg # which is wrong. We want: 274bb2e14f3Smrg # sub/foo.o: sub/foo.c 275bb2e14f3Smrg # sub/foo.o: sub/foo.h 276bb2e14f3Smrg # sub/foo.c: 277bb2e14f3Smrg # sub/foo.h: 278bb2e14f3Smrg # ICC 7.1 will output 279bb2e14f3Smrg # foo.o: sub/foo.c sub/foo.h 280bb2e14f3Smrg # and will wrap long lines using \ : 281bb2e14f3Smrg # foo.o: sub/foo.c ... \ 282bb2e14f3Smrg # sub/foo.h ... \ 283bb2e14f3Smrg # ... 284bb2e14f3Smrg 285bb2e14f3Smrg "$@" -MD -MF "$tmpdepfile" 286bb2e14f3Smrg stat=$? 287bb2e14f3Smrg if test $stat -eq 0; then : 288bb2e14f3Smrg else 289bb2e14f3Smrg rm -f "$tmpdepfile" 290bb2e14f3Smrg exit $stat 291bb2e14f3Smrg fi 292bb2e14f3Smrg rm -f "$depfile" 293bb2e14f3Smrg # Each line is of the form `foo.o: dependent.h', 294bb2e14f3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295bb2e14f3Smrg # Do two passes, one to just change these to 296bb2e14f3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297bb2e14f3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298bb2e14f3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299bb2e14f3Smrg # correctly. Breaking it into two sed invocations is a workaround. 300bb2e14f3Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301bb2e14f3Smrg sed -e 's/$/ :/' >> "$depfile" 302bb2e14f3Smrg rm -f "$tmpdepfile" 303bb2e14f3Smrg ;; 304bb2e14f3Smrg 305a5399cb1Smrghp2) 306a5399cb1Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307a5399cb1Smrg # compilers, which have integrated preprocessors. The correct option 308a5399cb1Smrg # to use with these is +Maked; it writes dependencies to a file named 309a5399cb1Smrg # 'foo.d', which lands next to the object file, wherever that 310a5399cb1Smrg # happens to be. 311a5399cb1Smrg # Much of this is similar to the tru64 case; see comments there. 312a5399cb1Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313a5399cb1Smrg test "x$dir" = "x$object" && dir= 314a5399cb1Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315a5399cb1Smrg if test "$libtool" = yes; then 316a5399cb1Smrg tmpdepfile1=$dir$base.d 317a5399cb1Smrg tmpdepfile2=$dir.libs/$base.d 318a5399cb1Smrg "$@" -Wc,+Maked 319a5399cb1Smrg else 320a5399cb1Smrg tmpdepfile1=$dir$base.d 321a5399cb1Smrg tmpdepfile2=$dir$base.d 322a5399cb1Smrg "$@" +Maked 323a5399cb1Smrg fi 324a5399cb1Smrg stat=$? 325a5399cb1Smrg if test $stat -eq 0; then : 326a5399cb1Smrg else 327a5399cb1Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328a5399cb1Smrg exit $stat 329a5399cb1Smrg fi 330a5399cb1Smrg 331a5399cb1Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332a5399cb1Smrg do 333a5399cb1Smrg test -f "$tmpdepfile" && break 334a5399cb1Smrg done 335a5399cb1Smrg if test -f "$tmpdepfile"; then 336a5399cb1Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337a5399cb1Smrg # Add `dependent.h:' lines. 338a5399cb1Smrg sed -ne '2,${ 339a5399cb1Smrg s/^ *// 340a5399cb1Smrg s/ \\*$// 341a5399cb1Smrg s/$/:/ 342a5399cb1Smrg p 343a5399cb1Smrg }' "$tmpdepfile" >> "$depfile" 344a5399cb1Smrg else 345a5399cb1Smrg echo "#dummy" > "$depfile" 346a5399cb1Smrg fi 347a5399cb1Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348a5399cb1Smrg ;; 349a5399cb1Smrg 350bb2e14f3Smrgtru64) 351bb2e14f3Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352bb2e14f3Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353bb2e14f3Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354bb2e14f3Smrg # dependencies in `foo.d' instead, so we check for that too. 355bb2e14f3Smrg # Subdirectories are respected. 356bb2e14f3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357bb2e14f3Smrg test "x$dir" = "x$object" && dir= 358bb2e14f3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359bb2e14f3Smrg 360bb2e14f3Smrg if test "$libtool" = yes; then 361bb2e14f3Smrg # With Tru64 cc, shared objects can also be used to make a 362a5399cb1Smrg # static library. This mechanism is used in libtool 1.4 series to 363bb2e14f3Smrg # handle both shared and static libraries in a single compilation. 364bb2e14f3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365bb2e14f3Smrg # 366bb2e14f3Smrg # With libtool 1.5 this exception was removed, and libtool now 367bb2e14f3Smrg # generates 2 separate objects for the 2 libraries. These two 368a5399cb1Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369bb2e14f3Smrg # in $dir$base.o.d. We have to check for both files, because 370bb2e14f3Smrg # one of the two compilations can be disabled. We should prefer 371bb2e14f3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372bb2e14f3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373bb2e14f3Smrg # the former would cause a distcleancheck panic. 374bb2e14f3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375bb2e14f3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376bb2e14f3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377bb2e14f3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378bb2e14f3Smrg "$@" -Wc,-MD 379bb2e14f3Smrg else 380bb2e14f3Smrg tmpdepfile1=$dir$base.o.d 381bb2e14f3Smrg tmpdepfile2=$dir$base.d 382bb2e14f3Smrg tmpdepfile3=$dir$base.d 383bb2e14f3Smrg tmpdepfile4=$dir$base.d 384bb2e14f3Smrg "$@" -MD 385bb2e14f3Smrg fi 386bb2e14f3Smrg 387bb2e14f3Smrg stat=$? 388bb2e14f3Smrg if test $stat -eq 0; then : 389bb2e14f3Smrg else 390bb2e14f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391bb2e14f3Smrg exit $stat 392bb2e14f3Smrg fi 393bb2e14f3Smrg 394bb2e14f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395bb2e14f3Smrg do 396bb2e14f3Smrg test -f "$tmpdepfile" && break 397bb2e14f3Smrg done 398bb2e14f3Smrg if test -f "$tmpdepfile"; then 399bb2e14f3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400bb2e14f3Smrg # That's a tab and a space in the []. 401bb2e14f3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402bb2e14f3Smrg else 403bb2e14f3Smrg echo "#dummy" > "$depfile" 404bb2e14f3Smrg fi 405bb2e14f3Smrg rm -f "$tmpdepfile" 406bb2e14f3Smrg ;; 407bb2e14f3Smrg 408bb2e14f3Smrg#nosideeffect) 409bb2e14f3Smrg # This comment above is used by automake to tell side-effect 410bb2e14f3Smrg # dependency tracking mechanisms from slower ones. 411bb2e14f3Smrg 412bb2e14f3Smrgdashmstdout) 413bb2e14f3Smrg # Important note: in order to support this mode, a compiler *must* 414bb2e14f3Smrg # always write the preprocessed file to stdout, regardless of -o. 415bb2e14f3Smrg "$@" || exit $? 416bb2e14f3Smrg 417bb2e14f3Smrg # Remove the call to Libtool. 418bb2e14f3Smrg if test "$libtool" = yes; then 419a5399cb1Smrg while test "X$1" != 'X--mode=compile'; do 420bb2e14f3Smrg shift 421bb2e14f3Smrg done 422bb2e14f3Smrg shift 423bb2e14f3Smrg fi 424bb2e14f3Smrg 425bb2e14f3Smrg # Remove `-o $object'. 426bb2e14f3Smrg IFS=" " 427bb2e14f3Smrg for arg 428bb2e14f3Smrg do 429bb2e14f3Smrg case $arg in 430bb2e14f3Smrg -o) 431bb2e14f3Smrg shift 432bb2e14f3Smrg ;; 433bb2e14f3Smrg $object) 434bb2e14f3Smrg shift 435bb2e14f3Smrg ;; 436bb2e14f3Smrg *) 437bb2e14f3Smrg set fnord "$@" "$arg" 438bb2e14f3Smrg shift # fnord 439bb2e14f3Smrg shift # $arg 440bb2e14f3Smrg ;; 441bb2e14f3Smrg esac 442bb2e14f3Smrg done 443bb2e14f3Smrg 444bb2e14f3Smrg test -z "$dashmflag" && dashmflag=-M 445bb2e14f3Smrg # Require at least two characters before searching for `:' 446bb2e14f3Smrg # in the target name. This is to cope with DOS-style filenames: 447bb2e14f3Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448bb2e14f3Smrg "$@" $dashmflag | 449bb2e14f3Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450bb2e14f3Smrg rm -f "$depfile" 451bb2e14f3Smrg cat < "$tmpdepfile" > "$depfile" 452bb2e14f3Smrg tr ' ' ' 453bb2e14f3Smrg' < "$tmpdepfile" | \ 454bb2e14f3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455bb2e14f3Smrg## correctly. Breaking it into two sed invocations is a workaround. 456bb2e14f3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457bb2e14f3Smrg rm -f "$tmpdepfile" 458bb2e14f3Smrg ;; 459bb2e14f3Smrg 460bb2e14f3SmrgdashXmstdout) 461bb2e14f3Smrg # This case only exists to satisfy depend.m4. It is never actually 462bb2e14f3Smrg # run, as this mode is specially recognized in the preamble. 463bb2e14f3Smrg exit 1 464bb2e14f3Smrg ;; 465bb2e14f3Smrg 466bb2e14f3Smrgmakedepend) 467bb2e14f3Smrg "$@" || exit $? 468bb2e14f3Smrg # Remove any Libtool call 469bb2e14f3Smrg if test "$libtool" = yes; then 470a5399cb1Smrg while test "X$1" != 'X--mode=compile'; do 471bb2e14f3Smrg shift 472bb2e14f3Smrg done 473bb2e14f3Smrg shift 474bb2e14f3Smrg fi 475bb2e14f3Smrg # X makedepend 476bb2e14f3Smrg shift 477a5399cb1Smrg cleared=no eat=no 478a5399cb1Smrg for arg 479a5399cb1Smrg do 480bb2e14f3Smrg case $cleared in 481bb2e14f3Smrg no) 482bb2e14f3Smrg set ""; shift 483bb2e14f3Smrg cleared=yes ;; 484bb2e14f3Smrg esac 485a5399cb1Smrg if test $eat = yes; then 486a5399cb1Smrg eat=no 487a5399cb1Smrg continue 488a5399cb1Smrg fi 489bb2e14f3Smrg case "$arg" in 490bb2e14f3Smrg -D*|-I*) 491bb2e14f3Smrg set fnord "$@" "$arg"; shift ;; 492bb2e14f3Smrg # Strip any option that makedepend may not understand. Remove 493bb2e14f3Smrg # the object too, otherwise makedepend will parse it as a source file. 494a5399cb1Smrg -arch) 495a5399cb1Smrg eat=yes ;; 496bb2e14f3Smrg -*|$object) 497bb2e14f3Smrg ;; 498bb2e14f3Smrg *) 499bb2e14f3Smrg set fnord "$@" "$arg"; shift ;; 500bb2e14f3Smrg esac 501bb2e14f3Smrg done 502a5399cb1Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503bb2e14f3Smrg touch "$tmpdepfile" 504bb2e14f3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505bb2e14f3Smrg rm -f "$depfile" 506bb2e14f3Smrg cat < "$tmpdepfile" > "$depfile" 507bb2e14f3Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508bb2e14f3Smrg' | \ 509bb2e14f3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510bb2e14f3Smrg## correctly. Breaking it into two sed invocations is a workaround. 511bb2e14f3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512bb2e14f3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513bb2e14f3Smrg ;; 514bb2e14f3Smrg 515bb2e14f3Smrgcpp) 516bb2e14f3Smrg # Important note: in order to support this mode, a compiler *must* 517bb2e14f3Smrg # always write the preprocessed file to stdout. 518bb2e14f3Smrg "$@" || exit $? 519bb2e14f3Smrg 520bb2e14f3Smrg # Remove the call to Libtool. 521bb2e14f3Smrg if test "$libtool" = yes; then 522a5399cb1Smrg while test "X$1" != 'X--mode=compile'; do 523bb2e14f3Smrg shift 524bb2e14f3Smrg done 525bb2e14f3Smrg shift 526bb2e14f3Smrg fi 527bb2e14f3Smrg 528bb2e14f3Smrg # Remove `-o $object'. 529bb2e14f3Smrg IFS=" " 530bb2e14f3Smrg for arg 531bb2e14f3Smrg do 532bb2e14f3Smrg case $arg in 533bb2e14f3Smrg -o) 534bb2e14f3Smrg shift 535bb2e14f3Smrg ;; 536bb2e14f3Smrg $object) 537bb2e14f3Smrg shift 538bb2e14f3Smrg ;; 539bb2e14f3Smrg *) 540bb2e14f3Smrg set fnord "$@" "$arg" 541bb2e14f3Smrg shift # fnord 542bb2e14f3Smrg shift # $arg 543bb2e14f3Smrg ;; 544bb2e14f3Smrg esac 545bb2e14f3Smrg done 546bb2e14f3Smrg 547bb2e14f3Smrg "$@" -E | 548bb2e14f3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549bb2e14f3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550bb2e14f3Smrg sed '$ s: \\$::' > "$tmpdepfile" 551bb2e14f3Smrg rm -f "$depfile" 552bb2e14f3Smrg echo "$object : \\" > "$depfile" 553bb2e14f3Smrg cat < "$tmpdepfile" >> "$depfile" 554bb2e14f3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555bb2e14f3Smrg rm -f "$tmpdepfile" 556bb2e14f3Smrg ;; 557bb2e14f3Smrg 558bb2e14f3Smrgmsvisualcpp) 559bb2e14f3Smrg # Important note: in order to support this mode, a compiler *must* 560a5399cb1Smrg # always write the preprocessed file to stdout. 561bb2e14f3Smrg "$@" || exit $? 562a5399cb1Smrg 563a5399cb1Smrg # Remove the call to Libtool. 564a5399cb1Smrg if test "$libtool" = yes; then 565a5399cb1Smrg while test "X$1" != 'X--mode=compile'; do 566a5399cb1Smrg shift 567a5399cb1Smrg done 568a5399cb1Smrg shift 569a5399cb1Smrg fi 570a5399cb1Smrg 571bb2e14f3Smrg IFS=" " 572bb2e14f3Smrg for arg 573bb2e14f3Smrg do 574bb2e14f3Smrg case "$arg" in 575a5399cb1Smrg -o) 576a5399cb1Smrg shift 577a5399cb1Smrg ;; 578a5399cb1Smrg $object) 579a5399cb1Smrg shift 580a5399cb1Smrg ;; 581bb2e14f3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582bb2e14f3Smrg set fnord "$@" 583bb2e14f3Smrg shift 584bb2e14f3Smrg shift 585bb2e14f3Smrg ;; 586bb2e14f3Smrg *) 587bb2e14f3Smrg set fnord "$@" "$arg" 588bb2e14f3Smrg shift 589bb2e14f3Smrg shift 590bb2e14f3Smrg ;; 591bb2e14f3Smrg esac 592bb2e14f3Smrg done 593a5399cb1Smrg "$@" -E 2>/dev/null | 594a5399cb1Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595bb2e14f3Smrg rm -f "$depfile" 596bb2e14f3Smrg echo "$object : \\" > "$depfile" 597a5399cb1Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598bb2e14f3Smrg echo " " >> "$depfile" 599a5399cb1Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600bb2e14f3Smrg rm -f "$tmpdepfile" 601bb2e14f3Smrg ;; 602bb2e14f3Smrg 603a5399cb1Smrgmsvcmsys) 604a5399cb1Smrg # This case exists only to let depend.m4 do its work. It works by 605a5399cb1Smrg # looking at the text of this script. This case will never be run, 606a5399cb1Smrg # since it is checked for above. 607a5399cb1Smrg exit 1 608a5399cb1Smrg ;; 609a5399cb1Smrg 610bb2e14f3Smrgnone) 611bb2e14f3Smrg exec "$@" 612bb2e14f3Smrg ;; 613bb2e14f3Smrg 614bb2e14f3Smrg*) 615bb2e14f3Smrg echo "Unknown depmode $depmode" 1>&2 616bb2e14f3Smrg exit 1 617bb2e14f3Smrg ;; 618bb2e14f3Smrgesac 619bb2e14f3Smrg 620bb2e14f3Smrgexit 0 621bb2e14f3Smrg 622bb2e14f3Smrg# Local Variables: 623bb2e14f3Smrg# mode: shell-script 624bb2e14f3Smrg# sh-indentation: 2 625bb2e14f3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626bb2e14f3Smrg# time-stamp-start: "scriptversion=" 627bb2e14f3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628a5399cb1Smrg# time-stamp-time-zone: "UTC" 629a5399cb1Smrg# time-stamp-end: "; # UTC" 630bb2e14f3Smrg# End: 631