depcomp revision 3f6d0e1d
1692f60a7Smrg#! /bin/sh 2692f60a7Smrg# depcomp - compile a program generating dependencies as side-effects 3692f60a7Smrg 43f6d0e1dSmrgscriptversion=2011-12-04.11; # UTC 5692f60a7Smrg 63f6d0e1dSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 73f6d0e1dSmrg# 2011 Free Software Foundation, Inc. 8692f60a7Smrg 9692f60a7Smrg# This program is free software; you can redistribute it and/or modify 10692f60a7Smrg# it under the terms of the GNU General Public License as published by 11692f60a7Smrg# the Free Software Foundation; either version 2, or (at your option) 12692f60a7Smrg# any later version. 13692f60a7Smrg 14692f60a7Smrg# This program is distributed in the hope that it will be useful, 15692f60a7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17692f60a7Smrg# GNU General Public License for more details. 18692f60a7Smrg 19692f60a7Smrg# You should have received a copy of the GNU General Public License 203f6d0e1dSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21692f60a7Smrg 22692f60a7Smrg# As a special exception to the GNU General Public License, if you 23692f60a7Smrg# distribute this file as part of a program that contains a 24692f60a7Smrg# configuration script generated by Autoconf, you may include it under 25692f60a7Smrg# the same distribution terms that you use for the rest of that program. 26692f60a7Smrg 27692f60a7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28692f60a7Smrg 29692f60a7Smrgcase $1 in 30692f60a7Smrg '') 31692f60a7Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32692f60a7Smrg exit 1; 33692f60a7Smrg ;; 34692f60a7Smrg -h | --h*) 35692f60a7Smrg cat <<\EOF 36692f60a7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37692f60a7Smrg 38692f60a7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39692f60a7Smrgas side-effects. 40692f60a7Smrg 41692f60a7SmrgEnvironment variables: 42692f60a7Smrg depmode Dependency tracking mode. 43692f60a7Smrg source Source file read by `PROGRAMS ARGS'. 44692f60a7Smrg object Object file output by `PROGRAMS ARGS'. 45692f60a7Smrg DEPDIR directory where to store dependencies. 46692f60a7Smrg depfile Dependency file to output. 473f6d0e1dSmrg tmpdepfile Temporary file to use when outputting dependencies. 48692f60a7Smrg libtool Whether libtool is used (yes/no). 49692f60a7Smrg 50692f60a7SmrgReport bugs to <bug-automake@gnu.org>. 51692f60a7SmrgEOF 52692f60a7Smrg exit $? 53692f60a7Smrg ;; 54692f60a7Smrg -v | --v*) 55692f60a7Smrg echo "depcomp $scriptversion" 56692f60a7Smrg exit $? 57692f60a7Smrg ;; 58692f60a7Smrgesac 59692f60a7Smrg 60692f60a7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61692f60a7Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62692f60a7Smrg exit 1 63692f60a7Smrgfi 64692f60a7Smrg 65692f60a7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66692f60a7Smrgdepfile=${depfile-`echo "$object" | 67692f60a7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68692f60a7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69692f60a7Smrg 70692f60a7Smrgrm -f "$tmpdepfile" 71692f60a7Smrg 72692f60a7Smrg# Some modes work just like other modes, but use different flags. We 73692f60a7Smrg# parameterize here, but still list the modes in the big case below, 74692f60a7Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75692f60a7Smrg# here, because this file can only contain one case statement. 76692f60a7Smrgif test "$depmode" = hp; then 77692f60a7Smrg # HP compiler uses -M and no extra arg. 78692f60a7Smrg gccflag=-M 79692f60a7Smrg depmode=gcc 80692f60a7Smrgfi 81692f60a7Smrg 82692f60a7Smrgif test "$depmode" = dashXmstdout; then 83692f60a7Smrg # This is just like dashmstdout with a different argument. 84692f60a7Smrg dashmflag=-xM 85692f60a7Smrg depmode=dashmstdout 86692f60a7Smrgfi 87692f60a7Smrg 883f6d0e1dSmrgcygpath_u="cygpath -u -f -" 893f6d0e1dSmrgif test "$depmode" = msvcmsys; then 903f6d0e1dSmrg # This is just like msvisualcpp but w/o cygpath translation. 913f6d0e1dSmrg # Just convert the backslash-escaped backslashes to single forward 923f6d0e1dSmrg # slashes to satisfy depend.m4 933f6d0e1dSmrg cygpath_u='sed s,\\\\,/,g' 943f6d0e1dSmrg depmode=msvisualcpp 953f6d0e1dSmrgfi 963f6d0e1dSmrg 973f6d0e1dSmrgif test "$depmode" = msvc7msys; then 983f6d0e1dSmrg # This is just like msvc7 but w/o cygpath translation. 993f6d0e1dSmrg # Just convert the backslash-escaped backslashes to single forward 1003f6d0e1dSmrg # slashes to satisfy depend.m4 1013f6d0e1dSmrg cygpath_u='sed s,\\\\,/,g' 1023f6d0e1dSmrg depmode=msvc7 1033f6d0e1dSmrgfi 1043f6d0e1dSmrg 105692f60a7Smrgcase "$depmode" in 106692f60a7Smrggcc3) 107692f60a7Smrg## gcc 3 implements dependency tracking that does exactly what 108692f60a7Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109692f60a7Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 11054569438Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 11154569438Smrg## the command line argument order; so add the flags where they 11254569438Smrg## appear in depend2.am. Note that the slowdown incurred here 11354569438Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 11454569438Smrg for arg 11554569438Smrg do 11654569438Smrg case $arg in 11754569438Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 11854569438Smrg *) set fnord "$@" "$arg" ;; 11954569438Smrg esac 12054569438Smrg shift # fnord 12154569438Smrg shift # $arg 12254569438Smrg done 12354569438Smrg "$@" 124692f60a7Smrg stat=$? 125692f60a7Smrg if test $stat -eq 0; then : 126692f60a7Smrg else 127692f60a7Smrg rm -f "$tmpdepfile" 128692f60a7Smrg exit $stat 129692f60a7Smrg fi 130692f60a7Smrg mv "$tmpdepfile" "$depfile" 131692f60a7Smrg ;; 132692f60a7Smrg 133692f60a7Smrggcc) 134692f60a7Smrg## There are various ways to get dependency output from gcc. Here's 135692f60a7Smrg## why we pick this rather obscure method: 136692f60a7Smrg## - Don't want to use -MD because we'd like the dependencies to end 137692f60a7Smrg## up in a subdir. Having to rename by hand is ugly. 138692f60a7Smrg## (We might end up doing this anyway to support other compilers.) 139692f60a7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140692f60a7Smrg## -MM, not -M (despite what the docs say). 141692f60a7Smrg## - Using -M directly means running the compiler twice (even worse 142692f60a7Smrg## than renaming). 143692f60a7Smrg if test -z "$gccflag"; then 144692f60a7Smrg gccflag=-MD, 145692f60a7Smrg fi 146692f60a7Smrg "$@" -Wp,"$gccflag$tmpdepfile" 147692f60a7Smrg stat=$? 148692f60a7Smrg if test $stat -eq 0; then : 149692f60a7Smrg else 150692f60a7Smrg rm -f "$tmpdepfile" 151692f60a7Smrg exit $stat 152692f60a7Smrg fi 153692f60a7Smrg rm -f "$depfile" 154692f60a7Smrg echo "$object : \\" > "$depfile" 155692f60a7Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156692f60a7Smrg## The second -e expression handles DOS-style file names with drive letters. 157692f60a7Smrg sed -e 's/^[^:]*: / /' \ 158692f60a7Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159692f60a7Smrg## This next piece of magic avoids the `deleted header file' problem. 160692f60a7Smrg## The problem is that when a header file which appears in a .P file 161692f60a7Smrg## is deleted, the dependency causes make to die (because there is 162692f60a7Smrg## typically no way to rebuild the header). We avoid this by adding 163692f60a7Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 164692f60a7Smrg## this for us directly. 165692f60a7Smrg tr ' ' ' 166692f60a7Smrg' < "$tmpdepfile" | 167692f60a7Smrg## Some versions of gcc put a space before the `:'. On the theory 168692f60a7Smrg## that the space means something, we add a space to the output as 1693f6d0e1dSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 1703f6d0e1dSmrg## to the object. Take care to not repeat it in the output. 171692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 172692f60a7Smrg## correctly. Breaking it into two sed invocations is a workaround. 1733f6d0e1dSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1743f6d0e1dSmrg | sed -e 's/$/ :/' >> "$depfile" 175692f60a7Smrg rm -f "$tmpdepfile" 176692f60a7Smrg ;; 177692f60a7Smrg 178692f60a7Smrghp) 179692f60a7Smrg # This case exists only to let depend.m4 do its work. It works by 180692f60a7Smrg # looking at the text of this script. This case will never be run, 181692f60a7Smrg # since it is checked for above. 182692f60a7Smrg exit 1 183692f60a7Smrg ;; 184692f60a7Smrg 185692f60a7Smrgsgi) 186692f60a7Smrg if test "$libtool" = yes; then 187692f60a7Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188692f60a7Smrg else 189692f60a7Smrg "$@" -MDupdate "$tmpdepfile" 190692f60a7Smrg fi 191692f60a7Smrg stat=$? 192692f60a7Smrg if test $stat -eq 0; then : 193692f60a7Smrg else 194692f60a7Smrg rm -f "$tmpdepfile" 195692f60a7Smrg exit $stat 196692f60a7Smrg fi 197692f60a7Smrg rm -f "$depfile" 198692f60a7Smrg 199692f60a7Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200692f60a7Smrg echo "$object : \\" > "$depfile" 201692f60a7Smrg 202692f60a7Smrg # Clip off the initial element (the dependent). Don't try to be 203692f60a7Smrg # clever and replace this with sed code, as IRIX sed won't handle 204692f60a7Smrg # lines with more than a fixed number of characters (4096 in 205692f60a7Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206692f60a7Smrg # the IRIX cc adds comments like `#:fec' to the end of the 207692f60a7Smrg # dependency line. 208692f60a7Smrg tr ' ' ' 209692f60a7Smrg' < "$tmpdepfile" \ 210692f60a7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211692f60a7Smrg tr ' 2123f6d0e1dSmrg' ' ' >> "$depfile" 2133f6d0e1dSmrg echo >> "$depfile" 214692f60a7Smrg 215692f60a7Smrg # The second pass generates a dummy entry for each header file. 216692f60a7Smrg tr ' ' ' 217692f60a7Smrg' < "$tmpdepfile" \ 218692f60a7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2193f6d0e1dSmrg >> "$depfile" 220692f60a7Smrg else 221692f60a7Smrg # The sourcefile does not contain any dependencies, so just 222692f60a7Smrg # store a dummy comment line, to avoid errors with the Makefile 223692f60a7Smrg # "include basename.Plo" scheme. 224692f60a7Smrg echo "#dummy" > "$depfile" 225692f60a7Smrg fi 226692f60a7Smrg rm -f "$tmpdepfile" 227692f60a7Smrg ;; 228692f60a7Smrg 229692f60a7Smrgaix) 230692f60a7Smrg # The C for AIX Compiler uses -M and outputs the dependencies 231692f60a7Smrg # in a .u file. In older versions, this file always lives in the 232692f60a7Smrg # current directory. Also, the AIX compiler puts `$object:' at the 233692f60a7Smrg # start of each line; $object doesn't have directory information. 234692f60a7Smrg # Version 6 uses the directory in both cases. 23554569438Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 23654569438Smrg test "x$dir" = "x$object" && dir= 23754569438Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238692f60a7Smrg if test "$libtool" = yes; then 23954569438Smrg tmpdepfile1=$dir$base.u 24054569438Smrg tmpdepfile2=$base.u 24154569438Smrg tmpdepfile3=$dir.libs/$base.u 242692f60a7Smrg "$@" -Wc,-M 243692f60a7Smrg else 24454569438Smrg tmpdepfile1=$dir$base.u 24554569438Smrg tmpdepfile2=$dir$base.u 24654569438Smrg tmpdepfile3=$dir$base.u 247692f60a7Smrg "$@" -M 248692f60a7Smrg fi 249692f60a7Smrg stat=$? 250692f60a7Smrg 251692f60a7Smrg if test $stat -eq 0; then : 252692f60a7Smrg else 25354569438Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254692f60a7Smrg exit $stat 255692f60a7Smrg fi 256692f60a7Smrg 25754569438Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25854569438Smrg do 25954569438Smrg test -f "$tmpdepfile" && break 26054569438Smrg done 261692f60a7Smrg if test -f "$tmpdepfile"; then 262692f60a7Smrg # Each line is of the form `foo.o: dependent.h'. 263692f60a7Smrg # Do two passes, one to just change these to 264692f60a7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 26554569438Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 26654569438Smrg # That's a tab and a space in the []. 26754569438Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268692f60a7Smrg else 269692f60a7Smrg # The sourcefile does not contain any dependencies, so just 270692f60a7Smrg # store a dummy comment line, to avoid errors with the Makefile 271692f60a7Smrg # "include basename.Plo" scheme. 272692f60a7Smrg echo "#dummy" > "$depfile" 273692f60a7Smrg fi 274692f60a7Smrg rm -f "$tmpdepfile" 275692f60a7Smrg ;; 276692f60a7Smrg 277692f60a7Smrgicc) 278692f60a7Smrg # Intel's C compiler understands `-MD -MF file'. However on 279692f60a7Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280692f60a7Smrg # ICC 7.0 will fill foo.d with something like 281692f60a7Smrg # foo.o: sub/foo.c 282692f60a7Smrg # foo.o: sub/foo.h 283692f60a7Smrg # which is wrong. We want: 284692f60a7Smrg # sub/foo.o: sub/foo.c 285692f60a7Smrg # sub/foo.o: sub/foo.h 286692f60a7Smrg # sub/foo.c: 287692f60a7Smrg # sub/foo.h: 288692f60a7Smrg # ICC 7.1 will output 289692f60a7Smrg # foo.o: sub/foo.c sub/foo.h 290692f60a7Smrg # and will wrap long lines using \ : 291692f60a7Smrg # foo.o: sub/foo.c ... \ 292692f60a7Smrg # sub/foo.h ... \ 293692f60a7Smrg # ... 294692f60a7Smrg 295692f60a7Smrg "$@" -MD -MF "$tmpdepfile" 296692f60a7Smrg stat=$? 297692f60a7Smrg if test $stat -eq 0; then : 298692f60a7Smrg else 299692f60a7Smrg rm -f "$tmpdepfile" 300692f60a7Smrg exit $stat 301692f60a7Smrg fi 302692f60a7Smrg rm -f "$depfile" 303692f60a7Smrg # Each line is of the form `foo.o: dependent.h', 304692f60a7Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305692f60a7Smrg # Do two passes, one to just change these to 306692f60a7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 307692f60a7Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308692f60a7Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 309692f60a7Smrg # correctly. Breaking it into two sed invocations is a workaround. 310692f60a7Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311692f60a7Smrg sed -e 's/$/ :/' >> "$depfile" 312692f60a7Smrg rm -f "$tmpdepfile" 313692f60a7Smrg ;; 314692f60a7Smrg 31554569438Smrghp2) 31654569438Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 31754569438Smrg # compilers, which have integrated preprocessors. The correct option 31854569438Smrg # to use with these is +Maked; it writes dependencies to a file named 31954569438Smrg # 'foo.d', which lands next to the object file, wherever that 32054569438Smrg # happens to be. 32154569438Smrg # Much of this is similar to the tru64 case; see comments there. 32254569438Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 32354569438Smrg test "x$dir" = "x$object" && dir= 32454569438Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 32554569438Smrg if test "$libtool" = yes; then 32654569438Smrg tmpdepfile1=$dir$base.d 32754569438Smrg tmpdepfile2=$dir.libs/$base.d 32854569438Smrg "$@" -Wc,+Maked 32954569438Smrg else 33054569438Smrg tmpdepfile1=$dir$base.d 33154569438Smrg tmpdepfile2=$dir$base.d 33254569438Smrg "$@" +Maked 33354569438Smrg fi 33454569438Smrg stat=$? 33554569438Smrg if test $stat -eq 0; then : 33654569438Smrg else 33754569438Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 33854569438Smrg exit $stat 33954569438Smrg fi 34054569438Smrg 34154569438Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 34254569438Smrg do 34354569438Smrg test -f "$tmpdepfile" && break 34454569438Smrg done 34554569438Smrg if test -f "$tmpdepfile"; then 34654569438Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 34754569438Smrg # Add `dependent.h:' lines. 3483f6d0e1dSmrg sed -ne '2,${ 3493f6d0e1dSmrg s/^ *// 3503f6d0e1dSmrg s/ \\*$// 3513f6d0e1dSmrg s/$/:/ 3523f6d0e1dSmrg p 3533f6d0e1dSmrg }' "$tmpdepfile" >> "$depfile" 35454569438Smrg else 35554569438Smrg echo "#dummy" > "$depfile" 35654569438Smrg fi 35754569438Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 35854569438Smrg ;; 35954569438Smrg 360692f60a7Smrgtru64) 361692f60a7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 362692f60a7Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363692f60a7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364692f60a7Smrg # dependencies in `foo.d' instead, so we check for that too. 365692f60a7Smrg # Subdirectories are respected. 366692f60a7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367692f60a7Smrg test "x$dir" = "x$object" && dir= 368692f60a7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369692f60a7Smrg 370692f60a7Smrg if test "$libtool" = yes; then 371692f60a7Smrg # With Tru64 cc, shared objects can also be used to make a 37254569438Smrg # static library. This mechanism is used in libtool 1.4 series to 373692f60a7Smrg # handle both shared and static libraries in a single compilation. 374692f60a7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375692f60a7Smrg # 376692f60a7Smrg # With libtool 1.5 this exception was removed, and libtool now 377692f60a7Smrg # generates 2 separate objects for the 2 libraries. These two 37854569438Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379692f60a7Smrg # in $dir$base.o.d. We have to check for both files, because 380692f60a7Smrg # one of the two compilations can be disabled. We should prefer 381692f60a7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382692f60a7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 383692f60a7Smrg # the former would cause a distcleancheck panic. 384692f60a7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385692f60a7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386692f60a7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387692f60a7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388692f60a7Smrg "$@" -Wc,-MD 389692f60a7Smrg else 390692f60a7Smrg tmpdepfile1=$dir$base.o.d 391692f60a7Smrg tmpdepfile2=$dir$base.d 392692f60a7Smrg tmpdepfile3=$dir$base.d 393692f60a7Smrg tmpdepfile4=$dir$base.d 394692f60a7Smrg "$@" -MD 395692f60a7Smrg fi 396692f60a7Smrg 397692f60a7Smrg stat=$? 398692f60a7Smrg if test $stat -eq 0; then : 399692f60a7Smrg else 400692f60a7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401692f60a7Smrg exit $stat 402692f60a7Smrg fi 403692f60a7Smrg 404692f60a7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405692f60a7Smrg do 406692f60a7Smrg test -f "$tmpdepfile" && break 407692f60a7Smrg done 408692f60a7Smrg if test -f "$tmpdepfile"; then 409692f60a7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410692f60a7Smrg # That's a tab and a space in the []. 411692f60a7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412692f60a7Smrg else 413692f60a7Smrg echo "#dummy" > "$depfile" 414692f60a7Smrg fi 415692f60a7Smrg rm -f "$tmpdepfile" 416692f60a7Smrg ;; 417692f60a7Smrg 4183f6d0e1dSmrgmsvc7) 4193f6d0e1dSmrg if test "$libtool" = yes; then 4203f6d0e1dSmrg showIncludes=-Wc,-showIncludes 4213f6d0e1dSmrg else 4223f6d0e1dSmrg showIncludes=-showIncludes 4233f6d0e1dSmrg fi 4243f6d0e1dSmrg "$@" $showIncludes > "$tmpdepfile" 4253f6d0e1dSmrg stat=$? 4263f6d0e1dSmrg grep -v '^Note: including file: ' "$tmpdepfile" 4273f6d0e1dSmrg if test "$stat" = 0; then : 4283f6d0e1dSmrg else 4293f6d0e1dSmrg rm -f "$tmpdepfile" 4303f6d0e1dSmrg exit $stat 4313f6d0e1dSmrg fi 4323f6d0e1dSmrg rm -f "$depfile" 4333f6d0e1dSmrg echo "$object : \\" > "$depfile" 4343f6d0e1dSmrg # The first sed program below extracts the file names and escapes 4353f6d0e1dSmrg # backslashes for cygpath. The second sed program outputs the file 4363f6d0e1dSmrg # name when reading, but also accumulates all include files in the 4373f6d0e1dSmrg # hold buffer in order to output them again at the end. This only 4383f6d0e1dSmrg # works with sed implementations that can handle large buffers. 4393f6d0e1dSmrg sed < "$tmpdepfile" -n ' 4403f6d0e1dSmrg/^Note: including file: *\(.*\)/ { 4413f6d0e1dSmrg s//\1/ 4423f6d0e1dSmrg s/\\/\\\\/g 4433f6d0e1dSmrg p 4443f6d0e1dSmrg}' | $cygpath_u | sort -u | sed -n ' 4453f6d0e1dSmrgs/ /\\ /g 4463f6d0e1dSmrgs/\(.*\)/ \1 \\/p 4473f6d0e1dSmrgs/.\(.*\) \\/\1:/ 4483f6d0e1dSmrgH 4493f6d0e1dSmrg$ { 4503f6d0e1dSmrg s/.*/ / 4513f6d0e1dSmrg G 4523f6d0e1dSmrg p 4533f6d0e1dSmrg}' >> "$depfile" 4543f6d0e1dSmrg rm -f "$tmpdepfile" 4553f6d0e1dSmrg ;; 4563f6d0e1dSmrg 4573f6d0e1dSmrgmsvc7msys) 4583f6d0e1dSmrg # This case exists only to let depend.m4 do its work. It works by 4593f6d0e1dSmrg # looking at the text of this script. This case will never be run, 4603f6d0e1dSmrg # since it is checked for above. 4613f6d0e1dSmrg exit 1 4623f6d0e1dSmrg ;; 4633f6d0e1dSmrg 464692f60a7Smrg#nosideeffect) 465692f60a7Smrg # This comment above is used by automake to tell side-effect 466692f60a7Smrg # dependency tracking mechanisms from slower ones. 467692f60a7Smrg 468692f60a7Smrgdashmstdout) 469692f60a7Smrg # Important note: in order to support this mode, a compiler *must* 470692f60a7Smrg # always write the preprocessed file to stdout, regardless of -o. 471692f60a7Smrg "$@" || exit $? 472692f60a7Smrg 473692f60a7Smrg # Remove the call to Libtool. 474692f60a7Smrg if test "$libtool" = yes; then 4753f6d0e1dSmrg while test "X$1" != 'X--mode=compile'; do 476692f60a7Smrg shift 477692f60a7Smrg done 478692f60a7Smrg shift 479692f60a7Smrg fi 480692f60a7Smrg 481692f60a7Smrg # Remove `-o $object'. 482692f60a7Smrg IFS=" " 483692f60a7Smrg for arg 484692f60a7Smrg do 485692f60a7Smrg case $arg in 486692f60a7Smrg -o) 487692f60a7Smrg shift 488692f60a7Smrg ;; 489692f60a7Smrg $object) 490692f60a7Smrg shift 491692f60a7Smrg ;; 492692f60a7Smrg *) 493692f60a7Smrg set fnord "$@" "$arg" 494692f60a7Smrg shift # fnord 495692f60a7Smrg shift # $arg 496692f60a7Smrg ;; 497692f60a7Smrg esac 498692f60a7Smrg done 499692f60a7Smrg 500692f60a7Smrg test -z "$dashmflag" && dashmflag=-M 501692f60a7Smrg # Require at least two characters before searching for `:' 502692f60a7Smrg # in the target name. This is to cope with DOS-style filenames: 503692f60a7Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504692f60a7Smrg "$@" $dashmflag | 505692f60a7Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506692f60a7Smrg rm -f "$depfile" 507692f60a7Smrg cat < "$tmpdepfile" > "$depfile" 508692f60a7Smrg tr ' ' ' 509692f60a7Smrg' < "$tmpdepfile" | \ 510692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 511692f60a7Smrg## correctly. Breaking it into two sed invocations is a workaround. 512692f60a7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513692f60a7Smrg rm -f "$tmpdepfile" 514692f60a7Smrg ;; 515692f60a7Smrg 516692f60a7SmrgdashXmstdout) 517692f60a7Smrg # This case only exists to satisfy depend.m4. It is never actually 518692f60a7Smrg # run, as this mode is specially recognized in the preamble. 519692f60a7Smrg exit 1 520692f60a7Smrg ;; 521692f60a7Smrg 522692f60a7Smrgmakedepend) 523692f60a7Smrg "$@" || exit $? 524692f60a7Smrg # Remove any Libtool call 525692f60a7Smrg if test "$libtool" = yes; then 5263f6d0e1dSmrg while test "X$1" != 'X--mode=compile'; do 527692f60a7Smrg shift 528692f60a7Smrg done 529692f60a7Smrg shift 530692f60a7Smrg fi 531692f60a7Smrg # X makedepend 532692f60a7Smrg shift 5333f6d0e1dSmrg cleared=no eat=no 5343f6d0e1dSmrg for arg 5353f6d0e1dSmrg do 536692f60a7Smrg case $cleared in 537692f60a7Smrg no) 538692f60a7Smrg set ""; shift 539692f60a7Smrg cleared=yes ;; 540692f60a7Smrg esac 5413f6d0e1dSmrg if test $eat = yes; then 5423f6d0e1dSmrg eat=no 5433f6d0e1dSmrg continue 5443f6d0e1dSmrg fi 545692f60a7Smrg case "$arg" in 546692f60a7Smrg -D*|-I*) 547692f60a7Smrg set fnord "$@" "$arg"; shift ;; 548692f60a7Smrg # Strip any option that makedepend may not understand. Remove 549692f60a7Smrg # the object too, otherwise makedepend will parse it as a source file. 5503f6d0e1dSmrg -arch) 5513f6d0e1dSmrg eat=yes ;; 552692f60a7Smrg -*|$object) 553692f60a7Smrg ;; 554692f60a7Smrg *) 555692f60a7Smrg set fnord "$@" "$arg"; shift ;; 556692f60a7Smrg esac 557692f60a7Smrg done 5583f6d0e1dSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559692f60a7Smrg touch "$tmpdepfile" 560692f60a7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561692f60a7Smrg rm -f "$depfile" 5623f6d0e1dSmrg # makedepend may prepend the VPATH from the source file name to the object. 5633f6d0e1dSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 5643f6d0e1dSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565692f60a7Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566692f60a7Smrg' | \ 567692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 568692f60a7Smrg## correctly. Breaking it into two sed invocations is a workaround. 569692f60a7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570692f60a7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571692f60a7Smrg ;; 572692f60a7Smrg 573692f60a7Smrgcpp) 574692f60a7Smrg # Important note: in order to support this mode, a compiler *must* 575692f60a7Smrg # always write the preprocessed file to stdout. 576692f60a7Smrg "$@" || exit $? 577692f60a7Smrg 578692f60a7Smrg # Remove the call to Libtool. 579692f60a7Smrg if test "$libtool" = yes; then 5803f6d0e1dSmrg while test "X$1" != 'X--mode=compile'; do 581692f60a7Smrg shift 582692f60a7Smrg done 583692f60a7Smrg shift 584692f60a7Smrg fi 585692f60a7Smrg 586692f60a7Smrg # Remove `-o $object'. 587692f60a7Smrg IFS=" " 588692f60a7Smrg for arg 589692f60a7Smrg do 590692f60a7Smrg case $arg in 591692f60a7Smrg -o) 592692f60a7Smrg shift 593692f60a7Smrg ;; 594692f60a7Smrg $object) 595692f60a7Smrg shift 596692f60a7Smrg ;; 597692f60a7Smrg *) 598692f60a7Smrg set fnord "$@" "$arg" 599692f60a7Smrg shift # fnord 600692f60a7Smrg shift # $arg 601692f60a7Smrg ;; 602692f60a7Smrg esac 603692f60a7Smrg done 604692f60a7Smrg 605692f60a7Smrg "$@" -E | 606692f60a7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607692f60a7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608692f60a7Smrg sed '$ s: \\$::' > "$tmpdepfile" 609692f60a7Smrg rm -f "$depfile" 610692f60a7Smrg echo "$object : \\" > "$depfile" 611692f60a7Smrg cat < "$tmpdepfile" >> "$depfile" 612692f60a7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613692f60a7Smrg rm -f "$tmpdepfile" 614692f60a7Smrg ;; 615692f60a7Smrg 616692f60a7Smrgmsvisualcpp) 617692f60a7Smrg # Important note: in order to support this mode, a compiler *must* 6183f6d0e1dSmrg # always write the preprocessed file to stdout. 619692f60a7Smrg "$@" || exit $? 6203f6d0e1dSmrg 6213f6d0e1dSmrg # Remove the call to Libtool. 6223f6d0e1dSmrg if test "$libtool" = yes; then 6233f6d0e1dSmrg while test "X$1" != 'X--mode=compile'; do 6243f6d0e1dSmrg shift 6253f6d0e1dSmrg done 6263f6d0e1dSmrg shift 6273f6d0e1dSmrg fi 6283f6d0e1dSmrg 629692f60a7Smrg IFS=" " 630692f60a7Smrg for arg 631692f60a7Smrg do 632692f60a7Smrg case "$arg" in 6333f6d0e1dSmrg -o) 6343f6d0e1dSmrg shift 6353f6d0e1dSmrg ;; 6363f6d0e1dSmrg $object) 6373f6d0e1dSmrg shift 6383f6d0e1dSmrg ;; 639692f60a7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640692f60a7Smrg set fnord "$@" 641692f60a7Smrg shift 642692f60a7Smrg shift 643692f60a7Smrg ;; 644692f60a7Smrg *) 645692f60a7Smrg set fnord "$@" "$arg" 646692f60a7Smrg shift 647692f60a7Smrg shift 648692f60a7Smrg ;; 649692f60a7Smrg esac 650692f60a7Smrg done 6513f6d0e1dSmrg "$@" -E 2>/dev/null | 6523f6d0e1dSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653692f60a7Smrg rm -f "$depfile" 654692f60a7Smrg echo "$object : \\" > "$depfile" 6553f6d0e1dSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656692f60a7Smrg echo " " >> "$depfile" 6573f6d0e1dSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658692f60a7Smrg rm -f "$tmpdepfile" 659692f60a7Smrg ;; 660692f60a7Smrg 6613f6d0e1dSmrgmsvcmsys) 6623f6d0e1dSmrg # This case exists only to let depend.m4 do its work. It works by 6633f6d0e1dSmrg # looking at the text of this script. This case will never be run, 6643f6d0e1dSmrg # since it is checked for above. 6653f6d0e1dSmrg exit 1 6663f6d0e1dSmrg ;; 6673f6d0e1dSmrg 668692f60a7Smrgnone) 669692f60a7Smrg exec "$@" 670692f60a7Smrg ;; 671692f60a7Smrg 672692f60a7Smrg*) 673692f60a7Smrg echo "Unknown depmode $depmode" 1>&2 674692f60a7Smrg exit 1 675692f60a7Smrg ;; 676692f60a7Smrgesac 677692f60a7Smrg 678692f60a7Smrgexit 0 679692f60a7Smrg 680692f60a7Smrg# Local Variables: 681692f60a7Smrg# mode: shell-script 682692f60a7Smrg# sh-indentation: 2 683692f60a7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684692f60a7Smrg# time-stamp-start: "scriptversion=" 685692f60a7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6863f6d0e1dSmrg# time-stamp-time-zone: "UTC" 6873f6d0e1dSmrg# time-stamp-end: "; # UTC" 688692f60a7Smrg# End: 689