171d7fec4Smrg#! /bin/sh 271d7fec4Smrg# depcomp - compile a program generating dependencies as side-effects 371d7fec4Smrg 471d7fec4Smrgscriptversion=2005-07-09.11 571d7fec4Smrg 671d7fec4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 771d7fec4Smrg 871d7fec4Smrg# This program is free software; you can redistribute it and/or modify 971d7fec4Smrg# it under the terms of the GNU General Public License as published by 1071d7fec4Smrg# the Free Software Foundation; either version 2, or (at your option) 1171d7fec4Smrg# any later version. 1271d7fec4Smrg 1371d7fec4Smrg# This program is distributed in the hope that it will be useful, 1471d7fec4Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1571d7fec4Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1671d7fec4Smrg# GNU General Public License for more details. 1771d7fec4Smrg 1871d7fec4Smrg# You should have received a copy of the GNU General Public License 1971d7fec4Smrg# along with this program; if not, write to the Free Software 2071d7fec4Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2171d7fec4Smrg# 02110-1301, USA. 2271d7fec4Smrg 2371d7fec4Smrg# As a special exception to the GNU General Public License, if you 2471d7fec4Smrg# distribute this file as part of a program that contains a 2571d7fec4Smrg# configuration script generated by Autoconf, you may include it under 2671d7fec4Smrg# the same distribution terms that you use for the rest of that program. 2771d7fec4Smrg 2871d7fec4Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2971d7fec4Smrg 3071d7fec4Smrgcase $1 in 3171d7fec4Smrg '') 3271d7fec4Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3371d7fec4Smrg exit 1; 3471d7fec4Smrg ;; 3571d7fec4Smrg -h | --h*) 3671d7fec4Smrg cat <<\EOF 3771d7fec4SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3871d7fec4Smrg 3971d7fec4SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 4071d7fec4Smrgas side-effects. 4171d7fec4Smrg 4271d7fec4SmrgEnvironment variables: 4371d7fec4Smrg depmode Dependency tracking mode. 4471d7fec4Smrg source Source file read by `PROGRAMS ARGS'. 4571d7fec4Smrg object Object file output by `PROGRAMS ARGS'. 4671d7fec4Smrg DEPDIR directory where to store dependencies. 4771d7fec4Smrg depfile Dependency file to output. 4871d7fec4Smrg tmpdepfile Temporary file to use when outputing dependencies. 4971d7fec4Smrg libtool Whether libtool is used (yes/no). 5071d7fec4Smrg 5171d7fec4SmrgReport bugs to <bug-automake@gnu.org>. 5271d7fec4SmrgEOF 5371d7fec4Smrg exit $? 5471d7fec4Smrg ;; 5571d7fec4Smrg -v | --v*) 5671d7fec4Smrg echo "depcomp $scriptversion" 5771d7fec4Smrg exit $? 5871d7fec4Smrg ;; 5971d7fec4Smrgesac 6071d7fec4Smrg 6171d7fec4Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6271d7fec4Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6371d7fec4Smrg exit 1 6471d7fec4Smrgfi 6571d7fec4Smrg 6671d7fec4Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6771d7fec4Smrgdepfile=${depfile-`echo "$object" | 6871d7fec4Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6971d7fec4Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 7071d7fec4Smrg 7171d7fec4Smrgrm -f "$tmpdepfile" 7271d7fec4Smrg 7371d7fec4Smrg# Some modes work just like other modes, but use different flags. We 7471d7fec4Smrg# parameterize here, but still list the modes in the big case below, 7571d7fec4Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7671d7fec4Smrg# here, because this file can only contain one case statement. 7771d7fec4Smrgif test "$depmode" = hp; then 7871d7fec4Smrg # HP compiler uses -M and no extra arg. 7971d7fec4Smrg gccflag=-M 8071d7fec4Smrg depmode=gcc 8171d7fec4Smrgfi 8271d7fec4Smrg 8371d7fec4Smrgif test "$depmode" = dashXmstdout; then 8471d7fec4Smrg # This is just like dashmstdout with a different argument. 8571d7fec4Smrg dashmflag=-xM 8671d7fec4Smrg depmode=dashmstdout 8771d7fec4Smrgfi 8871d7fec4Smrg 8971d7fec4Smrgcase "$depmode" in 9071d7fec4Smrggcc3) 9171d7fec4Smrg## gcc 3 implements dependency tracking that does exactly what 9271d7fec4Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 9371d7fec4Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 9471d7fec4Smrg "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 9571d7fec4Smrg stat=$? 9671d7fec4Smrg if test $stat -eq 0; then : 9771d7fec4Smrg else 9871d7fec4Smrg rm -f "$tmpdepfile" 9971d7fec4Smrg exit $stat 10071d7fec4Smrg fi 10171d7fec4Smrg mv "$tmpdepfile" "$depfile" 10271d7fec4Smrg ;; 10371d7fec4Smrg 10471d7fec4Smrggcc) 10571d7fec4Smrg## There are various ways to get dependency output from gcc. Here's 10671d7fec4Smrg## why we pick this rather obscure method: 10771d7fec4Smrg## - Don't want to use -MD because we'd like the dependencies to end 10871d7fec4Smrg## up in a subdir. Having to rename by hand is ugly. 10971d7fec4Smrg## (We might end up doing this anyway to support other compilers.) 11071d7fec4Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 11171d7fec4Smrg## -MM, not -M (despite what the docs say). 11271d7fec4Smrg## - Using -M directly means running the compiler twice (even worse 11371d7fec4Smrg## than renaming). 11471d7fec4Smrg if test -z "$gccflag"; then 11571d7fec4Smrg gccflag=-MD, 11671d7fec4Smrg fi 11771d7fec4Smrg "$@" -Wp,"$gccflag$tmpdepfile" 11871d7fec4Smrg stat=$? 11971d7fec4Smrg if test $stat -eq 0; then : 12071d7fec4Smrg else 12171d7fec4Smrg rm -f "$tmpdepfile" 12271d7fec4Smrg exit $stat 12371d7fec4Smrg fi 12471d7fec4Smrg rm -f "$depfile" 12571d7fec4Smrg echo "$object : \\" > "$depfile" 12671d7fec4Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 12771d7fec4Smrg## The second -e expression handles DOS-style file names with drive letters. 12871d7fec4Smrg sed -e 's/^[^:]*: / /' \ 12971d7fec4Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 13071d7fec4Smrg## This next piece of magic avoids the `deleted header file' problem. 13171d7fec4Smrg## The problem is that when a header file which appears in a .P file 13271d7fec4Smrg## is deleted, the dependency causes make to die (because there is 13371d7fec4Smrg## typically no way to rebuild the header). We avoid this by adding 13471d7fec4Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 13571d7fec4Smrg## this for us directly. 13671d7fec4Smrg tr ' ' ' 13771d7fec4Smrg' < "$tmpdepfile" | 13871d7fec4Smrg## Some versions of gcc put a space before the `:'. On the theory 13971d7fec4Smrg## that the space means something, we add a space to the output as 14071d7fec4Smrg## well. 14171d7fec4Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 14271d7fec4Smrg## correctly. Breaking it into two sed invocations is a workaround. 14371d7fec4Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 14471d7fec4Smrg rm -f "$tmpdepfile" 14571d7fec4Smrg ;; 14671d7fec4Smrg 14771d7fec4Smrghp) 14871d7fec4Smrg # This case exists only to let depend.m4 do its work. It works by 14971d7fec4Smrg # looking at the text of this script. This case will never be run, 15071d7fec4Smrg # since it is checked for above. 15171d7fec4Smrg exit 1 15271d7fec4Smrg ;; 15371d7fec4Smrg 15471d7fec4Smrgsgi) 15571d7fec4Smrg if test "$libtool" = yes; then 15671d7fec4Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 15771d7fec4Smrg else 15871d7fec4Smrg "$@" -MDupdate "$tmpdepfile" 15971d7fec4Smrg fi 16071d7fec4Smrg stat=$? 16171d7fec4Smrg if test $stat -eq 0; then : 16271d7fec4Smrg else 16371d7fec4Smrg rm -f "$tmpdepfile" 16471d7fec4Smrg exit $stat 16571d7fec4Smrg fi 16671d7fec4Smrg rm -f "$depfile" 16771d7fec4Smrg 16871d7fec4Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 16971d7fec4Smrg echo "$object : \\" > "$depfile" 17071d7fec4Smrg 17171d7fec4Smrg # Clip off the initial element (the dependent). Don't try to be 17271d7fec4Smrg # clever and replace this with sed code, as IRIX sed won't handle 17371d7fec4Smrg # lines with more than a fixed number of characters (4096 in 17471d7fec4Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 17571d7fec4Smrg # the IRIX cc adds comments like `#:fec' to the end of the 17671d7fec4Smrg # dependency line. 17771d7fec4Smrg tr ' ' ' 17871d7fec4Smrg' < "$tmpdepfile" \ 17971d7fec4Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 18071d7fec4Smrg tr ' 18171d7fec4Smrg' ' ' >> $depfile 18271d7fec4Smrg echo >> $depfile 18371d7fec4Smrg 18471d7fec4Smrg # The second pass generates a dummy entry for each header file. 18571d7fec4Smrg tr ' ' ' 18671d7fec4Smrg' < "$tmpdepfile" \ 18771d7fec4Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 18871d7fec4Smrg >> $depfile 18971d7fec4Smrg else 19071d7fec4Smrg # The sourcefile does not contain any dependencies, so just 19171d7fec4Smrg # store a dummy comment line, to avoid errors with the Makefile 19271d7fec4Smrg # "include basename.Plo" scheme. 19371d7fec4Smrg echo "#dummy" > "$depfile" 19471d7fec4Smrg fi 19571d7fec4Smrg rm -f "$tmpdepfile" 19671d7fec4Smrg ;; 19771d7fec4Smrg 19871d7fec4Smrgaix) 19971d7fec4Smrg # The C for AIX Compiler uses -M and outputs the dependencies 20071d7fec4Smrg # in a .u file. In older versions, this file always lives in the 20171d7fec4Smrg # current directory. Also, the AIX compiler puts `$object:' at the 20271d7fec4Smrg # start of each line; $object doesn't have directory information. 20371d7fec4Smrg # Version 6 uses the directory in both cases. 20471d7fec4Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 20571d7fec4Smrg tmpdepfile="$stripped.u" 20671d7fec4Smrg if test "$libtool" = yes; then 20771d7fec4Smrg "$@" -Wc,-M 20871d7fec4Smrg else 20971d7fec4Smrg "$@" -M 21071d7fec4Smrg fi 21171d7fec4Smrg stat=$? 21271d7fec4Smrg 21371d7fec4Smrg if test -f "$tmpdepfile"; then : 21471d7fec4Smrg else 21571d7fec4Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 21671d7fec4Smrg tmpdepfile="$stripped.u" 21771d7fec4Smrg fi 21871d7fec4Smrg 21971d7fec4Smrg if test $stat -eq 0; then : 22071d7fec4Smrg else 22171d7fec4Smrg rm -f "$tmpdepfile" 22271d7fec4Smrg exit $stat 22371d7fec4Smrg fi 22471d7fec4Smrg 22571d7fec4Smrg if test -f "$tmpdepfile"; then 22671d7fec4Smrg outname="$stripped.o" 22771d7fec4Smrg # Each line is of the form `foo.o: dependent.h'. 22871d7fec4Smrg # Do two passes, one to just change these to 22971d7fec4Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 23071d7fec4Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 23171d7fec4Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 23271d7fec4Smrg else 23371d7fec4Smrg # The sourcefile does not contain any dependencies, so just 23471d7fec4Smrg # store a dummy comment line, to avoid errors with the Makefile 23571d7fec4Smrg # "include basename.Plo" scheme. 23671d7fec4Smrg echo "#dummy" > "$depfile" 23771d7fec4Smrg fi 23871d7fec4Smrg rm -f "$tmpdepfile" 23971d7fec4Smrg ;; 24071d7fec4Smrg 24171d7fec4Smrgicc) 24271d7fec4Smrg # Intel's C compiler understands `-MD -MF file'. However on 24371d7fec4Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 24471d7fec4Smrg # ICC 7.0 will fill foo.d with something like 24571d7fec4Smrg # foo.o: sub/foo.c 24671d7fec4Smrg # foo.o: sub/foo.h 24771d7fec4Smrg # which is wrong. We want: 24871d7fec4Smrg # sub/foo.o: sub/foo.c 24971d7fec4Smrg # sub/foo.o: sub/foo.h 25071d7fec4Smrg # sub/foo.c: 25171d7fec4Smrg # sub/foo.h: 25271d7fec4Smrg # ICC 7.1 will output 25371d7fec4Smrg # foo.o: sub/foo.c sub/foo.h 25471d7fec4Smrg # and will wrap long lines using \ : 25571d7fec4Smrg # foo.o: sub/foo.c ... \ 25671d7fec4Smrg # sub/foo.h ... \ 25771d7fec4Smrg # ... 25871d7fec4Smrg 25971d7fec4Smrg "$@" -MD -MF "$tmpdepfile" 26071d7fec4Smrg stat=$? 26171d7fec4Smrg if test $stat -eq 0; then : 26271d7fec4Smrg else 26371d7fec4Smrg rm -f "$tmpdepfile" 26471d7fec4Smrg exit $stat 26571d7fec4Smrg fi 26671d7fec4Smrg rm -f "$depfile" 26771d7fec4Smrg # Each line is of the form `foo.o: dependent.h', 26871d7fec4Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 26971d7fec4Smrg # Do two passes, one to just change these to 27071d7fec4Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 27171d7fec4Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 27271d7fec4Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 27371d7fec4Smrg # correctly. Breaking it into two sed invocations is a workaround. 27471d7fec4Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 27571d7fec4Smrg sed -e 's/$/ :/' >> "$depfile" 27671d7fec4Smrg rm -f "$tmpdepfile" 27771d7fec4Smrg ;; 27871d7fec4Smrg 27971d7fec4Smrgtru64) 28071d7fec4Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 28171d7fec4Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 28271d7fec4Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 28371d7fec4Smrg # dependencies in `foo.d' instead, so we check for that too. 28471d7fec4Smrg # Subdirectories are respected. 28571d7fec4Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 28671d7fec4Smrg test "x$dir" = "x$object" && dir= 28771d7fec4Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 28871d7fec4Smrg 28971d7fec4Smrg if test "$libtool" = yes; then 29071d7fec4Smrg # With Tru64 cc, shared objects can also be used to make a 29171d7fec4Smrg # static library. This mecanism is used in libtool 1.4 series to 29271d7fec4Smrg # handle both shared and static libraries in a single compilation. 29371d7fec4Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 29471d7fec4Smrg # 29571d7fec4Smrg # With libtool 1.5 this exception was removed, and libtool now 29671d7fec4Smrg # generates 2 separate objects for the 2 libraries. These two 29771d7fec4Smrg # compilations output dependencies in in $dir.libs/$base.o.d and 29871d7fec4Smrg # in $dir$base.o.d. We have to check for both files, because 29971d7fec4Smrg # one of the two compilations can be disabled. We should prefer 30071d7fec4Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 30171d7fec4Smrg # automatically cleaned when .libs/ is deleted, while ignoring 30271d7fec4Smrg # the former would cause a distcleancheck panic. 30371d7fec4Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 30471d7fec4Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 30571d7fec4Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 30671d7fec4Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 30771d7fec4Smrg "$@" -Wc,-MD 30871d7fec4Smrg else 30971d7fec4Smrg tmpdepfile1=$dir$base.o.d 31071d7fec4Smrg tmpdepfile2=$dir$base.d 31171d7fec4Smrg tmpdepfile3=$dir$base.d 31271d7fec4Smrg tmpdepfile4=$dir$base.d 31371d7fec4Smrg "$@" -MD 31471d7fec4Smrg fi 31571d7fec4Smrg 31671d7fec4Smrg stat=$? 31771d7fec4Smrg if test $stat -eq 0; then : 31871d7fec4Smrg else 31971d7fec4Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 32071d7fec4Smrg exit $stat 32171d7fec4Smrg fi 32271d7fec4Smrg 32371d7fec4Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 32471d7fec4Smrg do 32571d7fec4Smrg test -f "$tmpdepfile" && break 32671d7fec4Smrg done 32771d7fec4Smrg if test -f "$tmpdepfile"; then 32871d7fec4Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 32971d7fec4Smrg # That's a tab and a space in the []. 33071d7fec4Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 33171d7fec4Smrg else 33271d7fec4Smrg echo "#dummy" > "$depfile" 33371d7fec4Smrg fi 33471d7fec4Smrg rm -f "$tmpdepfile" 33571d7fec4Smrg ;; 33671d7fec4Smrg 33771d7fec4Smrg#nosideeffect) 33871d7fec4Smrg # This comment above is used by automake to tell side-effect 33971d7fec4Smrg # dependency tracking mechanisms from slower ones. 34071d7fec4Smrg 34171d7fec4Smrgdashmstdout) 34271d7fec4Smrg # Important note: in order to support this mode, a compiler *must* 34371d7fec4Smrg # always write the preprocessed file to stdout, regardless of -o. 34471d7fec4Smrg "$@" || exit $? 34571d7fec4Smrg 34671d7fec4Smrg # Remove the call to Libtool. 34771d7fec4Smrg if test "$libtool" = yes; then 34871d7fec4Smrg while test $1 != '--mode=compile'; do 34971d7fec4Smrg shift 35071d7fec4Smrg done 35171d7fec4Smrg shift 35271d7fec4Smrg fi 35371d7fec4Smrg 35471d7fec4Smrg # Remove `-o $object'. 35571d7fec4Smrg IFS=" " 35671d7fec4Smrg for arg 35771d7fec4Smrg do 35871d7fec4Smrg case $arg in 35971d7fec4Smrg -o) 36071d7fec4Smrg shift 36171d7fec4Smrg ;; 36271d7fec4Smrg $object) 36371d7fec4Smrg shift 36471d7fec4Smrg ;; 36571d7fec4Smrg *) 36671d7fec4Smrg set fnord "$@" "$arg" 36771d7fec4Smrg shift # fnord 36871d7fec4Smrg shift # $arg 36971d7fec4Smrg ;; 37071d7fec4Smrg esac 37171d7fec4Smrg done 37271d7fec4Smrg 37371d7fec4Smrg test -z "$dashmflag" && dashmflag=-M 37471d7fec4Smrg # Require at least two characters before searching for `:' 37571d7fec4Smrg # in the target name. This is to cope with DOS-style filenames: 37671d7fec4Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 37771d7fec4Smrg "$@" $dashmflag | 37871d7fec4Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 37971d7fec4Smrg rm -f "$depfile" 38071d7fec4Smrg cat < "$tmpdepfile" > "$depfile" 38171d7fec4Smrg tr ' ' ' 38271d7fec4Smrg' < "$tmpdepfile" | \ 38371d7fec4Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 38471d7fec4Smrg## correctly. Breaking it into two sed invocations is a workaround. 38571d7fec4Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 38671d7fec4Smrg rm -f "$tmpdepfile" 38771d7fec4Smrg ;; 38871d7fec4Smrg 38971d7fec4SmrgdashXmstdout) 39071d7fec4Smrg # This case only exists to satisfy depend.m4. It is never actually 39171d7fec4Smrg # run, as this mode is specially recognized in the preamble. 39271d7fec4Smrg exit 1 39371d7fec4Smrg ;; 39471d7fec4Smrg 39571d7fec4Smrgmakedepend) 39671d7fec4Smrg "$@" || exit $? 39771d7fec4Smrg # Remove any Libtool call 39871d7fec4Smrg if test "$libtool" = yes; then 39971d7fec4Smrg while test $1 != '--mode=compile'; do 40071d7fec4Smrg shift 40171d7fec4Smrg done 40271d7fec4Smrg shift 40371d7fec4Smrg fi 40471d7fec4Smrg # X makedepend 40571d7fec4Smrg shift 40671d7fec4Smrg cleared=no 40771d7fec4Smrg for arg in "$@"; do 40871d7fec4Smrg case $cleared in 40971d7fec4Smrg no) 41071d7fec4Smrg set ""; shift 41171d7fec4Smrg cleared=yes ;; 41271d7fec4Smrg esac 41371d7fec4Smrg case "$arg" in 41471d7fec4Smrg -D*|-I*) 41571d7fec4Smrg set fnord "$@" "$arg"; shift ;; 41671d7fec4Smrg # Strip any option that makedepend may not understand. Remove 41771d7fec4Smrg # the object too, otherwise makedepend will parse it as a source file. 41871d7fec4Smrg -*|$object) 41971d7fec4Smrg ;; 42071d7fec4Smrg *) 42171d7fec4Smrg set fnord "$@" "$arg"; shift ;; 42271d7fec4Smrg esac 42371d7fec4Smrg done 42471d7fec4Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 42571d7fec4Smrg touch "$tmpdepfile" 42671d7fec4Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 42771d7fec4Smrg rm -f "$depfile" 42871d7fec4Smrg cat < "$tmpdepfile" > "$depfile" 42971d7fec4Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 43071d7fec4Smrg' | \ 43171d7fec4Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 43271d7fec4Smrg## correctly. Breaking it into two sed invocations is a workaround. 43371d7fec4Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 43471d7fec4Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 43571d7fec4Smrg ;; 43671d7fec4Smrg 43771d7fec4Smrgcpp) 43871d7fec4Smrg # Important note: in order to support this mode, a compiler *must* 43971d7fec4Smrg # always write the preprocessed file to stdout. 44071d7fec4Smrg "$@" || exit $? 44171d7fec4Smrg 44271d7fec4Smrg # Remove the call to Libtool. 44371d7fec4Smrg if test "$libtool" = yes; then 44471d7fec4Smrg while test $1 != '--mode=compile'; do 44571d7fec4Smrg shift 44671d7fec4Smrg done 44771d7fec4Smrg shift 44871d7fec4Smrg fi 44971d7fec4Smrg 45071d7fec4Smrg # Remove `-o $object'. 45171d7fec4Smrg IFS=" " 45271d7fec4Smrg for arg 45371d7fec4Smrg do 45471d7fec4Smrg case $arg in 45571d7fec4Smrg -o) 45671d7fec4Smrg shift 45771d7fec4Smrg ;; 45871d7fec4Smrg $object) 45971d7fec4Smrg shift 46071d7fec4Smrg ;; 46171d7fec4Smrg *) 46271d7fec4Smrg set fnord "$@" "$arg" 46371d7fec4Smrg shift # fnord 46471d7fec4Smrg shift # $arg 46571d7fec4Smrg ;; 46671d7fec4Smrg esac 46771d7fec4Smrg done 46871d7fec4Smrg 46971d7fec4Smrg "$@" -E | 47071d7fec4Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 47171d7fec4Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 47271d7fec4Smrg sed '$ s: \\$::' > "$tmpdepfile" 47371d7fec4Smrg rm -f "$depfile" 47471d7fec4Smrg echo "$object : \\" > "$depfile" 47571d7fec4Smrg cat < "$tmpdepfile" >> "$depfile" 47671d7fec4Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 47771d7fec4Smrg rm -f "$tmpdepfile" 47871d7fec4Smrg ;; 47971d7fec4Smrg 48071d7fec4Smrgmsvisualcpp) 48171d7fec4Smrg # Important note: in order to support this mode, a compiler *must* 48271d7fec4Smrg # always write the preprocessed file to stdout, regardless of -o, 48371d7fec4Smrg # because we must use -o when running libtool. 48471d7fec4Smrg "$@" || exit $? 48571d7fec4Smrg IFS=" " 48671d7fec4Smrg for arg 48771d7fec4Smrg do 48871d7fec4Smrg case "$arg" in 48971d7fec4Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 49071d7fec4Smrg set fnord "$@" 49171d7fec4Smrg shift 49271d7fec4Smrg shift 49371d7fec4Smrg ;; 49471d7fec4Smrg *) 49571d7fec4Smrg set fnord "$@" "$arg" 49671d7fec4Smrg shift 49771d7fec4Smrg shift 49871d7fec4Smrg ;; 49971d7fec4Smrg esac 50071d7fec4Smrg done 50171d7fec4Smrg "$@" -E | 50271d7fec4Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 50371d7fec4Smrg rm -f "$depfile" 50471d7fec4Smrg echo "$object : \\" > "$depfile" 50571d7fec4Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 50671d7fec4Smrg echo " " >> "$depfile" 50771d7fec4Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 50871d7fec4Smrg rm -f "$tmpdepfile" 50971d7fec4Smrg ;; 51071d7fec4Smrg 51171d7fec4Smrgnone) 51271d7fec4Smrg exec "$@" 51371d7fec4Smrg ;; 51471d7fec4Smrg 51571d7fec4Smrg*) 51671d7fec4Smrg echo "Unknown depmode $depmode" 1>&2 51771d7fec4Smrg exit 1 51871d7fec4Smrg ;; 51971d7fec4Smrgesac 52071d7fec4Smrg 52171d7fec4Smrgexit 0 52271d7fec4Smrg 52371d7fec4Smrg# Local Variables: 52471d7fec4Smrg# mode: shell-script 52571d7fec4Smrg# sh-indentation: 2 52671d7fec4Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 52771d7fec4Smrg# time-stamp-start: "scriptversion=" 52871d7fec4Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 52971d7fec4Smrg# time-stamp-end: "$" 53071d7fec4Smrg# End: 531