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