depcomp revision d7accfef
197e8a2e8Smrg#! /bin/sh 297e8a2e8Smrg# depcomp - compile a program generating dependencies as side-effects 3d7accfefSmrg 4d7accfefSmrgscriptversion=2009-04-28.21; # UTC 5d7accfefSmrg 6d7accfefSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7d7accfefSmrg# Software Foundation, Inc. 897e8a2e8Smrg 997e8a2e8Smrg# This program is free software; you can redistribute it and/or modify 1097e8a2e8Smrg# it under the terms of the GNU General Public License as published by 1197e8a2e8Smrg# the Free Software Foundation; either version 2, or (at your option) 1297e8a2e8Smrg# any later version. 1397e8a2e8Smrg 1497e8a2e8Smrg# This program is distributed in the hope that it will be useful, 1597e8a2e8Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1697e8a2e8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1797e8a2e8Smrg# GNU General Public License for more details. 1897e8a2e8Smrg 1997e8a2e8Smrg# You should have received a copy of the GNU General Public License 20d7accfefSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2197e8a2e8Smrg 2297e8a2e8Smrg# As a special exception to the GNU General Public License, if you 2397e8a2e8Smrg# distribute this file as part of a program that contains a 2497e8a2e8Smrg# configuration script generated by Autoconf, you may include it under 2597e8a2e8Smrg# the same distribution terms that you use for the rest of that program. 2697e8a2e8Smrg 2797e8a2e8Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2897e8a2e8Smrg 29d7accfefSmrgcase $1 in 30d7accfefSmrg '') 31d7accfefSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32d7accfefSmrg exit 1; 33d7accfefSmrg ;; 34d7accfefSmrg -h | --h*) 35d7accfefSmrg cat <<\EOF 36d7accfefSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37d7accfefSmrg 38d7accfefSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39d7accfefSmrgas side-effects. 40d7accfefSmrg 41d7accfefSmrgEnvironment variables: 42d7accfefSmrg depmode Dependency tracking mode. 43d7accfefSmrg source Source file read by `PROGRAMS ARGS'. 44d7accfefSmrg object Object file output by `PROGRAMS ARGS'. 45d7accfefSmrg DEPDIR directory where to store dependencies. 46d7accfefSmrg depfile Dependency file to output. 47d7accfefSmrg tmpdepfile Temporary file to use when outputing dependencies. 48d7accfefSmrg libtool Whether libtool is used (yes/no). 49d7accfefSmrg 50d7accfefSmrgReport bugs to <bug-automake@gnu.org>. 51d7accfefSmrgEOF 52d7accfefSmrg exit $? 53d7accfefSmrg ;; 54d7accfefSmrg -v | --v*) 55d7accfefSmrg echo "depcomp $scriptversion" 56d7accfefSmrg exit $? 57d7accfefSmrg ;; 58d7accfefSmrgesac 59d7accfefSmrg 6097e8a2e8Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6197e8a2e8Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6297e8a2e8Smrg exit 1 6397e8a2e8Smrgfi 6497e8a2e8Smrg 65d7accfefSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66d7accfefSmrgdepfile=${depfile-`echo "$object" | 67d7accfefSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6897e8a2e8Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6997e8a2e8Smrg 7097e8a2e8Smrgrm -f "$tmpdepfile" 7197e8a2e8Smrg 7297e8a2e8Smrg# Some modes work just like other modes, but use different flags. We 7397e8a2e8Smrg# parameterize here, but still list the modes in the big case below, 7497e8a2e8Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7597e8a2e8Smrg# here, because this file can only contain one case statement. 7697e8a2e8Smrgif test "$depmode" = hp; then 7797e8a2e8Smrg # HP compiler uses -M and no extra arg. 7897e8a2e8Smrg gccflag=-M 7997e8a2e8Smrg depmode=gcc 8097e8a2e8Smrgfi 8197e8a2e8Smrg 8297e8a2e8Smrgif test "$depmode" = dashXmstdout; then 8397e8a2e8Smrg # This is just like dashmstdout with a different argument. 8497e8a2e8Smrg dashmflag=-xM 8597e8a2e8Smrg depmode=dashmstdout 8697e8a2e8Smrgfi 8797e8a2e8Smrg 88d7accfefSmrgcygpath_u="cygpath -u -f -" 89d7accfefSmrgif test "$depmode" = msvcmsys; then 90d7accfefSmrg # This is just like msvisualcpp but w/o cygpath translation. 91d7accfefSmrg # Just convert the backslash-escaped backslashes to single forward 92d7accfefSmrg # slashes to satisfy depend.m4 93d7accfefSmrg cygpath_u="sed s,\\\\\\\\,/,g" 94d7accfefSmrg depmode=msvisualcpp 95d7accfefSmrgfi 96d7accfefSmrg 9797e8a2e8Smrgcase "$depmode" in 9897e8a2e8Smrggcc3) 9997e8a2e8Smrg## gcc 3 implements dependency tracking that does exactly what 10097e8a2e8Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10197e8a2e8Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102d7accfefSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103d7accfefSmrg## the command line argument order; so add the flags where they 104d7accfefSmrg## appear in depend2.am. Note that the slowdown incurred here 105d7accfefSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106d7accfefSmrg for arg 107d7accfefSmrg do 108d7accfefSmrg case $arg in 109d7accfefSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110d7accfefSmrg *) set fnord "$@" "$arg" ;; 111d7accfefSmrg esac 112d7accfefSmrg shift # fnord 113d7accfefSmrg shift # $arg 114d7accfefSmrg done 115d7accfefSmrg "$@" 11697e8a2e8Smrg stat=$? 11797e8a2e8Smrg if test $stat -eq 0; then : 11897e8a2e8Smrg else 11997e8a2e8Smrg rm -f "$tmpdepfile" 12097e8a2e8Smrg exit $stat 12197e8a2e8Smrg fi 12297e8a2e8Smrg mv "$tmpdepfile" "$depfile" 12397e8a2e8Smrg ;; 12497e8a2e8Smrg 12597e8a2e8Smrggcc) 12697e8a2e8Smrg## There are various ways to get dependency output from gcc. Here's 12797e8a2e8Smrg## why we pick this rather obscure method: 12897e8a2e8Smrg## - Don't want to use -MD because we'd like the dependencies to end 12997e8a2e8Smrg## up in a subdir. Having to rename by hand is ugly. 13097e8a2e8Smrg## (We might end up doing this anyway to support other compilers.) 13197e8a2e8Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 13297e8a2e8Smrg## -MM, not -M (despite what the docs say). 13397e8a2e8Smrg## - Using -M directly means running the compiler twice (even worse 13497e8a2e8Smrg## than renaming). 13597e8a2e8Smrg if test -z "$gccflag"; then 13697e8a2e8Smrg gccflag=-MD, 13797e8a2e8Smrg fi 13897e8a2e8Smrg "$@" -Wp,"$gccflag$tmpdepfile" 13997e8a2e8Smrg stat=$? 14097e8a2e8Smrg if test $stat -eq 0; then : 14197e8a2e8Smrg else 14297e8a2e8Smrg rm -f "$tmpdepfile" 14397e8a2e8Smrg exit $stat 14497e8a2e8Smrg fi 14597e8a2e8Smrg rm -f "$depfile" 14697e8a2e8Smrg echo "$object : \\" > "$depfile" 14797e8a2e8Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14897e8a2e8Smrg## The second -e expression handles DOS-style file names with drive letters. 14997e8a2e8Smrg sed -e 's/^[^:]*: / /' \ 15097e8a2e8Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15197e8a2e8Smrg## This next piece of magic avoids the `deleted header file' problem. 15297e8a2e8Smrg## The problem is that when a header file which appears in a .P file 15397e8a2e8Smrg## is deleted, the dependency causes make to die (because there is 15497e8a2e8Smrg## typically no way to rebuild the header). We avoid this by adding 15597e8a2e8Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 15697e8a2e8Smrg## this for us directly. 15797e8a2e8Smrg tr ' ' ' 15897e8a2e8Smrg' < "$tmpdepfile" | 15997e8a2e8Smrg## Some versions of gcc put a space before the `:'. On the theory 16097e8a2e8Smrg## that the space means something, we add a space to the output as 16197e8a2e8Smrg## well. 16297e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 16397e8a2e8Smrg## correctly. Breaking it into two sed invocations is a workaround. 16497e8a2e8Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 16597e8a2e8Smrg rm -f "$tmpdepfile" 16697e8a2e8Smrg ;; 16797e8a2e8Smrg 16897e8a2e8Smrghp) 16997e8a2e8Smrg # This case exists only to let depend.m4 do its work. It works by 17097e8a2e8Smrg # looking at the text of this script. This case will never be run, 17197e8a2e8Smrg # since it is checked for above. 17297e8a2e8Smrg exit 1 17397e8a2e8Smrg ;; 17497e8a2e8Smrg 17597e8a2e8Smrgsgi) 17697e8a2e8Smrg if test "$libtool" = yes; then 17797e8a2e8Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17897e8a2e8Smrg else 17997e8a2e8Smrg "$@" -MDupdate "$tmpdepfile" 18097e8a2e8Smrg fi 18197e8a2e8Smrg stat=$? 18297e8a2e8Smrg if test $stat -eq 0; then : 18397e8a2e8Smrg else 18497e8a2e8Smrg rm -f "$tmpdepfile" 18597e8a2e8Smrg exit $stat 18697e8a2e8Smrg fi 18797e8a2e8Smrg rm -f "$depfile" 18897e8a2e8Smrg 18997e8a2e8Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 19097e8a2e8Smrg echo "$object : \\" > "$depfile" 19197e8a2e8Smrg 19297e8a2e8Smrg # Clip off the initial element (the dependent). Don't try to be 19397e8a2e8Smrg # clever and replace this with sed code, as IRIX sed won't handle 19497e8a2e8Smrg # lines with more than a fixed number of characters (4096 in 19597e8a2e8Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 19697e8a2e8Smrg # the IRIX cc adds comments like `#:fec' to the end of the 19797e8a2e8Smrg # dependency line. 19897e8a2e8Smrg tr ' ' ' 19997e8a2e8Smrg' < "$tmpdepfile" \ 20097e8a2e8Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 20197e8a2e8Smrg tr ' 202d7accfefSmrg' ' ' >> "$depfile" 203d7accfefSmrg echo >> "$depfile" 20497e8a2e8Smrg 20597e8a2e8Smrg # The second pass generates a dummy entry for each header file. 20697e8a2e8Smrg tr ' ' ' 20797e8a2e8Smrg' < "$tmpdepfile" \ 20897e8a2e8Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209d7accfefSmrg >> "$depfile" 21097e8a2e8Smrg else 21197e8a2e8Smrg # The sourcefile does not contain any dependencies, so just 21297e8a2e8Smrg # store a dummy comment line, to avoid errors with the Makefile 21397e8a2e8Smrg # "include basename.Plo" scheme. 21497e8a2e8Smrg echo "#dummy" > "$depfile" 21597e8a2e8Smrg fi 21697e8a2e8Smrg rm -f "$tmpdepfile" 21797e8a2e8Smrg ;; 21897e8a2e8Smrg 21997e8a2e8Smrgaix) 22097e8a2e8Smrg # The C for AIX Compiler uses -M and outputs the dependencies 22197e8a2e8Smrg # in a .u file. In older versions, this file always lives in the 22297e8a2e8Smrg # current directory. Also, the AIX compiler puts `$object:' at the 22397e8a2e8Smrg # start of each line; $object doesn't have directory information. 22497e8a2e8Smrg # Version 6 uses the directory in both cases. 225d7accfefSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226d7accfefSmrg test "x$dir" = "x$object" && dir= 227d7accfefSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 22897e8a2e8Smrg if test "$libtool" = yes; then 229d7accfefSmrg tmpdepfile1=$dir$base.u 230d7accfefSmrg tmpdepfile2=$base.u 231d7accfefSmrg tmpdepfile3=$dir.libs/$base.u 23297e8a2e8Smrg "$@" -Wc,-M 23397e8a2e8Smrg else 234d7accfefSmrg tmpdepfile1=$dir$base.u 235d7accfefSmrg tmpdepfile2=$dir$base.u 236d7accfefSmrg tmpdepfile3=$dir$base.u 23797e8a2e8Smrg "$@" -M 23897e8a2e8Smrg fi 23997e8a2e8Smrg stat=$? 24097e8a2e8Smrg 24197e8a2e8Smrg if test $stat -eq 0; then : 24297e8a2e8Smrg else 243d7accfefSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24497e8a2e8Smrg exit $stat 24597e8a2e8Smrg fi 24697e8a2e8Smrg 247d7accfefSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248d7accfefSmrg do 249d7accfefSmrg test -f "$tmpdepfile" && break 250d7accfefSmrg done 25197e8a2e8Smrg if test -f "$tmpdepfile"; then 25297e8a2e8Smrg # Each line is of the form `foo.o: dependent.h'. 25397e8a2e8Smrg # Do two passes, one to just change these to 25497e8a2e8Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255d7accfefSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256d7accfefSmrg # That's a tab and a space in the []. 257d7accfefSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 25897e8a2e8Smrg else 25997e8a2e8Smrg # The sourcefile does not contain any dependencies, so just 26097e8a2e8Smrg # store a dummy comment line, to avoid errors with the Makefile 26197e8a2e8Smrg # "include basename.Plo" scheme. 26297e8a2e8Smrg echo "#dummy" > "$depfile" 26397e8a2e8Smrg fi 26497e8a2e8Smrg rm -f "$tmpdepfile" 26597e8a2e8Smrg ;; 26697e8a2e8Smrg 26797e8a2e8Smrgicc) 26897e8a2e8Smrg # Intel's C compiler understands `-MD -MF file'. However on 26997e8a2e8Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 27097e8a2e8Smrg # ICC 7.0 will fill foo.d with something like 27197e8a2e8Smrg # foo.o: sub/foo.c 27297e8a2e8Smrg # foo.o: sub/foo.h 27397e8a2e8Smrg # which is wrong. We want: 27497e8a2e8Smrg # sub/foo.o: sub/foo.c 27597e8a2e8Smrg # sub/foo.o: sub/foo.h 27697e8a2e8Smrg # sub/foo.c: 27797e8a2e8Smrg # sub/foo.h: 27897e8a2e8Smrg # ICC 7.1 will output 27997e8a2e8Smrg # foo.o: sub/foo.c sub/foo.h 28097e8a2e8Smrg # and will wrap long lines using \ : 28197e8a2e8Smrg # foo.o: sub/foo.c ... \ 28297e8a2e8Smrg # sub/foo.h ... \ 28397e8a2e8Smrg # ... 28497e8a2e8Smrg 28597e8a2e8Smrg "$@" -MD -MF "$tmpdepfile" 28697e8a2e8Smrg stat=$? 28797e8a2e8Smrg if test $stat -eq 0; then : 28897e8a2e8Smrg else 28997e8a2e8Smrg rm -f "$tmpdepfile" 29097e8a2e8Smrg exit $stat 29197e8a2e8Smrg fi 29297e8a2e8Smrg rm -f "$depfile" 29397e8a2e8Smrg # Each line is of the form `foo.o: dependent.h', 29497e8a2e8Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 29597e8a2e8Smrg # Do two passes, one to just change these to 29697e8a2e8Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 29797e8a2e8Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 29897e8a2e8Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 29997e8a2e8Smrg # correctly. Breaking it into two sed invocations is a workaround. 30097e8a2e8Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 30197e8a2e8Smrg sed -e 's/$/ :/' >> "$depfile" 30297e8a2e8Smrg rm -f "$tmpdepfile" 30397e8a2e8Smrg ;; 30497e8a2e8Smrg 305d7accfefSmrghp2) 306d7accfefSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307d7accfefSmrg # compilers, which have integrated preprocessors. The correct option 308d7accfefSmrg # to use with these is +Maked; it writes dependencies to a file named 309d7accfefSmrg # 'foo.d', which lands next to the object file, wherever that 310d7accfefSmrg # happens to be. 311d7accfefSmrg # Much of this is similar to the tru64 case; see comments there. 312d7accfefSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313d7accfefSmrg test "x$dir" = "x$object" && dir= 314d7accfefSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315d7accfefSmrg if test "$libtool" = yes; then 316d7accfefSmrg tmpdepfile1=$dir$base.d 317d7accfefSmrg tmpdepfile2=$dir.libs/$base.d 318d7accfefSmrg "$@" -Wc,+Maked 319d7accfefSmrg else 320d7accfefSmrg tmpdepfile1=$dir$base.d 321d7accfefSmrg tmpdepfile2=$dir$base.d 322d7accfefSmrg "$@" +Maked 323d7accfefSmrg fi 324d7accfefSmrg stat=$? 325d7accfefSmrg if test $stat -eq 0; then : 326d7accfefSmrg else 327d7accfefSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328d7accfefSmrg exit $stat 329d7accfefSmrg fi 330d7accfefSmrg 331d7accfefSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332d7accfefSmrg do 333d7accfefSmrg test -f "$tmpdepfile" && break 334d7accfefSmrg done 335d7accfefSmrg if test -f "$tmpdepfile"; then 336d7accfefSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337d7accfefSmrg # Add `dependent.h:' lines. 338d7accfefSmrg sed -ne '2,${ 339d7accfefSmrg s/^ *// 340d7accfefSmrg s/ \\*$// 341d7accfefSmrg s/$/:/ 342d7accfefSmrg p 343d7accfefSmrg }' "$tmpdepfile" >> "$depfile" 344d7accfefSmrg else 345d7accfefSmrg echo "#dummy" > "$depfile" 346d7accfefSmrg fi 347d7accfefSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 348d7accfefSmrg ;; 349d7accfefSmrg 35097e8a2e8Smrgtru64) 35197e8a2e8Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 35297e8a2e8Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 35397e8a2e8Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 35497e8a2e8Smrg # dependencies in `foo.d' instead, so we check for that too. 35597e8a2e8Smrg # Subdirectories are respected. 35697e8a2e8Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 35797e8a2e8Smrg test "x$dir" = "x$object" && dir= 35897e8a2e8Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 35997e8a2e8Smrg 36097e8a2e8Smrg if test "$libtool" = yes; then 361d7accfefSmrg # With Tru64 cc, shared objects can also be used to make a 362d7accfefSmrg # static library. This mechanism is used in libtool 1.4 series to 363d7accfefSmrg # handle both shared and static libraries in a single compilation. 364d7accfefSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365d7accfefSmrg # 366d7accfefSmrg # With libtool 1.5 this exception was removed, and libtool now 367d7accfefSmrg # generates 2 separate objects for the 2 libraries. These two 368d7accfefSmrg # compilations output dependencies in $dir.libs/$base.o.d and 369d7accfefSmrg # in $dir$base.o.d. We have to check for both files, because 370d7accfefSmrg # one of the two compilations can be disabled. We should prefer 371d7accfefSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372d7accfefSmrg # automatically cleaned when .libs/ is deleted, while ignoring 373d7accfefSmrg # the former would cause a distcleancheck panic. 374d7accfefSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375d7accfefSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376d7accfefSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377d7accfefSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 37897e8a2e8Smrg "$@" -Wc,-MD 37997e8a2e8Smrg else 380d7accfefSmrg tmpdepfile1=$dir$base.o.d 381d7accfefSmrg tmpdepfile2=$dir$base.d 382d7accfefSmrg tmpdepfile3=$dir$base.d 383d7accfefSmrg tmpdepfile4=$dir$base.d 38497e8a2e8Smrg "$@" -MD 38597e8a2e8Smrg fi 38697e8a2e8Smrg 38797e8a2e8Smrg stat=$? 38897e8a2e8Smrg if test $stat -eq 0; then : 38997e8a2e8Smrg else 390d7accfefSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39197e8a2e8Smrg exit $stat 39297e8a2e8Smrg fi 39397e8a2e8Smrg 394d7accfefSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395d7accfefSmrg do 396d7accfefSmrg test -f "$tmpdepfile" && break 397d7accfefSmrg done 39897e8a2e8Smrg if test -f "$tmpdepfile"; then 39997e8a2e8Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 40097e8a2e8Smrg # That's a tab and a space in the []. 40197e8a2e8Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 40297e8a2e8Smrg else 40397e8a2e8Smrg echo "#dummy" > "$depfile" 40497e8a2e8Smrg fi 40597e8a2e8Smrg rm -f "$tmpdepfile" 40697e8a2e8Smrg ;; 40797e8a2e8Smrg 40897e8a2e8Smrg#nosideeffect) 40997e8a2e8Smrg # This comment above is used by automake to tell side-effect 41097e8a2e8Smrg # dependency tracking mechanisms from slower ones. 41197e8a2e8Smrg 41297e8a2e8Smrgdashmstdout) 41397e8a2e8Smrg # Important note: in order to support this mode, a compiler *must* 41497e8a2e8Smrg # always write the preprocessed file to stdout, regardless of -o. 41597e8a2e8Smrg "$@" || exit $? 41697e8a2e8Smrg 41797e8a2e8Smrg # Remove the call to Libtool. 41897e8a2e8Smrg if test "$libtool" = yes; then 419d7accfefSmrg while test "X$1" != 'X--mode=compile'; do 42097e8a2e8Smrg shift 42197e8a2e8Smrg done 42297e8a2e8Smrg shift 42397e8a2e8Smrg fi 42497e8a2e8Smrg 42597e8a2e8Smrg # Remove `-o $object'. 42697e8a2e8Smrg IFS=" " 42797e8a2e8Smrg for arg 42897e8a2e8Smrg do 42997e8a2e8Smrg case $arg in 43097e8a2e8Smrg -o) 43197e8a2e8Smrg shift 43297e8a2e8Smrg ;; 43397e8a2e8Smrg $object) 43497e8a2e8Smrg shift 43597e8a2e8Smrg ;; 43697e8a2e8Smrg *) 43797e8a2e8Smrg set fnord "$@" "$arg" 43897e8a2e8Smrg shift # fnord 43997e8a2e8Smrg shift # $arg 44097e8a2e8Smrg ;; 44197e8a2e8Smrg esac 44297e8a2e8Smrg done 44397e8a2e8Smrg 44497e8a2e8Smrg test -z "$dashmflag" && dashmflag=-M 44597e8a2e8Smrg # Require at least two characters before searching for `:' 44697e8a2e8Smrg # in the target name. This is to cope with DOS-style filenames: 44797e8a2e8Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 44897e8a2e8Smrg "$@" $dashmflag | 44997e8a2e8Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 45097e8a2e8Smrg rm -f "$depfile" 45197e8a2e8Smrg cat < "$tmpdepfile" > "$depfile" 45297e8a2e8Smrg tr ' ' ' 45397e8a2e8Smrg' < "$tmpdepfile" | \ 45497e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 45597e8a2e8Smrg## correctly. Breaking it into two sed invocations is a workaround. 45697e8a2e8Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 45797e8a2e8Smrg rm -f "$tmpdepfile" 45897e8a2e8Smrg ;; 45997e8a2e8Smrg 46097e8a2e8SmrgdashXmstdout) 46197e8a2e8Smrg # This case only exists to satisfy depend.m4. It is never actually 46297e8a2e8Smrg # run, as this mode is specially recognized in the preamble. 46397e8a2e8Smrg exit 1 46497e8a2e8Smrg ;; 46597e8a2e8Smrg 46697e8a2e8Smrgmakedepend) 46797e8a2e8Smrg "$@" || exit $? 46897e8a2e8Smrg # Remove any Libtool call 46997e8a2e8Smrg if test "$libtool" = yes; then 470d7accfefSmrg while test "X$1" != 'X--mode=compile'; do 47197e8a2e8Smrg shift 47297e8a2e8Smrg done 47397e8a2e8Smrg shift 47497e8a2e8Smrg fi 47597e8a2e8Smrg # X makedepend 47697e8a2e8Smrg shift 477d7accfefSmrg cleared=no eat=no 478d7accfefSmrg for arg 479d7accfefSmrg do 48097e8a2e8Smrg case $cleared in 48197e8a2e8Smrg no) 48297e8a2e8Smrg set ""; shift 48397e8a2e8Smrg cleared=yes ;; 48497e8a2e8Smrg esac 485d7accfefSmrg if test $eat = yes; then 486d7accfefSmrg eat=no 487d7accfefSmrg continue 488d7accfefSmrg fi 48997e8a2e8Smrg case "$arg" in 49097e8a2e8Smrg -D*|-I*) 49197e8a2e8Smrg set fnord "$@" "$arg"; shift ;; 49297e8a2e8Smrg # Strip any option that makedepend may not understand. Remove 49397e8a2e8Smrg # the object too, otherwise makedepend will parse it as a source file. 494d7accfefSmrg -arch) 495d7accfefSmrg eat=yes ;; 49697e8a2e8Smrg -*|$object) 49797e8a2e8Smrg ;; 49897e8a2e8Smrg *) 49997e8a2e8Smrg set fnord "$@" "$arg"; shift ;; 50097e8a2e8Smrg esac 50197e8a2e8Smrg done 502d7accfefSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 50397e8a2e8Smrg touch "$tmpdepfile" 50497e8a2e8Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 50597e8a2e8Smrg rm -f "$depfile" 50697e8a2e8Smrg cat < "$tmpdepfile" > "$depfile" 50797e8a2e8Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 50897e8a2e8Smrg' | \ 50997e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 51097e8a2e8Smrg## correctly. Breaking it into two sed invocations is a workaround. 51197e8a2e8Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51297e8a2e8Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 51397e8a2e8Smrg ;; 51497e8a2e8Smrg 51597e8a2e8Smrgcpp) 51697e8a2e8Smrg # Important note: in order to support this mode, a compiler *must* 51797e8a2e8Smrg # always write the preprocessed file to stdout. 51897e8a2e8Smrg "$@" || exit $? 51997e8a2e8Smrg 52097e8a2e8Smrg # Remove the call to Libtool. 52197e8a2e8Smrg if test "$libtool" = yes; then 522d7accfefSmrg while test "X$1" != 'X--mode=compile'; do 52397e8a2e8Smrg shift 52497e8a2e8Smrg done 52597e8a2e8Smrg shift 52697e8a2e8Smrg fi 52797e8a2e8Smrg 52897e8a2e8Smrg # Remove `-o $object'. 52997e8a2e8Smrg IFS=" " 53097e8a2e8Smrg for arg 53197e8a2e8Smrg do 53297e8a2e8Smrg case $arg in 53397e8a2e8Smrg -o) 53497e8a2e8Smrg shift 53597e8a2e8Smrg ;; 53697e8a2e8Smrg $object) 53797e8a2e8Smrg shift 53897e8a2e8Smrg ;; 53997e8a2e8Smrg *) 54097e8a2e8Smrg set fnord "$@" "$arg" 54197e8a2e8Smrg shift # fnord 54297e8a2e8Smrg shift # $arg 54397e8a2e8Smrg ;; 54497e8a2e8Smrg esac 54597e8a2e8Smrg done 54697e8a2e8Smrg 54797e8a2e8Smrg "$@" -E | 548d7accfefSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549d7accfefSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 55097e8a2e8Smrg sed '$ s: \\$::' > "$tmpdepfile" 55197e8a2e8Smrg rm -f "$depfile" 55297e8a2e8Smrg echo "$object : \\" > "$depfile" 55397e8a2e8Smrg cat < "$tmpdepfile" >> "$depfile" 55497e8a2e8Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 55597e8a2e8Smrg rm -f "$tmpdepfile" 55697e8a2e8Smrg ;; 55797e8a2e8Smrg 55897e8a2e8Smrgmsvisualcpp) 55997e8a2e8Smrg # Important note: in order to support this mode, a compiler *must* 560d7accfefSmrg # always write the preprocessed file to stdout. 56197e8a2e8Smrg "$@" || exit $? 562d7accfefSmrg 563d7accfefSmrg # Remove the call to Libtool. 564d7accfefSmrg if test "$libtool" = yes; then 565d7accfefSmrg while test "X$1" != 'X--mode=compile'; do 566d7accfefSmrg shift 567d7accfefSmrg done 568d7accfefSmrg shift 569d7accfefSmrg fi 570d7accfefSmrg 57197e8a2e8Smrg IFS=" " 57297e8a2e8Smrg for arg 57397e8a2e8Smrg do 57497e8a2e8Smrg case "$arg" in 575d7accfefSmrg -o) 576d7accfefSmrg shift 577d7accfefSmrg ;; 578d7accfefSmrg $object) 579d7accfefSmrg shift 580d7accfefSmrg ;; 58197e8a2e8Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 58297e8a2e8Smrg set fnord "$@" 58397e8a2e8Smrg shift 58497e8a2e8Smrg shift 58597e8a2e8Smrg ;; 58697e8a2e8Smrg *) 58797e8a2e8Smrg set fnord "$@" "$arg" 58897e8a2e8Smrg shift 58997e8a2e8Smrg shift 59097e8a2e8Smrg ;; 59197e8a2e8Smrg esac 59297e8a2e8Smrg done 593d7accfefSmrg "$@" -E 2>/dev/null | 594d7accfefSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 59597e8a2e8Smrg rm -f "$depfile" 59697e8a2e8Smrg echo "$object : \\" > "$depfile" 597d7accfefSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 59897e8a2e8Smrg echo " " >> "$depfile" 599d7accfefSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 60097e8a2e8Smrg rm -f "$tmpdepfile" 60197e8a2e8Smrg ;; 60297e8a2e8Smrg 603d7accfefSmrgmsvcmsys) 604d7accfefSmrg # This case exists only to let depend.m4 do its work. It works by 605d7accfefSmrg # looking at the text of this script. This case will never be run, 606d7accfefSmrg # since it is checked for above. 607d7accfefSmrg exit 1 608d7accfefSmrg ;; 609d7accfefSmrg 61097e8a2e8Smrgnone) 61197e8a2e8Smrg exec "$@" 61297e8a2e8Smrg ;; 61397e8a2e8Smrg 61497e8a2e8Smrg*) 61597e8a2e8Smrg echo "Unknown depmode $depmode" 1>&2 61697e8a2e8Smrg exit 1 61797e8a2e8Smrg ;; 61897e8a2e8Smrgesac 61997e8a2e8Smrg 62097e8a2e8Smrgexit 0 621d7accfefSmrg 622d7accfefSmrg# Local Variables: 623d7accfefSmrg# mode: shell-script 624d7accfefSmrg# sh-indentation: 2 625d7accfefSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626d7accfefSmrg# time-stamp-start: "scriptversion=" 627d7accfefSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628d7accfefSmrg# time-stamp-time-zone: "UTC" 629d7accfefSmrg# time-stamp-end: "; # UTC" 630d7accfefSmrg# End: 631