depcomp revision 55de1df9
155de1df9Smrg#! /bin/sh 255de1df9Smrg# depcomp - compile a program generating dependencies as side-effects 355de1df9Smrg 455de1df9Smrgscriptversion=2009-04-28.21; # UTC 555de1df9Smrg 655de1df9Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 755de1df9Smrg# Software Foundation, Inc. 855de1df9Smrg 955de1df9Smrg# This program is free software; you can redistribute it and/or modify 1055de1df9Smrg# it under the terms of the GNU General Public License as published by 1155de1df9Smrg# the Free Software Foundation; either version 2, or (at your option) 1255de1df9Smrg# any later version. 1355de1df9Smrg 1455de1df9Smrg# This program is distributed in the hope that it will be useful, 1555de1df9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1655de1df9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1755de1df9Smrg# GNU General Public License for more details. 1855de1df9Smrg 1955de1df9Smrg# You should have received a copy of the GNU General Public License 2055de1df9Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2155de1df9Smrg 2255de1df9Smrg# As a special exception to the GNU General Public License, if you 2355de1df9Smrg# distribute this file as part of a program that contains a 2455de1df9Smrg# configuration script generated by Autoconf, you may include it under 2555de1df9Smrg# the same distribution terms that you use for the rest of that program. 2655de1df9Smrg 2755de1df9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2855de1df9Smrg 2955de1df9Smrgcase $1 in 3055de1df9Smrg '') 3155de1df9Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3255de1df9Smrg exit 1; 3355de1df9Smrg ;; 3455de1df9Smrg -h | --h*) 3555de1df9Smrg cat <<\EOF 3655de1df9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3755de1df9Smrg 3855de1df9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3955de1df9Smrgas side-effects. 4055de1df9Smrg 4155de1df9SmrgEnvironment variables: 4255de1df9Smrg depmode Dependency tracking mode. 4355de1df9Smrg source Source file read by `PROGRAMS ARGS'. 4455de1df9Smrg object Object file output by `PROGRAMS ARGS'. 4555de1df9Smrg DEPDIR directory where to store dependencies. 4655de1df9Smrg depfile Dependency file to output. 4755de1df9Smrg tmpdepfile Temporary file to use when outputing dependencies. 4855de1df9Smrg libtool Whether libtool is used (yes/no). 4955de1df9Smrg 5055de1df9SmrgReport bugs to <bug-automake@gnu.org>. 5155de1df9SmrgEOF 5255de1df9Smrg exit $? 5355de1df9Smrg ;; 5455de1df9Smrg -v | --v*) 5555de1df9Smrg echo "depcomp $scriptversion" 5655de1df9Smrg exit $? 5755de1df9Smrg ;; 5855de1df9Smrgesac 5955de1df9Smrg 6055de1df9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6155de1df9Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6255de1df9Smrg exit 1 6355de1df9Smrgfi 6455de1df9Smrg 6555de1df9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6655de1df9Smrgdepfile=${depfile-`echo "$object" | 6755de1df9Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6855de1df9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6955de1df9Smrg 7055de1df9Smrgrm -f "$tmpdepfile" 7155de1df9Smrg 7255de1df9Smrg# Some modes work just like other modes, but use different flags. We 7355de1df9Smrg# parameterize here, but still list the modes in the big case below, 7455de1df9Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7555de1df9Smrg# here, because this file can only contain one case statement. 7655de1df9Smrgif test "$depmode" = hp; then 7755de1df9Smrg # HP compiler uses -M and no extra arg. 7855de1df9Smrg gccflag=-M 7955de1df9Smrg depmode=gcc 8055de1df9Smrgfi 8155de1df9Smrg 8255de1df9Smrgif test "$depmode" = dashXmstdout; then 8355de1df9Smrg # This is just like dashmstdout with a different argument. 8455de1df9Smrg dashmflag=-xM 8555de1df9Smrg depmode=dashmstdout 8655de1df9Smrgfi 8755de1df9Smrg 8855de1df9Smrgcygpath_u="cygpath -u -f -" 8955de1df9Smrgif test "$depmode" = msvcmsys; then 9055de1df9Smrg # This is just like msvisualcpp but w/o cygpath translation. 9155de1df9Smrg # Just convert the backslash-escaped backslashes to single forward 9255de1df9Smrg # slashes to satisfy depend.m4 9355de1df9Smrg cygpath_u="sed s,\\\\\\\\,/,g" 9455de1df9Smrg depmode=msvisualcpp 9555de1df9Smrgfi 9655de1df9Smrg 9755de1df9Smrgcase "$depmode" in 9855de1df9Smrggcc3) 9955de1df9Smrg## gcc 3 implements dependency tracking that does exactly what 10055de1df9Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10155de1df9Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 10255de1df9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 10355de1df9Smrg## the command line argument order; so add the flags where they 10455de1df9Smrg## appear in depend2.am. Note that the slowdown incurred here 10555de1df9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 10655de1df9Smrg for arg 10755de1df9Smrg do 10855de1df9Smrg case $arg in 10955de1df9Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11055de1df9Smrg *) set fnord "$@" "$arg" ;; 11155de1df9Smrg esac 11255de1df9Smrg shift # fnord 11355de1df9Smrg shift # $arg 11455de1df9Smrg done 11555de1df9Smrg "$@" 11655de1df9Smrg stat=$? 11755de1df9Smrg if test $stat -eq 0; then : 11855de1df9Smrg else 11955de1df9Smrg rm -f "$tmpdepfile" 12055de1df9Smrg exit $stat 12155de1df9Smrg fi 12255de1df9Smrg mv "$tmpdepfile" "$depfile" 12355de1df9Smrg ;; 12455de1df9Smrg 12555de1df9Smrggcc) 12655de1df9Smrg## There are various ways to get dependency output from gcc. Here's 12755de1df9Smrg## why we pick this rather obscure method: 12855de1df9Smrg## - Don't want to use -MD because we'd like the dependencies to end 12955de1df9Smrg## up in a subdir. Having to rename by hand is ugly. 13055de1df9Smrg## (We might end up doing this anyway to support other compilers.) 13155de1df9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 13255de1df9Smrg## -MM, not -M (despite what the docs say). 13355de1df9Smrg## - Using -M directly means running the compiler twice (even worse 13455de1df9Smrg## than renaming). 13555de1df9Smrg if test -z "$gccflag"; then 13655de1df9Smrg gccflag=-MD, 13755de1df9Smrg fi 13855de1df9Smrg "$@" -Wp,"$gccflag$tmpdepfile" 13955de1df9Smrg stat=$? 14055de1df9Smrg if test $stat -eq 0; then : 14155de1df9Smrg else 14255de1df9Smrg rm -f "$tmpdepfile" 14355de1df9Smrg exit $stat 14455de1df9Smrg fi 14555de1df9Smrg rm -f "$depfile" 14655de1df9Smrg echo "$object : \\" > "$depfile" 14755de1df9Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14855de1df9Smrg## The second -e expression handles DOS-style file names with drive letters. 14955de1df9Smrg sed -e 's/^[^:]*: / /' \ 15055de1df9Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15155de1df9Smrg## This next piece of magic avoids the `deleted header file' problem. 15255de1df9Smrg## The problem is that when a header file which appears in a .P file 15355de1df9Smrg## is deleted, the dependency causes make to die (because there is 15455de1df9Smrg## typically no way to rebuild the header). We avoid this by adding 15555de1df9Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 15655de1df9Smrg## this for us directly. 15755de1df9Smrg tr ' ' ' 15855de1df9Smrg' < "$tmpdepfile" | 15955de1df9Smrg## Some versions of gcc put a space before the `:'. On the theory 16055de1df9Smrg## that the space means something, we add a space to the output as 16155de1df9Smrg## well. 16255de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 16355de1df9Smrg## correctly. Breaking it into two sed invocations is a workaround. 16455de1df9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 16555de1df9Smrg rm -f "$tmpdepfile" 16655de1df9Smrg ;; 16755de1df9Smrg 16855de1df9Smrghp) 16955de1df9Smrg # This case exists only to let depend.m4 do its work. It works by 17055de1df9Smrg # looking at the text of this script. This case will never be run, 17155de1df9Smrg # since it is checked for above. 17255de1df9Smrg exit 1 17355de1df9Smrg ;; 17455de1df9Smrg 17555de1df9Smrgsgi) 17655de1df9Smrg if test "$libtool" = yes; then 17755de1df9Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17855de1df9Smrg else 17955de1df9Smrg "$@" -MDupdate "$tmpdepfile" 18055de1df9Smrg fi 18155de1df9Smrg stat=$? 18255de1df9Smrg if test $stat -eq 0; then : 18355de1df9Smrg else 18455de1df9Smrg rm -f "$tmpdepfile" 18555de1df9Smrg exit $stat 18655de1df9Smrg fi 18755de1df9Smrg rm -f "$depfile" 18855de1df9Smrg 18955de1df9Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 19055de1df9Smrg echo "$object : \\" > "$depfile" 19155de1df9Smrg 19255de1df9Smrg # Clip off the initial element (the dependent). Don't try to be 19355de1df9Smrg # clever and replace this with sed code, as IRIX sed won't handle 19455de1df9Smrg # lines with more than a fixed number of characters (4096 in 19555de1df9Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 19655de1df9Smrg # the IRIX cc adds comments like `#:fec' to the end of the 19755de1df9Smrg # dependency line. 19855de1df9Smrg tr ' ' ' 19955de1df9Smrg' < "$tmpdepfile" \ 20055de1df9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 20155de1df9Smrg tr ' 20255de1df9Smrg' ' ' >> "$depfile" 20355de1df9Smrg echo >> "$depfile" 20455de1df9Smrg 20555de1df9Smrg # The second pass generates a dummy entry for each header file. 20655de1df9Smrg tr ' ' ' 20755de1df9Smrg' < "$tmpdepfile" \ 20855de1df9Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20955de1df9Smrg >> "$depfile" 21055de1df9Smrg else 21155de1df9Smrg # The sourcefile does not contain any dependencies, so just 21255de1df9Smrg # store a dummy comment line, to avoid errors with the Makefile 21355de1df9Smrg # "include basename.Plo" scheme. 21455de1df9Smrg echo "#dummy" > "$depfile" 21555de1df9Smrg fi 21655de1df9Smrg rm -f "$tmpdepfile" 21755de1df9Smrg ;; 21855de1df9Smrg 21955de1df9Smrgaix) 22055de1df9Smrg # The C for AIX Compiler uses -M and outputs the dependencies 22155de1df9Smrg # in a .u file. In older versions, this file always lives in the 22255de1df9Smrg # current directory. Also, the AIX compiler puts `$object:' at the 22355de1df9Smrg # start of each line; $object doesn't have directory information. 22455de1df9Smrg # Version 6 uses the directory in both cases. 22555de1df9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 22655de1df9Smrg test "x$dir" = "x$object" && dir= 22755de1df9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 22855de1df9Smrg if test "$libtool" = yes; then 22955de1df9Smrg tmpdepfile1=$dir$base.u 23055de1df9Smrg tmpdepfile2=$base.u 23155de1df9Smrg tmpdepfile3=$dir.libs/$base.u 23255de1df9Smrg "$@" -Wc,-M 23355de1df9Smrg else 23455de1df9Smrg tmpdepfile1=$dir$base.u 23555de1df9Smrg tmpdepfile2=$dir$base.u 23655de1df9Smrg tmpdepfile3=$dir$base.u 23755de1df9Smrg "$@" -M 23855de1df9Smrg fi 23955de1df9Smrg stat=$? 24055de1df9Smrg 24155de1df9Smrg if test $stat -eq 0; then : 24255de1df9Smrg else 24355de1df9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24455de1df9Smrg exit $stat 24555de1df9Smrg fi 24655de1df9Smrg 24755de1df9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24855de1df9Smrg do 24955de1df9Smrg test -f "$tmpdepfile" && break 25055de1df9Smrg done 25155de1df9Smrg if test -f "$tmpdepfile"; then 25255de1df9Smrg # Each line is of the form `foo.o: dependent.h'. 25355de1df9Smrg # Do two passes, one to just change these to 25455de1df9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 25555de1df9Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 25655de1df9Smrg # That's a tab and a space in the []. 25755de1df9Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 25855de1df9Smrg else 25955de1df9Smrg # The sourcefile does not contain any dependencies, so just 26055de1df9Smrg # store a dummy comment line, to avoid errors with the Makefile 26155de1df9Smrg # "include basename.Plo" scheme. 26255de1df9Smrg echo "#dummy" > "$depfile" 26355de1df9Smrg fi 26455de1df9Smrg rm -f "$tmpdepfile" 26555de1df9Smrg ;; 26655de1df9Smrg 26755de1df9Smrgicc) 26855de1df9Smrg # Intel's C compiler understands `-MD -MF file'. However on 26955de1df9Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 27055de1df9Smrg # ICC 7.0 will fill foo.d with something like 27155de1df9Smrg # foo.o: sub/foo.c 27255de1df9Smrg # foo.o: sub/foo.h 27355de1df9Smrg # which is wrong. We want: 27455de1df9Smrg # sub/foo.o: sub/foo.c 27555de1df9Smrg # sub/foo.o: sub/foo.h 27655de1df9Smrg # sub/foo.c: 27755de1df9Smrg # sub/foo.h: 27855de1df9Smrg # ICC 7.1 will output 27955de1df9Smrg # foo.o: sub/foo.c sub/foo.h 28055de1df9Smrg # and will wrap long lines using \ : 28155de1df9Smrg # foo.o: sub/foo.c ... \ 28255de1df9Smrg # sub/foo.h ... \ 28355de1df9Smrg # ... 28455de1df9Smrg 28555de1df9Smrg "$@" -MD -MF "$tmpdepfile" 28655de1df9Smrg stat=$? 28755de1df9Smrg if test $stat -eq 0; then : 28855de1df9Smrg else 28955de1df9Smrg rm -f "$tmpdepfile" 29055de1df9Smrg exit $stat 29155de1df9Smrg fi 29255de1df9Smrg rm -f "$depfile" 29355de1df9Smrg # Each line is of the form `foo.o: dependent.h', 29455de1df9Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 29555de1df9Smrg # Do two passes, one to just change these to 29655de1df9Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 29755de1df9Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 29855de1df9Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 29955de1df9Smrg # correctly. Breaking it into two sed invocations is a workaround. 30055de1df9Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 30155de1df9Smrg sed -e 's/$/ :/' >> "$depfile" 30255de1df9Smrg rm -f "$tmpdepfile" 30355de1df9Smrg ;; 30455de1df9Smrg 30555de1df9Smrghp2) 30655de1df9Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 30755de1df9Smrg # compilers, which have integrated preprocessors. The correct option 30855de1df9Smrg # to use with these is +Maked; it writes dependencies to a file named 30955de1df9Smrg # 'foo.d', which lands next to the object file, wherever that 31055de1df9Smrg # happens to be. 31155de1df9Smrg # Much of this is similar to the tru64 case; see comments there. 31255de1df9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 31355de1df9Smrg test "x$dir" = "x$object" && dir= 31455de1df9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 31555de1df9Smrg if test "$libtool" = yes; then 31655de1df9Smrg tmpdepfile1=$dir$base.d 31755de1df9Smrg tmpdepfile2=$dir.libs/$base.d 31855de1df9Smrg "$@" -Wc,+Maked 31955de1df9Smrg else 32055de1df9Smrg tmpdepfile1=$dir$base.d 32155de1df9Smrg tmpdepfile2=$dir$base.d 32255de1df9Smrg "$@" +Maked 32355de1df9Smrg fi 32455de1df9Smrg stat=$? 32555de1df9Smrg if test $stat -eq 0; then : 32655de1df9Smrg else 32755de1df9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 32855de1df9Smrg exit $stat 32955de1df9Smrg fi 33055de1df9Smrg 33155de1df9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 33255de1df9Smrg do 33355de1df9Smrg test -f "$tmpdepfile" && break 33455de1df9Smrg done 33555de1df9Smrg if test -f "$tmpdepfile"; then 33655de1df9Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 33755de1df9Smrg # Add `dependent.h:' lines. 33855de1df9Smrg sed -ne '2,${ 33955de1df9Smrg s/^ *// 34055de1df9Smrg s/ \\*$// 34155de1df9Smrg s/$/:/ 34255de1df9Smrg p 34355de1df9Smrg }' "$tmpdepfile" >> "$depfile" 34455de1df9Smrg else 34555de1df9Smrg echo "#dummy" > "$depfile" 34655de1df9Smrg fi 34755de1df9Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 34855de1df9Smrg ;; 34955de1df9Smrg 35055de1df9Smrgtru64) 35155de1df9Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 35255de1df9Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 35355de1df9Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 35455de1df9Smrg # dependencies in `foo.d' instead, so we check for that too. 35555de1df9Smrg # Subdirectories are respected. 35655de1df9Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 35755de1df9Smrg test "x$dir" = "x$object" && dir= 35855de1df9Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 35955de1df9Smrg 36055de1df9Smrg if test "$libtool" = yes; then 36155de1df9Smrg # With Tru64 cc, shared objects can also be used to make a 36255de1df9Smrg # static library. This mechanism is used in libtool 1.4 series to 36355de1df9Smrg # handle both shared and static libraries in a single compilation. 36455de1df9Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 36555de1df9Smrg # 36655de1df9Smrg # With libtool 1.5 this exception was removed, and libtool now 36755de1df9Smrg # generates 2 separate objects for the 2 libraries. These two 36855de1df9Smrg # compilations output dependencies in $dir.libs/$base.o.d and 36955de1df9Smrg # in $dir$base.o.d. We have to check for both files, because 37055de1df9Smrg # one of the two compilations can be disabled. We should prefer 37155de1df9Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 37255de1df9Smrg # automatically cleaned when .libs/ is deleted, while ignoring 37355de1df9Smrg # the former would cause a distcleancheck panic. 37455de1df9Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 37555de1df9Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 37655de1df9Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 37755de1df9Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 37855de1df9Smrg "$@" -Wc,-MD 37955de1df9Smrg else 38055de1df9Smrg tmpdepfile1=$dir$base.o.d 38155de1df9Smrg tmpdepfile2=$dir$base.d 38255de1df9Smrg tmpdepfile3=$dir$base.d 38355de1df9Smrg tmpdepfile4=$dir$base.d 38455de1df9Smrg "$@" -MD 38555de1df9Smrg fi 38655de1df9Smrg 38755de1df9Smrg stat=$? 38855de1df9Smrg if test $stat -eq 0; then : 38955de1df9Smrg else 39055de1df9Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39155de1df9Smrg exit $stat 39255de1df9Smrg fi 39355de1df9Smrg 39455de1df9Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39555de1df9Smrg do 39655de1df9Smrg test -f "$tmpdepfile" && break 39755de1df9Smrg done 39855de1df9Smrg if test -f "$tmpdepfile"; then 39955de1df9Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 40055de1df9Smrg # That's a tab and a space in the []. 40155de1df9Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 40255de1df9Smrg else 40355de1df9Smrg echo "#dummy" > "$depfile" 40455de1df9Smrg fi 40555de1df9Smrg rm -f "$tmpdepfile" 40655de1df9Smrg ;; 40755de1df9Smrg 40855de1df9Smrg#nosideeffect) 40955de1df9Smrg # This comment above is used by automake to tell side-effect 41055de1df9Smrg # dependency tracking mechanisms from slower ones. 41155de1df9Smrg 41255de1df9Smrgdashmstdout) 41355de1df9Smrg # Important note: in order to support this mode, a compiler *must* 41455de1df9Smrg # always write the preprocessed file to stdout, regardless of -o. 41555de1df9Smrg "$@" || exit $? 41655de1df9Smrg 41755de1df9Smrg # Remove the call to Libtool. 41855de1df9Smrg if test "$libtool" = yes; then 41955de1df9Smrg while test "X$1" != 'X--mode=compile'; do 42055de1df9Smrg shift 42155de1df9Smrg done 42255de1df9Smrg shift 42355de1df9Smrg fi 42455de1df9Smrg 42555de1df9Smrg # Remove `-o $object'. 42655de1df9Smrg IFS=" " 42755de1df9Smrg for arg 42855de1df9Smrg do 42955de1df9Smrg case $arg in 43055de1df9Smrg -o) 43155de1df9Smrg shift 43255de1df9Smrg ;; 43355de1df9Smrg $object) 43455de1df9Smrg shift 43555de1df9Smrg ;; 43655de1df9Smrg *) 43755de1df9Smrg set fnord "$@" "$arg" 43855de1df9Smrg shift # fnord 43955de1df9Smrg shift # $arg 44055de1df9Smrg ;; 44155de1df9Smrg esac 44255de1df9Smrg done 44355de1df9Smrg 44455de1df9Smrg test -z "$dashmflag" && dashmflag=-M 44555de1df9Smrg # Require at least two characters before searching for `:' 44655de1df9Smrg # in the target name. This is to cope with DOS-style filenames: 44755de1df9Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 44855de1df9Smrg "$@" $dashmflag | 44955de1df9Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 45055de1df9Smrg rm -f "$depfile" 45155de1df9Smrg cat < "$tmpdepfile" > "$depfile" 45255de1df9Smrg tr ' ' ' 45355de1df9Smrg' < "$tmpdepfile" | \ 45455de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 45555de1df9Smrg## correctly. Breaking it into two sed invocations is a workaround. 45655de1df9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 45755de1df9Smrg rm -f "$tmpdepfile" 45855de1df9Smrg ;; 45955de1df9Smrg 46055de1df9SmrgdashXmstdout) 46155de1df9Smrg # This case only exists to satisfy depend.m4. It is never actually 46255de1df9Smrg # run, as this mode is specially recognized in the preamble. 46355de1df9Smrg exit 1 46455de1df9Smrg ;; 46555de1df9Smrg 46655de1df9Smrgmakedepend) 46755de1df9Smrg "$@" || exit $? 46855de1df9Smrg # Remove any Libtool call 46955de1df9Smrg if test "$libtool" = yes; then 47055de1df9Smrg while test "X$1" != 'X--mode=compile'; do 47155de1df9Smrg shift 47255de1df9Smrg done 47355de1df9Smrg shift 47455de1df9Smrg fi 47555de1df9Smrg # X makedepend 47655de1df9Smrg shift 47755de1df9Smrg cleared=no eat=no 47855de1df9Smrg for arg 47955de1df9Smrg do 48055de1df9Smrg case $cleared in 48155de1df9Smrg no) 48255de1df9Smrg set ""; shift 48355de1df9Smrg cleared=yes ;; 48455de1df9Smrg esac 48555de1df9Smrg if test $eat = yes; then 48655de1df9Smrg eat=no 48755de1df9Smrg continue 48855de1df9Smrg fi 48955de1df9Smrg case "$arg" in 49055de1df9Smrg -D*|-I*) 49155de1df9Smrg set fnord "$@" "$arg"; shift ;; 49255de1df9Smrg # Strip any option that makedepend may not understand. Remove 49355de1df9Smrg # the object too, otherwise makedepend will parse it as a source file. 49455de1df9Smrg -arch) 49555de1df9Smrg eat=yes ;; 49655de1df9Smrg -*|$object) 49755de1df9Smrg ;; 49855de1df9Smrg *) 49955de1df9Smrg set fnord "$@" "$arg"; shift ;; 50055de1df9Smrg esac 50155de1df9Smrg done 50255de1df9Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 50355de1df9Smrg touch "$tmpdepfile" 50455de1df9Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 50555de1df9Smrg rm -f "$depfile" 50655de1df9Smrg cat < "$tmpdepfile" > "$depfile" 50755de1df9Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 50855de1df9Smrg' | \ 50955de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 51055de1df9Smrg## correctly. Breaking it into two sed invocations is a workaround. 51155de1df9Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51255de1df9Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 51355de1df9Smrg ;; 51455de1df9Smrg 51555de1df9Smrgcpp) 51655de1df9Smrg # Important note: in order to support this mode, a compiler *must* 51755de1df9Smrg # always write the preprocessed file to stdout. 51855de1df9Smrg "$@" || exit $? 51955de1df9Smrg 52055de1df9Smrg # Remove the call to Libtool. 52155de1df9Smrg if test "$libtool" = yes; then 52255de1df9Smrg while test "X$1" != 'X--mode=compile'; do 52355de1df9Smrg shift 52455de1df9Smrg done 52555de1df9Smrg shift 52655de1df9Smrg fi 52755de1df9Smrg 52855de1df9Smrg # Remove `-o $object'. 52955de1df9Smrg IFS=" " 53055de1df9Smrg for arg 53155de1df9Smrg do 53255de1df9Smrg case $arg in 53355de1df9Smrg -o) 53455de1df9Smrg shift 53555de1df9Smrg ;; 53655de1df9Smrg $object) 53755de1df9Smrg shift 53855de1df9Smrg ;; 53955de1df9Smrg *) 54055de1df9Smrg set fnord "$@" "$arg" 54155de1df9Smrg shift # fnord 54255de1df9Smrg shift # $arg 54355de1df9Smrg ;; 54455de1df9Smrg esac 54555de1df9Smrg done 54655de1df9Smrg 54755de1df9Smrg "$@" -E | 54855de1df9Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 54955de1df9Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 55055de1df9Smrg sed '$ s: \\$::' > "$tmpdepfile" 55155de1df9Smrg rm -f "$depfile" 55255de1df9Smrg echo "$object : \\" > "$depfile" 55355de1df9Smrg cat < "$tmpdepfile" >> "$depfile" 55455de1df9Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 55555de1df9Smrg rm -f "$tmpdepfile" 55655de1df9Smrg ;; 55755de1df9Smrg 55855de1df9Smrgmsvisualcpp) 55955de1df9Smrg # Important note: in order to support this mode, a compiler *must* 56055de1df9Smrg # always write the preprocessed file to stdout. 56155de1df9Smrg "$@" || exit $? 56255de1df9Smrg 56355de1df9Smrg # Remove the call to Libtool. 56455de1df9Smrg if test "$libtool" = yes; then 56555de1df9Smrg while test "X$1" != 'X--mode=compile'; do 56655de1df9Smrg shift 56755de1df9Smrg done 56855de1df9Smrg shift 56955de1df9Smrg fi 57055de1df9Smrg 57155de1df9Smrg IFS=" " 57255de1df9Smrg for arg 57355de1df9Smrg do 57455de1df9Smrg case "$arg" in 57555de1df9Smrg -o) 57655de1df9Smrg shift 57755de1df9Smrg ;; 57855de1df9Smrg $object) 57955de1df9Smrg shift 58055de1df9Smrg ;; 58155de1df9Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 58255de1df9Smrg set fnord "$@" 58355de1df9Smrg shift 58455de1df9Smrg shift 58555de1df9Smrg ;; 58655de1df9Smrg *) 58755de1df9Smrg set fnord "$@" "$arg" 58855de1df9Smrg shift 58955de1df9Smrg shift 59055de1df9Smrg ;; 59155de1df9Smrg esac 59255de1df9Smrg done 59355de1df9Smrg "$@" -E 2>/dev/null | 59455de1df9Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 59555de1df9Smrg rm -f "$depfile" 59655de1df9Smrg echo "$object : \\" > "$depfile" 59755de1df9Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 59855de1df9Smrg echo " " >> "$depfile" 59955de1df9Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 60055de1df9Smrg rm -f "$tmpdepfile" 60155de1df9Smrg ;; 60255de1df9Smrg 60355de1df9Smrgmsvcmsys) 60455de1df9Smrg # This case exists only to let depend.m4 do its work. It works by 60555de1df9Smrg # looking at the text of this script. This case will never be run, 60655de1df9Smrg # since it is checked for above. 60755de1df9Smrg exit 1 60855de1df9Smrg ;; 60955de1df9Smrg 61055de1df9Smrgnone) 61155de1df9Smrg exec "$@" 61255de1df9Smrg ;; 61355de1df9Smrg 61455de1df9Smrg*) 61555de1df9Smrg echo "Unknown depmode $depmode" 1>&2 61655de1df9Smrg exit 1 61755de1df9Smrg ;; 61855de1df9Smrgesac 61955de1df9Smrg 62055de1df9Smrgexit 0 62155de1df9Smrg 62255de1df9Smrg# Local Variables: 62355de1df9Smrg# mode: shell-script 62455de1df9Smrg# sh-indentation: 2 62555de1df9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 62655de1df9Smrg# time-stamp-start: "scriptversion=" 62755de1df9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62855de1df9Smrg# time-stamp-time-zone: "UTC" 62955de1df9Smrg# time-stamp-end: "; # UTC" 63055de1df9Smrg# End: 631