depcomp revision 61dc2d86
102be438aSmrg#! /bin/sh 202be438aSmrg# depcomp - compile a program generating dependencies as side-effects 302be438aSmrg 461dc2d86Smrgscriptversion=2009-04-28.21; # UTC 502be438aSmrg 661dc2d86Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 761dc2d86Smrg# Software Foundation, Inc. 802be438aSmrg 902be438aSmrg# This program is free software; you can redistribute it and/or modify 1002be438aSmrg# it under the terms of the GNU General Public License as published by 1102be438aSmrg# the Free Software Foundation; either version 2, or (at your option) 1202be438aSmrg# any later version. 1302be438aSmrg 1402be438aSmrg# This program is distributed in the hope that it will be useful, 1502be438aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1602be438aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1702be438aSmrg# GNU General Public License for more details. 1802be438aSmrg 1902be438aSmrg# You should have received a copy of the GNU General Public License 2061dc2d86Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2102be438aSmrg 2202be438aSmrg# As a special exception to the GNU General Public License, if you 2302be438aSmrg# distribute this file as part of a program that contains a 2402be438aSmrg# configuration script generated by Autoconf, you may include it under 2502be438aSmrg# the same distribution terms that you use for the rest of that program. 2602be438aSmrg 2702be438aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2802be438aSmrg 2902be438aSmrgcase $1 in 3002be438aSmrg '') 3102be438aSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3202be438aSmrg exit 1; 3302be438aSmrg ;; 3402be438aSmrg -h | --h*) 3502be438aSmrg cat <<\EOF 3602be438aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 3702be438aSmrg 3802be438aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 3902be438aSmrgas side-effects. 4002be438aSmrg 4102be438aSmrgEnvironment variables: 4202be438aSmrg depmode Dependency tracking mode. 4302be438aSmrg source Source file read by `PROGRAMS ARGS'. 4402be438aSmrg object Object file output by `PROGRAMS ARGS'. 4502be438aSmrg DEPDIR directory where to store dependencies. 4602be438aSmrg depfile Dependency file to output. 4702be438aSmrg tmpdepfile Temporary file to use when outputing dependencies. 4802be438aSmrg libtool Whether libtool is used (yes/no). 4902be438aSmrg 5002be438aSmrgReport bugs to <bug-automake@gnu.org>. 5102be438aSmrgEOF 5202be438aSmrg exit $? 5302be438aSmrg ;; 5402be438aSmrg -v | --v*) 5502be438aSmrg echo "depcomp $scriptversion" 5602be438aSmrg exit $? 5702be438aSmrg ;; 5802be438aSmrgesac 5902be438aSmrg 6002be438aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6102be438aSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6202be438aSmrg exit 1 6302be438aSmrgfi 6402be438aSmrg 6502be438aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 6602be438aSmrgdepfile=${depfile-`echo "$object" | 6702be438aSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6802be438aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6902be438aSmrg 7002be438aSmrgrm -f "$tmpdepfile" 7102be438aSmrg 7202be438aSmrg# Some modes work just like other modes, but use different flags. We 7302be438aSmrg# parameterize here, but still list the modes in the big case below, 7402be438aSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7502be438aSmrg# here, because this file can only contain one case statement. 7602be438aSmrgif test "$depmode" = hp; then 7702be438aSmrg # HP compiler uses -M and no extra arg. 7802be438aSmrg gccflag=-M 7902be438aSmrg depmode=gcc 8002be438aSmrgfi 8102be438aSmrg 8202be438aSmrgif test "$depmode" = dashXmstdout; then 8302be438aSmrg # This is just like dashmstdout with a different argument. 8402be438aSmrg dashmflag=-xM 8502be438aSmrg depmode=dashmstdout 8602be438aSmrgfi 8702be438aSmrg 8861dc2d86Smrgcygpath_u="cygpath -u -f -" 8961dc2d86Smrgif test "$depmode" = msvcmsys; then 9061dc2d86Smrg # This is just like msvisualcpp but w/o cygpath translation. 9161dc2d86Smrg # Just convert the backslash-escaped backslashes to single forward 9261dc2d86Smrg # slashes to satisfy depend.m4 9361dc2d86Smrg cygpath_u="sed s,\\\\\\\\,/,g" 9461dc2d86Smrg depmode=msvisualcpp 9561dc2d86Smrgfi 9661dc2d86Smrg 9702be438aSmrgcase "$depmode" in 9802be438aSmrggcc3) 9902be438aSmrg## gcc 3 implements dependency tracking that does exactly what 10002be438aSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10102be438aSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 102880ed95aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103880ed95aSmrg## the command line argument order; so add the flags where they 104880ed95aSmrg## appear in depend2.am. Note that the slowdown incurred here 105880ed95aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106880ed95aSmrg for arg 107880ed95aSmrg do 108880ed95aSmrg case $arg in 109880ed95aSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110880ed95aSmrg *) set fnord "$@" "$arg" ;; 111880ed95aSmrg esac 112880ed95aSmrg shift # fnord 113880ed95aSmrg shift # $arg 114880ed95aSmrg done 115880ed95aSmrg "$@" 11602be438aSmrg stat=$? 11702be438aSmrg if test $stat -eq 0; then : 11802be438aSmrg else 11902be438aSmrg rm -f "$tmpdepfile" 12002be438aSmrg exit $stat 12102be438aSmrg fi 12202be438aSmrg mv "$tmpdepfile" "$depfile" 12302be438aSmrg ;; 12402be438aSmrg 12502be438aSmrggcc) 12602be438aSmrg## There are various ways to get dependency output from gcc. Here's 12702be438aSmrg## why we pick this rather obscure method: 12802be438aSmrg## - Don't want to use -MD because we'd like the dependencies to end 12902be438aSmrg## up in a subdir. Having to rename by hand is ugly. 13002be438aSmrg## (We might end up doing this anyway to support other compilers.) 13102be438aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 13202be438aSmrg## -MM, not -M (despite what the docs say). 13302be438aSmrg## - Using -M directly means running the compiler twice (even worse 13402be438aSmrg## than renaming). 13502be438aSmrg if test -z "$gccflag"; then 13602be438aSmrg gccflag=-MD, 13702be438aSmrg fi 13802be438aSmrg "$@" -Wp,"$gccflag$tmpdepfile" 13902be438aSmrg stat=$? 14002be438aSmrg if test $stat -eq 0; then : 14102be438aSmrg else 14202be438aSmrg rm -f "$tmpdepfile" 14302be438aSmrg exit $stat 14402be438aSmrg fi 14502be438aSmrg rm -f "$depfile" 14602be438aSmrg echo "$object : \\" > "$depfile" 14702be438aSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14802be438aSmrg## The second -e expression handles DOS-style file names with drive letters. 14902be438aSmrg sed -e 's/^[^:]*: / /' \ 15002be438aSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15102be438aSmrg## This next piece of magic avoids the `deleted header file' problem. 15202be438aSmrg## The problem is that when a header file which appears in a .P file 15302be438aSmrg## is deleted, the dependency causes make to die (because there is 15402be438aSmrg## typically no way to rebuild the header). We avoid this by adding 15502be438aSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 15602be438aSmrg## this for us directly. 15702be438aSmrg tr ' ' ' 15802be438aSmrg' < "$tmpdepfile" | 15902be438aSmrg## Some versions of gcc put a space before the `:'. On the theory 16002be438aSmrg## that the space means something, we add a space to the output as 16102be438aSmrg## well. 16202be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 16302be438aSmrg## correctly. Breaking it into two sed invocations is a workaround. 16402be438aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 16502be438aSmrg rm -f "$tmpdepfile" 16602be438aSmrg ;; 16702be438aSmrg 16802be438aSmrghp) 16902be438aSmrg # This case exists only to let depend.m4 do its work. It works by 17002be438aSmrg # looking at the text of this script. This case will never be run, 17102be438aSmrg # since it is checked for above. 17202be438aSmrg exit 1 17302be438aSmrg ;; 17402be438aSmrg 17502be438aSmrgsgi) 17602be438aSmrg if test "$libtool" = yes; then 17702be438aSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17802be438aSmrg else 17902be438aSmrg "$@" -MDupdate "$tmpdepfile" 18002be438aSmrg fi 18102be438aSmrg stat=$? 18202be438aSmrg if test $stat -eq 0; then : 18302be438aSmrg else 18402be438aSmrg rm -f "$tmpdepfile" 18502be438aSmrg exit $stat 18602be438aSmrg fi 18702be438aSmrg rm -f "$depfile" 18802be438aSmrg 18902be438aSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 19002be438aSmrg echo "$object : \\" > "$depfile" 19102be438aSmrg 19202be438aSmrg # Clip off the initial element (the dependent). Don't try to be 19302be438aSmrg # clever and replace this with sed code, as IRIX sed won't handle 19402be438aSmrg # lines with more than a fixed number of characters (4096 in 19502be438aSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 19602be438aSmrg # the IRIX cc adds comments like `#:fec' to the end of the 19702be438aSmrg # dependency line. 19802be438aSmrg tr ' ' ' 19902be438aSmrg' < "$tmpdepfile" \ 20002be438aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 20102be438aSmrg tr ' 20261dc2d86Smrg' ' ' >> "$depfile" 20361dc2d86Smrg echo >> "$depfile" 20402be438aSmrg 20502be438aSmrg # The second pass generates a dummy entry for each header file. 20602be438aSmrg tr ' ' ' 20702be438aSmrg' < "$tmpdepfile" \ 20802be438aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20961dc2d86Smrg >> "$depfile" 21002be438aSmrg else 21102be438aSmrg # The sourcefile does not contain any dependencies, so just 21202be438aSmrg # store a dummy comment line, to avoid errors with the Makefile 21302be438aSmrg # "include basename.Plo" scheme. 21402be438aSmrg echo "#dummy" > "$depfile" 21502be438aSmrg fi 21602be438aSmrg rm -f "$tmpdepfile" 21702be438aSmrg ;; 21802be438aSmrg 21902be438aSmrgaix) 22002be438aSmrg # The C for AIX Compiler uses -M and outputs the dependencies 22102be438aSmrg # in a .u file. In older versions, this file always lives in the 22202be438aSmrg # current directory. Also, the AIX compiler puts `$object:' at the 22302be438aSmrg # start of each line; $object doesn't have directory information. 22402be438aSmrg # Version 6 uses the directory in both cases. 225880ed95aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226880ed95aSmrg test "x$dir" = "x$object" && dir= 227880ed95aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 22802be438aSmrg if test "$libtool" = yes; then 229880ed95aSmrg tmpdepfile1=$dir$base.u 230880ed95aSmrg tmpdepfile2=$base.u 231880ed95aSmrg tmpdepfile3=$dir.libs/$base.u 23202be438aSmrg "$@" -Wc,-M 23302be438aSmrg else 234880ed95aSmrg tmpdepfile1=$dir$base.u 235880ed95aSmrg tmpdepfile2=$dir$base.u 236880ed95aSmrg tmpdepfile3=$dir$base.u 23702be438aSmrg "$@" -M 23802be438aSmrg fi 23902be438aSmrg stat=$? 24002be438aSmrg 24102be438aSmrg if test $stat -eq 0; then : 24202be438aSmrg else 243880ed95aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24402be438aSmrg exit $stat 24502be438aSmrg fi 24602be438aSmrg 247880ed95aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248880ed95aSmrg do 249880ed95aSmrg test -f "$tmpdepfile" && break 250880ed95aSmrg done 25102be438aSmrg if test -f "$tmpdepfile"; then 25202be438aSmrg # Each line is of the form `foo.o: dependent.h'. 25302be438aSmrg # Do two passes, one to just change these to 25402be438aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 255880ed95aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256880ed95aSmrg # That's a tab and a space in the []. 257880ed95aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 25802be438aSmrg else 25902be438aSmrg # The sourcefile does not contain any dependencies, so just 26002be438aSmrg # store a dummy comment line, to avoid errors with the Makefile 26102be438aSmrg # "include basename.Plo" scheme. 26202be438aSmrg echo "#dummy" > "$depfile" 26302be438aSmrg fi 26402be438aSmrg rm -f "$tmpdepfile" 26502be438aSmrg ;; 26602be438aSmrg 26702be438aSmrgicc) 26802be438aSmrg # Intel's C compiler understands `-MD -MF file'. However on 26902be438aSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 27002be438aSmrg # ICC 7.0 will fill foo.d with something like 27102be438aSmrg # foo.o: sub/foo.c 27202be438aSmrg # foo.o: sub/foo.h 27302be438aSmrg # which is wrong. We want: 27402be438aSmrg # sub/foo.o: sub/foo.c 27502be438aSmrg # sub/foo.o: sub/foo.h 27602be438aSmrg # sub/foo.c: 27702be438aSmrg # sub/foo.h: 27802be438aSmrg # ICC 7.1 will output 27902be438aSmrg # foo.o: sub/foo.c sub/foo.h 28002be438aSmrg # and will wrap long lines using \ : 28102be438aSmrg # foo.o: sub/foo.c ... \ 28202be438aSmrg # sub/foo.h ... \ 28302be438aSmrg # ... 28402be438aSmrg 28502be438aSmrg "$@" -MD -MF "$tmpdepfile" 28602be438aSmrg stat=$? 28702be438aSmrg if test $stat -eq 0; then : 28802be438aSmrg else 28902be438aSmrg rm -f "$tmpdepfile" 29002be438aSmrg exit $stat 29102be438aSmrg fi 29202be438aSmrg rm -f "$depfile" 29302be438aSmrg # Each line is of the form `foo.o: dependent.h', 29402be438aSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 29502be438aSmrg # Do two passes, one to just change these to 29602be438aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 29702be438aSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 29802be438aSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 29902be438aSmrg # correctly. Breaking it into two sed invocations is a workaround. 30002be438aSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 30102be438aSmrg sed -e 's/$/ :/' >> "$depfile" 30202be438aSmrg rm -f "$tmpdepfile" 30302be438aSmrg ;; 30402be438aSmrg 305880ed95aSmrghp2) 306880ed95aSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307880ed95aSmrg # compilers, which have integrated preprocessors. The correct option 308880ed95aSmrg # to use with these is +Maked; it writes dependencies to a file named 309880ed95aSmrg # 'foo.d', which lands next to the object file, wherever that 310880ed95aSmrg # happens to be. 311880ed95aSmrg # Much of this is similar to the tru64 case; see comments there. 312880ed95aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313880ed95aSmrg test "x$dir" = "x$object" && dir= 314880ed95aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315880ed95aSmrg if test "$libtool" = yes; then 316880ed95aSmrg tmpdepfile1=$dir$base.d 317880ed95aSmrg tmpdepfile2=$dir.libs/$base.d 318880ed95aSmrg "$@" -Wc,+Maked 319880ed95aSmrg else 320880ed95aSmrg tmpdepfile1=$dir$base.d 321880ed95aSmrg tmpdepfile2=$dir$base.d 322880ed95aSmrg "$@" +Maked 323880ed95aSmrg fi 324880ed95aSmrg stat=$? 325880ed95aSmrg if test $stat -eq 0; then : 326880ed95aSmrg else 327880ed95aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328880ed95aSmrg exit $stat 329880ed95aSmrg fi 330880ed95aSmrg 331880ed95aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332880ed95aSmrg do 333880ed95aSmrg test -f "$tmpdepfile" && break 334880ed95aSmrg done 335880ed95aSmrg if test -f "$tmpdepfile"; then 336880ed95aSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337880ed95aSmrg # Add `dependent.h:' lines. 33861dc2d86Smrg sed -ne '2,${ 33961dc2d86Smrg s/^ *// 34061dc2d86Smrg s/ \\*$// 34161dc2d86Smrg s/$/:/ 34261dc2d86Smrg p 34361dc2d86Smrg }' "$tmpdepfile" >> "$depfile" 344880ed95aSmrg else 345880ed95aSmrg echo "#dummy" > "$depfile" 346880ed95aSmrg fi 347880ed95aSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 348880ed95aSmrg ;; 349880ed95aSmrg 35002be438aSmrgtru64) 35102be438aSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 35202be438aSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 35302be438aSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 35402be438aSmrg # dependencies in `foo.d' instead, so we check for that too. 35502be438aSmrg # Subdirectories are respected. 35602be438aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 35702be438aSmrg test "x$dir" = "x$object" && dir= 35802be438aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 35902be438aSmrg 36002be438aSmrg if test "$libtool" = yes; then 36102be438aSmrg # With Tru64 cc, shared objects can also be used to make a 362880ed95aSmrg # static library. This mechanism is used in libtool 1.4 series to 36302be438aSmrg # handle both shared and static libraries in a single compilation. 36402be438aSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 36502be438aSmrg # 36602be438aSmrg # With libtool 1.5 this exception was removed, and libtool now 36702be438aSmrg # generates 2 separate objects for the 2 libraries. These two 368880ed95aSmrg # compilations output dependencies in $dir.libs/$base.o.d and 36902be438aSmrg # in $dir$base.o.d. We have to check for both files, because 37002be438aSmrg # one of the two compilations can be disabled. We should prefer 37102be438aSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 37202be438aSmrg # automatically cleaned when .libs/ is deleted, while ignoring 37302be438aSmrg # the former would cause a distcleancheck panic. 37402be438aSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 37502be438aSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 37602be438aSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 37702be438aSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 37802be438aSmrg "$@" -Wc,-MD 37902be438aSmrg else 38002be438aSmrg tmpdepfile1=$dir$base.o.d 38102be438aSmrg tmpdepfile2=$dir$base.d 38202be438aSmrg tmpdepfile3=$dir$base.d 38302be438aSmrg tmpdepfile4=$dir$base.d 38402be438aSmrg "$@" -MD 38502be438aSmrg fi 38602be438aSmrg 38702be438aSmrg stat=$? 38802be438aSmrg if test $stat -eq 0; then : 38902be438aSmrg else 39002be438aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39102be438aSmrg exit $stat 39202be438aSmrg fi 39302be438aSmrg 39402be438aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39502be438aSmrg do 39602be438aSmrg test -f "$tmpdepfile" && break 39702be438aSmrg done 39802be438aSmrg if test -f "$tmpdepfile"; then 39902be438aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 40002be438aSmrg # That's a tab and a space in the []. 40102be438aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 40202be438aSmrg else 40302be438aSmrg echo "#dummy" > "$depfile" 40402be438aSmrg fi 40502be438aSmrg rm -f "$tmpdepfile" 40602be438aSmrg ;; 40702be438aSmrg 40802be438aSmrg#nosideeffect) 40902be438aSmrg # This comment above is used by automake to tell side-effect 41002be438aSmrg # dependency tracking mechanisms from slower ones. 41102be438aSmrg 41202be438aSmrgdashmstdout) 41302be438aSmrg # Important note: in order to support this mode, a compiler *must* 41402be438aSmrg # always write the preprocessed file to stdout, regardless of -o. 41502be438aSmrg "$@" || exit $? 41602be438aSmrg 41702be438aSmrg # Remove the call to Libtool. 41802be438aSmrg if test "$libtool" = yes; then 41961dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 42002be438aSmrg shift 42102be438aSmrg done 42202be438aSmrg shift 42302be438aSmrg fi 42402be438aSmrg 42502be438aSmrg # Remove `-o $object'. 42602be438aSmrg IFS=" " 42702be438aSmrg for arg 42802be438aSmrg do 42902be438aSmrg case $arg in 43002be438aSmrg -o) 43102be438aSmrg shift 43202be438aSmrg ;; 43302be438aSmrg $object) 43402be438aSmrg shift 43502be438aSmrg ;; 43602be438aSmrg *) 43702be438aSmrg set fnord "$@" "$arg" 43802be438aSmrg shift # fnord 43902be438aSmrg shift # $arg 44002be438aSmrg ;; 44102be438aSmrg esac 44202be438aSmrg done 44302be438aSmrg 44402be438aSmrg test -z "$dashmflag" && dashmflag=-M 44502be438aSmrg # Require at least two characters before searching for `:' 44602be438aSmrg # in the target name. This is to cope with DOS-style filenames: 44702be438aSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 44802be438aSmrg "$@" $dashmflag | 44902be438aSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 45002be438aSmrg rm -f "$depfile" 45102be438aSmrg cat < "$tmpdepfile" > "$depfile" 45202be438aSmrg tr ' ' ' 45302be438aSmrg' < "$tmpdepfile" | \ 45402be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 45502be438aSmrg## correctly. Breaking it into two sed invocations is a workaround. 45602be438aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 45702be438aSmrg rm -f "$tmpdepfile" 45802be438aSmrg ;; 45902be438aSmrg 46002be438aSmrgdashXmstdout) 46102be438aSmrg # This case only exists to satisfy depend.m4. It is never actually 46202be438aSmrg # run, as this mode is specially recognized in the preamble. 46302be438aSmrg exit 1 46402be438aSmrg ;; 46502be438aSmrg 46602be438aSmrgmakedepend) 46702be438aSmrg "$@" || exit $? 46802be438aSmrg # Remove any Libtool call 46902be438aSmrg if test "$libtool" = yes; then 47061dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 47102be438aSmrg shift 47202be438aSmrg done 47302be438aSmrg shift 47402be438aSmrg fi 47502be438aSmrg # X makedepend 47602be438aSmrg shift 47761dc2d86Smrg cleared=no eat=no 47861dc2d86Smrg for arg 47961dc2d86Smrg do 48002be438aSmrg case $cleared in 48102be438aSmrg no) 48202be438aSmrg set ""; shift 48302be438aSmrg cleared=yes ;; 48402be438aSmrg esac 48561dc2d86Smrg if test $eat = yes; then 48661dc2d86Smrg eat=no 48761dc2d86Smrg continue 48861dc2d86Smrg fi 48902be438aSmrg case "$arg" in 49002be438aSmrg -D*|-I*) 49102be438aSmrg set fnord "$@" "$arg"; shift ;; 49202be438aSmrg # Strip any option that makedepend may not understand. Remove 49302be438aSmrg # the object too, otherwise makedepend will parse it as a source file. 49461dc2d86Smrg -arch) 49561dc2d86Smrg eat=yes ;; 49602be438aSmrg -*|$object) 49702be438aSmrg ;; 49802be438aSmrg *) 49902be438aSmrg set fnord "$@" "$arg"; shift ;; 50002be438aSmrg esac 50102be438aSmrg done 50261dc2d86Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 50302be438aSmrg touch "$tmpdepfile" 50402be438aSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 50502be438aSmrg rm -f "$depfile" 50602be438aSmrg cat < "$tmpdepfile" > "$depfile" 50702be438aSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 50802be438aSmrg' | \ 50902be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 51002be438aSmrg## correctly. Breaking it into two sed invocations is a workaround. 51102be438aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51202be438aSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 51302be438aSmrg ;; 51402be438aSmrg 51502be438aSmrgcpp) 51602be438aSmrg # Important note: in order to support this mode, a compiler *must* 51702be438aSmrg # always write the preprocessed file to stdout. 51802be438aSmrg "$@" || exit $? 51902be438aSmrg 52002be438aSmrg # Remove the call to Libtool. 52102be438aSmrg if test "$libtool" = yes; then 52261dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 52302be438aSmrg shift 52402be438aSmrg done 52502be438aSmrg shift 52602be438aSmrg fi 52702be438aSmrg 52802be438aSmrg # Remove `-o $object'. 52902be438aSmrg IFS=" " 53002be438aSmrg for arg 53102be438aSmrg do 53202be438aSmrg case $arg in 53302be438aSmrg -o) 53402be438aSmrg shift 53502be438aSmrg ;; 53602be438aSmrg $object) 53702be438aSmrg shift 53802be438aSmrg ;; 53902be438aSmrg *) 54002be438aSmrg set fnord "$@" "$arg" 54102be438aSmrg shift # fnord 54202be438aSmrg shift # $arg 54302be438aSmrg ;; 54402be438aSmrg esac 54502be438aSmrg done 54602be438aSmrg 54702be438aSmrg "$@" -E | 54802be438aSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 54902be438aSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 55002be438aSmrg sed '$ s: \\$::' > "$tmpdepfile" 55102be438aSmrg rm -f "$depfile" 55202be438aSmrg echo "$object : \\" > "$depfile" 55302be438aSmrg cat < "$tmpdepfile" >> "$depfile" 55402be438aSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 55502be438aSmrg rm -f "$tmpdepfile" 55602be438aSmrg ;; 55702be438aSmrg 55802be438aSmrgmsvisualcpp) 55902be438aSmrg # Important note: in order to support this mode, a compiler *must* 56061dc2d86Smrg # always write the preprocessed file to stdout. 56102be438aSmrg "$@" || exit $? 56261dc2d86Smrg 56361dc2d86Smrg # Remove the call to Libtool. 56461dc2d86Smrg if test "$libtool" = yes; then 56561dc2d86Smrg while test "X$1" != 'X--mode=compile'; do 56661dc2d86Smrg shift 56761dc2d86Smrg done 56861dc2d86Smrg shift 56961dc2d86Smrg fi 57061dc2d86Smrg 57102be438aSmrg IFS=" " 57202be438aSmrg for arg 57302be438aSmrg do 57402be438aSmrg case "$arg" in 57561dc2d86Smrg -o) 57661dc2d86Smrg shift 57761dc2d86Smrg ;; 57861dc2d86Smrg $object) 57961dc2d86Smrg shift 58061dc2d86Smrg ;; 58102be438aSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 58202be438aSmrg set fnord "$@" 58302be438aSmrg shift 58402be438aSmrg shift 58502be438aSmrg ;; 58602be438aSmrg *) 58702be438aSmrg set fnord "$@" "$arg" 58802be438aSmrg shift 58902be438aSmrg shift 59002be438aSmrg ;; 59102be438aSmrg esac 59202be438aSmrg done 59361dc2d86Smrg "$@" -E 2>/dev/null | 59461dc2d86Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 59502be438aSmrg rm -f "$depfile" 59602be438aSmrg echo "$object : \\" > "$depfile" 59761dc2d86Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 59802be438aSmrg echo " " >> "$depfile" 59961dc2d86Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 60002be438aSmrg rm -f "$tmpdepfile" 60102be438aSmrg ;; 60202be438aSmrg 60361dc2d86Smrgmsvcmsys) 60461dc2d86Smrg # This case exists only to let depend.m4 do its work. It works by 60561dc2d86Smrg # looking at the text of this script. This case will never be run, 60661dc2d86Smrg # since it is checked for above. 60761dc2d86Smrg exit 1 60861dc2d86Smrg ;; 60961dc2d86Smrg 61002be438aSmrgnone) 61102be438aSmrg exec "$@" 61202be438aSmrg ;; 61302be438aSmrg 61402be438aSmrg*) 61502be438aSmrg echo "Unknown depmode $depmode" 1>&2 61602be438aSmrg exit 1 61702be438aSmrg ;; 61802be438aSmrgesac 61902be438aSmrg 62002be438aSmrgexit 0 62102be438aSmrg 62202be438aSmrg# Local Variables: 62302be438aSmrg# mode: shell-script 62402be438aSmrg# sh-indentation: 2 62502be438aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 62602be438aSmrg# time-stamp-start: "scriptversion=" 62702be438aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62861dc2d86Smrg# time-stamp-time-zone: "UTC" 62961dc2d86Smrg# time-stamp-end: "; # UTC" 63002be438aSmrg# End: 631