depcomp revision 64ce7165
164ce7165Smrg#! /bin/sh 264ce7165Smrg# depcomp - compile a program generating dependencies as side-effects 364ce7165Smrg 464ce7165Smrgscriptversion=2006-10-15.18 564ce7165Smrg 664ce7165Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 764ce7165Smrg# Foundation, Inc. 864ce7165Smrg 964ce7165Smrg# This program is free software; you can redistribute it and/or modify 1064ce7165Smrg# it under the terms of the GNU General Public License as published by 1164ce7165Smrg# the Free Software Foundation; either version 2, or (at your option) 1264ce7165Smrg# any later version. 1364ce7165Smrg 1464ce7165Smrg# This program is distributed in the hope that it will be useful, 1564ce7165Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1664ce7165Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1764ce7165Smrg# GNU General Public License for more details. 1864ce7165Smrg 1964ce7165Smrg# You should have received a copy of the GNU General Public License 2064ce7165Smrg# along with this program; if not, write to the Free Software 2164ce7165Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2264ce7165Smrg# 02110-1301, USA. 2364ce7165Smrg 2464ce7165Smrg# As a special exception to the GNU General Public License, if you 2564ce7165Smrg# distribute this file as part of a program that contains a 2664ce7165Smrg# configuration script generated by Autoconf, you may include it under 2764ce7165Smrg# the same distribution terms that you use for the rest of that program. 2864ce7165Smrg 2964ce7165Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 3064ce7165Smrg 3164ce7165Smrgcase $1 in 3264ce7165Smrg '') 3364ce7165Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3464ce7165Smrg exit 1; 3564ce7165Smrg ;; 3664ce7165Smrg -h | --h*) 3764ce7165Smrg cat <<\EOF 3864ce7165SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3964ce7165Smrg 4064ce7165SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 4164ce7165Smrgas side-effects. 4264ce7165Smrg 4364ce7165SmrgEnvironment variables: 4464ce7165Smrg depmode Dependency tracking mode. 4564ce7165Smrg source Source file read by `PROGRAMS ARGS'. 4664ce7165Smrg object Object file output by `PROGRAMS ARGS'. 4764ce7165Smrg DEPDIR directory where to store dependencies. 4864ce7165Smrg depfile Dependency file to output. 4964ce7165Smrg tmpdepfile Temporary file to use when outputing dependencies. 5064ce7165Smrg libtool Whether libtool is used (yes/no). 5164ce7165Smrg 5264ce7165SmrgReport bugs to <bug-automake@gnu.org>. 5364ce7165SmrgEOF 5464ce7165Smrg exit $? 5564ce7165Smrg ;; 5664ce7165Smrg -v | --v*) 5764ce7165Smrg echo "depcomp $scriptversion" 5864ce7165Smrg exit $? 5964ce7165Smrg ;; 6064ce7165Smrgesac 6164ce7165Smrg 6264ce7165Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6364ce7165Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6464ce7165Smrg exit 1 6564ce7165Smrgfi 6664ce7165Smrg 6764ce7165Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6864ce7165Smrgdepfile=${depfile-`echo "$object" | 6964ce7165Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 7064ce7165Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 7164ce7165Smrg 7264ce7165Smrgrm -f "$tmpdepfile" 7364ce7165Smrg 7464ce7165Smrg# Some modes work just like other modes, but use different flags. We 7564ce7165Smrg# parameterize here, but still list the modes in the big case below, 7664ce7165Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7764ce7165Smrg# here, because this file can only contain one case statement. 7864ce7165Smrgif test "$depmode" = hp; then 7964ce7165Smrg # HP compiler uses -M and no extra arg. 8064ce7165Smrg gccflag=-M 8164ce7165Smrg depmode=gcc 8264ce7165Smrgfi 8364ce7165Smrg 8464ce7165Smrgif test "$depmode" = dashXmstdout; then 8564ce7165Smrg # This is just like dashmstdout with a different argument. 8664ce7165Smrg dashmflag=-xM 8764ce7165Smrg depmode=dashmstdout 8864ce7165Smrgfi 8964ce7165Smrg 9064ce7165Smrgcase "$depmode" in 9164ce7165Smrggcc3) 9264ce7165Smrg## gcc 3 implements dependency tracking that does exactly what 9364ce7165Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 9464ce7165Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 9564ce7165Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 9664ce7165Smrg## the command line argument order; so add the flags where they 9764ce7165Smrg## appear in depend2.am. Note that the slowdown incurred here 9864ce7165Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 9964ce7165Smrg for arg 10064ce7165Smrg do 10164ce7165Smrg case $arg in 10264ce7165Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 10364ce7165Smrg *) set fnord "$@" "$arg" ;; 10464ce7165Smrg esac 10564ce7165Smrg shift # fnord 10664ce7165Smrg shift # $arg 10764ce7165Smrg done 10864ce7165Smrg "$@" 10964ce7165Smrg stat=$? 11064ce7165Smrg if test $stat -eq 0; then : 11164ce7165Smrg else 11264ce7165Smrg rm -f "$tmpdepfile" 11364ce7165Smrg exit $stat 11464ce7165Smrg fi 11564ce7165Smrg mv "$tmpdepfile" "$depfile" 11664ce7165Smrg ;; 11764ce7165Smrg 11864ce7165Smrggcc) 11964ce7165Smrg## There are various ways to get dependency output from gcc. Here's 12064ce7165Smrg## why we pick this rather obscure method: 12164ce7165Smrg## - Don't want to use -MD because we'd like the dependencies to end 12264ce7165Smrg## up in a subdir. Having to rename by hand is ugly. 12364ce7165Smrg## (We might end up doing this anyway to support other compilers.) 12464ce7165Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 12564ce7165Smrg## -MM, not -M (despite what the docs say). 12664ce7165Smrg## - Using -M directly means running the compiler twice (even worse 12764ce7165Smrg## than renaming). 12864ce7165Smrg if test -z "$gccflag"; then 12964ce7165Smrg gccflag=-MD, 13064ce7165Smrg fi 13164ce7165Smrg "$@" -Wp,"$gccflag$tmpdepfile" 13264ce7165Smrg stat=$? 13364ce7165Smrg if test $stat -eq 0; then : 13464ce7165Smrg else 13564ce7165Smrg rm -f "$tmpdepfile" 13664ce7165Smrg exit $stat 13764ce7165Smrg fi 13864ce7165Smrg rm -f "$depfile" 13964ce7165Smrg echo "$object : \\" > "$depfile" 14064ce7165Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14164ce7165Smrg## The second -e expression handles DOS-style file names with drive letters. 14264ce7165Smrg sed -e 's/^[^:]*: / /' \ 14364ce7165Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 14464ce7165Smrg## This next piece of magic avoids the `deleted header file' problem. 14564ce7165Smrg## The problem is that when a header file which appears in a .P file 14664ce7165Smrg## is deleted, the dependency causes make to die (because there is 14764ce7165Smrg## typically no way to rebuild the header). We avoid this by adding 14864ce7165Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 14964ce7165Smrg## this for us directly. 15064ce7165Smrg tr ' ' ' 15164ce7165Smrg' < "$tmpdepfile" | 15264ce7165Smrg## Some versions of gcc put a space before the `:'. On the theory 15364ce7165Smrg## that the space means something, we add a space to the output as 15464ce7165Smrg## well. 15564ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 15664ce7165Smrg## correctly. Breaking it into two sed invocations is a workaround. 15764ce7165Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 15864ce7165Smrg rm -f "$tmpdepfile" 15964ce7165Smrg ;; 16064ce7165Smrg 16164ce7165Smrghp) 16264ce7165Smrg # This case exists only to let depend.m4 do its work. It works by 16364ce7165Smrg # looking at the text of this script. This case will never be run, 16464ce7165Smrg # since it is checked for above. 16564ce7165Smrg exit 1 16664ce7165Smrg ;; 16764ce7165Smrg 16864ce7165Smrgsgi) 16964ce7165Smrg if test "$libtool" = yes; then 17064ce7165Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17164ce7165Smrg else 17264ce7165Smrg "$@" -MDupdate "$tmpdepfile" 17364ce7165Smrg fi 17464ce7165Smrg stat=$? 17564ce7165Smrg if test $stat -eq 0; then : 17664ce7165Smrg else 17764ce7165Smrg rm -f "$tmpdepfile" 17864ce7165Smrg exit $stat 17964ce7165Smrg fi 18064ce7165Smrg rm -f "$depfile" 18164ce7165Smrg 18264ce7165Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 18364ce7165Smrg echo "$object : \\" > "$depfile" 18464ce7165Smrg 18564ce7165Smrg # Clip off the initial element (the dependent). Don't try to be 18664ce7165Smrg # clever and replace this with sed code, as IRIX sed won't handle 18764ce7165Smrg # lines with more than a fixed number of characters (4096 in 18864ce7165Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 18964ce7165Smrg # the IRIX cc adds comments like `#:fec' to the end of the 19064ce7165Smrg # dependency line. 19164ce7165Smrg tr ' ' ' 19264ce7165Smrg' < "$tmpdepfile" \ 19364ce7165Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 19464ce7165Smrg tr ' 19564ce7165Smrg' ' ' >> $depfile 19664ce7165Smrg echo >> $depfile 19764ce7165Smrg 19864ce7165Smrg # The second pass generates a dummy entry for each header file. 19964ce7165Smrg tr ' ' ' 20064ce7165Smrg' < "$tmpdepfile" \ 20164ce7165Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20264ce7165Smrg >> $depfile 20364ce7165Smrg else 20464ce7165Smrg # The sourcefile does not contain any dependencies, so just 20564ce7165Smrg # store a dummy comment line, to avoid errors with the Makefile 20664ce7165Smrg # "include basename.Plo" scheme. 20764ce7165Smrg echo "#dummy" > "$depfile" 20864ce7165Smrg fi 20964ce7165Smrg rm -f "$tmpdepfile" 21064ce7165Smrg ;; 21164ce7165Smrg 21264ce7165Smrgaix) 21364ce7165Smrg # The C for AIX Compiler uses -M and outputs the dependencies 21464ce7165Smrg # in a .u file. In older versions, this file always lives in the 21564ce7165Smrg # current directory. Also, the AIX compiler puts `$object:' at the 21664ce7165Smrg # start of each line; $object doesn't have directory information. 21764ce7165Smrg # Version 6 uses the directory in both cases. 21864ce7165Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 21964ce7165Smrg tmpdepfile="$stripped.u" 22064ce7165Smrg if test "$libtool" = yes; then 22164ce7165Smrg "$@" -Wc,-M 22264ce7165Smrg else 22364ce7165Smrg "$@" -M 22464ce7165Smrg fi 22564ce7165Smrg stat=$? 22664ce7165Smrg 22764ce7165Smrg if test -f "$tmpdepfile"; then : 22864ce7165Smrg else 22964ce7165Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 23064ce7165Smrg tmpdepfile="$stripped.u" 23164ce7165Smrg fi 23264ce7165Smrg 23364ce7165Smrg if test $stat -eq 0; then : 23464ce7165Smrg else 23564ce7165Smrg rm -f "$tmpdepfile" 23664ce7165Smrg exit $stat 23764ce7165Smrg fi 23864ce7165Smrg 23964ce7165Smrg if test -f "$tmpdepfile"; then 24064ce7165Smrg outname="$stripped.o" 24164ce7165Smrg # Each line is of the form `foo.o: dependent.h'. 24264ce7165Smrg # Do two passes, one to just change these to 24364ce7165Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 24464ce7165Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 24564ce7165Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 24664ce7165Smrg else 24764ce7165Smrg # The sourcefile does not contain any dependencies, so just 24864ce7165Smrg # store a dummy comment line, to avoid errors with the Makefile 24964ce7165Smrg # "include basename.Plo" scheme. 25064ce7165Smrg echo "#dummy" > "$depfile" 25164ce7165Smrg fi 25264ce7165Smrg rm -f "$tmpdepfile" 25364ce7165Smrg ;; 25464ce7165Smrg 25564ce7165Smrgicc) 25664ce7165Smrg # Intel's C compiler understands `-MD -MF file'. However on 25764ce7165Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 25864ce7165Smrg # ICC 7.0 will fill foo.d with something like 25964ce7165Smrg # foo.o: sub/foo.c 26064ce7165Smrg # foo.o: sub/foo.h 26164ce7165Smrg # which is wrong. We want: 26264ce7165Smrg # sub/foo.o: sub/foo.c 26364ce7165Smrg # sub/foo.o: sub/foo.h 26464ce7165Smrg # sub/foo.c: 26564ce7165Smrg # sub/foo.h: 26664ce7165Smrg # ICC 7.1 will output 26764ce7165Smrg # foo.o: sub/foo.c sub/foo.h 26864ce7165Smrg # and will wrap long lines using \ : 26964ce7165Smrg # foo.o: sub/foo.c ... \ 27064ce7165Smrg # sub/foo.h ... \ 27164ce7165Smrg # ... 27264ce7165Smrg 27364ce7165Smrg "$@" -MD -MF "$tmpdepfile" 27464ce7165Smrg stat=$? 27564ce7165Smrg if test $stat -eq 0; then : 27664ce7165Smrg else 27764ce7165Smrg rm -f "$tmpdepfile" 27864ce7165Smrg exit $stat 27964ce7165Smrg fi 28064ce7165Smrg rm -f "$depfile" 28164ce7165Smrg # Each line is of the form `foo.o: dependent.h', 28264ce7165Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 28364ce7165Smrg # Do two passes, one to just change these to 28464ce7165Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 28564ce7165Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 28664ce7165Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 28764ce7165Smrg # correctly. Breaking it into two sed invocations is a workaround. 28864ce7165Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 28964ce7165Smrg sed -e 's/$/ :/' >> "$depfile" 29064ce7165Smrg rm -f "$tmpdepfile" 29164ce7165Smrg ;; 29264ce7165Smrg 29364ce7165Smrghp2) 29464ce7165Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 29564ce7165Smrg # compilers, which have integrated preprocessors. The correct option 29664ce7165Smrg # to use with these is +Maked; it writes dependencies to a file named 29764ce7165Smrg # 'foo.d', which lands next to the object file, wherever that 29864ce7165Smrg # happens to be. 29964ce7165Smrg # Much of this is similar to the tru64 case; see comments there. 30064ce7165Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 30164ce7165Smrg test "x$dir" = "x$object" && dir= 30264ce7165Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 30364ce7165Smrg if test "$libtool" = yes; then 30464ce7165Smrg tmpdepfile1=$dir$base.d 30564ce7165Smrg tmpdepfile2=$dir.libs/$base.d 30664ce7165Smrg "$@" -Wc,+Maked 30764ce7165Smrg else 30864ce7165Smrg tmpdepfile1=$dir$base.d 30964ce7165Smrg tmpdepfile2=$dir$base.d 31064ce7165Smrg "$@" +Maked 31164ce7165Smrg fi 31264ce7165Smrg stat=$? 31364ce7165Smrg if test $stat -eq 0; then : 31464ce7165Smrg else 31564ce7165Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 31664ce7165Smrg exit $stat 31764ce7165Smrg fi 31864ce7165Smrg 31964ce7165Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 32064ce7165Smrg do 32164ce7165Smrg test -f "$tmpdepfile" && break 32264ce7165Smrg done 32364ce7165Smrg if test -f "$tmpdepfile"; then 32464ce7165Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 32564ce7165Smrg # Add `dependent.h:' lines. 32664ce7165Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 32764ce7165Smrg else 32864ce7165Smrg echo "#dummy" > "$depfile" 32964ce7165Smrg fi 33064ce7165Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 33164ce7165Smrg ;; 33264ce7165Smrg 33364ce7165Smrgtru64) 33464ce7165Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 33564ce7165Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 33664ce7165Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 33764ce7165Smrg # dependencies in `foo.d' instead, so we check for that too. 33864ce7165Smrg # Subdirectories are respected. 33964ce7165Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 34064ce7165Smrg test "x$dir" = "x$object" && dir= 34164ce7165Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 34264ce7165Smrg 34364ce7165Smrg if test "$libtool" = yes; then 34464ce7165Smrg # With Tru64 cc, shared objects can also be used to make a 34564ce7165Smrg # static library. This mechanism is used in libtool 1.4 series to 34664ce7165Smrg # handle both shared and static libraries in a single compilation. 34764ce7165Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 34864ce7165Smrg # 34964ce7165Smrg # With libtool 1.5 this exception was removed, and libtool now 35064ce7165Smrg # generates 2 separate objects for the 2 libraries. These two 35164ce7165Smrg # compilations output dependencies in $dir.libs/$base.o.d and 35264ce7165Smrg # in $dir$base.o.d. We have to check for both files, because 35364ce7165Smrg # one of the two compilations can be disabled. We should prefer 35464ce7165Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 35564ce7165Smrg # automatically cleaned when .libs/ is deleted, while ignoring 35664ce7165Smrg # the former would cause a distcleancheck panic. 35764ce7165Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 35864ce7165Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 35964ce7165Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 36064ce7165Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 36164ce7165Smrg "$@" -Wc,-MD 36264ce7165Smrg else 36364ce7165Smrg tmpdepfile1=$dir$base.o.d 36464ce7165Smrg tmpdepfile2=$dir$base.d 36564ce7165Smrg tmpdepfile3=$dir$base.d 36664ce7165Smrg tmpdepfile4=$dir$base.d 36764ce7165Smrg "$@" -MD 36864ce7165Smrg fi 36964ce7165Smrg 37064ce7165Smrg stat=$? 37164ce7165Smrg if test $stat -eq 0; then : 37264ce7165Smrg else 37364ce7165Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 37464ce7165Smrg exit $stat 37564ce7165Smrg fi 37664ce7165Smrg 37764ce7165Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 37864ce7165Smrg do 37964ce7165Smrg test -f "$tmpdepfile" && break 38064ce7165Smrg done 38164ce7165Smrg if test -f "$tmpdepfile"; then 38264ce7165Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 38364ce7165Smrg # That's a tab and a space in the []. 38464ce7165Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 38564ce7165Smrg else 38664ce7165Smrg echo "#dummy" > "$depfile" 38764ce7165Smrg fi 38864ce7165Smrg rm -f "$tmpdepfile" 38964ce7165Smrg ;; 39064ce7165Smrg 39164ce7165Smrg#nosideeffect) 39264ce7165Smrg # This comment above is used by automake to tell side-effect 39364ce7165Smrg # dependency tracking mechanisms from slower ones. 39464ce7165Smrg 39564ce7165Smrgdashmstdout) 39664ce7165Smrg # Important note: in order to support this mode, a compiler *must* 39764ce7165Smrg # always write the preprocessed file to stdout, regardless of -o. 39864ce7165Smrg "$@" || exit $? 39964ce7165Smrg 40064ce7165Smrg # Remove the call to Libtool. 40164ce7165Smrg if test "$libtool" = yes; then 40264ce7165Smrg while test $1 != '--mode=compile'; do 40364ce7165Smrg shift 40464ce7165Smrg done 40564ce7165Smrg shift 40664ce7165Smrg fi 40764ce7165Smrg 40864ce7165Smrg # Remove `-o $object'. 40964ce7165Smrg IFS=" " 41064ce7165Smrg for arg 41164ce7165Smrg do 41264ce7165Smrg case $arg in 41364ce7165Smrg -o) 41464ce7165Smrg shift 41564ce7165Smrg ;; 41664ce7165Smrg $object) 41764ce7165Smrg shift 41864ce7165Smrg ;; 41964ce7165Smrg *) 42064ce7165Smrg set fnord "$@" "$arg" 42164ce7165Smrg shift # fnord 42264ce7165Smrg shift # $arg 42364ce7165Smrg ;; 42464ce7165Smrg esac 42564ce7165Smrg done 42664ce7165Smrg 42764ce7165Smrg test -z "$dashmflag" && dashmflag=-M 42864ce7165Smrg # Require at least two characters before searching for `:' 42964ce7165Smrg # in the target name. This is to cope with DOS-style filenames: 43064ce7165Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 43164ce7165Smrg "$@" $dashmflag | 43264ce7165Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 43364ce7165Smrg rm -f "$depfile" 43464ce7165Smrg cat < "$tmpdepfile" > "$depfile" 43564ce7165Smrg tr ' ' ' 43664ce7165Smrg' < "$tmpdepfile" | \ 43764ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 43864ce7165Smrg## correctly. Breaking it into two sed invocations is a workaround. 43964ce7165Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 44064ce7165Smrg rm -f "$tmpdepfile" 44164ce7165Smrg ;; 44264ce7165Smrg 44364ce7165SmrgdashXmstdout) 44464ce7165Smrg # This case only exists to satisfy depend.m4. It is never actually 44564ce7165Smrg # run, as this mode is specially recognized in the preamble. 44664ce7165Smrg exit 1 44764ce7165Smrg ;; 44864ce7165Smrg 44964ce7165Smrgmakedepend) 45064ce7165Smrg "$@" || exit $? 45164ce7165Smrg # Remove any Libtool call 45264ce7165Smrg if test "$libtool" = yes; then 45364ce7165Smrg while test $1 != '--mode=compile'; do 45464ce7165Smrg shift 45564ce7165Smrg done 45664ce7165Smrg shift 45764ce7165Smrg fi 45864ce7165Smrg # X makedepend 45964ce7165Smrg shift 46064ce7165Smrg cleared=no 46164ce7165Smrg for arg in "$@"; do 46264ce7165Smrg case $cleared in 46364ce7165Smrg no) 46464ce7165Smrg set ""; shift 46564ce7165Smrg cleared=yes ;; 46664ce7165Smrg esac 46764ce7165Smrg case "$arg" in 46864ce7165Smrg -D*|-I*) 46964ce7165Smrg set fnord "$@" "$arg"; shift ;; 47064ce7165Smrg # Strip any option that makedepend may not understand. Remove 47164ce7165Smrg # the object too, otherwise makedepend will parse it as a source file. 47264ce7165Smrg -*|$object) 47364ce7165Smrg ;; 47464ce7165Smrg *) 47564ce7165Smrg set fnord "$@" "$arg"; shift ;; 47664ce7165Smrg esac 47764ce7165Smrg done 47864ce7165Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 47964ce7165Smrg touch "$tmpdepfile" 48064ce7165Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 48164ce7165Smrg rm -f "$depfile" 48264ce7165Smrg cat < "$tmpdepfile" > "$depfile" 48364ce7165Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 48464ce7165Smrg' | \ 48564ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 48664ce7165Smrg## correctly. Breaking it into two sed invocations is a workaround. 48764ce7165Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 48864ce7165Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 48964ce7165Smrg ;; 49064ce7165Smrg 49164ce7165Smrgcpp) 49264ce7165Smrg # Important note: in order to support this mode, a compiler *must* 49364ce7165Smrg # always write the preprocessed file to stdout. 49464ce7165Smrg "$@" || exit $? 49564ce7165Smrg 49664ce7165Smrg # Remove the call to Libtool. 49764ce7165Smrg if test "$libtool" = yes; then 49864ce7165Smrg while test $1 != '--mode=compile'; do 49964ce7165Smrg shift 50064ce7165Smrg done 50164ce7165Smrg shift 50264ce7165Smrg fi 50364ce7165Smrg 50464ce7165Smrg # Remove `-o $object'. 50564ce7165Smrg IFS=" " 50664ce7165Smrg for arg 50764ce7165Smrg do 50864ce7165Smrg case $arg in 50964ce7165Smrg -o) 51064ce7165Smrg shift 51164ce7165Smrg ;; 51264ce7165Smrg $object) 51364ce7165Smrg shift 51464ce7165Smrg ;; 51564ce7165Smrg *) 51664ce7165Smrg set fnord "$@" "$arg" 51764ce7165Smrg shift # fnord 51864ce7165Smrg shift # $arg 51964ce7165Smrg ;; 52064ce7165Smrg esac 52164ce7165Smrg done 52264ce7165Smrg 52364ce7165Smrg "$@" -E | 52464ce7165Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 52564ce7165Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 52664ce7165Smrg sed '$ s: \\$::' > "$tmpdepfile" 52764ce7165Smrg rm -f "$depfile" 52864ce7165Smrg echo "$object : \\" > "$depfile" 52964ce7165Smrg cat < "$tmpdepfile" >> "$depfile" 53064ce7165Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 53164ce7165Smrg rm -f "$tmpdepfile" 53264ce7165Smrg ;; 53364ce7165Smrg 53464ce7165Smrgmsvisualcpp) 53564ce7165Smrg # Important note: in order to support this mode, a compiler *must* 53664ce7165Smrg # always write the preprocessed file to stdout, regardless of -o, 53764ce7165Smrg # because we must use -o when running libtool. 53864ce7165Smrg "$@" || exit $? 53964ce7165Smrg IFS=" " 54064ce7165Smrg for arg 54164ce7165Smrg do 54264ce7165Smrg case "$arg" in 54364ce7165Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 54464ce7165Smrg set fnord "$@" 54564ce7165Smrg shift 54664ce7165Smrg shift 54764ce7165Smrg ;; 54864ce7165Smrg *) 54964ce7165Smrg set fnord "$@" "$arg" 55064ce7165Smrg shift 55164ce7165Smrg shift 55264ce7165Smrg ;; 55364ce7165Smrg esac 55464ce7165Smrg done 55564ce7165Smrg "$@" -E | 55664ce7165Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 55764ce7165Smrg rm -f "$depfile" 55864ce7165Smrg echo "$object : \\" > "$depfile" 55964ce7165Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 56064ce7165Smrg echo " " >> "$depfile" 56164ce7165Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 56264ce7165Smrg rm -f "$tmpdepfile" 56364ce7165Smrg ;; 56464ce7165Smrg 56564ce7165Smrgnone) 56664ce7165Smrg exec "$@" 56764ce7165Smrg ;; 56864ce7165Smrg 56964ce7165Smrg*) 57064ce7165Smrg echo "Unknown depmode $depmode" 1>&2 57164ce7165Smrg exit 1 57264ce7165Smrg ;; 57364ce7165Smrgesac 57464ce7165Smrg 57564ce7165Smrgexit 0 57664ce7165Smrg 57764ce7165Smrg# Local Variables: 57864ce7165Smrg# mode: shell-script 57964ce7165Smrg# sh-indentation: 2 58064ce7165Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 58164ce7165Smrg# time-stamp-start: "scriptversion=" 58264ce7165Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 58364ce7165Smrg# time-stamp-end: "$" 58464ce7165Smrg# End: 585