depcomp revision eda3803b
1fe5e51b7Smrg#! /bin/sh 2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects 3fe5e51b7Smrg 4eda3803bSmrgscriptversion=2007-03-29.01 5fe5e51b7Smrg 6eda3803bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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. 218eda3803bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219eda3803bSmrg test "x$dir" = "x$object" && dir= 220eda3803bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221fe5e51b7Smrg if test "$libtool" = yes; then 222eda3803bSmrg tmpdepfile1=$dir$base.u 223eda3803bSmrg tmpdepfile2=$base.u 224eda3803bSmrg tmpdepfile3=$dir.libs/$base.u 225fe5e51b7Smrg "$@" -Wc,-M 226fe5e51b7Smrg else 227eda3803bSmrg tmpdepfile1=$dir$base.u 228eda3803bSmrg tmpdepfile2=$dir$base.u 229eda3803bSmrg tmpdepfile3=$dir$base.u 230fe5e51b7Smrg "$@" -M 231fe5e51b7Smrg fi 232fe5e51b7Smrg stat=$? 233fe5e51b7Smrg 234fe5e51b7Smrg if test $stat -eq 0; then : 235fe5e51b7Smrg else 236eda3803bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237fe5e51b7Smrg exit $stat 238fe5e51b7Smrg fi 239fe5e51b7Smrg 240eda3803bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241eda3803bSmrg do 242eda3803bSmrg test -f "$tmpdepfile" && break 243eda3803bSmrg done 244fe5e51b7Smrg if test -f "$tmpdepfile"; then 245fe5e51b7Smrg # Each line is of the form `foo.o: dependent.h'. 246fe5e51b7Smrg # Do two passes, one to just change these to 247fe5e51b7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 248eda3803bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249eda3803bSmrg # That's a tab and a space in the []. 250eda3803bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251fe5e51b7Smrg else 252fe5e51b7Smrg # The sourcefile does not contain any dependencies, so just 253fe5e51b7Smrg # store a dummy comment line, to avoid errors with the Makefile 254fe5e51b7Smrg # "include basename.Plo" scheme. 255fe5e51b7Smrg echo "#dummy" > "$depfile" 256fe5e51b7Smrg fi 257fe5e51b7Smrg rm -f "$tmpdepfile" 258fe5e51b7Smrg ;; 259fe5e51b7Smrg 260fe5e51b7Smrgicc) 261fe5e51b7Smrg # Intel's C compiler understands `-MD -MF file'. However on 262fe5e51b7Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263fe5e51b7Smrg # ICC 7.0 will fill foo.d with something like 264fe5e51b7Smrg # foo.o: sub/foo.c 265fe5e51b7Smrg # foo.o: sub/foo.h 266fe5e51b7Smrg # which is wrong. We want: 267fe5e51b7Smrg # sub/foo.o: sub/foo.c 268fe5e51b7Smrg # sub/foo.o: sub/foo.h 269fe5e51b7Smrg # sub/foo.c: 270fe5e51b7Smrg # sub/foo.h: 271fe5e51b7Smrg # ICC 7.1 will output 272fe5e51b7Smrg # foo.o: sub/foo.c sub/foo.h 273fe5e51b7Smrg # and will wrap long lines using \ : 274fe5e51b7Smrg # foo.o: sub/foo.c ... \ 275fe5e51b7Smrg # sub/foo.h ... \ 276fe5e51b7Smrg # ... 277fe5e51b7Smrg 278fe5e51b7Smrg "$@" -MD -MF "$tmpdepfile" 279fe5e51b7Smrg stat=$? 280fe5e51b7Smrg if test $stat -eq 0; then : 281fe5e51b7Smrg else 282fe5e51b7Smrg rm -f "$tmpdepfile" 283fe5e51b7Smrg exit $stat 284fe5e51b7Smrg fi 285fe5e51b7Smrg rm -f "$depfile" 286fe5e51b7Smrg # Each line is of the form `foo.o: dependent.h', 287fe5e51b7Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288fe5e51b7Smrg # Do two passes, one to just change these to 289fe5e51b7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 290fe5e51b7Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291fe5e51b7Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 292fe5e51b7Smrg # correctly. Breaking it into two sed invocations is a workaround. 293fe5e51b7Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294fe5e51b7Smrg sed -e 's/$/ :/' >> "$depfile" 295fe5e51b7Smrg rm -f "$tmpdepfile" 296fe5e51b7Smrg ;; 297fe5e51b7Smrg 298fe5e51b7Smrghp2) 299fe5e51b7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300fe5e51b7Smrg # compilers, which have integrated preprocessors. The correct option 301fe5e51b7Smrg # to use with these is +Maked; it writes dependencies to a file named 302fe5e51b7Smrg # 'foo.d', which lands next to the object file, wherever that 303fe5e51b7Smrg # happens to be. 304fe5e51b7Smrg # Much of this is similar to the tru64 case; see comments there. 305fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306fe5e51b7Smrg test "x$dir" = "x$object" && dir= 307fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308fe5e51b7Smrg if test "$libtool" = yes; then 309fe5e51b7Smrg tmpdepfile1=$dir$base.d 310fe5e51b7Smrg tmpdepfile2=$dir.libs/$base.d 311fe5e51b7Smrg "$@" -Wc,+Maked 312fe5e51b7Smrg else 313fe5e51b7Smrg tmpdepfile1=$dir$base.d 314fe5e51b7Smrg tmpdepfile2=$dir$base.d 315fe5e51b7Smrg "$@" +Maked 316fe5e51b7Smrg fi 317fe5e51b7Smrg stat=$? 318fe5e51b7Smrg if test $stat -eq 0; then : 319fe5e51b7Smrg else 320fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321fe5e51b7Smrg exit $stat 322fe5e51b7Smrg fi 323fe5e51b7Smrg 324fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325fe5e51b7Smrg do 326fe5e51b7Smrg test -f "$tmpdepfile" && break 327fe5e51b7Smrg done 328fe5e51b7Smrg if test -f "$tmpdepfile"; then 329fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330fe5e51b7Smrg # Add `dependent.h:' lines. 331fe5e51b7Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332fe5e51b7Smrg else 333fe5e51b7Smrg echo "#dummy" > "$depfile" 334fe5e51b7Smrg fi 335fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 336fe5e51b7Smrg ;; 337fe5e51b7Smrg 338fe5e51b7Smrgtru64) 339fe5e51b7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 340fe5e51b7Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341fe5e51b7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342fe5e51b7Smrg # dependencies in `foo.d' instead, so we check for that too. 343fe5e51b7Smrg # Subdirectories are respected. 344fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345fe5e51b7Smrg test "x$dir" = "x$object" && dir= 346fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347fe5e51b7Smrg 348fe5e51b7Smrg if test "$libtool" = yes; then 349fe5e51b7Smrg # With Tru64 cc, shared objects can also be used to make a 350fe5e51b7Smrg # static library. This mechanism is used in libtool 1.4 series to 351fe5e51b7Smrg # handle both shared and static libraries in a single compilation. 352fe5e51b7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353fe5e51b7Smrg # 354fe5e51b7Smrg # With libtool 1.5 this exception was removed, and libtool now 355fe5e51b7Smrg # generates 2 separate objects for the 2 libraries. These two 356fe5e51b7Smrg # compilations output dependencies in $dir.libs/$base.o.d and 357fe5e51b7Smrg # in $dir$base.o.d. We have to check for both files, because 358fe5e51b7Smrg # one of the two compilations can be disabled. We should prefer 359fe5e51b7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360fe5e51b7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 361fe5e51b7Smrg # the former would cause a distcleancheck panic. 362fe5e51b7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363fe5e51b7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364fe5e51b7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365fe5e51b7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366fe5e51b7Smrg "$@" -Wc,-MD 367fe5e51b7Smrg else 368fe5e51b7Smrg tmpdepfile1=$dir$base.o.d 369fe5e51b7Smrg tmpdepfile2=$dir$base.d 370fe5e51b7Smrg tmpdepfile3=$dir$base.d 371fe5e51b7Smrg tmpdepfile4=$dir$base.d 372fe5e51b7Smrg "$@" -MD 373fe5e51b7Smrg fi 374fe5e51b7Smrg 375fe5e51b7Smrg stat=$? 376fe5e51b7Smrg if test $stat -eq 0; then : 377fe5e51b7Smrg else 378fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379fe5e51b7Smrg exit $stat 380fe5e51b7Smrg fi 381fe5e51b7Smrg 382fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383fe5e51b7Smrg do 384fe5e51b7Smrg test -f "$tmpdepfile" && break 385fe5e51b7Smrg done 386fe5e51b7Smrg if test -f "$tmpdepfile"; then 387fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388fe5e51b7Smrg # That's a tab and a space in the []. 389fe5e51b7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390fe5e51b7Smrg else 391fe5e51b7Smrg echo "#dummy" > "$depfile" 392fe5e51b7Smrg fi 393fe5e51b7Smrg rm -f "$tmpdepfile" 394fe5e51b7Smrg ;; 395fe5e51b7Smrg 396fe5e51b7Smrg#nosideeffect) 397fe5e51b7Smrg # This comment above is used by automake to tell side-effect 398fe5e51b7Smrg # dependency tracking mechanisms from slower ones. 399fe5e51b7Smrg 400fe5e51b7Smrgdashmstdout) 401fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 402fe5e51b7Smrg # always write the preprocessed file to stdout, regardless of -o. 403fe5e51b7Smrg "$@" || exit $? 404fe5e51b7Smrg 405fe5e51b7Smrg # Remove the call to Libtool. 406fe5e51b7Smrg if test "$libtool" = yes; then 407fe5e51b7Smrg while test $1 != '--mode=compile'; do 408fe5e51b7Smrg shift 409fe5e51b7Smrg done 410fe5e51b7Smrg shift 411fe5e51b7Smrg fi 412fe5e51b7Smrg 413fe5e51b7Smrg # Remove `-o $object'. 414fe5e51b7Smrg IFS=" " 415fe5e51b7Smrg for arg 416fe5e51b7Smrg do 417fe5e51b7Smrg case $arg in 418fe5e51b7Smrg -o) 419fe5e51b7Smrg shift 420fe5e51b7Smrg ;; 421fe5e51b7Smrg $object) 422fe5e51b7Smrg shift 423fe5e51b7Smrg ;; 424fe5e51b7Smrg *) 425fe5e51b7Smrg set fnord "$@" "$arg" 426fe5e51b7Smrg shift # fnord 427fe5e51b7Smrg shift # $arg 428fe5e51b7Smrg ;; 429fe5e51b7Smrg esac 430fe5e51b7Smrg done 431fe5e51b7Smrg 432fe5e51b7Smrg test -z "$dashmflag" && dashmflag=-M 433fe5e51b7Smrg # Require at least two characters before searching for `:' 434fe5e51b7Smrg # in the target name. This is to cope with DOS-style filenames: 435fe5e51b7Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436fe5e51b7Smrg "$@" $dashmflag | 437fe5e51b7Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438fe5e51b7Smrg rm -f "$depfile" 439fe5e51b7Smrg cat < "$tmpdepfile" > "$depfile" 440fe5e51b7Smrg tr ' ' ' 441fe5e51b7Smrg' < "$tmpdepfile" | \ 442fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 443fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 444fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445fe5e51b7Smrg rm -f "$tmpdepfile" 446fe5e51b7Smrg ;; 447fe5e51b7Smrg 448fe5e51b7SmrgdashXmstdout) 449fe5e51b7Smrg # This case only exists to satisfy depend.m4. It is never actually 450fe5e51b7Smrg # run, as this mode is specially recognized in the preamble. 451fe5e51b7Smrg exit 1 452fe5e51b7Smrg ;; 453fe5e51b7Smrg 454fe5e51b7Smrgmakedepend) 455fe5e51b7Smrg "$@" || exit $? 456fe5e51b7Smrg # Remove any Libtool call 457fe5e51b7Smrg if test "$libtool" = yes; then 458fe5e51b7Smrg while test $1 != '--mode=compile'; do 459fe5e51b7Smrg shift 460fe5e51b7Smrg done 461fe5e51b7Smrg shift 462fe5e51b7Smrg fi 463fe5e51b7Smrg # X makedepend 464fe5e51b7Smrg shift 465fe5e51b7Smrg cleared=no 466fe5e51b7Smrg for arg in "$@"; do 467fe5e51b7Smrg case $cleared in 468fe5e51b7Smrg no) 469fe5e51b7Smrg set ""; shift 470fe5e51b7Smrg cleared=yes ;; 471fe5e51b7Smrg esac 472fe5e51b7Smrg case "$arg" in 473fe5e51b7Smrg -D*|-I*) 474fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 475fe5e51b7Smrg # Strip any option that makedepend may not understand. Remove 476fe5e51b7Smrg # the object too, otherwise makedepend will parse it as a source file. 477fe5e51b7Smrg -*|$object) 478fe5e51b7Smrg ;; 479fe5e51b7Smrg *) 480fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 481fe5e51b7Smrg esac 482fe5e51b7Smrg done 483fe5e51b7Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484fe5e51b7Smrg touch "$tmpdepfile" 485fe5e51b7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486fe5e51b7Smrg rm -f "$depfile" 487fe5e51b7Smrg cat < "$tmpdepfile" > "$depfile" 488fe5e51b7Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489fe5e51b7Smrg' | \ 490fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 491fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 492fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494fe5e51b7Smrg ;; 495fe5e51b7Smrg 496fe5e51b7Smrgcpp) 497fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 498fe5e51b7Smrg # always write the preprocessed file to stdout. 499fe5e51b7Smrg "$@" || exit $? 500fe5e51b7Smrg 501fe5e51b7Smrg # Remove the call to Libtool. 502fe5e51b7Smrg if test "$libtool" = yes; then 503fe5e51b7Smrg while test $1 != '--mode=compile'; do 504fe5e51b7Smrg shift 505fe5e51b7Smrg done 506fe5e51b7Smrg shift 507fe5e51b7Smrg fi 508fe5e51b7Smrg 509fe5e51b7Smrg # Remove `-o $object'. 510fe5e51b7Smrg IFS=" " 511fe5e51b7Smrg for arg 512fe5e51b7Smrg do 513fe5e51b7Smrg case $arg in 514fe5e51b7Smrg -o) 515fe5e51b7Smrg shift 516fe5e51b7Smrg ;; 517fe5e51b7Smrg $object) 518fe5e51b7Smrg shift 519fe5e51b7Smrg ;; 520fe5e51b7Smrg *) 521fe5e51b7Smrg set fnord "$@" "$arg" 522fe5e51b7Smrg shift # fnord 523fe5e51b7Smrg shift # $arg 524fe5e51b7Smrg ;; 525fe5e51b7Smrg esac 526fe5e51b7Smrg done 527fe5e51b7Smrg 528fe5e51b7Smrg "$@" -E | 529fe5e51b7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530fe5e51b7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531fe5e51b7Smrg sed '$ s: \\$::' > "$tmpdepfile" 532fe5e51b7Smrg rm -f "$depfile" 533fe5e51b7Smrg echo "$object : \\" > "$depfile" 534fe5e51b7Smrg cat < "$tmpdepfile" >> "$depfile" 535fe5e51b7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536fe5e51b7Smrg rm -f "$tmpdepfile" 537fe5e51b7Smrg ;; 538fe5e51b7Smrg 539fe5e51b7Smrgmsvisualcpp) 540fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 541fe5e51b7Smrg # always write the preprocessed file to stdout, regardless of -o, 542fe5e51b7Smrg # because we must use -o when running libtool. 543fe5e51b7Smrg "$@" || exit $? 544fe5e51b7Smrg IFS=" " 545fe5e51b7Smrg for arg 546fe5e51b7Smrg do 547fe5e51b7Smrg case "$arg" in 548fe5e51b7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549fe5e51b7Smrg set fnord "$@" 550fe5e51b7Smrg shift 551fe5e51b7Smrg shift 552fe5e51b7Smrg ;; 553fe5e51b7Smrg *) 554fe5e51b7Smrg set fnord "$@" "$arg" 555fe5e51b7Smrg shift 556fe5e51b7Smrg shift 557fe5e51b7Smrg ;; 558fe5e51b7Smrg esac 559fe5e51b7Smrg done 560fe5e51b7Smrg "$@" -E | 561fe5e51b7Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562fe5e51b7Smrg rm -f "$depfile" 563fe5e51b7Smrg echo "$object : \\" > "$depfile" 564fe5e51b7Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565fe5e51b7Smrg echo " " >> "$depfile" 566fe5e51b7Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567fe5e51b7Smrg rm -f "$tmpdepfile" 568fe5e51b7Smrg ;; 569fe5e51b7Smrg 570fe5e51b7Smrgnone) 571fe5e51b7Smrg exec "$@" 572fe5e51b7Smrg ;; 573fe5e51b7Smrg 574fe5e51b7Smrg*) 575fe5e51b7Smrg echo "Unknown depmode $depmode" 1>&2 576fe5e51b7Smrg exit 1 577fe5e51b7Smrg ;; 578fe5e51b7Smrgesac 579fe5e51b7Smrg 580fe5e51b7Smrgexit 0 581fe5e51b7Smrg 582fe5e51b7Smrg# Local Variables: 583fe5e51b7Smrg# mode: shell-script 584fe5e51b7Smrg# sh-indentation: 2 585fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586fe5e51b7Smrg# time-stamp-start: "scriptversion=" 587fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588fe5e51b7Smrg# time-stamp-end: "$" 589fe5e51b7Smrg# End: 590