depcomp revision 72b4363a
172b4363aSmrg#! /bin/sh 272b4363aSmrg# depcomp - compile a program generating dependencies as side-effects 372b4363aSmrg 472b4363aSmrgscriptversion=2006-10-15.18 572b4363aSmrg 672b4363aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 772b4363aSmrg# Foundation, Inc. 872b4363aSmrg 972b4363aSmrg# This program is free software; you can redistribute it and/or modify 1072b4363aSmrg# it under the terms of the GNU General Public License as published by 1172b4363aSmrg# the Free Software Foundation; either version 2, or (at your option) 1272b4363aSmrg# any later version. 1372b4363aSmrg 1472b4363aSmrg# This program is distributed in the hope that it will be useful, 1572b4363aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1672b4363aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1772b4363aSmrg# GNU General Public License for more details. 1872b4363aSmrg 1972b4363aSmrg# You should have received a copy of the GNU General Public License 2072b4363aSmrg# along with this program; if not, write to the Free Software 2172b4363aSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2272b4363aSmrg# 02110-1301, USA. 2372b4363aSmrg 2472b4363aSmrg# As a special exception to the GNU General Public License, if you 2572b4363aSmrg# distribute this file as part of a program that contains a 2672b4363aSmrg# configuration script generated by Autoconf, you may include it under 2772b4363aSmrg# the same distribution terms that you use for the rest of that program. 2872b4363aSmrg 2972b4363aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 3072b4363aSmrg 3172b4363aSmrgcase $1 in 3272b4363aSmrg '') 3372b4363aSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3472b4363aSmrg exit 1; 3572b4363aSmrg ;; 3672b4363aSmrg -h | --h*) 3772b4363aSmrg cat <<\EOF 3872b4363aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3972b4363aSmrg 4072b4363aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 4172b4363aSmrgas side-effects. 4272b4363aSmrg 4372b4363aSmrgEnvironment variables: 4472b4363aSmrg depmode Dependency tracking mode. 4572b4363aSmrg source Source file read by `PROGRAMS ARGS'. 4672b4363aSmrg object Object file output by `PROGRAMS ARGS'. 4772b4363aSmrg DEPDIR directory where to store dependencies. 4872b4363aSmrg depfile Dependency file to output. 4972b4363aSmrg tmpdepfile Temporary file to use when outputing dependencies. 5072b4363aSmrg libtool Whether libtool is used (yes/no). 5172b4363aSmrg 5272b4363aSmrgReport bugs to <bug-automake@gnu.org>. 5372b4363aSmrgEOF 5472b4363aSmrg exit $? 5572b4363aSmrg ;; 5672b4363aSmrg -v | --v*) 5772b4363aSmrg echo "depcomp $scriptversion" 5872b4363aSmrg exit $? 5972b4363aSmrg ;; 6072b4363aSmrgesac 6172b4363aSmrg 6272b4363aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6372b4363aSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6472b4363aSmrg exit 1 6572b4363aSmrgfi 6672b4363aSmrg 6772b4363aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6872b4363aSmrgdepfile=${depfile-`echo "$object" | 6972b4363aSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 7072b4363aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 7172b4363aSmrg 7272b4363aSmrgrm -f "$tmpdepfile" 7372b4363aSmrg 7472b4363aSmrg# Some modes work just like other modes, but use different flags. We 7572b4363aSmrg# parameterize here, but still list the modes in the big case below, 7672b4363aSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7772b4363aSmrg# here, because this file can only contain one case statement. 7872b4363aSmrgif test "$depmode" = hp; then 7972b4363aSmrg # HP compiler uses -M and no extra arg. 8072b4363aSmrg gccflag=-M 8172b4363aSmrg depmode=gcc 8272b4363aSmrgfi 8372b4363aSmrg 8472b4363aSmrgif test "$depmode" = dashXmstdout; then 8572b4363aSmrg # This is just like dashmstdout with a different argument. 8672b4363aSmrg dashmflag=-xM 8772b4363aSmrg depmode=dashmstdout 8872b4363aSmrgfi 8972b4363aSmrg 9072b4363aSmrgcase "$depmode" in 9172b4363aSmrggcc3) 9272b4363aSmrg## gcc 3 implements dependency tracking that does exactly what 9372b4363aSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 9472b4363aSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 9572b4363aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 9672b4363aSmrg## the command line argument order; so add the flags where they 9772b4363aSmrg## appear in depend2.am. Note that the slowdown incurred here 9872b4363aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 9972b4363aSmrg for arg 10072b4363aSmrg do 10172b4363aSmrg case $arg in 10272b4363aSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 10372b4363aSmrg *) set fnord "$@" "$arg" ;; 10472b4363aSmrg esac 10572b4363aSmrg shift # fnord 10672b4363aSmrg shift # $arg 10772b4363aSmrg done 10872b4363aSmrg "$@" 10972b4363aSmrg stat=$? 11072b4363aSmrg if test $stat -eq 0; then : 11172b4363aSmrg else 11272b4363aSmrg rm -f "$tmpdepfile" 11372b4363aSmrg exit $stat 11472b4363aSmrg fi 11572b4363aSmrg mv "$tmpdepfile" "$depfile" 11672b4363aSmrg ;; 11772b4363aSmrg 11872b4363aSmrggcc) 11972b4363aSmrg## There are various ways to get dependency output from gcc. Here's 12072b4363aSmrg## why we pick this rather obscure method: 12172b4363aSmrg## - Don't want to use -MD because we'd like the dependencies to end 12272b4363aSmrg## up in a subdir. Having to rename by hand is ugly. 12372b4363aSmrg## (We might end up doing this anyway to support other compilers.) 12472b4363aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 12572b4363aSmrg## -MM, not -M (despite what the docs say). 12672b4363aSmrg## - Using -M directly means running the compiler twice (even worse 12772b4363aSmrg## than renaming). 12872b4363aSmrg if test -z "$gccflag"; then 12972b4363aSmrg gccflag=-MD, 13072b4363aSmrg fi 13172b4363aSmrg "$@" -Wp,"$gccflag$tmpdepfile" 13272b4363aSmrg stat=$? 13372b4363aSmrg if test $stat -eq 0; then : 13472b4363aSmrg else 13572b4363aSmrg rm -f "$tmpdepfile" 13672b4363aSmrg exit $stat 13772b4363aSmrg fi 13872b4363aSmrg rm -f "$depfile" 13972b4363aSmrg echo "$object : \\" > "$depfile" 14072b4363aSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14172b4363aSmrg## The second -e expression handles DOS-style file names with drive letters. 14272b4363aSmrg sed -e 's/^[^:]*: / /' \ 14372b4363aSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 14472b4363aSmrg## This next piece of magic avoids the `deleted header file' problem. 14572b4363aSmrg## The problem is that when a header file which appears in a .P file 14672b4363aSmrg## is deleted, the dependency causes make to die (because there is 14772b4363aSmrg## typically no way to rebuild the header). We avoid this by adding 14872b4363aSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 14972b4363aSmrg## this for us directly. 15072b4363aSmrg tr ' ' ' 15172b4363aSmrg' < "$tmpdepfile" | 15272b4363aSmrg## Some versions of gcc put a space before the `:'. On the theory 15372b4363aSmrg## that the space means something, we add a space to the output as 15472b4363aSmrg## well. 15572b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 15672b4363aSmrg## correctly. Breaking it into two sed invocations is a workaround. 15772b4363aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 15872b4363aSmrg rm -f "$tmpdepfile" 15972b4363aSmrg ;; 16072b4363aSmrg 16172b4363aSmrghp) 16272b4363aSmrg # This case exists only to let depend.m4 do its work. It works by 16372b4363aSmrg # looking at the text of this script. This case will never be run, 16472b4363aSmrg # since it is checked for above. 16572b4363aSmrg exit 1 16672b4363aSmrg ;; 16772b4363aSmrg 16872b4363aSmrgsgi) 16972b4363aSmrg if test "$libtool" = yes; then 17072b4363aSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17172b4363aSmrg else 17272b4363aSmrg "$@" -MDupdate "$tmpdepfile" 17372b4363aSmrg fi 17472b4363aSmrg stat=$? 17572b4363aSmrg if test $stat -eq 0; then : 17672b4363aSmrg else 17772b4363aSmrg rm -f "$tmpdepfile" 17872b4363aSmrg exit $stat 17972b4363aSmrg fi 18072b4363aSmrg rm -f "$depfile" 18172b4363aSmrg 18272b4363aSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 18372b4363aSmrg echo "$object : \\" > "$depfile" 18472b4363aSmrg 18572b4363aSmrg # Clip off the initial element (the dependent). Don't try to be 18672b4363aSmrg # clever and replace this with sed code, as IRIX sed won't handle 18772b4363aSmrg # lines with more than a fixed number of characters (4096 in 18872b4363aSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 18972b4363aSmrg # the IRIX cc adds comments like `#:fec' to the end of the 19072b4363aSmrg # dependency line. 19172b4363aSmrg tr ' ' ' 19272b4363aSmrg' < "$tmpdepfile" \ 19372b4363aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 19472b4363aSmrg tr ' 19572b4363aSmrg' ' ' >> $depfile 19672b4363aSmrg echo >> $depfile 19772b4363aSmrg 19872b4363aSmrg # The second pass generates a dummy entry for each header file. 19972b4363aSmrg tr ' ' ' 20072b4363aSmrg' < "$tmpdepfile" \ 20172b4363aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20272b4363aSmrg >> $depfile 20372b4363aSmrg else 20472b4363aSmrg # The sourcefile does not contain any dependencies, so just 20572b4363aSmrg # store a dummy comment line, to avoid errors with the Makefile 20672b4363aSmrg # "include basename.Plo" scheme. 20772b4363aSmrg echo "#dummy" > "$depfile" 20872b4363aSmrg fi 20972b4363aSmrg rm -f "$tmpdepfile" 21072b4363aSmrg ;; 21172b4363aSmrg 21272b4363aSmrgaix) 21372b4363aSmrg # The C for AIX Compiler uses -M and outputs the dependencies 21472b4363aSmrg # in a .u file. In older versions, this file always lives in the 21572b4363aSmrg # current directory. Also, the AIX compiler puts `$object:' at the 21672b4363aSmrg # start of each line; $object doesn't have directory information. 21772b4363aSmrg # Version 6 uses the directory in both cases. 21872b4363aSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 21972b4363aSmrg tmpdepfile="$stripped.u" 22072b4363aSmrg if test "$libtool" = yes; then 22172b4363aSmrg "$@" -Wc,-M 22272b4363aSmrg else 22372b4363aSmrg "$@" -M 22472b4363aSmrg fi 22572b4363aSmrg stat=$? 22672b4363aSmrg 22772b4363aSmrg if test -f "$tmpdepfile"; then : 22872b4363aSmrg else 22972b4363aSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 23072b4363aSmrg tmpdepfile="$stripped.u" 23172b4363aSmrg fi 23272b4363aSmrg 23372b4363aSmrg if test $stat -eq 0; then : 23472b4363aSmrg else 23572b4363aSmrg rm -f "$tmpdepfile" 23672b4363aSmrg exit $stat 23772b4363aSmrg fi 23872b4363aSmrg 23972b4363aSmrg if test -f "$tmpdepfile"; then 24072b4363aSmrg outname="$stripped.o" 24172b4363aSmrg # Each line is of the form `foo.o: dependent.h'. 24272b4363aSmrg # Do two passes, one to just change these to 24372b4363aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 24472b4363aSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 24572b4363aSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 24672b4363aSmrg else 24772b4363aSmrg # The sourcefile does not contain any dependencies, so just 24872b4363aSmrg # store a dummy comment line, to avoid errors with the Makefile 24972b4363aSmrg # "include basename.Plo" scheme. 25072b4363aSmrg echo "#dummy" > "$depfile" 25172b4363aSmrg fi 25272b4363aSmrg rm -f "$tmpdepfile" 25372b4363aSmrg ;; 25472b4363aSmrg 25572b4363aSmrgicc) 25672b4363aSmrg # Intel's C compiler understands `-MD -MF file'. However on 25772b4363aSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 25872b4363aSmrg # ICC 7.0 will fill foo.d with something like 25972b4363aSmrg # foo.o: sub/foo.c 26072b4363aSmrg # foo.o: sub/foo.h 26172b4363aSmrg # which is wrong. We want: 26272b4363aSmrg # sub/foo.o: sub/foo.c 26372b4363aSmrg # sub/foo.o: sub/foo.h 26472b4363aSmrg # sub/foo.c: 26572b4363aSmrg # sub/foo.h: 26672b4363aSmrg # ICC 7.1 will output 26772b4363aSmrg # foo.o: sub/foo.c sub/foo.h 26872b4363aSmrg # and will wrap long lines using \ : 26972b4363aSmrg # foo.o: sub/foo.c ... \ 27072b4363aSmrg # sub/foo.h ... \ 27172b4363aSmrg # ... 27272b4363aSmrg 27372b4363aSmrg "$@" -MD -MF "$tmpdepfile" 27472b4363aSmrg stat=$? 27572b4363aSmrg if test $stat -eq 0; then : 27672b4363aSmrg else 27772b4363aSmrg rm -f "$tmpdepfile" 27872b4363aSmrg exit $stat 27972b4363aSmrg fi 28072b4363aSmrg rm -f "$depfile" 28172b4363aSmrg # Each line is of the form `foo.o: dependent.h', 28272b4363aSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 28372b4363aSmrg # Do two passes, one to just change these to 28472b4363aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 28572b4363aSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 28672b4363aSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 28772b4363aSmrg # correctly. Breaking it into two sed invocations is a workaround. 28872b4363aSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 28972b4363aSmrg sed -e 's/$/ :/' >> "$depfile" 29072b4363aSmrg rm -f "$tmpdepfile" 29172b4363aSmrg ;; 29272b4363aSmrg 29372b4363aSmrghp2) 29472b4363aSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 29572b4363aSmrg # compilers, which have integrated preprocessors. The correct option 29672b4363aSmrg # to use with these is +Maked; it writes dependencies to a file named 29772b4363aSmrg # 'foo.d', which lands next to the object file, wherever that 29872b4363aSmrg # happens to be. 29972b4363aSmrg # Much of this is similar to the tru64 case; see comments there. 30072b4363aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 30172b4363aSmrg test "x$dir" = "x$object" && dir= 30272b4363aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 30372b4363aSmrg if test "$libtool" = yes; then 30472b4363aSmrg tmpdepfile1=$dir$base.d 30572b4363aSmrg tmpdepfile2=$dir.libs/$base.d 30672b4363aSmrg "$@" -Wc,+Maked 30772b4363aSmrg else 30872b4363aSmrg tmpdepfile1=$dir$base.d 30972b4363aSmrg tmpdepfile2=$dir$base.d 31072b4363aSmrg "$@" +Maked 31172b4363aSmrg fi 31272b4363aSmrg stat=$? 31372b4363aSmrg if test $stat -eq 0; then : 31472b4363aSmrg else 31572b4363aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 31672b4363aSmrg exit $stat 31772b4363aSmrg fi 31872b4363aSmrg 31972b4363aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 32072b4363aSmrg do 32172b4363aSmrg test -f "$tmpdepfile" && break 32272b4363aSmrg done 32372b4363aSmrg if test -f "$tmpdepfile"; then 32472b4363aSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 32572b4363aSmrg # Add `dependent.h:' lines. 32672b4363aSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 32772b4363aSmrg else 32872b4363aSmrg echo "#dummy" > "$depfile" 32972b4363aSmrg fi 33072b4363aSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 33172b4363aSmrg ;; 33272b4363aSmrg 33372b4363aSmrgtru64) 33472b4363aSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 33572b4363aSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 33672b4363aSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 33772b4363aSmrg # dependencies in `foo.d' instead, so we check for that too. 33872b4363aSmrg # Subdirectories are respected. 33972b4363aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 34072b4363aSmrg test "x$dir" = "x$object" && dir= 34172b4363aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 34272b4363aSmrg 34372b4363aSmrg if test "$libtool" = yes; then 34472b4363aSmrg # With Tru64 cc, shared objects can also be used to make a 34572b4363aSmrg # static library. This mechanism is used in libtool 1.4 series to 34672b4363aSmrg # handle both shared and static libraries in a single compilation. 34772b4363aSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 34872b4363aSmrg # 34972b4363aSmrg # With libtool 1.5 this exception was removed, and libtool now 35072b4363aSmrg # generates 2 separate objects for the 2 libraries. These two 35172b4363aSmrg # compilations output dependencies in $dir.libs/$base.o.d and 35272b4363aSmrg # in $dir$base.o.d. We have to check for both files, because 35372b4363aSmrg # one of the two compilations can be disabled. We should prefer 35472b4363aSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 35572b4363aSmrg # automatically cleaned when .libs/ is deleted, while ignoring 35672b4363aSmrg # the former would cause a distcleancheck panic. 35772b4363aSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 35872b4363aSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 35972b4363aSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 36072b4363aSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 36172b4363aSmrg "$@" -Wc,-MD 36272b4363aSmrg else 36372b4363aSmrg tmpdepfile1=$dir$base.o.d 36472b4363aSmrg tmpdepfile2=$dir$base.d 36572b4363aSmrg tmpdepfile3=$dir$base.d 36672b4363aSmrg tmpdepfile4=$dir$base.d 36772b4363aSmrg "$@" -MD 36872b4363aSmrg fi 36972b4363aSmrg 37072b4363aSmrg stat=$? 37172b4363aSmrg if test $stat -eq 0; then : 37272b4363aSmrg else 37372b4363aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 37472b4363aSmrg exit $stat 37572b4363aSmrg fi 37672b4363aSmrg 37772b4363aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 37872b4363aSmrg do 37972b4363aSmrg test -f "$tmpdepfile" && break 38072b4363aSmrg done 38172b4363aSmrg if test -f "$tmpdepfile"; then 38272b4363aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 38372b4363aSmrg # That's a tab and a space in the []. 38472b4363aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 38572b4363aSmrg else 38672b4363aSmrg echo "#dummy" > "$depfile" 38772b4363aSmrg fi 38872b4363aSmrg rm -f "$tmpdepfile" 38972b4363aSmrg ;; 39072b4363aSmrg 39172b4363aSmrg#nosideeffect) 39272b4363aSmrg # This comment above is used by automake to tell side-effect 39372b4363aSmrg # dependency tracking mechanisms from slower ones. 39472b4363aSmrg 39572b4363aSmrgdashmstdout) 39672b4363aSmrg # Important note: in order to support this mode, a compiler *must* 39772b4363aSmrg # always write the preprocessed file to stdout, regardless of -o. 39872b4363aSmrg "$@" || exit $? 39972b4363aSmrg 40072b4363aSmrg # Remove the call to Libtool. 40172b4363aSmrg if test "$libtool" = yes; then 40272b4363aSmrg while test $1 != '--mode=compile'; do 40372b4363aSmrg shift 40472b4363aSmrg done 40572b4363aSmrg shift 40672b4363aSmrg fi 40772b4363aSmrg 40872b4363aSmrg # Remove `-o $object'. 40972b4363aSmrg IFS=" " 41072b4363aSmrg for arg 41172b4363aSmrg do 41272b4363aSmrg case $arg in 41372b4363aSmrg -o) 41472b4363aSmrg shift 41572b4363aSmrg ;; 41672b4363aSmrg $object) 41772b4363aSmrg shift 41872b4363aSmrg ;; 41972b4363aSmrg *) 42072b4363aSmrg set fnord "$@" "$arg" 42172b4363aSmrg shift # fnord 42272b4363aSmrg shift # $arg 42372b4363aSmrg ;; 42472b4363aSmrg esac 42572b4363aSmrg done 42672b4363aSmrg 42772b4363aSmrg test -z "$dashmflag" && dashmflag=-M 42872b4363aSmrg # Require at least two characters before searching for `:' 42972b4363aSmrg # in the target name. This is to cope with DOS-style filenames: 43072b4363aSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 43172b4363aSmrg "$@" $dashmflag | 43272b4363aSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 43372b4363aSmrg rm -f "$depfile" 43472b4363aSmrg cat < "$tmpdepfile" > "$depfile" 43572b4363aSmrg tr ' ' ' 43672b4363aSmrg' < "$tmpdepfile" | \ 43772b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 43872b4363aSmrg## correctly. Breaking it into two sed invocations is a workaround. 43972b4363aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 44072b4363aSmrg rm -f "$tmpdepfile" 44172b4363aSmrg ;; 44272b4363aSmrg 44372b4363aSmrgdashXmstdout) 44472b4363aSmrg # This case only exists to satisfy depend.m4. It is never actually 44572b4363aSmrg # run, as this mode is specially recognized in the preamble. 44672b4363aSmrg exit 1 44772b4363aSmrg ;; 44872b4363aSmrg 44972b4363aSmrgmakedepend) 45072b4363aSmrg "$@" || exit $? 45172b4363aSmrg # Remove any Libtool call 45272b4363aSmrg if test "$libtool" = yes; then 45372b4363aSmrg while test $1 != '--mode=compile'; do 45472b4363aSmrg shift 45572b4363aSmrg done 45672b4363aSmrg shift 45772b4363aSmrg fi 45872b4363aSmrg # X makedepend 45972b4363aSmrg shift 46072b4363aSmrg cleared=no 46172b4363aSmrg for arg in "$@"; do 46272b4363aSmrg case $cleared in 46372b4363aSmrg no) 46472b4363aSmrg set ""; shift 46572b4363aSmrg cleared=yes ;; 46672b4363aSmrg esac 46772b4363aSmrg case "$arg" in 46872b4363aSmrg -D*|-I*) 46972b4363aSmrg set fnord "$@" "$arg"; shift ;; 47072b4363aSmrg # Strip any option that makedepend may not understand. Remove 47172b4363aSmrg # the object too, otherwise makedepend will parse it as a source file. 47272b4363aSmrg -*|$object) 47372b4363aSmrg ;; 47472b4363aSmrg *) 47572b4363aSmrg set fnord "$@" "$arg"; shift ;; 47672b4363aSmrg esac 47772b4363aSmrg done 47872b4363aSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 47972b4363aSmrg touch "$tmpdepfile" 48072b4363aSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 48172b4363aSmrg rm -f "$depfile" 48272b4363aSmrg cat < "$tmpdepfile" > "$depfile" 48372b4363aSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 48472b4363aSmrg' | \ 48572b4363aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 48672b4363aSmrg## correctly. Breaking it into two sed invocations is a workaround. 48772b4363aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 48872b4363aSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 48972b4363aSmrg ;; 49072b4363aSmrg 49172b4363aSmrgcpp) 49272b4363aSmrg # Important note: in order to support this mode, a compiler *must* 49372b4363aSmrg # always write the preprocessed file to stdout. 49472b4363aSmrg "$@" || exit $? 49572b4363aSmrg 49672b4363aSmrg # Remove the call to Libtool. 49772b4363aSmrg if test "$libtool" = yes; then 49872b4363aSmrg while test $1 != '--mode=compile'; do 49972b4363aSmrg shift 50072b4363aSmrg done 50172b4363aSmrg shift 50272b4363aSmrg fi 50372b4363aSmrg 50472b4363aSmrg # Remove `-o $object'. 50572b4363aSmrg IFS=" " 50672b4363aSmrg for arg 50772b4363aSmrg do 50872b4363aSmrg case $arg in 50972b4363aSmrg -o) 51072b4363aSmrg shift 51172b4363aSmrg ;; 51272b4363aSmrg $object) 51372b4363aSmrg shift 51472b4363aSmrg ;; 51572b4363aSmrg *) 51672b4363aSmrg set fnord "$@" "$arg" 51772b4363aSmrg shift # fnord 51872b4363aSmrg shift # $arg 51972b4363aSmrg ;; 52072b4363aSmrg esac 52172b4363aSmrg done 52272b4363aSmrg 52372b4363aSmrg "$@" -E | 52472b4363aSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 52572b4363aSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 52672b4363aSmrg sed '$ s: \\$::' > "$tmpdepfile" 52772b4363aSmrg rm -f "$depfile" 52872b4363aSmrg echo "$object : \\" > "$depfile" 52972b4363aSmrg cat < "$tmpdepfile" >> "$depfile" 53072b4363aSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 53172b4363aSmrg rm -f "$tmpdepfile" 53272b4363aSmrg ;; 53372b4363aSmrg 53472b4363aSmrgmsvisualcpp) 53572b4363aSmrg # Important note: in order to support this mode, a compiler *must* 53672b4363aSmrg # always write the preprocessed file to stdout, regardless of -o, 53772b4363aSmrg # because we must use -o when running libtool. 53872b4363aSmrg "$@" || exit $? 53972b4363aSmrg IFS=" " 54072b4363aSmrg for arg 54172b4363aSmrg do 54272b4363aSmrg case "$arg" in 54372b4363aSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 54472b4363aSmrg set fnord "$@" 54572b4363aSmrg shift 54672b4363aSmrg shift 54772b4363aSmrg ;; 54872b4363aSmrg *) 54972b4363aSmrg set fnord "$@" "$arg" 55072b4363aSmrg shift 55172b4363aSmrg shift 55272b4363aSmrg ;; 55372b4363aSmrg esac 55472b4363aSmrg done 55572b4363aSmrg "$@" -E | 55672b4363aSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 55772b4363aSmrg rm -f "$depfile" 55872b4363aSmrg echo "$object : \\" > "$depfile" 55972b4363aSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 56072b4363aSmrg echo " " >> "$depfile" 56172b4363aSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 56272b4363aSmrg rm -f "$tmpdepfile" 56372b4363aSmrg ;; 56472b4363aSmrg 56572b4363aSmrgnone) 56672b4363aSmrg exec "$@" 56772b4363aSmrg ;; 56872b4363aSmrg 56972b4363aSmrg*) 57072b4363aSmrg echo "Unknown depmode $depmode" 1>&2 57172b4363aSmrg exit 1 57272b4363aSmrg ;; 57372b4363aSmrgesac 57472b4363aSmrg 57572b4363aSmrgexit 0 57672b4363aSmrg 57772b4363aSmrg# Local Variables: 57872b4363aSmrg# mode: shell-script 57972b4363aSmrg# sh-indentation: 2 58072b4363aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 58172b4363aSmrg# time-stamp-start: "scriptversion=" 58272b4363aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 58372b4363aSmrg# time-stamp-end: "$" 58472b4363aSmrg# End: 585